diff --git a/.gitattributes b/.gitattributes index 596615322fb..0adef1096d5 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,2 +1,3 @@ .gitattributes export-ignore .gitignore export-ignore +data/locale/* linguist-documentation diff --git a/.travis.yml b/.travis.yml index 9ae7ddff3d1..8a0b6702a5d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,7 @@ language: cpp compiler: gcc +dist: trusty +sudo: required matrix: include: - env: TARGET_OS=win32 @@ -31,3 +33,10 @@ deploy: all_branches: true condition: "$TARGET_OS != linux" repo: LMMS/lmms +notifications: + webhooks: + urls: + - https://webhooks.gitter.im/e/1ac7fc698195981a9227 + on_success: change # options: [always|never|change] default: always + on_failure: always # options: [always|never|change] default: always + on_start: never # options: [always|never|change] default: always diff --git a/.travis/linux..before_install.sh b/.travis/linux..before_install.sh index 8a64d814c35..f5e3b435c08 100644 --- a/.travis/linux..before_install.sh +++ b/.travis/linux..before_install.sh @@ -1,8 +1,8 @@ #!/usr/bin/env bash -sudo add-apt-repository ppa:kalakris/cmake -y; -sudo add-apt-repository ppa:andrewrk/libgroove -y; -if [ $QT5 ]; then - sudo add-apt-repository ppa:ubuntu-sdk-team/ppa -y -fi -sudo apt-get update -qq +sudo add-apt-repository ppa:andrewrk/libgroove -y +sudo sed -e "s/trusty/precise/" -i \ + /etc/apt/sources.list.d/andrewrk-libgroove-trusty.list + +sudo dpkg --add-architecture i386 +sudo apt-get update -qq || true diff --git a/.travis/linux..install.sh b/.travis/linux..install.sh index dc27c5c17ca..7b591feb962 100644 --- a/.travis/linux..install.sh +++ b/.travis/linux..install.sh @@ -5,6 +5,9 @@ PACKAGES="cmake libsndfile-dev fftw3-dev libvorbis-dev libogg-dev libfluidsynth-dev portaudio19-dev wine-dev g++-multilib libfltk1.3-dev libgig-dev libsoundio-dev" +# Help with unmet dependencies +PACKAGES="$PACKAGES libjack0" + if [ $QT5 ]; then PACKAGES="$PACKAGES qtbase5-dev qttools5-dev-tools qttools5-dev" else diff --git a/.travis/linux.win32.before_install.sh b/.travis/linux.win32.before_install.sh index 5ee747fa168..c7550f04505 100644 --- a/.travis/linux.win32.before_install.sh +++ b/.travis/linux.win32.before_install.sh @@ -1,4 +1,4 @@ #!/usr/bin/env bash -sudo add-apt-repository ppa:tobydox/mingw-x-precise -y +sudo add-apt-repository ppa:tobydox/mingw-x-trusty -y sudo apt-get update -qq diff --git a/.travis/linux.win32.install.sh b/.travis/linux.win32.install.sh index fa910787a2a..95c4ccd57ee 100644 --- a/.travis/linux.win32.install.sh +++ b/.travis/linux.win32.install.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash -PACKAGES="nsis cloog-isl libmpc2 qt4-linguist-tools mingw32 +PACKAGES="nsis cloog-isl libmpc3 qt4-linguist-tools mingw32 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 diff --git a/.travis/linux.win32.script.sh b/.travis/linux.win32.script.sh index ea2a6b7f7f1..3058f71d297 100644 --- a/.travis/linux.win32.script.sh +++ b/.travis/linux.win32.script.sh @@ -1,4 +1,4 @@ #!/usr/bin/env bash export CMAKE_OPTS="-DUSE_WERROR=ON" -../cmake/build_mingw32.sh || ../cmake/build_mingw32.sh +../cmake/build_mingw32.sh diff --git a/.travis/linux.win64.script.sh b/.travis/linux.win64.script.sh index ad9fc9e99c3..e7321df6a60 100644 --- a/.travis/linux.win64.script.sh +++ b/.travis/linux.win64.script.sh @@ -1,4 +1,4 @@ #!/usr/bin/env bash export CMAKE_OPTS="-DUSE_WERROR=ON" -../cmake/build_mingw64.sh || ../cmake/build_mingw64.sh +../cmake/build_mingw64.sh diff --git a/.travis/osx..install.sh b/.travis/osx..install.sh index 1e8fe0e1b5c..f48794f1e71 100644 --- a/.travis/osx..install.sh +++ b/.travis/osx..install.sh @@ -3,7 +3,7 @@ PACKAGES="cmake pkgconfig fftw libogg libvorbis libsndfile libsamplerate jack sdl stk fluid-synth portaudio node" if [ $QT5 ]; then - PACKAGES="$PACKAGES qt5" + PACKAGES="$PACKAGES qt55" else PACKAGES="$PACKAGES qt" fi diff --git a/.travis/osx..script.sh b/.travis/osx..script.sh index 981fb5b86f8..f2d611e64d2 100644 --- a/.travis/osx..script.sh +++ b/.travis/osx..script.sh @@ -2,7 +2,7 @@ if [ $QT5 ]; then # Workaround; No FindQt5.cmake module exists - export CMAKE_PREFIX_PATH="$(brew --prefix qt5)" + export CMAKE_PREFIX_PATH="$(brew --prefix qt55)" fi cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -DWANT_QT5=$QT5 -DUSE_WERROR=OFF .. diff --git a/.tx/config b/.tx/config new file mode 100644 index 00000000000..ab92433c518 --- /dev/null +++ b/.tx/config @@ -0,0 +1,11 @@ +[main] +host = https://www.transifex.com +minimum_perc = 51 +#Need to finish at least 51% before merging back + +[lmms.lmms] +file_filter = data/locale/.ts +source_file = data/locale/en.ts +source_lang = en +type = QT + diff --git a/CMakeLists.txt b/CMakeLists.txt index dcf6cd5ed63..48650d3b824 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -31,13 +31,17 @@ SET(PROJECT_EMAIL "lmms-devel@lists.sourceforge.net") SET(PROJECT_DESCRIPTION "${PROJECT_NAME_UCASE} - Free music production software") SET(PROJECT_COPYRIGHT "2008-${PROJECT_YEAR} ${PROJECT_AUTHOR}") SET(VERSION_MAJOR "1") -SET(VERSION_MINOR "1") -SET(VERSION_PATCH "90") -#SET(VERSION_SUFFIX "") -SET(VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}") -IF(VERSION_SUFFIX) - SET(VERSION "${VERSION}-${VERSION_SUFFIX}") -ENDIF(VERSION_SUFFIX) +SET(VERSION_MINOR "2") +SET(VERSION_RELEASE "0") +SET(VERSION_STAGE "rc2") +SET(VERSION_BUILD "0") +SET(VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_RELEASE}") +IF(VERSION_STAGE) + SET(VERSION "${VERSION}-${VERSION_STAGE}") +ENDIF() +IF(VERSION_BUILD) + SET(VERSION "${VERSION}.${VERSION_BUILD}") +ENDIF() # Override version information for non-base builds INCLUDE(VersionInfo) @@ -362,6 +366,10 @@ ENDIF(WANT_JACK) PKG_CHECK_MODULES(FFTW3F REQUIRED fftw3f>=3.0.0) +# check for FLTK +FIND_PACKAGE(FLTK) + + # check for Fluidsynth IF(WANT_SF2) PKG_CHECK_MODULES(FLUIDSYNTH fluidsynth>=1.0.7) @@ -386,9 +394,19 @@ If(WANT_GIG) ENDIF(WANT_GIG) # check for pthreads -IF(LMMS_BUILD_LINUX OR LMMS_BUILD_APPLE) +IF(LMMS_BUILD_LINUX OR LMMS_BUILD_APPLE OR LMMS_BUILD_OPENBSD) FIND_PACKAGE(Threads) -ENDIF(LMMS_BUILD_LINUX OR LMMS_BUILD_APPLE) +ENDIF(LMMS_BUILD_LINUX OR LMMS_BUILD_APPLE OR LMMS_BUILD_OPENBSD) + +IF(LMMS_BUILD_OPENBSD) + FIND_PACKAGE(Sndio) + IF(SNDIO_FOUND) + SET(LMMS_HAVE_SNDIO TRUE) + SET(STATUS_SNDIO "OK") + ELSE() + SET(STATUS_SNDIO "") + ENDIF(SNDIO_FOUND) +ENDIF(LMMS_BUILD_OPENBSD) # check for WINE IF(WANT_VST) @@ -396,6 +414,9 @@ IF(WANT_VST) IF(WINE_FOUND) SET(LMMS_SUPPORT_VST TRUE) SET(STATUS_VST "OK") + ELSEIF(WANT_VST_NOWINE) + SET(LMMS_SUPPORT_VST TRUE) + SET(STATUS_VST "OK") ELSE(WINE_FOUND) SET(STATUS_VST "not found, please install (lib)wine-dev (or similar) - 64 bit systems additionally need gcc-multilib and g++-multilib") ENDIF(WINE_FOUND) @@ -439,10 +460,15 @@ SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DLMMS_DEBUG") FILE(REMOVE include/lmmsconfig.h) FILE(GLOB LMMS_INCLUDES "${CMAKE_SOURCE_DIR}/include/*.h") +LIST(SORT LMMS_INCLUDES) -# Get list of all committers from git history, ordered by number of commits +# Get list of all committers from git history, ordered by number of commits. +# The CONTRIBUTORS file is used by AboutDialog. This information can be provided +# with -DCONTRIBUTORS=/path/to/CONTRIBUTORS instead. For instance, to generate +# this file for version 1.1.3, the command is: +# git shortlog -sne v1.1.3 | cut -c8- FIND_PACKAGE(Git) -IF(GIT_FOUND) +IF(GIT_FOUND AND NOT CONTRIBUTORS) SET(CONTRIBUTORS "${CMAKE_BINARY_DIR}/CONTRIBUTORS") EXECUTE_PROCESS( COMMAND "${GIT_EXECUTABLE}" shortlog -sne @@ -450,7 +476,7 @@ IF(GIT_FOUND) OUTPUT_FILE "${CONTRIBUTORS}" WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" TIMEOUT 1) -ENDIF(GIT_FOUND) +ENDIF() # embedded resources stuff IF(WIN32 OR WIN64) @@ -509,6 +535,7 @@ IF(LMMS_BUILD_WIN32) FILE(GLOB ZASF_BINARIES "${CMAKE_SOURCE_DIR}/extras/plugins/zynaddsubfx/zynaddsubfx.dll" "${CMAKE_SOURCE_DIR}/extras/plugins/zynaddsubfx/remote_zynaddsubfx.exe") + LIST(SORT ZASF_BINARIES) INSTALL(FILES "${ZASF_BINARIES}" DESTINATION "${PLUGIN_DIR}") ENDIF(EXISTS "${CMAKE_SOURCE_DIR}/extras") ENDIF(LMMS_BUILD_WIN32) @@ -550,6 +577,7 @@ MESSAGE( "* ALSA : ${STATUS_ALSA}\n" "* JACK : ${STATUS_JACK}\n" "* OSS : ${STATUS_OSS}\n" +"* Sndio : ${STATUS_SNDIO}\n" "* PortAudio : ${STATUS_PORTAUDIO}\n" "* libsoundio : ${STATUS_SOUNDIO}\n" "* PulseAudio : ${STATUS_PULSEAUDIO}\n" @@ -561,6 +589,7 @@ MESSAGE( "-------------------------\n" "* ALSA : ${STATUS_ALSA}\n" "* OSS : ${STATUS_OSS}\n" +"* Sndio : ${STATUS_SNDIO}\n" "* JACK : ${STATUS_JACK}\n" "* WinMM : ${STATUS_WINMM}\n" "* AppleMidi : ${STATUS_APPLEMIDI}\n" diff --git a/README.md b/README.md index ad6b91b1972..73328b32171 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,10 @@ #![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) + +[![Build status](https://img.shields.io/travis/LMMS/lmms.svg?maxAge=3600)](https://travis-ci.org/LMMS/lmms) +[![Latest stable release](https://img.shields.io/github/release/LMMS/lmms.svg?maxAge=3600)](https://lmms.io/download) +[![Overall downloads on Github](https://img.shields.io/github/downloads/LMMS/lmms/total.svg?maxAge=3600)](https://github.com/LMMS/lmms/releases) +[![Join the chat at Discord](https://img.shields.io/badge/chat%20on-discord-7289DA.svg)](https://discord.gg/5kSc32Z) +[![Localise on transifex](https://img.shields.io/badge/localise-on_transifex-green.svg)](https://www.transifex.com/lmms/lmms/) What is LMMS? -------------- @@ -27,7 +32,7 @@ Features * 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 +* MIDI file importing Building --------- diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 1a3a1ec3da8..b27dec91e0f 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -4,13 +4,16 @@ SET(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_SOURCE_DIR}/README.md") SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/LICENSE.txt") SET(CPACK_PACKAGE_VERSION_MAJOR "${VERSION_MAJOR}") SET(CPACK_PACKAGE_VERSION_MINOR "${VERSION_MINOR}") -SET(CPACK_PACKAGE_VERSION_PATCH "${VERSION_PATCH}") +SET(CPACK_PACKAGE_VERSION_PATCH "${VERSION_RELEASE}") +IF(VERSION_STAGE) + SET(CPACK_PACKAGE_VERSION_PATCH "${CPACK_PACKAGE_VERSION_PATCH}-${VERSION_STAGE}") +ENDIF() +IF(VERSION_BUILD) + SET(CPACK_PACKAGE_VERSION_PATCH "${CPACK_PACKAGE_VERSION_PATCH}.${VERSION_BUILD}") +ENDIF() SET(CPACK_PACKAGE_INSTALL_DIRECTORY "${PROJECT_NAME_UCASE}") SET(CPACK_SOURCE_GENERATOR "TBZ2") SET(CPACK_SOURCE_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}-${VERSION}") -IF(VERSION_SUFFIX) - SET(CPACK_PACKAGE_VERSION_PATCH "${VERSION_PATCH}-${VERSION_SUFFIX}") -ENDIF() IF(NOT DEFINED WIN32) SET(CPACK_STRIP_FILES "bin/${CMAKE_PROJECT_NAME};${PLUGIN_DIR}/*.so") SET(CPACK_PACKAGE_EXECUTABLES "${CMAKE_PROJECT_NAME}" "${PROJECT_NAME_UCASE} binary") diff --git a/cmake/apple/install_apple.sh.in b/cmake/apple/install_apple.sh.in index 02e98fdd104..7fefa069d40 100644 --- a/cmake/apple/install_apple.sh.in +++ b/cmake/apple/install_apple.sh.in @@ -23,6 +23,19 @@ LIBREADLINE="libreadline.6.2.dylib" MSG_COLOR='\x1B[1;36m' COLOR_RESET='\x1B[0m' echo -e "$MSG_COLOR\n\nCreating App Bundle \"$APP\"...$COLOR_RESET" + +# Locate macdeployqt, assume homebrew & Qt5 +which macdeployqt > /dev/null 2>&1 +if [ $? -ne 0 ]; then + brew --prefix qt55 > /dev/null 2>&1 + if [ $? -eq 0 ]; then + # Prefer Qt 5.5 (QTBUG-53533) + export PATH=$PATH:$(brew --prefix qt55)/bin + else + # Fallback Qt 5.6+ + export PATH=$PATH:$(brew --prefix qt5)/bin + fi +fi # MacPorts only - check for u+w permissions on libreadline if [ -f "@APPLE_PREFIX@/lib/$LIBREADLINE" ]; then @@ -49,7 +62,7 @@ cp -R * "$APP/Contents" # Manually copy STK rawwaves mkdir -p "$APP/Contents/share/stk/rawwaves" -cp $STK_RAWWAVE/*.raw "$APP/Contents/share/stk/rawwaves" +cp $STK_RAWWAVE/*.raw "$APP/Contents/share/stk/rawwaves" > /dev/null 2>&1 # Make all libraries writable for macdeployqt cd "$APP" @@ -62,20 +75,15 @@ rm -rf "$APP/Contents/bin" # Move libraries to proper locations mkdir -p "$APP/Contents/Frameworks" -mv "$APP/Contents/lib/lmms/libZynAddSubFxCore.dylib" \ - "$APP/Contents/Frameworks/libZynAddSubFxCore.dylib" - mv "$APP/Contents/lib/lmms/RemoteZynAddSubFx" \ "$APP/Contents/MacOS/RemoteZynAddSubFx" - -# Fix more Zyn Linking issues + +rm "$APP/Contents/Frameworks/libZynAddSubFxCore.dylib" > /dev/null 2>&1 + +# Fix zyn linking install_name_tool -change @rpath/libZynAddSubFxCore.dylib \ - @loader_path/../../Frameworks/libZynAddSubFxCore.dylib \ - "$APP/Contents/lib/lmms/libzynaddsubfx.so" - -install_name_tool -change @CMAKE_BINARY_DIR@/plugins/zynaddsubfx/libZynAddSubFxCore.dylib \ - @loader_path/../../Frameworks/libZynAddSubFxCore.dylib \ - "$APP/Contents/MacOS/RemoteZynAddSubFx" + @loader_path/../lib/lmms/libZynAddSubFxCore.dylib \ + "$APP/Contents/MacOS/RemoteZynAddSubFx" # Build a list of shared objects in target/lib/lmms for file in "$APP/Contents/lib/lmms/"*.so; do @@ -91,13 +99,13 @@ done # Additional binaries that require linking _executables="${_executables} -executable=$APP/Contents/MacOS/RemoteZynAddSubFx" -_executables="${_executables} -executable=$APP/Contents/Frameworks/libZynAddSubFxCore.dylib" +_executables="${_executables} -executable=$APP/Contents/lib/lmms/libZynAddSubFxCore.dylib" # Build our App Package using "macdeployqt" macdeployqt "$APP" $_executables - + # OS X Specific Artwork mkdir -p "$APP/Contents/Resources" cp "@CMAKE_SOURCE_DIR@/cmake/apple/"*.icns "$APP/Contents/Resources/" - + echo -e "\nFinished.\n\n" diff --git a/cmake/linux/lmms.desktop b/cmake/linux/lmms.desktop index c701ebc5c30..0d236d446d3 100644 --- a/cmake/linux/lmms.desktop +++ b/cmake/linux/lmms.desktop @@ -3,8 +3,10 @@ Name=LMMS GenericName=music production suite GenericName[ca]=Programari de producció musical GenericName[de]=Software zur Musik-Produktion +GenericName[fr]=Ensemble pour la production musicale Comment=easy music production for everyone! Comment[ca]=Producció fàcil de música per a tothom! +Comment[fr]=Production facile de musique pour tout le monde ! Icon=lmms Exec=env QT_X11_NO_NATIVE_MENUBAR=1 lmms %f Terminal=false diff --git a/cmake/modules/BuildPlugin.cmake b/cmake/modules/BuildPlugin.cmake index 7fa7c4cb51b..a107ef5ac39 100644 --- a/cmake/modules/BuildPlugin.cmake +++ b/cmake/modules/BuildPlugin.cmake @@ -13,6 +13,18 @@ MACRO(BUILD_PLUGIN PLUGIN_NAME) LIST(LENGTH PLUGIN_EMBEDDED_RESOURCES ER_LEN) IF(ER_LEN) + # Expand and sort arguments to avoid locale dependent sorting in + # shell + SET(NEW_ARGS) + FOREACH(ARG ${PLUGIN_EMBEDDED_RESOURCES}) + FILE(GLOB EXPANDED "${ARG}") + LIST(SORT EXPANDED) + FOREACH(ITEM ${EXPANDED}) + LIST(APPEND NEW_ARGS ${ITEM}) + ENDFOREACH() + ENDFOREACH() + SET(PLUGIN_EMBEDDED_RESOURCES ${NEW_ARGS}) + SET(ER_H ${CMAKE_CURRENT_BINARY_DIR}/embedded_resources.h) ADD_CUSTOM_COMMAND(OUTPUT ${ER_H} COMMAND ${BIN2RES} diff --git a/cmake/modules/DetectMachine.cmake b/cmake/modules/DetectMachine.cmake index c0d6cba341b..60c4a0953ce 100644 --- a/cmake/modules/DetectMachine.cmake +++ b/cmake/modules/DetectMachine.cmake @@ -2,6 +2,8 @@ IF(WIN32) SET(LMMS_BUILD_WIN32 1) ELSEIF(APPLE) SET(LMMS_BUILD_APPLE 1) +ELSEIF(${CMAKE_SYSTEM_NAME} MATCHES "OpenBSD") + SET(LMMS_BUILD_OPENBSD 1) ELSEIF(HAIKU) SET(LMMS_BUILD_HAIKU 1) ELSE() @@ -25,7 +27,7 @@ ELSE(WIN32) EXEC_PROGRAM( ${CMAKE_C_COMPILER} ARGS "-dumpmachine ${CMAKE_C_FLAGS}" OUTPUT_VARIABLE Machine ) MESSAGE("Machine: ${Machine}") STRING(REGEX MATCH "i.86" IS_X86 "${Machine}") - STRING(REGEX MATCH "86_64" IS_X86_64 "${Machine}") + STRING(REGEX MATCH "86_64|amd64" IS_X86_64 "${Machine}") ENDIF(WIN32) IF(IS_X86) diff --git a/cmake/modules/FindSndio.cmake b/cmake/modules/FindSndio.cmake new file mode 100644 index 00000000000..bf5b24c39a6 --- /dev/null +++ b/cmake/modules/FindSndio.cmake @@ -0,0 +1,32 @@ +# sndio check, based on FindAlsa.cmake +# + +# Copyright (c) 2006, David Faure, +# Copyright (c) 2007, Matthias Kretz +# Copyright (c) 2009, Jacob Meuser +# +# 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(SNDIO_LIBRARY sndio) +set(SNDIO_LIBRARY_DIR "") +if(SNDIO_LIBRARY) + get_filename_component(SNDIO_LIBRARY_DIR ${SNDIO_LIBRARY} PATH) +endif(SNDIO_LIBRARY) + +check_library_exists(sndio sio_open "${SNDIO_LIBRARY_DIR}" HAVE_SNDIO) +if(HAVE_SNDIO) + message(STATUS "Found sndio: ${SNDIO_LIBRARY}") +else(HAVE_SNDIO) + message(STATUS "sndio not found") +endif(HAVE_SNDIO) +set(SNDIO_FOUND ${HAVE_SNDIO}) + +find_path(SNDIO_INCLUDES sndio.h) + +mark_as_advanced(SNDIO_INCLUDES SNDIO_LIBRARY) diff --git a/cmake/modules/FindWine.cmake b/cmake/modules/FindWine.cmake index da7bed14a31..da76f3ff338 100644 --- a/cmake/modules/FindWine.cmake +++ b/cmake/modules/FindWine.cmake @@ -8,7 +8,7 @@ # FIND_PATH(WINE_INCLUDE_DIR windows/windows.h PATH_SUFFIXES wine) -FIND_LIBRARY(WINE_LIBRARY NAMES wine PATH_SUFFIXES wine) +FIND_LIBRARY(WINE_LIBRARY NAMES wine PATH_SUFFIXES wine i386-linux-gnu/wine) FIND_PROGRAM(WINE_CXX NAMES wineg++ winegcc winegcc64 winegcc32) set(WINE_INCLUDE_DIRS ${WINE_INCLUDE_DIR} ) diff --git a/cmake/modules/InstallHelpers.cmake b/cmake/modules/InstallHelpers.cmake index 9e0f09c07e9..53eec43b5d6 100644 --- a/cmake/modules/InstallHelpers.cmake +++ b/cmake/modules/InstallHelpers.cmake @@ -23,6 +23,7 @@ ENDMACRO(LIST_CONTAINS) MACRO(INSTALL_DATA_SUBDIRS _subdir _wildcards) FOREACH(_wildcard ${_wildcards}) FILE(GLOB_RECURSE files ${_wildcard}) + LIST(SORT files) SET(SUBDIRS) FOREACH(_item ${files}) @@ -36,6 +37,7 @@ MACRO(INSTALL_DATA_SUBDIRS _subdir _wildcards) FOREACH(_item ${SUBDIRS}) FILE(GLOB files "${_item}/${_wildcard}") + LIST(SORT files) FOREACH(_file ${files}) INSTALL(FILES "${_file}" DESTINATION "${LMMS_DATA_DIR}/${_subdir}/${_item}/") ENDFOREACH(_file ${files}) diff --git a/cmake/modules/MinGWCrossCompile.cmake b/cmake/modules/MinGWCrossCompile.cmake index 606b33092ff..50ea729006c 100644 --- a/cmake/modules/MinGWCrossCompile.cmake +++ b/cmake/modules/MinGWCrossCompile.cmake @@ -50,8 +50,7 @@ ELSE() # Mingw 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(ENV{PKG_CONFIG} ${MINGW_TOOL_PREFIX}pkg-config) # Search for programs in the build host directories SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) @@ -85,7 +84,7 @@ IF(NOT DEFINED ENV{MINGW_DEBUG_INFO}) MESSAGE("* CMAKE_CXX_COMPILER : ${CMAKE_CXX_COMPILER}") MESSAGE("* CMAKE_RC_COMPILER : ${CMAKE_RC_COMPILER}") MESSAGE("* WINDRES : ${WINDRES}") - MESSAGE("* PKG_CONFIG_EXECUTABLE : ${PKG_CONFIG_EXECUTABLE}") + MESSAGE("* ENV{PKG_CONFIG} : $ENV{PKG_CONFIG}") MESSAGE("* MINGW_TOOL_PREFIX32 : ${MINGW_TOOL_PREFIX32}") MESSAGE("* CMAKE_C_COMPILER32 : ${CMAKE_C_COMPILER32}") MESSAGE("* CMAKE_CXX_COMPILER32 : ${CMAKE_CXX_COMPILER32}") diff --git a/cmake/modules/VersionInfo.cmake b/cmake/modules/VersionInfo.cmake index 23fde3639dd..cf6932cbbba 100644 --- a/cmake/modules/VersionInfo.cmake +++ b/cmake/modules/VersionInfo.cmake @@ -1,24 +1,29 @@ FIND_PACKAGE(Git) IF(GIT_FOUND AND NOT FORCE_VERSION) - # Look for git tag information (e.g. Stable: "v1.0.0", Non-stable: "v1.0.0-123-a1b2c3d4") + # Look for git tag information (e.g. Tagged: "v1.0.0", Non-tagged: "v1.0.0-123-a1b2c3d") EXECUTE_PROCESS( COMMAND "${GIT_EXECUTABLE}" describe --tags --match v[0-9].[0-9].[0-9]* OUTPUT_VARIABLE GIT_TAG WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" - TIMEOUT 1 + TIMEOUT 10 OUTPUT_STRIP_TRAILING_WHITESPACE) STRING(REPLACE "-" ";" TAG_LIST "${GIT_TAG}") LIST(LENGTH TAG_LIST TAG_LIST_LENGTH) - IF(TAG_LIST_LENGTH EQUAL 1) - # Stable build, FORCE_VERSION=x.x.x + IF(TAG_LIST_LENGTH GREATER 0) LIST(GET TAG_LIST 0 FORCE_VERSION) STRING(REPLACE "v" "" FORCE_VERSION "${FORCE_VERSION}") + ENDIF() + IF(TAG_LIST_LENGTH EQUAL 2) + LIST(GET TAG_LIST 1 VERSION_STAGE) + SET(FORCE_VERSION "${FORCE_VERSION}-${VERSION_STAGE}") ELSEIF(TAG_LIST_LENGTH EQUAL 3) - # Non-stable build, FORCE_VERSION=x.x.x-hash - LIST(GET TAG_LIST 0 FORCE_VERSION) - LIST(GET TAG_LIST 2 COMMIT_HASH) - STRING(REPLACE "v" "" FORCE_VERSION "${FORCE_VERSION}") - SET(FORCE_VERSION "${FORCE_VERSION}-${COMMIT_HASH}") + LIST(GET TAG_LIST 1 EXTRA_COMMITS) + SET(FORCE_VERSION "${FORCE_VERSION}.${EXTRA_COMMITS}") + ELSEIF(TAG_LIST_LENGTH EQUAL 4) + LIST(GET TAG_LIST 1 VERSION_STAGE) + LIST(GET TAG_LIST 2 EXTRA_COMMITS) + SET(FORCE_VERSION + "${FORCE_VERSION}-${VERSION_STAGE}.${EXTRA_COMMITS}") ENDIF() ENDIF() @@ -26,15 +31,28 @@ IF(FORCE_VERSION STREQUAL "internal") # Use release info from /CMakeLists.txt ELSEIF(FORCE_VERSION) STRING(REPLACE "." ";" VERSION_LIST "${FORCE_VERSION}") - STRING(REPLACE "-" ";" VERSION_LIST "${VERSION_LIST}") LIST(LENGTH VERSION_LIST VERSION_LENGTH) LIST(GET VERSION_LIST 0 VERSION_MAJOR) LIST(GET VERSION_LIST 1 VERSION_MINOR) - LIST(GET VERSION_LIST 2 VERSION_PATCH) + LIST(GET VERSION_LIST 2 VERSION_RELEASE) + SET(VERSION_STAGE "") + SET(VERSION_BUILD 0) IF(VERSION_LENGTH GREATER 3) - LIST(GET VERSION_LIST 3 VERSION_SUFFIX) + LIST(GET VERSION_LIST 3 VERSION_BUILD) ENDIF() + + STRING(REPLACE "-" ";" VERSION_LIST "${VERSION_RELEASE}") + LIST(LENGTH VERSION_LIST VERSION_LENGTH) + IF(VERSION_LENGTH GREATER 1) + LIST(GET VERSION_LIST 0 VERSION_RELEASE) + LIST(GET VERSION_LIST 1 VERSION_STAGE) + ENDIF() + SET(VERSION "${FORCE_VERSION}") +ELSEIF(GIT_FOUND) + MESSAGE( +"Could not get project version. Using release info from /CMakeLists.txt" + ) ELSE() MESSAGE("Git not found. Using release info from /CMakeLists.txt") ENDIF() @@ -44,15 +62,16 @@ ENDIF() MESSAGE("\n" "Configuring ${PROJECT_NAME_UCASE}\n" "--------------------------\n" - "* Build version : ${VERSION}\n" + "* Project version : ${VERSION}\n" "* Major version : ${VERSION_MAJOR}\n" "* Minor version : ${VERSION_MINOR}\n" - "* Patch version : ${VERSION_PATCH}\n" - "* Suffix version : ${VERSION_SUFFIX}\n" + "* Release version : ${VERSION_RELEASE}\n" + "* Stage version : ${VERSION_STAGE}\n" + "* Build version : ${VERSION_BUILD}\n" "*\n\n" "Optional Version Usage:\n" "--------------------------\n" "* Override version: -DFORCE_VERSION=x.x.x-x\n" - "* Disable hash suffix: -DFORCE_VERSION=internal\n" + "* Ignore Git information: -DFORCE_VERSION=internal\n" ) diff --git a/cmake/nsis/CMakeLists.txt b/cmake/nsis/CMakeLists.txt index 2c81c2f9f56..b56bfc99655 100644 --- a/cmake/nsis/CMakeLists.txt +++ b/cmake/nsis/CMakeLists.txt @@ -59,5 +59,6 @@ CONFIGURE_FILE("lmms.rc.in" "${CMAKE_BINARY_DIR}/lmms.rc") CONFIGURE_FILE("zynaddsubfx.rc.in" "${CMAKE_BINARY_DIR}/plugins/zynaddsubfx/zynaddsubfx.rc") FILE(GLOB RAWWAVES "${CMAKE_INSTALL_PREFIX}/share/stk/rawwaves/*.raw") +LIST(SORT RAWWAVES) INSTALL(FILES ${RAWWAVES} DESTINATION "${DATA_DIR}/stk/rawwaves") diff --git a/cmake/nsis/lmms.rc.in b/cmake/nsis/lmms.rc.in index 7b6f6f79b82..f153ee2356a 100644 --- a/cmake/nsis/lmms.rc.in +++ b/cmake/nsis/lmms.rc.in @@ -2,7 +2,6 @@ lmmsicon ICON cmake/nsis/lmms.ico #include VS_VERSION_INFO VERSIONINFO - FILEVERSION @VERSION_MAJOR@,@VERSION_MINOR@,@VERSION_PATCH@,0 FILEFLAGSMASK VS_FFI_FILEFLAGSMASK FILEOS VOS_NT_WINDOWS32 FILETYPE VFT_APP diff --git a/data/backgrounds/CMakeLists.txt b/data/backgrounds/CMakeLists.txt index e296bb3579f..0693fb3dd85 100644 --- a/data/backgrounds/CMakeLists.txt +++ b/data/backgrounds/CMakeLists.txt @@ -1,2 +1,3 @@ FILE(GLOB PNG_FILES *.png) +LIST(SORT PNG_FILES) INSTALL(FILES ${PNG_FILES} DESTINATION "${LMMS_DATA_DIR}/backgrounds") diff --git a/data/locale/CMakeLists.txt b/data/locale/CMakeLists.txt index 37fb24e3679..25de01e2447 100644 --- a/data/locale/CMakeLists.txt +++ b/data/locale/CMakeLists.txt @@ -22,6 +22,7 @@ SET(qm_targets "") SET(QM_FILES "") FILE(GLOB lmms_LOCALES ${CMAKE_CURRENT_SOURCE_DIR}/*.ts) +LIST(SORT lmms_LOCALES) FOREACH(_ts_file ${lmms_LOCALES}) GET_FILENAME_COMPONENT(_ts_target "${_ts_file}" NAME) STRING(REPLACE ".ts" ".qm" _qm_file "${_ts_file}") @@ -49,6 +50,7 @@ ENDFOREACH(_item ${qm_targets}) IF(LMMS_BUILD_WIN32) FILE(GLOB QT_QM_FILES "${QT_TRANSLATIONS_DIR}/qt*[^h].qm") + LIST(SORT QT_QM_FILES) ENDIF(LMMS_BUILD_WIN32) INSTALL(FILES ${QM_FILES} ${QT_QM_FILES} DESTINATION "${LMMS_DATA_DIR}/locale") diff --git a/data/locale/bs.ts b/data/locale/bs.ts new file mode 100644 index 00000000000..cd28c14a622 --- /dev/null +++ b/data/locale/bs.ts @@ -0,0 +1,12430 @@ + + + AboutDialog + + + About LMMS + + + + + LMMS + + + + + Version %1 (%2/%3, Qt %4, %5) + + + + + About + + + + + LMMS - easy music production for everyone + + + + + Copyright © %1 + + + + + <html><head/><body><p><a href="http://lmms.io"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.io</span></a></p></body></html> + + + + + Authors + + + + + Involved + + + + + Contributors ordered by number of commits: + + + + + 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 + + + + + AmplifierControlDialog + + + VOL + + + + + Volume: + + + + + PAN + + + + + Panning: + + + + + LEFT + + + + + Left gain: + + + + + RIGHT + + + + + Right gain: + + + + + AmplifierControls + + + Volume + + + + + Panning + + + + + Left gain + + + + + Right gain + + + + + AudioAlsaSetupWidget + + + 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. + + + + + 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. + + + + + 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) + + + + + 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: + + + + + With this knob you can set the point where AudioFileProcessor should begin playing your sample. + + + + + Endpoint: + + + + + 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. + + + + + CLIENT-NAME + + + + + CHANNELS + + + + + AudioOss::setupWidget + + + DEVICE + + + + + CHANNELS + + + + + AudioPortAudio::setupWidget + + + BACKEND + + + + + DEVICE + + + + + AudioPulseAudio::setupWidget + + + DEVICE + + + + + CHANNELS + + + + + AudioSdl::setupWidget + + + DEVICE + + + + + AudioSoundIo::setupWidget + + + BACKEND + + + + + DEVICE + + + + + AutomatableModel + + + &Reset (%1%2) + + + + + &Copy value (%1%2) + + + + + &Paste value (%1%2) + + + + + Edit song-global automation + + + + + Remove song-global automation + + + + + Remove all linked controls + + + + + Connected to %1 + + + + + Connected to controller + + + + + Edit connection... + + + + + Remove connection + + + + + Connect to controller... + + + + + AutomationEditor + + + Please open an automation pattern with the context menu of a control! + + + + + Values copied + + + + + All selected values were copied to the clipboard. + + + + + AutomationEditorWindow + + + Play/pause 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. + + + + + Stop playing of current pattern (Space) + + + + + Click here if you want to stop playing of the current pattern. + + + + + Edit actions + + + + + Draw mode (Shift+D) + + + + + Erase mode (Shift+E) + + + + + Flip vertically + + + + + Flip horizontally + + + + + Click here and the pattern will be inverted.The points are flipped in the y direction. + + + + + Click here and the pattern will be reversed. The points are flipped in the x direction. + + + + + 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. + + + + + Interpolation controls + + + + + Discrete progression + + + + + Linear progression + + + + + Cubic Hermite progression + + + + + 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. + + + + + 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: + + + + + Cut selected values (%1+X) + + + + + Copy selected values (%1+C) + + + + + Paste values from clipboard (%1+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. + + + + + Timeline controls + + + + + Zoom controls + + + + + Quantization controls + + + + + Automation Editor - no pattern + + + + + Automation Editor - %1 + + + + + Model is already connected to this pattern. + + + + + AutomationPattern + + + Drag a control while pressing <%1> + + + + + AutomationPatternView + + + double-click to open this pattern in automation editor + + + + + Open in Automation editor + + + + + Clear + + + + + Reset name + + + + + Change name + + + + + Set/clear record + + + + + Flip Vertically (Visible) + + + + + Flip Horizontally (Visible) + + + + + %1 Connections + + + + + Disconnect "%1" + + + + + Model is already connected to this pattern. + + + + + AutomationTrack + + + Automation track + + + + + BBEditor + + + Beat+Bassline Editor + + + + + Play/pause current beat/bassline (Space) + + + + + 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. + + + + + Beat selector + + + + + Track and step actions + + + + + Add beat/bassline + + + + + Add automation-track + + + + + Remove steps + + + + + Add steps + + + + + Clone Steps + + + + + BBTCOView + + + Open in Beat+Bassline-Editor + + + + + Reset name + + + + + Change name + + + + + Change color + + + + + Reset color to default + + + + + BBTrack + + + Beat/Bassline %1 + + + + + Clone of %1 + + + + + BassBoosterControlDialog + + + FREQ + + + + + Frequency: + + + + + GAIN + + + + + Gain: + + + + + RATIO + + + + + Ratio: + + + + + BassBoosterControls + + + Frequency + + + + + Gain + + + + + Ratio + + + + + BitcrushControlDialog + + + IN + + + + + OUT + + + + + + GAIN + + + + + Input Gain: + + + + + NOIS + + + + + Input Noise: + + + + + Output Gain: + + + + + CLIP + + + + + Output Clip: + + + + + + Rate + + + + + Rate Enabled + + + + + Enable samplerate-crushing + + + + + Depth + + + + + Depth Enabled + + + + + Enable bitdepth-crushing + + + + + Sample rate: + + + + + STD + + + + + Stereo difference: + + + + + Levels + + + + + Levels: + + + + + CaptionMenu + + + &Help + + + + + Help (not available) + + + + + 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) associated 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 + + + + + CrossoverEQControlDialog + + + Band 1/2 Crossover: + + + + + Band 2/3 Crossover: + + + + + Band 3/4 Crossover: + + + + + Band 1 Gain: + + + + + Band 2 Gain: + + + + + Band 3 Gain: + + + + + Band 4 Gain: + + + + + Band 1 Mute + + + + + Mute Band 1 + + + + + Band 2 Mute + + + + + Mute Band 2 + + + + + Band 3 Mute + + + + + Mute Band 3 + + + + + Band 4 Mute + + + + + Mute Band 4 + + + + + DelayControls + + + Delay Samples + + + + + Feedback + + + + + Lfo Frequency + + + + + Lfo Amount + + + + + Output gain + + + + + DelayControlsDialog + + + Delay + + + + + Delay Time + + + + + Regen + + + + + Feedback Amount + + + + + Rate + + + + + + Lfo + + + + + Lfo Amt + + + + + Out Gain + + + + + Gain + + + + + DualFilterControlDialog + + + + FREQ + + + + + + Cutoff frequency + + + + + + RESO + + + + + + Resonance + + + + + + GAIN + + + + + + Gain + + + + + MIX + + + + + Mix + + + + + 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 + + + + + + 2x Moog + + + + + + SV LowPass + + + + + + SV BandPass + + + + + + SV HighPass + + + + + + SV Notch + + + + + + Fast Formant + + + + + + Tripole + + + + + Editor + + + Transport controls + + + + + Play (Space) + + + + + Stop (Space) + + + + + Record + + + + + Record while playing + + + + + Effect + + + Effect enabled + + + + + Wet/Dry mix + + + + + Gate + + + + + Decay + + + + + EffectChain + + + Effects enabled + + + + + EffectRackView + + + EFFECTS CHAIN + + + + + Add effect + + + + + EffectSelectDialog + + + Add effect + + + + + Name + + + + + Description + + + + + Author + + + + + 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 + + + + + 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. + + + + + Click here for random wave. + + + + + 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. + + + + + EqControls + + + Input gain + + + + + Output gain + + + + + Low shelf gain + + + + + Peak 1 gain + + + + + Peak 2 gain + + + + + Peak 3 gain + + + + + Peak 4 gain + + + + + High Shelf gain + + + + + HP res + + + + + Low Shelf res + + + + + Peak 1 BW + + + + + Peak 2 BW + + + + + Peak 3 BW + + + + + Peak 4 BW + + + + + High Shelf res + + + + + LP res + + + + + HP freq + + + + + Low Shelf freq + + + + + Peak 1 freq + + + + + Peak 2 freq + + + + + Peak 3 freq + + + + + Peak 4 freq + + + + + High shelf freq + + + + + LP freq + + + + + HP active + + + + + Low shelf active + + + + + Peak 1 active + + + + + Peak 2 active + + + + + Peak 3 active + + + + + Peak 4 active + + + + + High shelf active + + + + + LP active + + + + + LP 12 + + + + + LP 24 + + + + + LP 48 + + + + + HP 12 + + + + + HP 24 + + + + + HP 48 + + + + + low pass type + + + + + high pass type + + + + + Analyse IN + + + + + Analyse OUT + + + + + EqControlsDialog + + + HP + + + + + Low Shelf + + + + + Peak 1 + + + + + Peak 2 + + + + + Peak 3 + + + + + Peak 4 + + + + + High Shelf + + + + + LP + + + + + In Gain + + + + + + + Gain + + + + + Out Gain + + + + + Bandwidth: + + + + + Octave + + + + + Resonance : + + + + + Frequency: + + + + + lp grp + + + + + hp grp + + + + + Frequency + + + + + + Resonance + + + + + Bandwidth + + + + + EqHandle + + + Reso: + + + + + BW: + + + + + + Freq: + + + + + 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 + + + + + Export as loop (remove end silence) + + + + + Export between loop markers + + + + + Start + + + + + Cancel + + + + + 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! + + + + + Export project to %1 + + + + + Error + + + + + Error while determining file-encoder device. Please try to choose a different output format. + + + + + Rendering: %1% + + + + + Fader + + + + Please enter a new value between %1 and %2: + + + + + 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... + + + + + Error + + + + + does not appear to be a valid + + + + + file + + + + + --- Factory files --- + + + + + FlangerControls + + + Delay Samples + + + + + Lfo Frequency + + + + + Seconds + + + + + Regen + + + + + Noise + + + + + Invert + + + + + FlangerControlsDialog + + + Delay + + + + + Delay Time: + + + + + Lfo Hz + + + + + Lfo: + + + + + Amt + + + + + Amt: + + + + + Regen + + + + + Feedback Amount: + + + + + Noise + + + + + White Noise Amount: + + + + + 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 + + + + + Remove &unused channels + + + + + FxMixer + + + Master + + + + + + + FX %1 + + + + + FxMixerView + + + FX-Mixer + + + + + FX Fader %1 + + + + + Mute + + + + + Mute this FX channel + + + + + Solo + + + + + Solo FX channel + + + + + Rename FX channel + + + + + Enter the new name for this FX channel + + + + + FxRoute + + + + Amount to send from channel %1 to channel %2 + + + + + GigInstrument + + + Bank + + + + + Patch + + + + + Gain + + + + + GigInstrumentView + + + Open other GIG file + + + + + Click here to open another GIG file + + + + + Choose the patch + + + + + Click here to change which patch of the GIG file to use + + + + + + Change which instrument of the GIG file is being played + + + + + Which GIG file is currently being used + + + + + Which patch of the GIG file is currently being used + + + + + Gain + + + + + Factor to multiply samples by + + + + + Open GIG file + + + + + GIG Files (*.gig) + + + + + GuiApplication + + + Working directory + + + + + The LMMS working directory %1 does not exist. Create it now? You can change the directory later via Edit -> Settings. + + + + + Preparing UI + + + + + Preparing song editor + + + + + Preparing mixer + + + + + Preparing controller rack + + + + + Preparing project notes + + + + + Preparing beat/bassline editor + + + + + Preparing piano roll + + + + + Preparing automation editor + + + + + InstrumentFunctionArpeggio + + + Arpeggio + + + + + Arpeggio type + + + + + Arpeggio range + + + + + Arpeggio time + + + + + Arpeggio gate + + + + + Arpeggio direction + + + + + Arpeggio mode + + + + + Up + + + + + Down + + + + + Up and down + + + + + Random + + + + + Down and up + + + + + Free + + + + + Sort + + + + + Sync + + + + + 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 + + + + + Minor + + + + + Chromatic + + + + + Half-Whole Diminished + + + + + 5 + + + + + Chords + + + + + Chord type + + + + + Chord range + + + + + InstrumentFunctionNoteStackingView + + + STACKING + + + + + Chord: + + + + + 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. + + + + + InstrumentMidiIOView + + + ENABLE MIDI INPUT + + + + + + CHANNEL + + + + + + VELOCITY + + + + + ENABLE MIDI OUTPUT + + + + + PROGRAM + + + + + NOTE + + + + + MIDI devices to receive MIDI events from + + + + + MIDI devices to send MIDI events to + + + + + CUSTOM BASE VELOCITY + + + + + Specify the velocity normalization base for MIDI-based instruments at 100% note velocity + + + + + BASE VELOCITY + + + + + InstrumentMiscView + + + MASTER PITCH + + + + + Enables the use of Master Pitch + + + + + 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 + + + + + 2x Moog + + + + + SV LowPass + + + + + SV BandPass + + + + + SV HighPass + + + + + SV Notch + + + + + Fast Formant + + + + + Tripole + + + + + 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. + + + + + FREQ + + + + + cutoff frequency: + + + + + 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. + + + + + Envelopes, LFOs and filters are not supported by the current instrument. + + + + + InstrumentTrack + + + + Default preset + + + + + With this knob you can set the volume of the opened channel. + + + + + + unnamed_track + + + + + Base note + + + + + Volume + + + + + Panning + + + + + Pitch + + + + + Pitch range + + + + + FX channel + + + + + Master Pitch + + + + + InstrumentTrackView + + + Volume + + + + + Volume: + + + + + VOL + + + + + Panning + + + + + Panning: + + + + + PAN + + + + + MIDI + + + + + Input + + + + + Output + + + + + FX %1: %2 + + + + + InstrumentTrackWindow + + + GENERAL SETTINGS + + + + + Use these controls to view and edit the next/previous track in the song editor. + + + + + Instrument volume + + + + + Volume: + + + + + VOL + + + + + Panning + + + + + Panning: + + + + + PAN + + + + + Pitch + + + + + Pitch: + + + + + cents + + + + + PITCH + + + + + Pitch range (semitones) + + + + + RANGE + + + + + FX channel + + + + + + FX + + + + + 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. + + + + + SAVE + + + + + ENV/LFO + + + + + FUNC + + + + + MIDI + + + + + MISC + + + + + Save preset + + + + + XML preset file (*.xpf) + + + + + PLUGIN + + + + + Knob + + + Set linear + + + + + Set logarithmic + + + + + Please enter a new value between -96.0 dBV and 6.0 dBV: + + + + + Please enter a new value between %1 and %2: + + + + + LadspaControl + + + Link channels + + + + + LadspaControlDialog + + + Link Channels + + + + + Channel + + + + + LadspaControlView + + + Link channels + + + + + Value: + + + + + Sorry, no help available. + + + + + LadspaEffect + + + Unknown LADSPA plugin %1 requested. + + + + + LcdSpinBox + + + Please enter a new value between %1 and %2: + + + + + LeftRightNav + + + + + Previous + + + + + + + Next + + + + + Previous (%1) + + + + + Next (%1) + + + + + 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 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. + + + + + LmmsCore + + + Generating wavetables + + + + + Initializing data structures + + + + + Opening audio and midi devices + + + + + Launching mixer threads + + + + + MainWindow + + + Configuration file + + + + + Error while parsing configuration file at line %1:%2: %3 + + + + + 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 recovery + + + + + There is a recovery file present. It looks like the last session did not end properly or another instance of LMMS is already running. Do you want to recover the project of this session? + + + + + + Recover + + + + + Recover the file. Please don't run multiple instances of LMMS when you do this. + + + + + + Ignore + + + + + Launch LMMS as usual but with automatic backup disabled to prevent the present recover file from being overwritten. + + + + + Discard + + + + + Launch a default session and delete the restored files. This is not reversible. + + + + + Quit + + + + + Shut down LMMS with no further action. + + + + + Exit + + + + + Version %1 + + + + + Preparing plugin browser + + + + + Preparing file browsers + + + + + My Projects + + + + + My Samples + + + + + My Presets + + + + + My Home + + + + + Root directory + + + + + Volumes + + + + + My Computer + + + + + Loading background artwork + + + + + &File + + + + + &New + + + + + New from template + + + + + &Open... + + + + + &Recently Opened Projects + + + + + &Save + + + + + Save &As... + + + + + Save as New &Version + + + + + Save as default template + + + + + Import... + + + + + E&xport... + + + + + E&xport Tracks... + + + + + Export &MIDI... + + + + + &Quit + + + + + &Edit + + + + + Undo + + + + + Redo + + + + + Settings + + + + + &View + + + + + &Tools + + + + + &Help + + + + + Online Help + + + + + Help + + + + + What's This? + + + + + About + + + + + Create new project + + + + + Create new project from template + + + + + Open existing project + + + + + Recently opened projects + + + + + Save current project + + + + + Export current project + + + + + What's this? + + + + + Toggle metronome + + + + + 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 + + + + + Recover session. Please save your work! + + + + + Automatic backup disabled. Remember to save your work! + + + + + LMMS %1 + + + + + Recovered project not saved + + + + + This project was recovered from the previous session. It is currently unsaved and will be lost if you don't save it. Do you want to save it now? + + + + + Project not saved + + + + + The current project was modified since last saving. Do you want to save it now? + + + + + Open Project + + + + + LMMS (*.mmp *.mmpz) + + + + + Save Project + + + + + LMMS Project + + + + + LMMS Project Template + + + + + Overwrite default template? + + + + + This will overwrite your current default template. + + + + + Help not available + + + + + Currently there's no help available in LMMS. +Please visit http://lmms.sf.net/wiki for documentation on LMMS. + + + + + Song Editor + + + + + Beat+Bassline Editor + + + + + Piano Roll + + + + + Automation Editor + + + + + FX Mixer + + + + + Project Notes + + + + + Controller Rack + + + + + Volume as dBV + + + + + Smooth scroll + + + + + Enable note labels in piano roll + + + + + MeterDialog + + + + Meter Numerator + + + + + + Meter Denominator + + + + + TIME SIG + + + + + MeterModel + + + Numerator + + + + + Denominator + + + + + 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. + + + + + Track + + + + + MidiPort + + + Input channel + + + + + Output channel + + + + + Input controller + + + + + Output controller + + + + + Fixed input velocity + + + + + Fixed output velocity + + + + + Fixed output note + + + + + Output MIDI program + + + + + Base velocity + + + + + Receive MIDI-events + + + + + Send MIDI-events + + + + + MidiSetupWidget + + + DEVICE + + + + + 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 + + + + + + Sine wave + + + + + Bandlimited Triangle wave + + + + + Bandlimited Saw wave + + + + + Bandlimited Ramp wave + + + + + Bandlimited Square wave + + + + + Bandlimited Moog saw wave + + + + + + Soft square wave + + + + + Absolute sine wave + + + + + + Exponential wave + + + + + White noise + + + + + Digital Triangle wave + + + + + Digital Saw wave + + + + + Digital Ramp wave + + + + + Digital Square wave + + + + + Digital Moog saw wave + + + + + Triangle wave + + + + + Saw wave + + + + + Ramp wave + + + + + Square wave + + + + + Moog saw wave + + + + + Abs. sine wave + + + + + Random + + + + + Random smooth + + + + + 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. + + + + + + + Volume + + + + + + + Panning + + + + + + + Coarse detune + + + + + + + semitones + + + + + + Finetune left + + + + + + + + cents + + + + + + Finetune right + + + + + + + Stereo phase offset + + + + + + + + + deg + + + + + Pulse width + + + + + Send sync on pulse rise + + + + + Send sync on pulse fall + + + + + Hard sync oscillator 2 + + + + + Reverse sync oscillator 2 + + + + + Sub-osc mix + + + + + Hard sync oscillator 3 + + + + + Reverse sync oscillator 3 + + + + + + + + Attack + + + + + + Rate + + + + + + Phase + + + + + + Pre-delay + + + + + + Hold + + + + + + Decay + + + + + + Sustain + + + + + + Release + + + + + + Slope + + + + + 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. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Modulation amount + + + + + MultitapEchoControlDialog + + + Length + + + + + Step length: + + + + + Dry + + + + + Dry Gain: + + + + + Stages + + + + + Lowpass stages: + + + + + Swap inputs + + + + + Swap left and right input channel for reflections + + + + + 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 + + + + + NesInstrumentView + + + + + + Volume + + + + + + + Coarse detune + + + + + + + Envelope length + + + + + Enable channel 1 + + + + + Enable envelope 1 + + + + + Enable envelope 1 loop + + + + + Enable sweep 1 + + + + + + Sweep amount + + + + + + Sweep rate + + + + + + 12.5% Duty cycle + + + + + + 25% Duty cycle + + + + + + 50% Duty cycle + + + + + + 75% Duty cycle + + + + + Enable channel 2 + + + + + Enable envelope 2 + + + + + Enable envelope 2 loop + + + + + Enable sweep 2 + + + + + Enable channel 3 + + + + + Noise Frequency + + + + + Frequency sweep + + + + + Enable channel 4 + + + + + Enable envelope 4 + + + + + Enable envelope 4 loop + + + + + Quantize noise frequency when using note frequency + + + + + Use note frequency for noise + + + + + Noise mode + + + + + Master Volume + + + + + Vibrato + + + + + OscillatorObject + + + Osc %1 waveform + + + + + Osc %1 harmonic + + + + + + Osc %1 volume + + + + + + Osc %1 panning + + + + + + Osc %1 fine detuning left + + + + + Osc %1 coarse detuning + + + + + Osc %1 fine detuning right + + + + + Osc %1 phase-offset + + + + + Osc %1 stereo phase-detuning + + + + + Osc %1 wave shape + + + + + Modulation type %1 + + + + + PatchesDialog + + + Qsynth: Channel Preset + + + + + Bank selector + + + + + Bank + + + + + Program selector + + + + + Patch + + + + + Name + + + + + OK + + + + + Cancel + + + + + 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 + + + use mouse wheel to set velocity of a step + + + + + double-click to open in Piano Roll + + + + + 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: + + + + + AMNT + + + + + Modulation amount: + + + + + MULT + + + + + Amount Multiplicator: + + + + + ATCK + + + + + Attack: + + + + + DCAY + + + + + Release: + + + + + TRES + + + + + Treshold: + + + + + PeakControllerEffectControls + + + Base value + + + + + Modulation amount + + + + + Attack + + + + + Release + + + + + Treshold + + + + + Mute output + + + + + Abs Value + + + + + Amount Multiplicator + + + + + PianoRoll + + + Note Velocity + + + + + Note Panning + + + + + Mark/unmark current semitone + + + + + Mark/unmark all corresponding octave semitones + + + + + Mark current scale + + + + + Mark current chord + + + + + Unmark all + + + + + Select all notes on this key + + + + + Note lock + + + + + Last note + + + + + No scale + + + + + No chord + + + + + Velocity: %1% + + + + + Panning: %1% left + + + + + Panning: %1% right + + + + + Panning: center + + + + + Please open a pattern by double-clicking on it! + + + + + + Please enter a new value between %1 and %2: + + + + + PianoRollWindow + + + Play/pause current pattern (Space) + + + + + Record notes from MIDI-device/channel-piano + + + + + Record notes from MIDI-device/channel-piano while playing song or BB track + + + + + Stop playing of current pattern (Space) + + + + + 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. + + + + + Edit actions + + + + + Draw mode (Shift+D) + + + + + Erase mode (Shift+E) + + + + + Select mode (Shift+S) + + + + + 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 %1 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 %1 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. + + + + + Copy paste controls + + + + + Cut selected notes (%1+X) + + + + + Copy selected notes (%1+C) + + + + + Paste notes from clipboard (%1+V) + + + + + 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. + + + + + Timeline controls + + + + + Zoom and note controls + + + + + 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. + + + + + Piano-Roll - %1 + + + + + Piano-Roll - no pattern + + + + + 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"! + + + + + PluginBrowser + + + Instrument plugins + + + + + Instrument browser + + + + + Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track. + + + + + PluginFactory + + + Plugin not found. + + + + + LMMS plugin %1 does not have a plugin descriptor named %2! + + + + + ProjectNotes + + + Project notes + + + + + Put down your project notes here. + + + + + Edit Actions + + + + + &Undo + + + + + %1+Z + + + + + &Redo + + + + + %1+Y + + + + + &Copy + + + + + %1+C + + + + + Cu&t + + + + + %1+X + + + + + &Paste + + + + + %1+V + + + + + Format Actions + + + + + &Bold + + + + + %1+B + + + + + &Italic + + + + + %1+I + + + + + &Underline + + + + + %1+U + + + + + &Left + + + + + %1+L + + + + + C&enter + + + + + %1+E + + + + + &Right + + + + + %1+R + + + + + &Justify + + + + + %1+J + + + + + &Color... + + + + + ProjectRenderer + + + WAV-File (*.wav) + + + + + Compressed OGG-File (*.ogg) + + + + + QWidget + + + + + Name: + + + + + + Maker: + + + + + + Copyright: + + + + + + Requires Real Time: + + + + + + + + + + Yes + + + + + + + + + + No + + + + + + Real Time Capable: + + + + + + In Place Broken: + + + + + + Channels In: + + + + + + Channels Out: + + + + + File: %1 + + + + + File: + + + + + RenameDialog + + + Rename... + + + + + SampleBuffer + + + Open audio file + + + + + All Audio-Files (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw) + + + + + 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) + + + + + SampleTCOView + + + double-click to select sample + + + + + Delete (middle mousebutton) + + + + + Cut + + + + + Copy + + + + + Paste + + + + + Mute/unmute (<%1> + middle click) + + + + + SampleTrack + + + Volume + + + + + Panning + + + + + + Sample track + + + + + SampleTrackView + + + Track volume + + + + + Channel volume: + + + + + VOL + + + + + Panning + + + + + Panning: + + + + + PAN + + + + + 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 + + + + + One instrument track window mode + + + + + HQ-mode for output audio-device + + + + + Compact track buttons + + + + + Sync VST plugins to host playback + + + + + Enable note labels in piano roll + + + + + Enable waveform display by default + + + + + Keep effects running even without input + + + + + Create backup file when saving a project + + + + + Reopen last project on start + + + + + LANGUAGE + + + + + + Paths + + + + + Directories + + + + + LMMS working directory + + + + + Themes directory + + + + + Background artwork + + + + + FL Studio installation directory + + + + + VST-plugin directory + + + + + GIG directory + + + + + SF2 directory + + + + + LADSPA plugin directories + + + + + STK rawwave directory + + + + + Default Soundfont File + + + + + + Performance settings + + + + + Auto save + + + + + Enable auto save feature + + + + + UI effects vs. performance + + + + + Smooth scroll in Song Editor + + + + + Show playback cursor in AudioFileProcessor + + + + + + 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 GIG directory + + + + + Choose your SF2 directory + + + + + Choose your VST-plugin directory + + + + + Choose artwork-theme directory + + + + + Choose FL Studio installation directory + + + + + Choose LADSPA plugin directory + + + + + Choose STK rawwave directory + + + + + Choose default SoundFont + + + + + Choose background artwork + + + + + minutes + + + + + minute + + + + + Auto save interval: %1 %2 + + + + + Set the time between automatic backup to %1. +Remember to also save your project manually. + + + + + 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. + + + + + 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 + + + + + MIDI sequences + + + + + FL Studio projects + + + + + Hydrogen projects + + + + + All file types + + + + + + Empty project + + + + + + This project is empty so exporting makes no sense. Please put some items into Song Editor first! + + + + + Select directory for writing exported tracks... + + + + + + untitled + + + + + + Select file for project-export... + + + + + MIDI File (*.mid) + + + + + The following errors occured while loading: + + + + + SongEditor + + + Could not open file + + + + + 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. + + + + + Could not write file + + + + + 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. + + + + + Error in file + + + + + The file %1 seems to contain errors and therefore can't be loaded. + + + + + Project Version Mismatch + + + + + This %1 was created with LMMS version %2, but version %3 is installed + + + + + 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 + + + + + SongEditorWindow + + + Song-Editor + + + + + Play song (Space) + + + + + Record samples from Audio-device + + + + + Record samples from Audio-device while playing song or BB track + + + + + Stop 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. + + + + + Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song. + + + + + Track actions + + + + + Add beat/bassline + + + + + Add sample-track + + + + + Add automation-track + + + + + Edit actions + + + + + Draw mode + + + + + Edit mode (select and move) + + + + + Timeline controls + + + + + Zoom controls + + + + + SpectrumAnalyzerControlDialog + + + Linear spectrum + + + + + Linear Y axis + + + + + SpectrumAnalyzerControls + + + Linear spectrum + + + + + Linear Y axis + + + + + Channel mode + + + + + TabWidget + + + + Settings for %1 + + + + + TempoSyncKnob + + + + Tempo Sync + + + + + No Sync + + + + + Eight beats + + + + + Whole note + + + + + Half note + + + + + Quarter note + + + + + 8th note + + + + + 16th note + + + + + 32nd note + + + + + Custom... + + + + + 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 + + + + + TimeLineWidget + + + 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 <%1> to disable magnetic loop points. + + + + + Hold <Shift> to move the begin loop point; Press <%1> to disable magnetic loop points. + + + + + Track + + + Mute + + + + + Solo + + + + + TrackContainer + + + Importing FLP-file... + + + + + + + Cancel + + + + + + + Please wait... + + + + + Importing MIDI-file... + + + + + 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... + + + + + TrackContentObject + + + Mute + + + + + TrackContentObjectView + + + Current position + + + + + + Hint + + + + + Press <%1> and drag to make a copy. + + + + + Current length + + + + + Press <%1> for free resizing. + + + + + %1:%2 (%3:%4 to %5:%6) + + + + + Delete (middle mousebutton) + + + + + Cut + + + + + Copy + + + + + Paste + + + + + Mute/unmute (<%1> + middle click) + + + + + TrackOperationsWidget + + + Press <%1> while clicking on move-grip to begin a new drag'n'drop-action. + + + + + Actions for this track + + + + + Mute + + + + + + Solo + + + + + Mute this track + + + + + Clone this track + + + + + Remove this track + + + + + Clear this track + + + + + FX %1: %2 + + + + + Assign to new FX Channel + + + + + Turn all recording on + + + + + Turn all recording off + + + + + TripleOscillatorView + + + Use phase modulation for modulating oscillator 1 with oscillator 2 + + + + + Use amplitude modulation for modulating oscillator 1 with oscillator 2 + + + + + Mix output of oscillator 1 & 2 + + + + + Synchronize oscillator 1 with oscillator 2 + + + + + Use frequency modulation for modulating oscillator 1 with oscillator 2 + + + + + Use phase modulation for modulating oscillator 2 with oscillator 3 + + + + + Use amplitude modulation for modulating oscillator 2 with oscillator 3 + + + + + Mix output of oscillator 2 & 3 + + + + + Synchronize oscillator 2 with oscillator 3 + + + + + Use frequency modulation for modulating oscillator 2 with oscillator 3 + + + + + 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 24 semitones (2 octaves) 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. + + + + + 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. + + + + + 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. + + + + + 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 + + + + + Preset + + + + + by + + + + + - VST plugin control + + + + + VisualizationWidget + + + click to enable/disable visualization of master-output + + + + + Click to enable + + + + + 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 + + + + The VST plugin %1 could not be loaded. + + + + + Open Preset + + + + + + Vst Plugin Preset (*.fxp *.fxb) + + + + + : default + + + + + " + + + + + ' + + + + + Save Preset + + + + + .fxp + + + + + .FXP + + + + + .FXB + + + + + .fxb + + + + + Loading plugin + + + + + Please wait while loading VST plugin... + + + + + 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 + + + + + + Volume + + + + + + + + Panning + + + + + + + + Freq. multiplier + + + + + + + + Left detune + + + + + + + + + + + + cents + + + + + + + + Right detune + + + + + A-B Mix + + + + + Mix envelope amount + + + + + Mix envelope attack + + + + + Mix envelope hold + + + + + Mix envelope decay + + + + + Crosstalk + + + + + 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 + + + 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 + + + + + Show GUI + + + + + Click here to show or hide the graphical user interface (GUI) of ZynAddSubFX. + + + + + audioFileProcessor + + + Amplify + + + + + Start of sample + + + + + End of sample + + + + + Loopback point + + + + + Reverse sample + + + + + Loop mode + + + + + Stutter + + + + + Interpolation mode + + + + + None + + + + + Linear + + + + + Sinc + + + + + Sample not found: %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 + + + + + fxLineLcdSpinBox + + + Assign to: + + + + + New FX Channel + + + + + graphModel + + + Graph + + + + + kickerInstrument + + + Start frequency + + + + + End frequency + + + + + Length + + + + + Distortion Start + + + + + Distortion End + + + + + Gain + + + + + Envelope Slope + + + + + Noise + + + + + Click + + + + + Frequency Slope + + + + + Start from note + + + + + End to note + + + + + kickerInstrumentView + + + Start frequency: + + + + + End frequency: + + + + + Frequency Slope: + + + + + Gain: + + + + + Envelope Length: + + + + + Envelope Slope: + + + + + Click: + + + + + Noise: + + + + + Distortion Start: + + + + + Distortion End: + + + + + 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. + + + + + 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 + + + + + malletsInstrumentView + + + Instrument + + + + + Spread + + + + + Spread: + + + + + Missing files + + + + + Your Stk-installation seems to be incomplete. Please make sure the full Stk-package is installed! + + + + + 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. + + + + + 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 + + + + + opl2instrumentView + + + + Attack + + + + + + Decay + + + + + + Release + + + + + + Frequency multiplier + + + + + organicInstrument + + + Distortion + + + + + Volume + + + + + organicInstrumentView + + + Distortion: + + + + + The distortion knob adds distortion to the output of the instrument. + + + + + Volume: + + + + + The volume knob controls the volume of the output of the instrument. It is cumulative with the instrument window's volume control. + + + + + Randomise + + + + + The randomize button randomizes all knobs except the harmonics,main volume and distortion knobs. + + + + + + Osc %1 waveform: + + + + + Osc %1 volume: + + + + + Osc %1 panning: + + + + + Osc %1 stereo detuning + + + + + cents + + + + + 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 + + + + + patchesDialog + + + Qsynth: Channel Preset + + + + + Bank selector + + + + + Bank + + + + + Program selector + + + + + Patch + + + + + Name + + + + + OK + + + + + Cancel + + + + + pluginBrowser + + + A native amplifier plugin + + + + + Simple sampler with various settings for using samples (e.g. drums) in an instrument-track + + + + + Boost your bass the fast and simple way + + + + + Customizable wavetable synthesizer + + + + + An oversampling bitcrusher + + + + + Carla Patchbay Instrument + + + + + Carla Rack Instrument + + + + + A 4-band Crossover Equalizer + + + + + A native delay plugin + + + + + A Dual filter plugin + + + + + plugin for processing dynamics in a flexible way + + + + + A native eq plugin + + + + + A native flanger plugin + + + + + Filter for importing FL Studio projects into LMMS + + + + + Player for GIG files + + + + + Filter for importing Hydrogen files into LMMS + + + + + Versatile drum synthesizer + + + + + List installed LADSPA plugins + + + + + plugin for using arbitrary LADSPA-effects inside LMMS. + + + + + Incomplete monophonic imitation tb303 + + + + + Filter for exporting MIDI-files from LMMS + + + + + Filter for importing MIDI-files into LMMS + + + + + Monstrous 3-oscillator synth with modulation matrix + + + + + A multitap echo delay plugin + + + + + A NES-like synthesizer + + + + + 2-operator FM Synth + + + + + Additive Synthesizer for organ-like sounds + + + + + Emulation of GameBoy (TM) APU + + + + + GUS-compatible patch instrument + + + + + Plugin for controlling knobs with sound peaks + + + + + Player for SoundFont files + + + + + LMMS port of sfxr + + + + + Emulation of the MOS6581 and MOS8580 SID. +This chip was used in the Commodore 64 computer. + + + + + Graphical spectrum analyzer plugin + + + + + Plugin for enhancing stereo separation of a stereo input file + + + + + Plugin for freely manipulating stereo output + + + + + Tuneful things to bang on + + + + + Three powerful oscillators you can modulate in several ways + + + + + VST-host for using VST(i)-plugins within LMMS + + + + + Vibrating string modeler + + + + + plugin for using arbitrary VST effects inside LMMS. + + + + + 4-oscillator modulatable wavetable synth + + + + + plugin for waveshaping + + + + + Embedded ZynAddSubFX + + + + + no description + + + + + sf2Instrument + + + Bank + + + + + Patch + + + + + Gain + + + + + Reverb + + + + + Reverb Roomsize + + + + + Reverb Damping + + + + + Reverb Width + + + + + Reverb Level + + + + + Chorus + + + + + Chorus Lines + + + + + Chorus Level + + + + + Chorus Speed + + + + + Chorus Depth + + + + + A soundfont %1 could not be loaded. + + + + + 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. + + + + + 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 + + + + + vestigeInstrument + + + Loading plugin + + + + + Please wait while loading VST-plugin... + + + + + 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 + + + + + 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. + + + + + 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 + + + + \ No newline at end of file diff --git a/data/locale/en.ts b/data/locale/en.ts index a8b528feb29..d4bcde19c3d 100644 --- a/data/locale/en.ts +++ b/data/locale/en.ts @@ -1,6 +1,6 @@ - + AboutDialog @@ -37,10 +37,6 @@ If you're interested in translating LMMS in another language or want to imp License - - Copyright (c) 2004-2014, LMMS developers - - LMMS @@ -57,6 +53,10 @@ If you're interested in translating LMMS in another language or want to imp Contributors ordered by number of commits: + + Copyright © %1 + + AmplifierControlDialog @@ -113,7 +113,7 @@ If you're interested in translating LMMS in another language or want to imp - AudioAlsa::setupWidget + AudioAlsaSetupWidget DEVICE @@ -276,6 +276,28 @@ If you're interested in translating LMMS in another language or want to imp + + AudioSndio::setupWidget + + DEVICE + + + + CHANNELS + + + + + AudioSoundIo::setupWidget + + BACKEND + + + + DEVICE + + + AutomatableModel @@ -456,11 +478,24 @@ If you're interested in translating LMMS in another language or want to imp Automation Editor - %1 - - - AutomationPattern - Drag a control while pressing <%1> + Edit actions + + + + Interpolation controls + + + + Timeline controls + + + + Zoom controls + + + + Quantization controls @@ -468,6 +503,13 @@ If you're interested in translating LMMS in another language or want to imp + + AutomationPattern + + Drag a control while pressing <%1> + + + AutomationPatternView @@ -510,6 +552,10 @@ If you're interested in translating LMMS in another language or want to imp Flip Horizontally (Visible) + + Model is already connected to this pattern. + + AutomationTrack @@ -556,6 +602,22 @@ If you're interested in translating LMMS in another language or want to imp Add steps + + Beat selector + + + + Track and step actions + + + + Clone Steps + + + + Add sample-track + + BBTCOView @@ -819,7 +881,7 @@ If you're interested in translating LMMS in another language or want to imp - Confirm delete? There are existing connection(s) associted with this controller. There is no way to undo. + Confirm delete? There are existing connection(s) associated with this controller. There is no way to undo. @@ -842,7 +904,11 @@ If you're interested in translating LMMS in another language or want to imp - &Remove this plugin + &Remove this controller + + + + Re&name this controller @@ -927,6 +993,10 @@ If you're interested in translating LMMS in another language or want to imp Lfo Amount + + Output gain + + DelayControlsDialog @@ -958,11 +1028,12 @@ If you're interested in translating LMMS in another language or want to imp Lfo - - - DetuningHelper - Note detuning + Out Gain + + + + Gain @@ -984,6 +1055,38 @@ If you're interested in translating LMMS in another language or want to imp Click to enable/disable Filter 2 + + FREQ + + + + Cutoff frequency + + + + RESO + + + + Resonance + + + + GAIN + + + + Gain + + + + MIX + + + + Mix + + DualFilterControls @@ -1120,13 +1223,6 @@ If you're interested in translating LMMS in another language or want to imp - - DummyEffect - - NOT FOUND - - - Editor @@ -1145,6 +1241,10 @@ If you're interested in translating LMMS in another language or want to imp Record while playing + + Transport controls + + Effect @@ -1190,7 +1290,19 @@ If you're interested in translating LMMS in another language or want to imp - Plugin description + Name + + + + Type + + + + Description + + + + Author @@ -1673,6 +1785,14 @@ Right clicking will bring up a context menu where you can change the order in wh high pass type + + Analyse IN + + + + Analyse OUT + + EqControlsDialog @@ -1733,30 +1853,42 @@ Right clicking will bring up a context menu where you can change the order in wh - 12dB + lp grp - 24dB + hp grp - 48dB + Octave - lp grp + Frequency - hp grp + Resonance + + + + Bandwidth - EqParameterWidget + EqHandle + + Reso: + + + + BW: + + - Hz + Freq: @@ -1948,10 +2080,6 @@ Please make sure you have write-permission to the file and the directory contain Send to active instrument-track - - Open in new instrument-track/Song-Editor - - Open in new instrument-track/B+B Editor @@ -1968,6 +2096,22 @@ Please make sure you have write-permission to the file and the directory contain --- Factory files --- + + Open in new instrument-track/Song Editor + + + + Error + + + + does not appear to be a valid + + + + file + + FlangerControls @@ -1999,43 +2143,47 @@ Please make sure you have write-permission to the file and the directory contain FlangerControlsDialog - Delay + Delay Time: - Delay Time: + Feedback Amount: - Lfo Hz + White Noise Amount: - Lfo: + DELAY - Amt + RATE - Amt: + Rate: - Regen + AMNT - Feedback Amount: + Amount: - Noise + FDBK - White Noise Amount: + NOISE + + + + Invert @@ -2089,14 +2237,6 @@ You can remove and move FX channels in the context menu, which is accessed by ri FxMixerView - - Rename FX channel - - - - Enter the new name for this FX channel - - FX-Mixer @@ -2191,6 +2331,49 @@ You can remove and move FX channels in the context menu, which is accessed by ri + + GuiApplication + + Working directory + + + + The LMMS working directory %1 does not exist. Create it now? You can change the directory later via Edit -> Settings. + + + + Preparing UI + + + + Preparing song editor + + + + Preparing mixer + + + + Preparing controller rack + + + + Preparing project notes + + + + Preparing beat/bassline editor + + + + Preparing piano roll + + + + Preparing automation editor + + + InstrumentFunctionArpeggio @@ -2253,6 +2436,14 @@ You can remove and move FX channels in the context menu, which is accessed by ri Down and up + + Skip rate + + + + Miss rate + + InstrumentFunctionArpeggioView @@ -2324,6 +2515,30 @@ You can remove and move FX channels in the context menu, which is accessed by ri Mode: + + SKIP + + + + Skip rate: + + + + The skip function will make the arpeggiator pause one step randomly. From its start in full counter clockwise position and no effect it will gradually progress to full amnesia at maximum setting. + + + + MISS + + + + Miss rate: + + + + The miss function will make the arpeggiator miss the intended note. + + InstrumentFunctionNoteStacking @@ -3052,6 +3267,10 @@ You can remove and move FX channels in the context menu, which is accessed by ri Output + + FX %1: %2 + + InstrumentTrackWindow @@ -3151,11 +3370,19 @@ You can remove and move FX channels in the context menu, which is accessed by ri MISC - - - Knob - Set linear + Use these controls to view and edit the next/previous track in the song editor. + + + + SAVE + + + + + Knob + + Set linear @@ -3218,6 +3445,25 @@ You can remove and move FX channels in the context menu, which is accessed by ri + + LeftRightNav + + Previous + + + + Next + + + + Previous (%1) + + + + Next (%1) + + + LfoController @@ -3283,10 +3529,6 @@ You can remove and move FX channels in the context menu, which is accessed by ri 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: @@ -3344,17 +3586,32 @@ Double click to pick a file. Click here for a moog saw-wave. + + AMNT + + - MainWindow + LmmsCore - Working directory + Generating wavetables - The LMMS working directory %1 does not exist. Create it now? You can change the directory later via Edit -> Settings. + Initializing data structures + + + + Opening audio and midi devices + + + + Launching mixer threads + + + MainWindow Could not save config-file @@ -3549,14 +3806,6 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS. Redo - - LMMS Project - - - - LMMS Project Template - - My Projects @@ -3577,10 +3826,6 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS. My Computer - - Root Directory - - &File @@ -3613,6 +3858,146 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS. Save Project + + Project recovery + + + + There is a recovery file present. It looks like the last session did not end properly or another instance of LMMS is already running. Do you want to recover the project of this session? + + + + Recover + + + + Recover the file. Please don't run multiple instances of LMMS when you do this. + + + + Ignore + + + + Launch LMMS as usual but with automatic backup disabled to prevent the present recover file from being overwritten. + + + + Discard + + + + Launch a default session and delete the restored files. This is not reversible. + + + + Preparing plugin browser + + + + Preparing file browsers + + + + Root directory + + + + Loading background artwork + + + + New from template + + + + Save as default template + + + + Export &MIDI... + + + + &View + + + + Toggle metronome + + + + Show/hide Song-Editor + + + + Show/hide Beat+Bassline Editor + + + + Show/hide Piano-Roll + + + + Show/hide Automation Editor + + + + Show/hide FX Mixer + + + + Show/hide project notes + + + + Show/hide controller rack + + + + Recover session. Please save your work! + + + + Automatic backup disabled. Remember to save your work! + + + + Recovered project not saved + + + + This project was recovered from the previous session. It is currently unsaved and will be lost if you don't save it. Do you want to save it now? + + + + LMMS Project + + + + LMMS Project Template + + + + Overwrite default template? + + + + This will overwrite your current default template. + + + + Volume as dBV + + + + Smooth scroll + + + + Enable note labels in piano roll + + MeterDialog @@ -3640,20 +4025,6 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS. - - MidiAlsaRaw::setupWidget - - DEVICE - - - - - MidiAlsaSeq - - DEVICE - - - MidiController @@ -3679,11 +4050,8 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS. 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 + Track @@ -3734,6 +4102,13 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS. + + MidiSetupWidget + + DEVICE + + + MonstroInstrument @@ -4379,6 +4754,114 @@ PM means phase modulation: Oscillator 3's phase is modulated by oscillator 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. + + Volume + + + + Panning + + + + Coarse detune + + + + semitones + + + + Finetune left + + + + cents + + + + Finetune right + + + + Stereo phase offset + + + + deg + + + + Pulse width + + + + Send sync on pulse rise + + + + Send sync on pulse fall + + + + Hard sync oscillator 2 + + + + Reverse sync oscillator 2 + + + + Sub-osc mix + + + + Hard sync oscillator 3 + + + + Reverse sync oscillator 3 + + + + Attack + + + + Rate + + + + Phase + + + + Pre-delay + + + + Hold + + + + Decay + + + + Sustain + + + + Release + + + + Slope + + + + Modulation amount + + MultitapEchoControlDialog @@ -4498,6 +4981,121 @@ PM means phase modulation: Oscillator 3's phase is modulated by oscillator + + NesInstrumentView + + Volume + + + + Coarse detune + + + + Envelope length + + + + Enable channel 1 + + + + Enable envelope 1 + + + + Enable envelope 1 loop + + + + Enable sweep 1 + + + + Sweep amount + + + + Sweep rate + + + + 12.5% Duty cycle + + + + 25% Duty cycle + + + + 50% Duty cycle + + + + 75% Duty cycle + + + + Enable channel 2 + + + + Enable envelope 2 + + + + Enable envelope 2 loop + + + + Enable sweep 2 + + + + Enable channel 3 + + + + Noise Frequency + + + + Frequency sweep + + + + Enable channel 4 + + + + Enable envelope 4 + + + + Enable envelope 4 loop + + + + Quantize noise frequency when using note frequency + + + + Use note frequency for noise + + + + Noise mode + + + + Master Volume + + + + Vibrato + + + OscillatorObject @@ -4517,31 +5115,66 @@ PM means phase modulation: Oscillator 3's phase is modulated by oscillator - Osc %1 fine detuning right + 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 + + + + + PatchesDialog + + Qsynth: Channel Preset + + + + Bank selector - Osc %1 phase-offset + Bank - Osc %1 stereo phase-detuning + Program selector - Osc %1 wave shape + Patch - Modulation type %1 + Name - Osc %1 waveform + OK - Osc %1 harmonic + Cancel @@ -4594,11 +5227,6 @@ PM means phase modulation: Oscillator 3's phase is modulated by oscillator PatternView - - double-click to open this pattern in piano-roll -use mouse wheel to set velocity of a step - - Open in piano-roll @@ -4623,6 +5251,18 @@ use mouse wheel to set velocity of a step Remove steps + + use mouse wheel to set velocity of a step + + + + double-click to open in Piano Roll + + + + Clone Steps + + PeakController @@ -4693,11 +5333,11 @@ use mouse wheel to set velocity of a step - TRES + Treshold: - Treshold: + TRSH @@ -4738,14 +5378,6 @@ use mouse wheel to set velocity of a step PianoRoll - - Piano-Roll - no pattern - - - - Piano-Roll - %1 - - Please open a pattern by double-clicking on it! @@ -4810,6 +5442,14 @@ use mouse wheel to set velocity of a step Please enter a new value between %1 and %2: + + Mark/unmark all corresponding octave semitones + + + + Select all notes on this key + + PianoRollWindow @@ -4921,6 +5561,34 @@ use mouse wheel to set velocity of a step 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. + + Edit actions + + + + Copy paste controls + + + + Timeline controls + + + + Zoom and note controls + + + + Piano-Roll - %1 + + + + Piano-Roll - no pattern + + + + Quantize + + PianoView @@ -4948,10 +5616,6 @@ Reason: "%2" Failed to load plugin "%1"! - - LMMS plugin %1 does not have a plugin descriptor named %2! - - PluginBrowser @@ -4968,6 +5632,17 @@ Reason: "%2" + + PluginFactory + + Plugin not found. + + + + LMMS plugin %1 does not have a plugin descriptor named %2! + + + ProjectNotes @@ -5098,94 +5773,6 @@ Reason: "%2" - - 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 @@ -5317,10 +5904,6 @@ Reason: "%2" Mute/unmute (<%1> + middle click) - - Set/clear record - - SampleTrack @@ -5450,22 +6033,10 @@ Reason: "%2" VST-plugin directory - - Artwork directory - - Background artwork - - FL Studio installation directory - - - - LADSPA plugin paths - - STK rawwave directory @@ -5547,10 +6118,6 @@ Latency: %2 ms Choose artwork-theme directory - - Choose FL Studio installation directory - - Choose LADSPA plugin directory @@ -5575,6 +6142,59 @@ Latency: %2 ms 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. + + Reopen last project on start + + + + Directories + + + + Themes directory + + + + GIG directory + + + + SF2 directory + + + + LADSPA plugin directories + + + + Auto save + + + + Choose your GIG directory + + + + Choose your SF2 directory + + + + minutes + + + + minute + + + + Auto save interval: %1 %2 + + + + Set the time between automatic backup to %1. +Remember to also save your project manually. + + Song @@ -5614,10 +6234,6 @@ Latency: %2 ms MIDI sequences - - FL Studio projects - - Hydrogen projects @@ -5650,6 +6266,14 @@ Latency: %2 ms The following errors occured while loading: + + MIDI File (*.mid) + + + + LMMS Error report + + SongEditor @@ -5722,6 +6346,22 @@ Latency: %2 ms 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. + + template + + + + project + + + + Version difference + + + + This %1 was created with LMMS %2. + + SongEditorWindow @@ -5773,6 +6413,22 @@ Latency: %2 ms Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song. + + Track actions + + + + Edit actions + + + + Timeline controls + + + + Zoom controls + + SpectrumAnalyzerControlDialog @@ -5800,6 +6456,25 @@ Latency: %2 ms + + SubWindow + + Close + + + + Maximize + + + + Minimize + + + + Restore + + + TabWidget @@ -5888,6 +6563,30 @@ Latency: %2 ms click to change time units + + MIN + + + + SEC + + + + MSEC + + + + BAR + + + + BEAT + + + + TICK + + TimeLineWidget @@ -5971,15 +6670,11 @@ Please make sure you have read-permission to the file and the directory containi Importing MIDI-file... - - Importing FLP-file... - - TrackContentObject - Muted + Mute @@ -6073,7 +6768,11 @@ Please make sure you have read-permission to the file and the directory containi - Turn all recording off + Turn all recording off + + + + Assign to new FX Channel @@ -6692,6 +7391,54 @@ Please make sure you have read-permission to the file and the directory containi Click for square wave + + Volume + + + + Panning + + + + Freq. multiplier + + + + Left detune + + + + cents + + + + Right detune + + + + A-B Mix + + + + Mix envelope amount + + + + Mix envelope attack + + + + Mix envelope hold + + + + Mix envelope decay + + + + Crosstalk + + ZynAddSubFxInstrument @@ -7046,6 +7793,17 @@ Please make sure you have read-permission to the file and the directory containi + + fxLineLcdSpinBox + + Assign to: + + + + New FX Channel + + + graphModel @@ -7438,116 +8196,6 @@ Double clicking any of the plugins will bring up information on the ports. - - 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 @@ -7666,14 +8314,6 @@ Double clicking any of the plugins will bring up information on the ports.Tibetan Bowl - - Missing files - - - - Your Stk-installation seems to be incomplete. Please make sure the full Stk-package is installed! - - malletsInstrumentView @@ -7769,10 +8409,6 @@ Double clicking any of the plugins will bring up information on the ports.ADSR: - - Bowed - - Pressure @@ -7781,14 +8417,6 @@ Double clicking any of the plugins will bring up information on the ports.Pressure: - - Motion - - - - Motion: - - Speed @@ -7798,11 +8426,11 @@ Double clicking any of the plugins will bring up information on the ports. - Vibrato + Missing files - Vibrato: + Your Stk-installation seems to be incomplete. Please make sure the full Stk-package is installed! @@ -7987,6 +8615,25 @@ Double clicking any of the plugins will bring up information on the ports. + + opl2instrumentView + + Attack + + + + Decay + + + + Release + + + + Frequency multiplier + + + organicInstrument @@ -8315,6 +8962,41 @@ Double clicking any of the plugins will bring up information on the ports. + + patchesDialog + + Qsynth: Channel Preset + + + + Bank selector + + + + Bank + + + + Program selector + + + + Patch + + + + Name + + + + OK + + + + Cancel + + + pluginBrowser @@ -8341,10 +9023,6 @@ Double clicking any of the plugins will bring up information on the ports.List installed LADSPA plugins - - Filter for importing FL Studio projects into LMMS - - GUS-compatible patch instrument @@ -8490,55 +9168,12 @@ This chip was used in the Commodore 64 computer. A 4-band Crossover Equalizer - - - setupWidget - - JACK (JACK Audio Connection Kit) - - - - OSS Raw-MIDI (Open Sound System) - - - - SDL (Simple DirectMedia Layer) - - - - PulseAudio - - - - Dummy (no MIDI support) - - - - ALSA Raw-MIDI (Advanced Linux Sound Architecture) - - - - PortAudio - - - - Dummy (no sound output) - - - - ALSA (Advanced Linux Sound Architecture) - - - - OSS (Open Sound System) - - - WinMM MIDI + A Dual filter plugin - ALSA-Sequencer (Advanced Linux Sound Architecture) + Filter for exporting MIDI-files from LMMS diff --git a/data/locale/es.ts b/data/locale/es.ts index 9be4e004ff0..45def07935e 100644 --- a/data/locale/es.ts +++ b/data/locale/es.ts @@ -1,4229 +1,4607 @@ - - - + AboutDialog About LMMS - + Acerca de LMMS Version %1 (%2/%3, Qt %4, %5) - + Versión %1 (%2/%3, Qt %4, %5) About - + Acerca de LMMS - easy music production for everyone - + LMMS - producción musical fácil al alcance de todos Authors - + Autores Translation - + Traducció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! - + Traducido al Español por Mariano Macri (Contacto: gnu.mariano.macri@gmail.com) + +Si te interesa traducir LMMS a otros idiomas o mejorar las traducciones existentes, ¡tu ayuda será bienvenida! +¡Simplemente ponte en contacto con el encargado del proyecto! License - + Licencia - Copyright (c) 2004-2014, LMMS developers - + 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> - - - - 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> Involved - + Han contribuído Contributors ordered by number of commits: - + Colaboradores (ordenados por el número de contribuciones): + + + Copyright © %1 + Copyright © %1 AmplifierControlDialog VOL - + VOL Volume: - + Volumen: PAN - + PAN Panning: - + Paneo: LEFT - + IZQ Left gain: - + Ganancia izquierda: RIGHT - + DER Right gain: - + Ganancia derecha: AmplifierControls Volume - + Volumen Panning - + Paneo Left gain - + Ganacia izquierda Right gain - + Ganancia derecha - AudioAlsa::setupWidget + AudioAlsaSetupWidget DEVICE - + DISPOSITIVO CHANNELS - + CANALES AudioFileProcessorView Open other sample - + Abrir otra muestra 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. - + Haz click aquí si quieres abrir otro archivo de audio. Aparecerá un diálogo donde podrás seleccionar el archivo que desees. Se mantendrán las configuraciones que hayas elegido previamente tales como el modo de repetición (bucle), marcas de inicio y final, amplificación, etc. Por lo tanto, tal vez no sonará igual que la muestra original. Reverse sample - + Reproducir la muestra en reversa 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. + Si activas este botón, la muestra se reproducirá en reversa. Esto es útil para lograr efectos interesantes, por ejemplo el sonido de un platillo en reversa. Amplify: - Amplificar: + 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 esta perilla puedes establecer la proporción de amplificación. Con un valor de 100% tu muestra no ha cambiado. Valores superiores al 100% amplificarán tu muestra y valores menores tendrán el efecto contrario (¡el archivo original de tu muestra no se modificará!) Startpoint: - Punto inicial: + Inicio: Endpoint: - Punto final: + Fin: Continue sample playback across notes - + Reproducción continua a través de las notas 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) - + Activando esta opción la muestra se ejecutará a lo largo de las distintas notas. Si cambias la altura o la nota termina antes que la muestra, la nota siguente reproducirá la muestra desde el lugar en que la nota anterior terminó. Para reiniciar la reproducción desde el principio de la muestra, inserta una nota en el extremo grave del teclado (< 20 Hz) Disable loop - + Desactivar bucle This button disables looping. The sample plays only once from start to end. - + Este botón desactiva la reproducción en bucle. La muestra es reproducida una sola vez del comienzo hasta el final. Enable loop - + Activar bucle This button enables forwards-looping. The sample loops between the end point and the loop point. - + Este botón activa el bucle hacia adelante. La muestra se repite entre el punto final y el inicio del bucle (no el de la muestra). This button enables ping-pong-looping. The sample loops backwards and forwards between the end point and the loop point. - + Este botón activa el bucle en ping-pong. La muestra se reproduce en bucle hacia atrás y hacia adelante entre el punto final y el inicio del bucle. With this knob you can set the point where AudioFileProcessor should begin playing your sample. - + Con esta perilla puedes definir el punto a partir del cual el AudioFileProcessor debe comenzar a reproducir tu muestra. With this knob you can set the point where AudioFileProcessor should stop playing your sample. - + Con esta perilla puedes definir el punto hasta donde el AudioFileProcessor debe reproducir tu muestra. Loopback point: - + Inicio del bucle: With this knob you can set the point where the loop starts. - + Con esta perilla puedes elegir el punto en el que comienza el bucle. AudioFileProcessorWaveView Sample length: - + Longitud de la muestra: AudioJack JACK client restarted - + Se ha reiniciado el 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 fué rechazado por JACK por alguna razón. Por lo tanto, el motor de JACK de LMMS ha sido reiniciado. Tendrás que realizar las conexiones manuales nuevamente. JACK server down - + Ha fallado el servidor 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. - + El servidor de JACK parece haberse detenido y no hemos podido lanzar una nueva instancia. Por lo tanto LMMS no puede continuar. Debes guardar tu proyecto y reiniciar JACK y LMMS. CLIENT-NAME - + NOMBRE-DEL-CLIENTE CHANNELS - + CANALES AudioOss::setupWidget DEVICE - + DISPOSITIVO CHANNELS - + CANALES AudioPortAudio::setupWidget BACKEND - + MOTOR DEVICE - + DISPOSITIVO AudioPulseAudio::setupWidget DEVICE - + DISPOSITIVO CHANNELS - + CANALES AudioSdl::setupWidget DEVICE - + DISPOSITIVO + + + + AudioSndio::setupWidget + + DEVICE + DISPOSITIVO + + + CHANNELS + CANALES + + + + AudioSoundIo::setupWidget + + BACKEND + MOTOR + + + DEVICE + DISPOSITIVO AutomatableModel &Reset (%1%2) - &Restaurar (%1%2) + &Restaurar (%1%2) &Copy value (%1%2) - &Copiar valor (%1%2) + &Copiar valor (%1%2) &Paste value (%1%2) - &Pegar valor (%1%2) + &Pegar valor (%1%2) Edit song-global automation - + Editar la automatización global de la canción Connected to %1 - + Conectado a %1 Connected to controller - + Conectado al controlador Edit connection... - + Editar conexión... Remove connection - + Quitar conexión Connect to controller... - + Conectar al controlador... Remove song-global automation - + Borrar la automatización global de la canción Remove all linked controls - + Quitar todos los controles enlazados AutomationEditor Please open an automation pattern with the context menu of a control! - + ¡Por favor abre un patrón de automatización con el menú contextual de un control! Values copied - + Valores copiados All selected values were copied to the clipboard. - + Los valores seleccionados se han copiado al portapapeles. AutomationEditorWindow Play/pause current pattern (Space) - Reproducir/Pausar el patrón actual (Espaciador) + Reproducir/Pausar el patrón actual (Espacio) 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. - + Haz click aquí para reproducir el patrón actual. Te será útil para editarlo. El patrón se reproducirá automáticamente en bucle al llegar al final. Stop playing of current pattern (Space) - Detener la reproducción del patrón actual (Espaciador) + Detener la reproducción del patrón actual (Espacio) Click here if you want to stop playing of the current pattern. - + Haz click aquí si deseas detener la reproducción del patrón actual. Draw mode (Shift+D) - + Modo de dibujo (Shift+D) Erase mode (Shift+E) - + Modo de borrado (Shift+E) Flip vertically - + Voltear verticalmente Flip horizontally - + Voltear horizontalmente Click here and the pattern will be inverted.The points are flipped in the y direction. - + Haz click aquí para invertir el patrón. Los puntos se voltearán el el eje y. Click here and the pattern will be reversed. The points are flipped in the x direction. - + Haz click aquí para retrogradar el patrón. Los puntos se volterán en el eje x. 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. - + Haz click aquí para activar el modo de dibujo. En este modo puedes añadir y mover valores individuales. Este es el modo por defecto y el que se usa la mayoría de las veces. También puedes activar este modo desde el teclado presionando '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. - + Haz click aquí para activar el modo de borrado. En este modo puedes borrar valores individuales. Puedes activar este modo desde el teclado presionando 'Shift+E'. Discrete progression - + Interpolación escalonada Linear progression - + Interpolación lineal Cubic Hermite progression - + Interpolación de Hermite (suave) Tension value for spline - + Valor de tensión para 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 valor de alta tensión hará una curva más suave pero exederá ciertos valores. Un valor de baja tensión provocará que la pendiente de la curva se estabilice en cada punto de control. 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. - + Haz click aquí para seleccionar la interpolación escalonada para este patrón de automatización. El valor afectado permanecerá constante entre los puntos de control y pasará inmediatamente al nuevo valor al alcanczar cada nuevo punto de control. 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. - + Haz click aquí para seleccionar interpolación lineal para este patrón de automatización.El valor afectado cambiará de manera constante entre los puntos de control para alcanzar el valor correcto en cada punto sin cambios súbitos entre ellos. 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. - + Haz click aquí para seleccionar la interpolación de Hermite para este patrón. El valor afectado cambiará formando una curva uniforme y suavizará los extremos altos y bajos. Cut selected values (%1+X) - + Cortar los valores seleccionados (%1+X) Copy selected values (%1+C) - + Copiar los valores seleccionados (%1+C) Paste values from clipboard (%1+V) - + Pegar desde el portapapeles (%1+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. - + Haz click aquí y los valores seleccionados se moverán al portapapeles. Puedes pegarlos en cualquier lugar de cualquier patrón haciendo click en el botón "pegar". 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. - + Haz click aquí y los valores seleccionados se copiarán al portapapeles. Puedes pegarlos en cualquier lugar de cualquier patrón haciendo click en el botón "pegar". Click here and the values from the clipboard will be pasted at the first visible measure. - + Haz click aquí para pegar el contenido del portapapeles en el primer compás visible. Tension: - + Tensión: Automation Editor - no pattern - + Editor de Automatización - no hay patrón Automation Editor - %1 - + Editor de Automatización - %1 + + + Edit actions + Acciones de edición + + + Interpolation controls + Controles de interpolación + + + Timeline controls + Controles de la línea de Tiempo + + + Zoom controls + Controles de Acercamiento + + + Quantization controls + Controles de cuantización + + + Model is already connected to this pattern. + El modelo ya está conectado a este patrón. AutomationPattern Drag a control while pressing <%1> - - - - Model is already connected to this pattern. - + Arrastre un control mientras presiona <%1> AutomationPatternView double-click to open this pattern in automation editor - + Haz doble click para abrir este patrón en el editor de Automatización Open in Automation editor - + Abrir en el editor de Automatización Clear - + Limpiar Reset name - + Restaurar nombre Change name - Cambiar nombre + Cambiar nombre %1 Connections - + %1 Conexiones Disconnect "%1" - + Desconectar "%1" Set/clear record - + Activar/Desactivar grabación Flip Vertically (Visible) - + Voltear verticalmente (Visible) Flip Horizontally (Visible) - + Voltear horizontalmente (Visible) + + + Model is already connected to this pattern. + El modelo ya está conectado a este patrón. AutomationTrack Automation track - + Pista de Automatización BBEditor Beat+Bassline Editor - Editor Ritmo+Línea base + Editor de Ritmo+Bajo Play/pause current beat/bassline (Space) - Reproducir/pausar el ritmo base actual (espacio) + Reproducir/pausar el ritmo/bajo actual (espacio) Stop playback of current beat/bassline (Space) - + Detener la reproducción del ritmo/bajo actual (Espacio) Click here to play the current beat/bassline. The beat/bassline is automatically looped when its end is reached. - + Haz click aquí para reproducir el Ritmo/Bajo actual. El Ritmo/bajo se reproducirá automáticamente desde el principio cada vez que llegue al final. Click here to stop playing of current beat/bassline. - + Haz click aquí para detener el Ritmo/Bajo actual. Add beat/bassline - Agregar beat/bassline + Agregar Ritmo/bajo Add automation-track - + Agregar pista de Automatización Remove steps - + Quitar pasos Add steps - + Agregar pasos + + + Beat selector + Selector de ritmo + + + Track and step actions + Acciones de pista y pasos + + + Clone Steps + Clonar Pasos BBTCOView Open in Beat+Bassline-Editor - Abrir en Editor de Ritmo Base + Abrir en Editor de Ritmo+Bajo Reset name - + Restaurar nombre Change name - Cambiar nombre + Cambiar nombre Change color - Cambiar color + Cambiar color Reset color to default - + Restaurar el color por defecto BBTrack Beat/Bassline %1 - Ritmo base %1 + Ritmo/Bajo %1 Clone of %1 - + Clon de %1 BassBoosterControlDialog FREQ - + FREC Frequency: - + Frecuencia: GAIN - + GAN Gain: - + Ganancia: RATIO - + RAZÓN Ratio: - + Razón: BassBoosterControls Frequency - + Frecuencia Gain - + Ganancia Ratio - + Razón BitcrushControlDialog IN - + ENTRADA OUT - + SALIDA GAIN - + GAN Input Gain: - + Ganancia de Entrada: NOIS - + RUIDO Input Noise: - + Ruido de entrada: Output Gain: - + Ganancia de Salida: CLIP - + RECORTE Output Clip: - + Recorte de salida: Rate - + Tasa (rate) Rate Enabled - + Tasa Habilitada Enable samplerate-crushing - + Habilitar reduccion de frecuencia de muestreo Depth - + Profundidad Depth Enabled - + Profundidad Habilitada Enable bitdepth-crushing - + Habilitar reducción de profundidad bits Sample rate: - + Frecuencia de Muestreo: STD - + DE Stereo difference: - + Diferencia estéreo: Levels - + Niveles Levels: - + Niveles: CaptionMenu &Help - &Ayuda + &Ayuda Help (not available) - + Ayuda (no disponible) CarlaInstrumentView Show GUI - + Mostrar IGU Click here to show or hide the graphical user interface (GUI) of Carla. - + Haz click aquí para mostrar u ocultar la interfaz gráfica de usuario (IGU) de Carla. Controller Controller %1 - + Controlador %1 ControllerConnectionDialog Connection Settings - + Configuración de conexiones MIDI CONTROLLER - + CONTROLADOR MIDI Input channel - + Canal de entrada CHANNEL - + CANAL Input controller - + Controlador de entrada CONTROLLER - + CONTROLADOR Auto Detect - + Auto-detectar MIDI-devices to receive MIDI-events from - + Dispositivos MIDI desde los cuales recibir eventos MIDI USER CONTROLLER - + CONTROLADOR DE USUARIO MAPPING FUNCTION - + FUNCIÓN DE MAPEO OK - + Aceptar Cancel - Cancelar + Cancelar LMMS - + LMMS Cycle Detected. - + Ciclo detectado. ControllerRackView Controller Rack - + Bandeja de Controladores Add - + Añadir Confirm Delete - + Confirmar borrado - Confirm delete? There are existing connection(s) associted with this controller. There is no way to undo. - + Confirm delete? There are existing connection(s) associated with this controller. There is no way to undo. + ¿Confirmar borrar? Hay conexiones asociadas a este controlador. Esta acción no se puede deshacer. ControllerView Controls - + Controles Controllers are able to automate the value of a knob, slider, and other controls. - + Los controladores pueden automatizar el valor de una perilla, un deslizador, y otros controles. Rename controller - + Renombrar el controlador Enter the new name for this controller - + Escribe un nombre nuevo para este controlador - &Remove this plugin - + &Remove this controller + Quita&R este controlador + + + Re&name this controller + Re&nombrar este controlador CrossoverEQControlDialog Band 1/2 Crossover: - + Filtro de cruce Banda 1/2: Band 2/3 Crossover: - + Filtro de cruce Banda 2/3: Band 3/4 Crossover: - + Filtro de cruce Banda 3/4: Band 1 Gain: - + Banda 1 Ganancia: Band 2 Gain: - + Banda 2 Ganancia: Band 3 Gain: - + Banda 3 Ganancia: Band 4 Gain: - + Banda 4 Ganancia: Band 1 Mute - + Banda 1 Silencio Mute Band 1 - + Silenciar Banda 1 Band 2 Mute - + Banda 2 Silencio Mute Band 2 - + Silenciar Banda 2 Band 3 Mute - + Banda 3 Silencio Mute Band 3 - + Silenciar Banda 3 Band 4 Mute - + Banda 4 Silencio Mute Band 4 - + Silenciar Banda 4 DelayControls Delay Samples - + Retrasar muestras Feedback - + Realimentacion Lfo Frequency - + Frecuencia LFO Lfo Amount - + Cantidad LFO + + + Output gain + Ganancia de salida DelayControlsDialog Delay - + Retraso + + + Lfo Amt + Lfo cant Delay Time - + Tiempo de retraso Regen - + Intensidad Feedback Amount - + Cantidad de realimentacion Rate - + Tasa (rate) Lfo - + Lfo - Lfo Amt - + Out Gain + Ganancia de salida - - - DetuningHelper - Note detuning - + Gain + Ganancia DualFilterControlDialog Filter 1 enabled - + Filtro 1 activado Filter 2 enabled - + Filtro 2 activado Click to enable/disable Filter 1 - + Haz click para activar o desactivar el Filtro 1 Click to enable/disable Filter 2 - + Haz click para activar o desactivar el Filtro 2 + + + FREQ + FREC + + + Cutoff frequency + Frecuencia de corte + + + RESO + RESO + + + Resonance + Resonancia + + + GAIN + GAN + + + Gain + Ganancia + + + MIX + MEZCLA + + + Mix + Mezcla DualFilterControls Filter 1 enabled - + Filtro 1 activado Filter 1 type - + Filtro 1 tipo Cutoff 1 frequency - + Frecuencia de corte 1 Q/Resonance 1 - + Q/Resonancia 1 Gain 1 - + Ganancia 1 Mix - + Mezcla Filter 2 enabled - + Filtro 2 activado Filter 2 type - + Filtro 2 tipo Cutoff 2 frequency - + Frecuencia de corte 2 Q/Resonance 2 - + Q/Resonancia 2 Gain 2 - + Ganancia 2 LowPass - PasoBajo + PasoBajo HiPass - PasoAlto + PasoAlto BandPass csg - PasoBanda csg + PasoBanda csg BandPass czpg - PasoBanda czpg + PasoBanda czpg Notch - Notch + Notch Allpass - PasaTodo + PasaTodo Moog - Moog + Moog 2x LowPass - 2x PasoBajo + 2x PasoBajo RC LowPass 12dB - + RC PasoBajo 12 dB RC BandPass 12dB - + RC PasoBanda 12 dB RC HighPass 12dB - + RC PasoAlto 12 dB RC LowPass 24dB - + RC PasoBajo 24dB RC BandPass 24dB - + RC PasoBanda 24dB RC HighPass 24dB - + RC PasoAlto 24dB Vocal Formant Filter - + Filtro de Formante Vocal 2x Moog - + 2x Moog SV LowPass - + SV PasoBajo SV BandPass - + SV PasoBanda SV HighPass - + SV PasoAlto SV Notch - + SV Notch Fast Formant - + Formante Rápido Tripole - - - - - DummyEffect - - NOT FOUND - + Tripolar Editor Play (Space) - + Reproducir (Espacio) Stop (Space) - + Detener (Espacio) Record - + Grabar Record while playing - + Grabar reproduciendo + + + Transport controls + Controles de Transporte Effect Effect enabled - + Efecto activado Wet/Dry mix - + Mezcla Wet/Dry Gate - + Puerta Decay - + Caída EffectChain Effects enabled - + Efectos activados EffectRackView EFFECTS CHAIN - + CADENA DE EFECTOS Add effect - + Añadir efecto EffectSelectDialog Add effect - + Añadir efecto + + + Name + Nombre + + + Type + Tipo + + + Description + Descripción - Plugin description - + Author + Autor EffectView Toggles the effect on or off. - + Conmuta el efecto entre Encendido y Apagado. On/Off - + Encendido/Apagado W/D - + W/D Wet Level: - + NIvel de efecto: The Wet/Dry knob sets the ratio between the input signal and the effect signal that forms the output. - + El selector Wet/Dry determina la razón entre la señal de origen y la señal procesada por el efecto, que conforman la señal de salida. DECAY - + CAÍDA Time: - + Tiempo: 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 perilla de Caída controla cuantos búferes de silencio deben pasar antes de que el complemento deje de procesar. Valores pequeños reducen la carga del procesador (CPU) pero corres el riesgo de recorte (clipping) en los efectos de Retraso (delay) y Reverberancia. GATE - + PUERTA Gate: - + Puerta: The Gate knob controls the signal level that is considered to be 'silence' while deciding when to stop processing signals. - + La perilla "Puerta" controla el nivel de la señal que deberá ser considerado como 'silencio' al decidir cuando dejar de procesar señales. 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 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 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 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. +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. - + Los complementos de efectos funcionan como una serie de efectos encadenados a través de los cuales la señal será procesada desde arriba hacia abajo. + +El selector "Encendito/Apagado" te permite desactivar un complemento dado en cualquier punto del tiempo. + +La perilla "Wet/Dry" te permite controlar el balance entre la señal de entrada (sin efecto) y la señal con efecto, formando así la señal de salida. La señal de entrada de una etapa es la señal de salida de la etapa anterior, por lo que la señal "dry" (sin efecto) de la última etapa contiene todos los efectos previos. + +La perilla de Caída controla por cuanto tiempo la señal continuará siendo procesada luego de soltar las notas (Disipación). El efecto dejará de procesar las señales cuando el volumen esté por debajo del umbral dado para un tiempo dado. Esta perilla configura el "tiempo dado". Valores mas altos requieren más CPU, por lo que se recomienda usar valores bajos para la mayoría de los efectos. Se deben usar valores mas altos para efectos que producen períodos largos de silencio, como los Delays. + +La perilla "puerta" controla el "umbral dado" para el auto-apagado del efecto. El reloj del "tiempo-dado" se iniciará tan pronto la señal procesada caiga debajo del umbral especificado por esta perilla. + +El botón "Controles" abre un diálogo para editar los parámetros de los efectos. + +Haciendo click derecho accederás a un menú contextual en el que podrás cambiar el orden en el que se procesan los efectos y también borrar completamente un efecto. Move &up - + Mover arriba (&U) Move &down - + Mover abajo (&D) &Remove this plugin - + Quita&r este complemento EnvelopeAndLfoParameters Predelay - + Pre-retraso Attack - + Ataque Hold - + Mantener Decay - + Caída Sustain - + Sostenido Release - + Disipación Modulation - + Modulación LFO Predelay - + Pre-retraso del LFO LFO Attack - + Ataque del LFO LFO speed - + Velocidad del LFO LFO Modulation - + Modulación del LFO LFO Wave Shape - + Forma de onda del LFO Freq x 100 - + Frec x 100 Modulate Env-Amount - + Modular Cant-Env EnvelopeAndLfoView DEL - + RETR Predelay: - Pre retraso: + 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. + Usa 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 - + ATA Attack: - Ataque: + 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. + Usa 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. Escoje un valor pequeño para instrumentos como pianos y alto para cuerdas. HOLD - HOLD + MANT Hold: - Hold: + Mantener: 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. + Usa 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 - + CAI Decay: - Decay: + Caída: 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. + Usa 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 al de sostenido. Escoje un valor pequeño para instrumentos como pianos. SUST - + SOST Sustain: - Sustain: + Sostenido: 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. + Usa este control para configurar el nivel de sostenido de la envolvente actual. Mientras mayor sea este valor, más altor será el nivel al que se mantendrá la envolvente antes de disiparse. REL - + DIS Release: - Release: + Disipación: 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. + Usa este control para configurar el intervalo de Disipación de la envolvente actual. A mayor valor, la envolvente necesitará más tiempo para pasar del nivel de sostenido a cero. Escoje un valor grande para instrumentos suaves como cuerdas. AMT - + CANT Modulation amount: - Cantidad de modulación: + 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. + Usa esta perilla para configurar la cantidad de modulación de la envolvente actual. Mientras más alto sea este valor, mayor será la infuencia de la envolvente sobre, por ej., el volumen o la frecuencia de corte. LFO predelay: - + pre-retraso del 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. - Use este control para configurar el pre-retraso del LFO actual. A mayor valor, mayor tiempo hasta que el LFO comience a oscilar. + Usa este control para configurar el pre-retraso del LFO actual. A mayor valor, mayor el tiempo hasta que el LFO comience a oscilar. LFO- attack: - + ataque del 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 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. + Usa 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 - + VEL LFO speed: - + velocidad del 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. - 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. + Usa esta perilla para configurar la velocidad de este LFO. A mayor valor, mayor la velocidad de oscilación del LFO y mayor la velocidad del 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. + Usa esta perilla para configurar la cantidad de modulación de este LFO. A mayores valores, mayor será la infuencia que ejercerá este oscilador (LFO) sobre la propiedad seleccionada (por ej.: el volumen o la frecuencia de corte). Click here for a sine-wave. - + Haz click aquí para seleccionar una onda-sinusoidal. Click here for a triangle-wave. - + Haz click aquí para seleccionar una onda triangular. Click here for a saw-wave for current. - + Haz click aquí para seleccionar una onda de sierra. Click here for a square-wave. - + Haz click aquí para seleccionar una onda cuadrada. Click here for a user-defined wave. Afterwards, drag an according sample-file onto the LFO graph. - + Haz click aquí para elegir una onda definida por el usuario. Luego arrastra una muestra adecuada sobre el gráfico LFO. FREQ x 100 - + FREC x 100 Click here if the frequency of this LFO should be multiplied by 100. - + Haz click aquí para multiplicar por 100 la frecuencia de este oscilador LFO. multiply LFO-frequency by 100 - + multiplicar frecuencia del LFO por 100 MODULATE ENV-AMOUNT - + MODULAR CANT-DE-ENV Click here to make the envelope-amount controlled by this LFO. - Click aquí para crear la envolvente controlada por este LFO + Haz click aquí para que la cantidad de envolvente sea controlada por este LFO. control envelope-amount by this LFO - controla la cantidad de envolventepara este LFO + controla la cantidad de envolvente a través de este LFO ms/LFO: - ms/LFO: + ms/LFO: Hint - + Pista Drag a sample from somewhere and drop it in this window. - + Arrastra una muestra desde cualquier lugar y suéltala en esta ventana. Click here for random wave. - + Haz click aquí para seleccionar una onda aleatoria. EqControls Input gain - + Ganancia de entrada Output gain - + Ganancia de salida Low shelf gain - + Ganancia de la meseta de bajos Peak 1 gain - + Ganancia del Pico 1 Peak 2 gain - + Ganancia del Pico 2 Peak 3 gain - + Ganancia del Pico 3 Peak 4 gain - + Ganancia del Pico 4 High Shelf gain - + Ganancia de la meseta de agudos HP res - + PasoAlto res Low Shelf res - + Meseta de Bajos res Peak 1 BW - + Ancho de Banda del Pico 1 Peak 2 BW - + Ancho de Banda del Pico 2 Peak 3 BW - + Ancho de Banda del Pico 3 Peak 4 BW - + Ancho de Banda del Pico 4 High Shelf res - + Meseta de Agudos res LP res - + PasoBajo res HP freq - + PasoAlto frec Low Shelf freq - + Meseta de Bajos frec Peak 1 freq - + Pico 1 frec Peak 2 freq - + Pico 2 frec Peak 3 freq - + Pico 3 frec Peak 4 freq - + Pico 4 frec High shelf freq - + Meseta de Agudos frec LP freq - + PasoBajo frec HP active - + PasoAlto activo Low shelf active - + Meseta de Bajos activa Peak 1 active - + Pico 1 activo Peak 2 active - + Pico 2 activo Peak 3 active - + Pico 3 activo Peak 4 active - + Pico 4 activo High shelf active - + Meseta de Agudos activa LP active - + PasoBajo activo LP 12 - + PB 12 LP 24 - + PB 24 LP 48 - + PB 48 HP 12 - + PA 12 HP 24 - + PA 24 HP 48 - + PA 48 low pass type - + tipo paso bajo high pass type - + tipo paso alto + + + Analyse IN + Analizar ENTRADA + + + Analyse OUT + Analizar SALIDA EqControlsDialog HP - + PA Low Shelf - + Meseta de Bajos Peak 1 - + Pico 1 Peak 2 - + Pico 2 Peak 3 - + Pico 3 Peak 4 - + Pico 4 High Shelf - + Meseta de Agudos LP - + PB In Gain - + Ganancia de entrada Gain - + Ganancia Out Gain - + Ganancia de salida Bandwidth: - + AnchoDeBanda: Resonance : - + Resonancia : Frequency: - + Frecuencia: + + + lp grp + grupo PB - 12dB - + hp grp + grupo PA - 24dB - + Octave + Octava - 48dB - + Frequency + Frecuencia - lp grp - + Resonance + Resonancia - hp grp - + Bandwidth + AnchoDeBanda - EqParameterWidget + EqHandle + + Reso: + Reso: + + + BW: + AB: + - Hz - + Freq: + Frec: ExportProjectDialog Export project - + Exportar proyecto Output - + Salida File format: - + Tipo de archivo: Samplerate: - + Frecuencia de muestreo: 44100 Hz - + 44100 Hz 48000 Hz - + 48000 Hz 88200 Hz - + 88200 Hz 96000 Hz - + 96000 Hz 192000 Hz - + 192000 Hz Bitrate: - + Tasa 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: - + Profundidad: 16 Bit Integer - + 16 Bits Entero 32 Bit Float - + 32 Bit Decimal Please note that not all of the parameters above apply for all file formats. - + Por favor nota que no todos los parámetros especificados anteriormente se aplican a todos los tipos de archivos. Quality settings - + Configuración de calidad Interpolation: - + Interpolación: Zero Order Hold - + Zero Order Hold Sinc Fastest - + Sinc-Rapidísimo Sinc Medium (recommended) - + Sinc-Medio (recomendado) Sinc Best (very slow!) - + Sinc Superior (¡muy lento!) Oversampling (use with care!): - + Sobremuestreo (¡usar con cuidado!): 1x (None) - + 1x (Ninguno) 2x - + 2x 4x - + 4x 8x - + 8x Start - + Comenzar Cancel - Cancelar + Cancelar Export as loop (remove end silence) - + Exportar como bucle (quitar silencio al final) Export between loop markers - + Exportar el area contenida entre los marcadores de bucle Could not open file - No se puede abrir el archivo + 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! - + El archivo %1 no puede abrirse para escritura. +¡Asegúrate de tener permisos de escritura tanto del archivo como del directorio que lo contiene e inténtalo nuevamente! Export project to %1 - Exportar proyecto a %1 + Exportar proyecto a %1 Error - + Error Error while determining file-encoder device. Please try to choose a different output format. - + Error al determinar el dispositivo codificador. Intenta elegir un formato de salida diferente. Rendering: %1% - + Renderizando: %1% Fader Please enter a new value between %1 and %2: - + Por favor ingresa un nuevo valor entre %1 y %2: FileBrowser Browser - + Explorador FileBrowserTreeWidget Send to active instrument-track - - - - Open in new instrument-track/Song-Editor - + Enviar a la pista de instrumento activa Open in new instrument-track/B+B Editor - + Abrir en la nueva pista de instrumento/Editor de R+B Loading sample - + Cargando muestra Please wait, loading sample for preview... - + Espera por favor mientras se carga la muestra para previsualizar... --- Factory files --- - + --- Archivos de Fábrica --- + + + Open in new instrument-track/Song Editor + Abrir en una nueva pista de instrumento/Editor de canción + + + Error + Error + + + does not appear to be a valid + no parece ser válido + + + file + archivo FlangerControls Delay Samples - + Retrasar muestras Lfo Frequency - + Frecuencia LFO Seconds - + Segundos Regen - + Intensidad Noise - + Ruido Invert - + Invertir FlangerControlsDialog Delay - + Retraso (delay) Delay Time: - + Tiempo de retraso : Lfo Hz - + Lfo Hz Lfo: - + Lfo: Amt - + Cant Amt: - + Cant: Regen - + Intensidad Feedback Amount: - + Cantidad de realimentacion (feedback): Noise - + Ruido White Noise Amount: - + Cantidad de Ruido Blanco: FxLine Channel send amount - + Cantidad de envío del canal 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. + 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. - + El canal FX recive la señal de una o más pistas de instrumento. +A su vez, puede ser enviado a través de múltiples canales FX diferentes. LMMS automáticamente se ocupa de evitar bucles infinitos por ti y no te permitirá realizar una conexión que genere un bucle infinito. + +Para enviar un canal hacia otro canal, escoje el canal FX deseado y haz click en el botón de "envío" del canal al cual deseas enviar. La perilla bajo el botón de envío controla el nivel de la señal que es enviada al canal. + +Puedes quitar y mover los canales FX a través del menú contextual. Accede a este menú haciendo click derecho en el canal FX. Move &left - + Mover a la &Izquierda Move &right - + Mover a la &Derecha Rename &channel - + Renombrar &Canal R&emove channel - + &Borrar canal Remove &unused channels - + Quitar los canales que no esten en &uso FxMixer Master - + Maestro FX %1 - + FX %1 FxMixerView Rename FX channel - + Renombrar el canal FX Enter the new name for this FX channel - + Escribe el nuevo nombre para este canal FX FX-Mixer - + Mezcladora FX FX Fader %1 - + Fader FX %1 Mute - + Silencio Mute this FX channel - + Silenciar este canal FX Solo - + Solo Solo FX channel - + Canal FX Solo FxRoute Amount to send from channel %1 to channel %2 - + Cantidad de envío del canal %1 al canal %2 GigInstrument Bank - + Banco Patch - + Ajuste Gain - + Ganancia GigInstrumentView Open other GIG file - + Abrir otro archivo GIG Click here to open another GIG file - + Haz click aquí para abrir otro archivo GIG Choose the patch - + Elige el lote (patch) Click here to change which patch of the GIG file to use - + Haz click aquí para cambiar el patch en uso del archivo GIG Change which instrument of the GIG file is being played - + Cambiar el instrumento en uso del archivo GIG Which GIG file is currently being used - + Que archivo GIG se esta usando en este momento Which patch of the GIG file is currently being used - + Que patch del archivo GIG se esta usando en este momento Gain - + Ganancia Factor to multiply samples by - + Factor por el cual multiplicar las muestras Open GIG file - + Abrir archivo GIG GIG Files (*.gig) - + Archivos GIG (*.gig) + + + + GuiApplication + + Working directory + Directorio de trabajo + + + The LMMS working directory %1 does not exist. Create it now? You can change the directory later via Edit -> Settings. + El directorio de trabajo LMMS %1 no existe. ¿Deseas crearlo ahora? Puedes cambiar este directorio luego via Edición -> Configuración. + + + Preparing UI + Preparando IU + + + Preparing song editor + Preparando editor de canción + + + Preparing mixer + Preparando mezclador + + + Preparing controller rack + Preparando bandeja de controladores + + + Preparing project notes + Preparando notas del proyecto + + + Preparing beat/bassline editor + Preparando editor de ritmo/bajo + + + Preparing piano roll + Preparando piano roll + + + Preparing automation editor + Preparando editor de automatización InstrumentFunctionArpeggio Arpeggio - + Arpegio Arpeggio type - + tipo de arpegio Arpeggio range - Rango de Arpeggio + Extensión del arpegio Arpeggio time - Tiempo de Arpeggio + Duración del arpegio Arpeggio gate - Puerto de Arpeggio + Puerta del arpegio Arpeggio direction - + Dirección del arpegio Arpeggio mode - + Modo del arpegio Up - + Arriba Down - + Abajo Up and down - + Arriba y abajo Random - + Aleatorio Free - + Libre Sort - + Ordenado Sync - + Sincronizado Down and up - + Abajo y arriba InstrumentFunctionArpeggioView ARPEGGIO - + ARPEGIO 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 arpegio es una forma de tocar las notas de un acorde, de una a la vez en un orden ascendente o descendente (o ambos combinados), en lugar de tocar todas las notas del acorde al mismo tiempo. Los arpegios más usados se corresponden a las tríadas mayores y menores, pero hay muchos acordes más que puedes elegir.NOTA del traductor: el nombre arpegio viene de "arpa", instrumento en el cual los acordes se suelen tocar de esta manera. RANGE - + EXTENSIÓN Arpeggio range: - Rango de Arpeggio: + Extensión del arpegio: octave(s) - octava(s) + octava(s) Use this knob for setting the arpeggio range in octaves. The selected arpeggio will be played within specified number of octaves. - + Usa esta perilla para configurar la extensión del arpegio en octavas. El arpegio seleccionado se ejecutará dentro de las octavas especificadas. TIME - + DURACIÓN Arpeggio time: - Tiempo de Arpeggio: + Duración de las notas (ms): ms - 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. + Usa esta perilla para configurar la duración de cada nota del arpegio en milisegundos (ms). GATE - + PUERTA Arpeggio gate: - Puerto de Arpeggio: + Puerta del arpegio: % - % + % 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. - + Usa esta perilla para configurar la puerta del arpegio, es decir, la duración relativa de cada nota. Con un valor de 100 por ciento cada nota dura el tiempo especificado en DURACIÓN. Con valores menores, cada nota terminará antes de pasar a la siguiente (staccato) y con valores mayores cada nota seguirá sonando superponiéndose a la siguiente. Chord: - + Acorde: Direction: - + Dirección: Mode: - + Modo: InstrumentFunctionNoteStacking octave - Octava + octava Major - Mayor + Mayor Majb5 - Mayor5 + Mayor b5 minor - menor + menor minb5 - menor5 + menor b5 sus2 - sus2 + sus 9na sus4 - sus4 + sus 4 aug - aug + aum augsus4 - augsus4 + aum sus 4 tri - tri + disminuído 6 - 6 + Mayor añad 6 6sus4 - 6sus4 + sus 4 añad 6 6add9 - madd9 + Mayor 6/9 m6 - m6 + menor 6 m6add9 - m6add9 + menor 6/9 7 - 7 + Dominante (1 3 5 b7) 7sus4 - 7sus4 + Dominante sus4 (1-4-5-b7) 7#5 - 7#5 + Dominante #5 (1-3-#5-b7) 7b5 - 7b5 + Dominante b5(1-3-b5-b7) 7#9 - 7#9 + Dominante #9 7b9 - 7b9 + Dominante b9 7#5#9 - 7#5#9 + Dominante #5 #9 7#5b9 - 7#5b9 + Dominante #5b9 7b5b9 - 7b5b9 + Dominante b5b9 7add11 - 7add11 + Dominante añad 11 7add13 - 7add13 + Dominante añad13 7#11 - 7#11 + Dominante #11 Maj7 - Maj7 + Mayor 7M Maj7b5 - Maj7b5 + Mayor7M b5 Maj7#5 - Maj7#5 + Mayor7may #5 Maj7#11 - Maj7#11 + Mayor7may #11 Maj7add13 - Maj7add13 + Mayor7may añad13 m7 - m7 + m7(menor 7 men) m7b5 - m7b5 + semidisminuído (1-b3-b5-b7) m7b9 - m7b9 + m7 b9 m7add11 - m7add11 + m7 añad11 m7add13 - m7add13 + m7 añad13 m-Maj7 - m-Maj7 + m 7M (1-b3-5-7) m-Maj7add11 - m-Maj7add11 + m-7M añad11 m-Maj7add13 - m-Maj7add13 + m-7M añad13 9 - 9 + Dom 9 (1-3-5-b7-9) 9sus4 - 9sus4 + Dom 9 sus4 add9 - add9 + mayor añad 9 9#5 - 9#5 + Dom #5 9 9b5 - 9b5 + Dom b5 9 9#11 - 9#11 + Dom 9 #11 9b13 - 9b13 + Dom 9 b13 Maj9 - Maj9 + 9 (1-3-5-7-9) Maj9sus4 - Maj9sus4 + 9sus4 (1-4-5-7-9) Maj9#5 - Maj9#5 + 9na #5 (1-3-#5-7-9) Maj9#11 - Maj9#11 + 9 #11 (1-3-5-7-9-#11) m9 - m9 + m 7/9 madd9 - madd9 + m añad 9 m9b5 - m9b5 + semidisminuído 9 m9-Maj7 - m9-Maj7 + m9-7M 11 - 11 + Dom 11 (1-3-5-b7-9-11) 11b9 - 11b9 + Dom b9/11 Maj11 - Maj11 + 11na (1-3-5-7-9-11) m11 - m11 + m 11 (1-b3-5-b7-9-11) m-Maj11 - m-Maj11 + m 7M 11 13 - 13 + Dom 13 (...b7-9-11-13) 13#9 - 13#9 + Dom #9 13 13b9 - 13b9 + Dom b9 13 13b5b9 - 13b5b9 + Dom b5 b9 13 Maj13 - Maj13 + 13na (...7-9-11-13) m13 - m13 + m13 (...b7-9-11-13) m-Maj13 - m-Maj13 + m 7M 13 (...7-9-11-13) Harmonic minor - Menor armónico + Menor armónica Melodic minor - Menor de la melodía + Menor melódica Whole tone - Tono entero + Hexatonica Diminished - Disminuido + Escala Disminuida Major pentatonic - Mayor pentatónico + Pentatónica mayor Minor pentatonic - Menor pentatónico + Pentatónica menor Jap in sen - + In Sen (japón) Major bebop - Mayor Bebop + Bebop mayor Dominant bebop - Bebop dominante + Bebop dominante Blues - Blues + Pentatónica con BlueNote Arabic - Árabe + Árabe Enigmatic - Enigmatico + Enigmatica Neopolitan - Neopolita + Napolitana Neopolitan minor - Menor Neopolita + Napolitana menor Hungarian minor - Menor Húngaro + Húngara menor Dorian - Dorian + modo Dórico Phrygolydian - Phrygolydian + modo Frigio Lydian - Lidio + modo Lidio Mixolydian - Mixolydian + modo Mixolidio Aeolian - Aeolian + modo Eólico Locrian - Locrian + modo Locrio Chords - + Acordes Chord type - + Tipo de acorde Chord range - Rango de acorde + Extensión del acorde Minor - + Menor Natural (Eólica) Chromatic - + Cromática Half-Whole Diminished - + Simétrica 5 - + 5ta InstrumentFunctionNoteStackingView RANGE - + EXTENSIÓN Chord range: - Rango de acorde: + Extensión del acorde: octave(s) - octava(s) + octava(s) Use this knob for setting the chord range in octaves. The selected chord will be played within specified number of octaves. - + Usa esta perilla para definir la extensión del acorde en octabas. El acorde elegido se ejecutará dentro de la extensión especificada. STACKING - + SUPERPOSICION Chord: - + Acorde: InstrumentMidiIOView ENABLE MIDI INPUT - + HABILITAR ENTRADA MIDI CHANNEL - + CANAL VELOCITY - + VELOCIDAD ENABLE MIDI OUTPUT - + HABILITAR SALIDA MIDI PROGRAM - + PROGRAMA MIDI devices to receive MIDI events from - + Dispositivos MIDI desde los cuales recibir eventos MIDI MIDI devices to send MIDI events to - + Dispositivos MIDI hacia los cuales enviar eventos MIDI NOTE - + NOTA CUSTOM BASE VELOCITY - + VELOCIDAD BÁSICA PERSONALIZADA Specify the velocity normalization base for MIDI-based instruments at 100% note velocity - + Especifica la base de normalizacion de velocidad para los instrumentos basados en MIDI a una velocidad de nota del 100% BASE VELOCITY - + VELOCIDAD BÁSICA InstrumentMiscView MASTER PITCH - + TRANSPORTE Enables the use of Master Pitch - + Habilitar el uso del Transporte InstrumentSoundShaping VOLUME - VOLUMEN + VOLUMEN Volume - + Volumen CUTOFF - + CORTE Cutoff frequency - + Frecuencia de corte RESO - + RESO Resonance - + Resonancia Envelopes/LFOs - + Envolventes/LFOs Filter type - + Tipo de filtro Q/Resonance - Q/Resonancia. + Q/Resonancia LowPass - PasoBajo + PasoBajo HiPass - PasoAlto + PasoAlto BandPass csg - PasoBanda csg + PasoBanda csg BandPass czpg - PasoBanda czpg + PasoBanda czpg Notch - Notch + Notch Allpass - PasaTodo + PasaTodo Moog - Moog + Moog 2x LowPass - 2x PasoBajo + 2x PasoBajo RC LowPass 12dB - + RC pasoBajo 12 dB RC BandPass 12dB - + RC PasoBanda 12 dB RC HighPass 12dB - + RC PasoAlto 12 dB RC LowPass 24dB - + RC PasoBajo 24dB RC BandPass 24dB - + RC PasoBanda 24dB RC HighPass 24dB - + RC PasoAlto 24dB Vocal Formant Filter - + Filtro de Formante Vocal 2x Moog - + 2x Moog SV LowPass - + SV PasoBajo SV BandPass - + SV PasoBanda SV HighPass - + SV PasoAlto SV Notch - + SV Notch Fast Formant - + Formante Rápido Tripole - + Tripolar 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...! - + Esta pestaña contiene envolventes. Las envolventes son muy importantes para modificar un sonido, pues son casi siempre necesarias para la síntesis sustractiva. Por ejemplo, si tienes una envolvente de volumen, puedes defifnir en que momento el sonido alcanza un volumen determinado. Si quieres crear una sección de cuerdas suave, necesitarás un crescendo y un diminuendo muy suave. Puedes lograr esto definiendo una duración larga tanto para el ataque como para la Disipación. De la misma manera puedes manipular otras envolventes como "paneo", frecuencia de corte de un filtro usado, etc. ¡Simplemente juega un poco con esto! Puedes crear sonidos asombrosos partiendo de una onda de sierra con sólo algunas 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í puedes elegir, entre los filtros integrados, aquel que quieras usar para esta pista de instrumento. Los filtros son muy importantes para cambiar las características del sonido. Hz - 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... - + Usa esta perilla para definir la frecuencia de corte del filtro seleccionado. La frecuencia de corte define la frecuencia en la que el filtro corta la señal. Por ejemplo, un filtro de PasoBajo cortará todas las frecuencias por encima de la "frecuencia de corte" (sólo deja pasar aquellas frecuencias que estén por debajo, de ahí "paso bajo"). Un filtro de "paso alto" corta todas las frecuencias que estén por debajo de la frecuencia de corte, etc ... 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. - + Usa esta perilla para defifnir la Q/Resonancia para el filtro elegido, (esto es, el ancho de banda alrededor de la frecuencia de corte elegida). La Q/Resonancia le dice al filtro que tanto debe amplificar aquellas frecuencias cercanas a la Frecuencia de Corte. FREQ - + FREC cutoff frequency: - + frecuencia de corte: Envelopes, LFOs and filters are not supported by the current instrument. - + Envolventes, LFOx y filtros no son soportados por este instrumento. InstrumentTrack unnamed_track - + pista_sin_título Volume - + Volumen Panning - + Paneo Pitch - + Altura FX channel - + Canal FX Default preset - + Configuración predeterminada With this knob you can set the volume of the opened channel. - Con este control puede indicar el volumen del canal actual. + Con este control puedes difinir el volumen del canal abierto. Base note - + Nota base Pitch range - + Registro Master Pitch - + Transporte InstrumentTrackView Volume - + Volumen Volume: - + Volumen: VOL - + VOL Panning - + Paneo Panning: - + Paneo: PAN - + PAN MIDI - + MIDI Input - + Entrada Output - + Salida + + + FX %1: %2 + FX %1: %2 InstrumentTrackWindow GENERAL SETTINGS - + CONFIGURACION GENERAL Instrument volume - + Volumen del instrumento Volume: - + Volumen: VOL - + VOL Panning - + Paneo Panning: - + Paneo: PAN - + PAN Pitch - + Altura Pitch: - + Altura: cents - cents + cents PITCH - + ALTURA FX channel - + Canal FX ENV/LFO - + ENV/LFO FUNC - + FUNC FX - + FX MIDI - + MIDI Save preset - + Guardar preconfiguración XML preset file (*.xpf) - + archivo de preconfiguración XML (*.xpf) PLUGIN - PLUGIN + COMPLEMENTO Pitch range (semitones) - + Extensión (en semitonos) RANGE - + EXTENSIÓN Save current instrument track settings in a preset file - + Guardar la configuración de esta pista de instrumento un un archivo de preconfiguración 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. - + Haz click aquí si quieres guardar la configuración de esta pista de instrumento en un archivo de preconfiguración. Luego podrás cargar esta preconfiguración haciendo doble click en ella en el explorador de preconfiguraciones. MISC - + MISCEL + + + Use these controls to view and edit the next/previous track in the song editor. + Usa estos controles para ver y editar la pista siguiente/anterior en el editor de canción + + + SAVE + GUARDAR Knob Set linear - + Establecer como Lineal Set logarithmic - + Establecer como Logarítmico Please enter a new value between -96.0 dBV and 6.0 dBV: - + Por favor ingresa un nuevo valor entre -96.0 dBV y 6.0 dBV: Please enter a new value between %1 and %2: - + Por favor ingresa un nuevo valor entre %1 y %2: LadspaControl Link channels - + Enlazar canales LadspaControlDialog Link Channels - + Enlazar Canales Channel - + Canal LadspaControlView Link channels - + Enlazar canales Value: - + Valor: Sorry, no help available. - + Lo siento, no hay ayuda disponible. LadspaEffect Unknown LADSPA plugin %1 requested. - + Se requiere un complemento LADSPA desconocido %1. LcdSpinBox Please enter a new value between %1 and %2: - + Por favor ingresa un nuevo valor entre %1 y %2: + + + + LeftRightNav + + Previous + Anterior + + + Next + Siguiente + + + Previous (%1) + Anterior (%1) + + + Next (%1) + Siguiente (%1) LfoController LFO Controller - + Controlador LFO Base value - + Valor base Oscillator speed - + Velocidad del oscilador Oscillator amount - + Cantidad del oscilador Oscillator phase - + Fase del oscilador Oscillator waveform - + Forma de onda del oscilador Frequency Multiplier - + Multiplicador de la frecuencia LfoControllerDialog LFO - + LFO LFO Controller - + Controlador LFO BASE - + BASE Base amount: - + Cantidad base: todo - + La ayuda para este ítem aún se encuentra pendiente SPD - + VEL LFO-speed: - LFO-velocidad: + 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 - + Usa esta perilla para definir la velocidad del LFO. A mayor valor, más rápida la velocidad de oscilación del LFO y más rápido el efecto. Modulation amount: - Cantidad de modulación: + 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. - + Usa esta perilla para definir la cantidad de modulación del LFO. A valores más altos, mayor será la influencia ejercida por el LFO sobre el contro conectado (ej. volumen, frecuencia de corte). PHS - + FASE Phase offset: - + Balance de Fase: degrees - grados + 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. - + Con esta perilla puedes definir el balance de la fase del LFO. Esto significa que puedes mover el punto de la onda en el cual el oscilador comienza a oscilar. Por ejemplo, en una onda sinusoidal con un balace de fase de 180 grados la onda irá primero hacia abajo. De la misma manera con una onda cuadrada. Click here for a sine-wave. - + Haz click aquí para seleccionar una onda-sinusoidal. Click here for a triangle-wave. - + Haz click aquí para seleccionar una onda triangular. Click here for a saw-wave. - + Haz click aquí para elegir una onda de sierra. Click here for a square-wave. - + Haz click aquí para elegir una onda cuadrada. Click here for an exponential wave. - + Haz click aquí para elegir una onda exponencial. Click here for white-noise. - + Haz click aquí para elegir ruido-blanco. Click here for a user-defined shape. Double click to pick a file. - + Haz click aquí para elegir una forma definida por el usuario. +Haz doble click para seleccionar un archivo. Click here for a moog saw-wave. - + Haz click aquí para elegir una onda moog. + + + AMNT + CANT - MainWindow + LmmsCore - Working directory - + Generating wavetables + Generando tablas de onda - The LMMS working directory %1 does not exist. Create it now? You can change the directory later via Edit -> Settings. - + Initializing data structures + Inicializando estructuras de datos + + + Opening audio and midi devices + Abriendo dispositivos de audio y midi + + + Launching mixer threads + Lanzando tareas del mezclador + + + MainWindow Could not save config-file - No se pudo guardar el archivo de configuración + 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. + 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 se pudo guardar el archivo de configuración %1. Puede ser que no tengas permisos para escribir este archivo. Por favor asegúrate de tener los permisos necesarios e inténtalo de nuevo. &New - &Nuevo + &Nuevo &Open... - &Abrir + &Abrir... &Save - &Guardar + &Guardar Save &As... - Guardar &Como... + Guardar &Como... Import... - + Importar... E&xport... - + E&xportar... &Quit - &Salir + &Salir &Edit - + &Editar Settings - + Configuración &Tools - + &Herramientas &Help - &Ayuda + &Ayuda Help - Ayuda + Ayuda What's this? - ¿Qué es esto? + ¿Qué es esto? About - + Acerca de Create new project - Crear nuevo proyecto + Crear un proyecto nuevo Create new project from template - + Crear un proyecto nuevo desde una plantilla Open existing project - Abrir proyecto existente + Abrir un proyecto existente Recently opened projects - + Proyectos recientes Save current project - Guardar el proyecto actual + Guardar el proyecto actual Export current project - Exportar proyecto actual + Exportar el proyecto actual Song Editor - + Editor de Canción 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. - + Presionando este botón, puedes mostrar u ocultar el Editor de Canción. Con la ayuda del Editor de Canción puedes editar la lista de reproducción y especificar cuándo debe ejecutarse cada pista. También puedes insertar y mover muestras (ej. letras grabadas) directamente en la lista de reproducción. Beat+Bassline Editor - + Editor de Ritmo+Bajo 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. - + Presionando este botón puedes mostrar u ocultar el Editor de Ritmo+Bajo. El Editor de Ritmo+Bajo es necesario para crear ritmos, y para abrir, agregar y quitar canales, y para copiar, cortar y pegar patrones de ritmo y bajo, y otras cosas por el estilo. Piano Roll - + 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. - + Haz click aquí para mostrar u ocultar el Piano Roll. Con la ayuda del Piano Roll puedes editar melodías facilmente. Automation Editor - + 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. - + Haz click aquí para mostrar u ocultar el Editor de Automatización. Con la ayuda del Editor de Automatización puedes editar valores dinámicos facilmente. FX Mixer - + Mezcladora 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. - + Haz click aquí para mostrar u ocultar la Mezcladora FX. La Mezcladora FX es una herramienta muy poderosa para administrar los efectos en tu canción. Puedes insertar efectos en los diferentes canales de efectos. Project Notes - + Notas del Proyecto Click here to show or hide the project notes window. In this window you can put down your project notes. - + Haz click aquí para mostrar u ocultar la ventana de notas del proyecto. En esta ventana puedes escribir notas, comentarios y recordatorios de tu proyecto. Controller Rack - + Bandeja de Controladores Untitled - + Sin Título LMMS %1 - LMMS %1 + LMMS %1 Project not saved - Proyecto no guardado + 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? + El proyecto actual ha sido modificado desde la ultima vez que se guardó. ¿Quieres guardarlo ahora? Help not available - + Ayuda no disponible - Currently there's no help available in LMMS. + Currently there's no help available in LMMS. Please visit http://lmms.sf.net/wiki for documentation on LMMS. - + Actualmente no hay ayuda disponible en LMMS. +Por favor visite http://lmms.sf.net/wiki por documentación de LMMS. LMMS (*.mmp *.mmpz) - + LMMS (*.mmp *.mmpz) Version %1 - + Versión %1 Configuration file - + Archivo de configuración Error while parsing configuration file at line %1:%2: %3 - + Error al analizar el archivo de configuración en la línea %1:%2: %3 Volumes - + Volúmenes Undo - + Deshacer Redo - - - - LMMS Project - - - - LMMS Project Template - + Rehacer My Projects - + Mis Proyectos My Samples - + Mis Muestras My Presets - + Mis preconfiguraciones My Home - + Carpeta Personal My Computer - - - - Root Directory - + Equipo &File - + &Archivo &Recently Opened Projects - + Proyectos &Recientes Save as New &Version - + Guardar como una Nueva &Versión E&xport Tracks... - + E&xportar pistas... Online Help - + Ayuda en línea What's This? - + ¿Qué es esto? Open Project - + Abrir Proyecto Save Project - + Guardar el proyecto - - - MeterDialog - Meter Numerator - + Project recovery + Recuperar proyecto - Meter Denominator - + There is a recovery file present. It looks like the last session did not end properly or another instance of LMMS is already running. Do you want to recover the project of this session? + Hemos encontrado un archivo de recuperación de proyecto. Parece que la última sesión no se cerró correctamente o se está ejecutando otra instancia de LMMS. ¿Quieres recuperar el proyecto de esta sesión? - TIME SIG - + Recover + Recuperar - - - MeterModel - Numerator - + Recover the file. Please don't run multiple instances of LMMS when you do this. + Recuperar el archivo. Por favor no ejecutes múltiples instancias de LMMS al hacerlo. - Denominator - + Ignore + Ignorar - - - MidiAlsaRaw::setupWidget - DEVICE - + Launch LMMS as usual but with automatic backup disabled to prevent the present recover file from being overwritten. + Ejecuta LMMS de manera usual pero desactivando el guardado automático para evitar sobreescribir el archivo de recuperación. - - - MidiAlsaSeq - DEVICE - + Discard + Descartar - - - MidiController - MIDI Controller - + Launch a default session and delete the restored files. This is not reversible. + Lanzar una sesión por defecto y borrar los archivos restaurados. Esta acción no es reversible. - unnamed_midi_controller - + Quit + Salir - - - MidiImport - Setup incomplete - + Shut down LMMS with no further action. + Apagar LMMS sin acciones adicionales. - 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. - + Exit + Salir - 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. - + Preparing plugin browser + Preparando el explorador de complementos - - - MidiOss::setupWidget - DEVICE - + Preparing file browsers + Preparando el explorador de archivos - - - MidiPort - Input channel - + Root directory + Directorio raíz - Output channel - + Loading background artwork + Cargando imágenes de fondo - Input controller - + New from template + Nuevo desde plantilla - Output controller - + Save as default template + Guardar como plantilla por defecto - Fixed input velocity - + Export &MIDI... + Exportar &MIDI... - Fixed output velocity - + &View + &Ver - Output MIDI program - + Toggle metronome + Conmutar metrónomo - Receive MIDI-events - + Show/hide Song-Editor + Mostrar/ocultar Editor de Canción - Send MIDI-events - + Show/hide Beat+Bassline Editor + Mostrar/ocultar el Editor de Ritmo+Bajo - Fixed output note - + Show/hide Piano-Roll + Mostrar/ocultar Piano-Roll - Base velocity - + Show/hide Automation Editor + Mostrar/ocultar Editor de Automatización - - - MonstroInstrument - Osc 1 Volume - + Show/hide FX Mixer + Mostrar/ocultar Mezcladora FX - Osc 1 Panning - + Show/hide project notes + Mostrar/ocultar notas del proyecto - Osc 1 Coarse detune - + Show/hide controller rack + Mostrar/ocultar bandeja de controladores - Osc 1 Fine detune left - + Recover session. Please save your work! + Recuperar sesión. ¡Por favor guarda tu trabajo! - Osc 1 Fine detune right - + Automatic backup disabled. Remember to save your work! + Guardado Automático deshabilitado. ¡Recuerda guardar tu trabajo! - Osc 1 Stereo phase offset - + Recovered project not saved + Proyecto recuperado no guardado - Osc 1 Pulse width - + This project was recovered from the previous session. It is currently unsaved and will be lost if you don't save it. Do you want to save it now? + Este proyecto se ha recuperado de la sesión anterior. No ha sido guardado con anterioridad y se perderá para siempre si no lo guardas. ¿Deseas guardarlo ahora? - Osc 1 Sync send on rise - + LMMS Project + Proyecto LMMS + + + LMMS Project Template + Plantilla de proyecto LMMS + + + Overwrite default template? + ¿Sobreescribir la plantilla por defecto? + + + This will overwrite your current default template. + Esta acción sobreescribirá tu actual plantilla por defecto. + + + Volume as dBV + Volumen en dBV + + + Smooth scroll + Desplazamiento suave + + + Enable note labels in piano roll + Nombres de notas en piano roll + + + + MeterDialog + + Meter Numerator + Numerador del Compás + + + Meter Denominator + Denominador del Compás + + + TIME SIG + COMPÁS + + + + MeterModel + + Numerator + Numerador + + + Denominator + Denominador + + + + MidiController + + MIDI Controller + Controlador MIDI + + + unnamed_midi_controller + controlador_midi_sin_nombre + + + + MidiImport + + Setup incomplete + Configuración 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. + Nos has elegido una SoundFont por defecto en el diálogo de configuración (Edición-> Configuración). Por lo tanto, no se reproducirá ningún sonido luego de importar este archivo MIDI. Debes descargar una SoundFont compatible con la GM (general midi), y especificarlo en el diálogo de configuración nuevamente. N.d.A: SoundFont es un formato de archivo (*.sf2) para síntesis de sonido por muestras. Puedes descargar la "FluidR3_GM.sf2" u otras con el gestor de paquetes, luego selecciónala en el diálogo de Configuración. + + + 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. + Nos has complidado LMMS con soporte para el reproductor SoundFont2, que se utiliza para añadir los sonidos por defecto de los archivos MIDI importados. Por lo tanto, no se reproducirá ningún sonido luego de importar este archivo MIDI. + + + Track + Pista + + + + MidiPort + + Input channel + Canal de entrada + + + Output channel + Canal de salida + + + Input controller + Controlador de entrada + + + Output controller + Controlador de salida + + + Fixed input velocity + Velocidad de entrada fija + + + Fixed output velocity + Velocidad de salida fija + + + Output MIDI program + Programa de salida MIDI + + + Receive MIDI-events + Recibir eventos MIDI + + + Send MIDI-events + Enviar eventos MIDI + + + Fixed output note + Nota de salida fija + + + Base velocity + Velocidad básica + + + + MidiSetupWidget + + DEVICE + DISPOSITIVO + + + + MonstroInstrument + + Osc 1 Volume + Osc 1 Volumen + + + Osc 1 Panning + Osc 1 Paneo + + + Osc 1 Coarse detune + Osc 1 desintonización gruesa + + + Osc 1 Fine detune left + Osc 1 desintonización fina izquierda + + + Osc 1 Fine detune right + Osc 1 desintonización fina derecha + + + Osc 1 Stereo phase offset + Osc 1 balance de fase estéreo + + + Osc 1 Pulse width + Osc 1 Amplitud del pulso + + + Osc 1 Sync send on rise + Osc 1 Enviar Sinc. al subir Osc 1 Sync send on fall - + Osc 1 Enviar Sinc al bajar Osc 2 Volume - + Osc 2 Volumen Osc 2 Panning - + Osc 2 Paneo Osc 2 Coarse detune - + Osc 2 desintonización gruesa Osc 2 Fine detune left - + Osc 2 desintonización fina izquierda Osc 2 Fine detune right - + Osc 2 desintonización fina derecha Osc 2 Stereo phase offset - + Osc 2 balance de fase estéreo Osc 2 Waveform - + Osc 2 Forma de onda Osc 2 Sync Hard - + Osc 2 Sincronización Dura Osc 2 Sync Reverse - + Osc 2 Sincronización reversa Osc 3 Volume - + Osc 3 Volumen Osc 3 Panning - + Osc 3 Paneo Osc 3 Coarse detune - + Osc 3 desintonización gruesa Osc 3 Stereo phase offset - + Osc 3 balance de fase estéreo Osc 3 Sub-oscillator mix - + Osc 3 Mezcla de sub-osciladores Osc 3 Waveform 1 - + Osc 3 Onda 1 Osc 3 Waveform 2 - + Osc 2 Onda 2 Osc 3 Sync Hard - + Osc 3 Sincronización Dura Osc 3 Sync Reverse - + Osc 3 Sincronización Reversa LFO 1 Waveform - + LFO 1 Forma de onda LFO 1 Attack - + LFO 1 Ataque LFO 1 Rate - + LFO 1 Velocidad LFO 1 Phase - + LFO 1 Fase LFO 2 Waveform - + LFO 2 Forma de onda LFO 2 Attack - + LFO 2 Ataque LFO 2 Rate - + LFO 2 Velocidad LFO 2 Phase - + LFO 2 Fase Env 1 Pre-delay - + Env 1 Pre-retraso Env 1 Attack - + Env 1 Ataque Env 1 Hold - + Env 1 Mantener Env 1 Decay - + Env 1 Caída Env 1 Sustain - + Env 1 Sostén Env 1 Release - + Env 1 Disipación Env 1 Slope - + Env 1 Curva Env 2 Pre-delay - + Env 2 Pre-retraso Env 2 Attack - + Env 2 Ataque Env 2 Hold - + Env 2 Mantener Env 2 Decay - + Env 2 Caída Env 2 Sustain - + Env 2 Sostén Env 2 Release - + Env 2 Disipación Env 2 Slope - + Env 2 Curva Osc2-3 modulation - + Modulación de osc 2-3 Selected view - + Vista seleccionada 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 - + Fas1-Env1 Phs1-Env2 - + Fas1-Env2 Phs1-LFO1 - + Fas1-LFO1 Phs1-LFO2 - + Fas1-LFO2 Phs2-Env1 - + Fas2-Env1 Phs2-Env2 - + Fas2-Env2 Phs2-LFO1 - + Fas2-LFO1 Phs2-LFO2 - + Fas2-LFO2 Phs3-Env1 - + Fas3-Env1 Phs3-Env2 - + Fas3-Env2 Phs3-LFO1 - + Fas3-LFO1 Phs3-LFO2 - + Fas3-LFO2 Pit1-Env1 - + Alt1-Env1 Pit1-Env2 - + Alt1-Env2 Pit1-LFO1 - + Alt1-LFO1 Pit1-LFO2 - + Alt1-LFO2 Pit2-Env1 - + Alt2-Env1 Pit2-Env2 - + Alt2-Env2 Pit2-LFO1 - + Alt2-LFO1 Pit2-LFO2 - + Alt2-LFO2 Pit3-Env1 - + Alt3-Env1 Pit3-Env2 - + Alt3-Env2 Pit3-LFO1 - + Alt3-LFO1 Pit3-LFO2 - + Alt3-LFO2 PW1-Env1 - + AP1-Env1 PW1-Env2 - + AP1-Env2 PW1-LFO1 - + AP1-LFO1 PW1-LFO2 - + AP1-LFO2 Sub3-Env1 - + Sub3-Env1 Sub3-Env2 - + Sub3-Env2 Sub3-LFO1 - + Sub3-LFO1 Sub3-LFO2 - + Sub3-LFO2 Sine wave - + Onda Sinusoidal Bandlimited Triangle wave - + Onda triangular de BandaLimitada Bandlimited Saw wave - + Onda de sierra de bandaLimitada Bandlimited Ramp wave - + Onda de rampa de bandaLimitada Bandlimited Square wave - + Onda cuadrada de BandaLimitada Bandlimited Moog saw wave - + Onda de sierra Moog de banda Limitada Soft square wave - + Onda Cuadrada suave Absolute sine wave - + Onda Sinusoidal Absoluta Exponential wave - + Onda Exponencial White noise - + Ruido-blanco Digital Triangle wave - + Onda triangular digital Digital Saw wave - + Onda de sierra digital Digital Ramp wave - + Onda de Rampa digital Digital Square wave - + Onda Cuadrada digital Digital Moog saw wave - + Onda de sierra Moog digital Triangle wave - + Onda triangular Saw wave - + Onda de sierra Ramp wave - + Onda de rampa Square wave - + Onda Cuadrada Moog saw wave - + Onda de sierra Moog Abs. sine wave - + Onda sinus. abs Random - + Aleatorio Random smooth - + Aleatoria suave MonstroView Operators view - + Vista de Operadores 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 de operadores contiene todos los operadores. Esto incluye tanto los operadores audibles (osciladores) como los operadores inaudibles (moduladores): Osciladores de baja frecuencia (LFO) y Envolventes. + +Cada perilla y selector en la Vista de Operadores incluye una pequeña ayuda a la que puedes acceder haciendo click en el icono '¿qué es esto? en la barra superior y luego en la perilla o selector. Puedes encontrar ayuda mucho más específica de esa manera. Matrix view - + Vista de Matriz 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. @@ -4231,1424 +4609,1698 @@ Knobs and other widgets in the Operators view have their own what's this -t 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 de Matriz contiene la matriz de modulación. Aquí puedes definir la relación de modulación entre los distintos operadores. Cada operador audible (osciladores 1 al 3) tiene 3 a 4 propiedades que pueden ser moduladas por cualquiera de los moduladores. El uso de más moduladores consume más CPU. + +La vista se encuentra dividida en objetivos de modulacion, agrupados para cada oscilador. Los objetivos disponibles son volumen, altura, fase, amplitud del pulso y proporción del sub-oscilador. Nota: algunos objetivos son específicos de un único oscilador. + +Cada objetivo de modulación tiene cuatro perillas, una para cada modulador. Por defecto las perillas estan en cero (0), lo que significa sin modulación. Llevar una perilla hasta el 1 hace que el modulador afecte el objetivo tanto como es posible. Llevarla a -1 hace lo mismo, pero la modulación es invertida. Mix Osc2 with Osc3 - + Mezclar Osc2 con Osc3 Modulate amplitude of Osc3 with Osc2 - + Modular la amplitud del Osc3 con Osc2 Modulate frequency of Osc3 with Osc2 - + Modular la frecuencia del Osc3 con Osc2 Modulate phase of Osc3 with Osc2 - + Modular la fase del Osc3 con Osc2 The CRS knob changes the tuning of oscillator 1 in semitone steps. - + La perilla CRS cambia la afinación del oscilador 1 en semitonos. The CRS knob changes the tuning of oscillator 2 in semitone steps. - + La perilla CRS cambia la afinación del oscilador 2 en semitonos. The CRS knob changes the tuning of oscillator 3 in semitone steps. - + La perilla CRS cambia la afinación del oscilador 3 en semitonos. 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 y FTR cambian la afinación fina del oscilador para los canales izquierdo y derecho respectivamente. Esto permite añadir desafinación estéreo al oscilador lo que ensancha la imagen estéreo y provoca la ilusión de espacio. The SPO knob modifies the difference in phase between left and right channels. Higher difference creates a wider stereo image. - + La perilla SPO (Balance de Fase Estéreo, por sus siglas en inglés) modifica la diferencia de fase entre los canales izquierdo y derecho. Una mayor diferencia crea una imagen estéreo más amplia. 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 perilla PW controla la amplitud del pulso, también conocida como ciclo de trabajo, del oscilador 1. El oscildor 1 es un oscilador de onda de pulso digital., no produce una salida de banda limitada, lo que significa que puedes usarlo como un oscilador audible pero causará 'aliasing' (efecto Nyquist). También puedes usarlo como una fuente inaudible para sincronización, que puedes usar para sincronizar los osciladores 2 y 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. - + Enviar Sinc al subir: Cuando está activado, la señal de sincronización es enviada cada vez que el estado del oscilador 1 pasa de abajo arriba, por ej. cuando la amplitud cambia de -1 a 1. La altura, fase y amplitud de pulso del oscilador 1 pueden afectar la sincronización, pero el volumen no tiene ningún efecto en ella. Las señales de Sinc(ronización) son enviadas de manera independiente a los canales izquierdo y derecho. 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. - + Enviar Sinc al bajar: Cuando está activado, la señal de sincronización es enviada cada vez que el estado del oscilador 1 pasa de arriba abajo, por ej. cuando la amplitud cambia de 1 a -1. La altura, fase y amplitud de pulso del oscilador 1 pueden afectar la sincronización, pero el volumen no tiene ningún efecto en ella. Las señales de Sinc(ronización) son enviadas de manera independiente a los canales izquierdo y derecho. Hard sync: Every time the oscillator receives a sync signal from oscillator 1, its phase is reset to 0 + whatever its phase offset is. - + Sincronización dura: Cada vez que el oscilador recive una señal de sinc(ronización) del oscilador 1, su fase se restaura a 0 + su balance de fase (cualquiera que este sea). Reverse sync: Every time the oscillator receives a sync signal from oscillator 1, the amplitude of the oscillator gets inverted. - + Sincronización reversa: Cada vez que el oscilador recive una señal de sinc[ronización] del oscilador 1, la amplitud el oscilador se invierte. Choose waveform for oscillator 2. - + Elige la onda para el oscilador 2. Choose waveform for oscillator 3's first sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. - + Elige una onda diferente para el primer sub-oscilador del oscilador 3. El oscilador 3 puede interpolar suavemente dos ondas diferentes. Choose waveform for oscillator 3's second sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. - + Elige una onda diferente para el segundo sub-oscilador del oscilador 3. El oscilador 3 puede interpolar suavemente dos ondas diferentes. 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 perilla SUB cambia el porcentaje de mezcla de los dos sub-osciladores del Oscilador 3. Puedes elegir una onda diferente para cada uno de los dos sub-osciladores, y el oscilador 3 interpolará suavemente entre ambas. Todas las modulaciones entrantes para el Osc3 se aplicarán de la misma manera a las ondas de ambos sub-osciladores. 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. - + Además de los propios moduladores, Monstro permite modular el oscilador 3 con la salida del oscilador 2. + +En Modo Mezcla (Mix) no hay modulación: simplemente mezcla la salida de los osciladores. 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. - + Además de los propios moduladores, Monstro permite modular el oscilador 3 con la salida del oscilador 2 + +AM signigica 'amplitud modulada'. La amplitud (volumen) del oscilador 2 es modulada por el oscilador 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. - + Además de los propios moduladores, Monstro permite modular el oscilador 3 con la salida del oscilador 2 + +FM significa 'frecuencia modulada'. La frecuencia (altura) del oscilador 3 es modulada por el oscilador 2. La modulaciónde frecuencia se implemente como una modulación de fase, lo que le brinda una altura general más estable a diferencia de la modulación de frecuencia "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. - + Además de los propios moduladores, Monstro permite modular el oscilador 3 con la salida del oscilador 2 + +PM significa 'modulación de fase'. La fase el oscilador 3 es modulada por el oscilador 2. Se diferencia de la 'frecuencia modulada' en que los cambios de fase no son acumulativos. 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... - + Elige la onda para el LFO 1. +"Aleatoria" y "Aleatoria suave" son formas especiales de onda: producen una salida aleatoria, donde la tasa del LFO controla que tan seguido cambia el estado del LFO. La versión suave interpola entre estos estados con interpolación cosinusoidal. Estos modos aleatorios se pueden usar para darle "vida" a tus preconfiguraciones (presets) - añade algo de esa impredecibilidad analógica... 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... - + Elige la onda para el LFO 2. +"Aleatoria" y "Aleatoria suave" son formas especiales de onda: producen una salida aleatoria, donde la tasa del LFO controla que tan seguido cambia el estado del LFO. La versión suave interpola entre estos estados con interpolación cosinusoidal. Estos modos aleatorios se pueden usar para darle "vida" a tus preconfiguraciones (presets) - añade algo de esa impredecibilidad analógica... Attack causes the LFO to come on gradually from the start of the note. - + El 'Ataque' hace que el LFO crezca gradualmente desde el inicio de la nota. Rate sets the speed of the LFO, measured in milliseconds per cycle. Can be synced to tempo. - + 'Rate' define la velocidad del LFO, en milisegundos por ciclo. Se puede sincronizar al tempo. PHS controls the phase offset of the LFO. - + PHS controla el balance de fase del LFO. PRE, or pre-delay, delays the start of the envelope from the start of the note. 0 means no delay. - + PRE, o pre-retraso, retrasa en inicio de la envolvente con respecto al inicio de la nota. 0 significa ningún retraso. ATT, or attack, controls how fast the envelope ramps up at start, measured in milliseconds. A value of 0 means instant. - + ATT, o ataque, controla que tan rápido la envolvente se elveva al principio, en milisegundos. 0 significa instantáneamente. HOLD controls how long the envelope stays at peak after the attack phase. - + HOD (mantener) controla cuánto tiempo la envolvente permanece en el pico luego del ataque. 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 caída, controla que tan rápido la envolvente cae desde el pico alcanzado en el ataque. Se mide de acuerdo a los milisegundos que le toma caer desde el pico hasta cero. La caída actual puede ser más corts se se utiliza el 'sustain' [de la envolvente]. 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, sustain o sostén, controla el nivel de 'sostén' de la envolvente. La fase de caída no bajará más de este nivel mientras dure la nota (ej. mientras mantengas presionada la tecla. Ver partes de la envolvente 'ADSR' ). 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 'release', controla cuánto dura el 'release' o disipación de esta nota, o sea cuánto tarda en llegar del pico a cero. El release actual puede ser más breve, dependiendo de en que fase se libera la nota. (N.d.A.: el 'release' puede ir del pico a cero o, si activas un nivel para el 'sustain', desde este nivel a cero, a partir del momento en el que dejes de presionar la tecla. Ver 'sustain' o 'SUS'). 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. - + El control de 'curva' (Slope) controla la forma de la envolvente. Un valor igual a 0 crea subidas y bajadas rectas. Valores negativos crean curvas que comienzan despacio, alcanzan el pico rápidamente y bajan suavemente como subieron. Valores positivos crean curvas que suben y bajan rápidamente, pero se mantienen arriba por más tiempo cerca del pico. + + + Volume + Volumen + + + Panning + Paneo + + + Coarse detune + Desafinación gruesa + + + semitones + semitonos + + + Finetune left + Desafinación fina izquierda + + + cents + cents + + + Finetune right + Desafinación fina derecha + + + Stereo phase offset + Balance de fase estéreo + + + deg + deg + + + Pulse width + Amplitud del pulso + + + Send sync on pulse rise + Enviar sinc en la fase ascendente del pulso + + + Send sync on pulse fall + Enviar sinc en la fase descendente del pulso + + + Hard sync oscillator 2 + Sincronización dura oscilador 2 + + + Reverse sync oscillator 2 + Sincronización reversa oscilador 2 + + + Sub-osc mix + Mezcla de sub-osc + + + Hard sync oscillator 3 + Sincronización dura oscilador 3 + + + Reverse sync oscillator 3 + Sincronización reversa oscilador 3 + + + Attack + Ataque + + + Rate + Tasa (rate) + + + Phase + Fase + + + Pre-delay + Pre-retraso + + + Hold + Mantener + + + Decay + Caída + + + Sustain + Sostén + + + Release + Disipación + + + Slope + Inclinación + + + Modulation amount + Cantidad de modulación MultitapEchoControlDialog Length - + Duración Step length: - + Longitud del paso: Dry - + Limpio Dry Gain: - + Ganancia limpia: Stages - + Etapas Lowpass stages: - + Etapas de pasoBajo: Swap inputs - + Alternar entradas Swap left and right input channel for reflections - + Alternar los canales de entrada izquierdo y derecho para reflexiones NesInstrument Channel 1 Coarse detune - + Canal 1 desafinación gruesa Channel 1 Volume - + Canal 1 Volumen Channel 1 Envelope length - + Canal 1 Longitud de la Envolvente Channel 1 Duty cycle - + Canal 1 Ciclo de trabajo Channel 1 Sweep amount - + Canal 1 Cantidad de Barrido Channel 1 Sweep rate - + Canal 1 Tasa de Barrido Channel 2 Coarse detune - + Canal 2 desafinación gruesa Channel 2 Volume - + Canal 2 Volumen Channel 2 Envelope length - + Canal 2 Longitud de la Envolvente Channel 2 Duty cycle - + Canal 2 Ciclo de trabajo Channel 2 Sweep amount - + Canal 2 Cantidad de Barrido Channel 2 Sweep rate - + Canal 2 Tasa de Barrido Channel 3 Coarse detune - + Canal 3 desafinación gruesa Channel 3 Volume - + Canal 3 Volumen Channel 4 Volume - + Canal 4 Volumen Channel 4 Envelope length - + Canal 4 Longitud de la Envolvente Channel 4 Noise frequency - + Canal 4 Frecuencia de Ruido Channel 4 Noise frequency sweep - + Canal 4 Barrido de la frecuencia de ruido Master volume - + Volumen maestro Vibrato - + Vibrato + + + + NesInstrumentView + + Volume + Volumen + + + Coarse detune + Desafinación gruesa + + + Envelope length + Longitud de la Envolvente + + + Enable channel 1 + Habilitar el canal 1 + + + Enable envelope 1 + Habilitar la envolvente 1 + + + Enable envelope 1 loop + Habilitar el bucle de la envolvente 1 + + + Enable sweep 1 + Habilitar barrido 1 + + + Sweep amount + Cantidad de barrido + + + Sweep rate + Tasa de barrido + + + 12.5% Duty cycle + Ciclo de trabajo 12.5% + + + 25% Duty cycle + Ciclo de trabajo 25% + + + 50% Duty cycle + Ciclo de trabajo 50% + + + 75% Duty cycle + Ciclo de trabajo 75% + + + Enable channel 2 + Habilitar el canal 2 + + + Enable envelope 2 + Habilitar el bucle de la envolvente 2 + + + Enable envelope 2 loop + Habilitar el bucle de la envolvente 2 + + + Enable sweep 2 + Habilitar barrido 2 + + + Enable channel 3 + Habilitar el canal 3 + + + Noise Frequency + Frecuencia de Ruido + + + Frequency sweep + Barrido de Frecuencia + + + Enable channel 4 + Habilitar el canal 4 + + + Enable envelope 4 + Habilitar la envolvente 4 + + + Enable envelope 4 loop + Habilitar el bucle de la envolvente 4 + + + Quantize noise frequency when using note frequency + Cuantizar la frecuencia de ruido al usar frecuencia de nota + + + Use note frequency for noise + Usar frecuencia de nota para ruido + + + Noise mode + Modo de Ruido + + + Master Volume + Volumen Maestro + + + Vibrato + Vibrato OscillatorObject Osc %1 volume - Osc. %1 Volumen + Osc. %1 Volumen Osc %1 panning - Osc %1 encuadramiento + Osc %1 paneo Osc %1 coarse detuning - Osc %1 desintonización gruesa + Osc %1 desintonización gruesa Osc %1 fine detuning left - Osc %1 desintonización fina izquierda + Osc %1 desintonización fina izquierda Osc %1 fine detuning right - Osc %1 desintonización fina derecha + Osc %1 desintonización fina derecha Osc %1 phase-offset - Osc %1 fase de compensación + Osc %1 balance de fase Osc %1 stereo phase-detuning - Osc %1 fase de desintonización + Osc %1 desintonización de fase estéreo Osc %1 wave shape - + Osc %1 forma de onda Modulation type %1 - + Tipo de modulación %1 Osc %1 waveform - + Forma de onda del osc %1 Osc %1 harmonic - + armónicos del Osc %1 + + + + PatchesDialog + + Qsynth: Channel Preset + Qsynth: Preconfiguración del Canal + + + Bank selector + Selector de banco + + + Bank + Banco + + + Program selector + Selector de programa + + + Patch + Ajuste + + + Name + Nombre + + + OK + OK + + + Cancel + Cancelar PatmanView Open other patch - + Abrir otro patch Click here to open another patch-file. Loop and Tune settings are not reset. - + Haz click aquí para abrir otro archivo (*.pat). La configuración de Afinación y Bucle se mantiene. Loop - + Bucle Loop mode - + Modo Bucle Here you can toggle the Loop mode. If enabled, PatMan will use the loop information available in the file. - + Aquí puedes alternar el modo Bucle. Si está activado, PatMan usará la información de bucle disponible en el archivo. 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í puedes alternar el modo de Afinación. Si está activado, PatMan afinará la muestra para que coincida con la altura de la nota. No file selected - + Ningún archivo seleccionado Open patch file - + Abrir archivo Patch Patch-Files (*.pat) - + Archivos Patch (*.pat) PatternView - - double-click to open this pattern in piano-roll -use mouse wheel to set velocity of a step - - Open in piano-roll - Abrir en piano-roll + Abrir en piano-roll Clear all notes - Borrar todas las notas + Borrar todas las notas Reset name - + Restaurar nombre Change name - Cambiar nombre + Cambiar nombre Add steps - + Agregar pasos Remove steps - + Quitar pasos + + + use mouse wheel to set velocity of a step + usa la rueda del ratón para definir la velocidad de un paso + + + double-click to open in Piano Roll + Haz doble click para abrir en Piano Roll + + + Clone Steps + Clonar Pasos PeakController Peak Controller - + Controlador de Picos Peak Controller Bug - + Error en el 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. - + Debido a un error en versiones antiguas de LMMS, el controlador de Picos tal vez no se conecte apropiadamente. Por favor asegúrate que los controladores de picos estén conectados apropiadamente y vuelve a guardar este archivo. Disculpa los inconvenientes. PeakControllerDialog PEAK - + PICO LFO Controller - + Controlador LFO PeakControllerEffectControlDialog BASE - + BASE Base amount: - + Cantidad base: Modulation amount: - Cantidad de modulación: + Cantidad de modulación: Attack: - Ataque: + Ataque: Release: - Release: + Disipación: AMNT - + CANT MULT - + MULT Amount Multiplicator: - + Multiplicador de Cantidad: ATCK - + ATQ DCAY - + CAI TRES - + UMBR Treshold: - + Umbral: PeakControllerEffectControls Base value - + Valor base Modulation amount - Cantidad de modulación + Cantidad de modulación Mute output - + Silenciar salida Attack - + Ataque Release - + Disipación Abs Value - + Valor Absol Amount Multiplicator - + Multiplicador de Cantidad Treshold - + Umbral PianoRoll - - 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 + ¡Por favor abra el patrón haciendo doble click sobre él! Last note - + Ultima nota Note lock - + Figura actual Note Velocity - + Velocidad de Nota Note Panning - + Paneo de nota Mark/unmark current semitone - + Marcar/desmarcar el semitono actual Mark current scale - + Marcar la escala actual Mark current chord - + Marcar el acorde actual Unmark all - + Desmarcar todo No scale - + Sin escala No chord - + Sin acorde Velocity: %1% - + Velocidad: %1% Panning: %1% left - + Paneo: %1% izq Panning: %1% right - + Paneo: %1% der Panning: center - + Paneo: centro Please enter a new value between %1 and %2: - + Por favor ingresa un nuevo valor entre %1 y %2: + + + Mark/unmark all corresponding octave semitones + Marcar/desmarcar todos los semitonos en la octava correspondiente + + + Select all notes on this key + Seleccionar todas las notas en este tono PianoRollWindow Play/pause current pattern (Space) - Reproducir/Pausar el patrón actual (Espaciador) + Reproducir/Pausar el patrón actual (Espacio) Record notes from MIDI-device/channel-piano - + Grabar notas desde dispositivo/canal/teclado MIDI Record notes from MIDI-device/channel-piano while playing song or BB track - + Grabar notas desde dispositivo/canal/teclado MIDI escuchando la Canción o el Ritmo+Base Stop playing of current pattern (Space) - Detener la reproducción del patrón actual (Espaciador) + Detener la reproducción del patrón actual (Espacio) Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached. - + Haz click aquí para reproducir este patrón. Te será útil al editarlo. El patrón se reproducirá en bucle cada vez que llegue al 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. - + Haz click aquí para grabar notas desde un dispositivo MIDI o desde el piano virtual de la ventana. Cuando hayas grabado todas las notas, estas se escribirán en este patrón y luego podrás editarlas. 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. - + Haz click aquí para grabar notas desde un dispositivo MIDI o desde el piano virtual de la ventana. Escucharás la Canción o el Ritmo+Base mientras tocas las notas que estas grabando en este patrón. Click here to stop playback of current pattern. - + Haz click aquí para detener la reproducción de este patrón. Draw mode (Shift+D) - + Modo de dibujo (Shift+D) Erase mode (Shift+E) - + Modo de borrado (Shift+E) Select mode (Shift+S) - + Modo de Selección (Shift+S) Detune mode (Shift+T) - + Modo de Cambio de Tono (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 %1 to temporarily go into select mode. - + Haz click aquí para activar el modo de Dibujo. En el modo de Dibujo, puedes añadir, redimensionar y mover las notas. Este es el modo por defecto y el que utilizarás la mayoria de las veces. Tambien puedes presionar 'Shift+D' en el teclado para activar este modo. Mientras estes en modo de Dibujo, mantén presionado %1 para activar temporalmente el modo de Seleccion. 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. - + Haz click aquí para activar el modo de borrado. En esto modo puedes borrar notas. Puedes activar este modo desde el teclado presionando 'Shift+E'. Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold %1 in draw mode to temporarily use select mode. - + Haz click aquí para activar el modo de Seleccion. En este modo puedes seleccionar notas. O también puedes mantener presionado %1 en el modo de dibujo para acceder temporalmente al modo de Seleccion. 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. - + Haz click aquí para activar el modo de Cambio de Tono. En esto modo, puedes hacer click en una nota para abrir su ventana de automatización de cambio de tono (detuning). Puedes utilizar este modo para crear 'glissandos' (deslizar de una nota hacia otra). Presiona 'Shift+T' para activar este modo desde el teclado. Cut selected notes (%1+X) - Cortar las notas seleccionadas (%1+X) + Cortar las notas seleccionadas (%1+X) Copy selected notes (%1+C) - Copiar las notas seleccionadas (%1+C) + Copiar las notas seleccionadas (%1+C) Paste notes from clipboard (%1+V) - Pegar notas desde el portapapeles (%1+V) + Pegar notas desde el portapapeles (%1+V) 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. - + Haz click aquí y las notas seleccionadas se-moverán al portapapeles. Puedes pegarlas en cualquier lugar de cualquier patrón haciendo click en el botón "pegar". 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. - + Haz click aquí y las notas seleccionadas se-copiarán al portapapeles. Puedes pegarlas en cualquier lugar de cualquier patrón haciendo click en el botón "pegar". Click here and the notes from the clipboard will be pasted at the first visible measure. - + Haz click aquí y las notas del portapapeles se pegarán en el primer compás visible. 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. - + Esto controla el zoom horizontal. Puede ser útil para elegir el zoom adecuado para una acción específica. Para la edición en general, el zoom debe adecuarse a tus notas más cortas. 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' se refiere a 'Cuantización', y controla el tamaño de la grilla y los puntos de control a los que se 'adhieren' las notas que ingresas. Con valores de cuantizacion más pequeños, puedes dibujar notas más breves en el Piano Roll, y puntos de control más exactos en el Editor de Automatización. 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 - + Esto te permite elegir la duración de las notas nuevas. 'Ultima nota' quiere decir que LMMS usará el valor de la última nota que hayas editado 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! - + Este asistente se encuentra conectado directamente al menu contextual del teclado virtual, situado a la izquierda del Piano Roll. Luego de elegir la escala deseada en el menú desplegable, puedes hacer click derecho en la tecla de la nota deseada en el teclado virtual, y elegir 'Marcar escala actual'. ¡LMMS resaltará todas las notas que pertenezcan a la escala elegida, en el tono que hayas seleccionado! 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. - + Te permite elegir un acorde que luego LMMS puede dibujar o resaltar. Puedes encontrar los acordes más usados en este menú desplegable. Luego de elegir una acorde, haz click en cualquier lugar para ingresar el acorde, y haz click derecho en el teclado virtual para abrir el menú contextual y ressaltar el acorde. Para ingresar notas individuales nuevamente, debes elegir 'Sin Acorde' en este menú. + + + Edit actions + Acciones de edición + + + Copy paste controls + Controles de copiado y pegado + + + Timeline controls + Controles de la línea de Tiempo + + + Zoom and note controls + Controles de acercamiento y nota + + + Piano-Roll - %1 + Piano-Roll - %1 + + + Piano-Roll - no pattern + Piano-Roll - sin patrón + + + Quantize + Cuantizar PianoView Base note - + Nota base Plugin Plugin not found - + Complemento no encontrado - The plugin "%1" wasn't found or could not be loaded! + The plugin "%1" wasn't found or could not be loaded! Reason: "%2" - + ¡El complemento "%1" no fue encontrado o no se pudo cargar! +Razón: "%2" Error while loading plugin - Error al cargar plugin + Error al cargar el complemento Failed to load plugin "%1"! - - - - LMMS plugin %1 does not have a plugin descriptor named %2! - + Falló al cargar el complemento "%1"! PluginBrowser Instrument plugins - + Instrumentos Instrument browser - + Explorador de Instrumentos Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track. - + Arrastra un instrumento al Editor de Canción, al Editor de Ritmo+Bajo o sobre una pista de instrumento existente. + + + + PluginFactory + + Plugin not found. + Complemento no encontrado + + + LMMS plugin %1 does not have a plugin descriptor named %2! + ¡El complemento LMMS %1 no tiene un identificador llamado %2! ProjectNotes Project notes - Notas del Proyecto + Notas del Proyecto Put down your project notes here. - Coloque aquí sus notas del proyecto + Coloca aquí tus notas del proyecto. Edit Actions - Editar Acciones + Edicion &Undo - &Deshacer + &Deshacer %1+Z - %1+Z + %1+Z &Redo - &Rehacer + &Rehacer %1+Y - %1+Y + %1+Y &Copy - &Copiar + &Copiar %1+C - %1+C + %1+C Cu&t - Cortar(&X) + Cor&tar %1+X - %1+X + %1+X &Paste - &Pegar + &Pegar %1+V - %1+V + %1+V Format Actions - Acciones de formato + Formato &Bold - &Negrita + Negrita (&B) %1+B - %1+B + %1+B &Italic - &Cursiva + Cursiva (&I) %1+I - %1+I + %1+I &Underline - &Subrayado + S&ubrayado %1+U - %1+U + %1+U &Left - &Izquierda + &Izquierda %1+L - %1+L + %1+L C&enter - C&entrar + C&entrar %1+E - %1+E + %1+E &Right - &Derecha + &Derecha %1+R - %1+R + %1+R &Justify - &Justificar + &Justificar %1+J - %1+J + %1+J &Color... - &Color... + &Color... ProjectRenderer WAV-File (*.wav) - + Archivo-WAV (*.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 - + Archivo OGG comprimido (*.ogg) QWidget Name: - + Nombre: Maker: - + Autor: Copyright: - + Derechos de autor: Requires Real Time: - + Requiere Tiempo Real: Yes - + Si No - + No Real Time Capable: - + Apto para Tiempo Real: In Place Broken: - + Conflicto de puertos: Channels In: - + Canales entrantes: Channels Out: - + Canales salientes: File: - + Archivo: File: %1 - + Archivo: %1 RenameDialog Rename... - Renombrar... + Renombrar... SampleBuffer Open audio file - Abrir archivo de audio + Abrir archivo de audio Wave-Files (*.wav) - Archivos Wave (*.wav) + Archivos Wave (*.wav) OGG-Files (*.ogg) - Archivos OGG (*.ogg) + Archivos OGG (*.ogg) DrumSynth-Files (*.ds) - + Archivos DrumSynth (*.ds) FLAC-Files (*.flac) - + Archivos-FLAC (*.flac) SPEEX-Files (*.spx) - + Archivos-SPEEX (*.spx) VOC-Files (*.voc) - Archivos VOC (*.voc) + Archivos VOC (*.voc) AIFF-Files (*.aif *.aiff) - Archivos AIFF (*.aif *.aiff) + Archivos AIFF (*.aif *.aiff) AU-Files (*.au) - Archivos AU (*.au) + Archivos AU (*.au) RAW-Files (*.raw) - Archivos RAW (*.raw) + Archivos RAW (*.raw) All Audio-Files (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw) - + Todos los archivos de Audio (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw) SampleTCOView double-click to select sample - doble click para seleccionar ejemplo + doble click para seleccionar muestra Delete (middle mousebutton) - + Borrar (click del medio [rueda]) Cut - Cortar + Cortar Copy - Copiar + Copiar Paste - Pegar + Pegar Mute/unmute (<%1> + middle click) - - - - Set/clear record - + Activar/Desacivar Silencio (<&1> + click del medio) SampleTrack Sample track - Pista de ejemplo + Pista de muestras Volume - + Volumen Panning - + Paneo SampleTrackView Track volume - + Volumen de la pista Channel volume: - Volumen del canal + Volumen del canal: VOL - + VOL Panning - + Paneo Panning: - + Paneo: PAN - + PAN SetupDialog Setup LMMS - Configuración de LMMS + Configurar LMMS General settings - + Configuración General BUFFER SIZE - + TAMAÑO DEL BÚFER Reset to default-value - + Restaurar valores por defecto MISC - + MISCEL Enable tooltips - + Habilitar Consejos Show restart warning after changing settings - + Mostrar advertencia de reinicio luego de cambiar la configuración Display volume as dBV - + Mostrar volumen en dBV Compress project files per default - + Comprimir archivos de proyecto por defecto One instrument track window mode - + Una ventana de instrumento a la vez HQ-mode for output audio-device - + modo HQ para el disp. de salida de audio Compact track buttons - + Botones de pista compactos Sync VST plugins to host playback - + Sincronizar complementos VST al anfitrión Enable note labels in piano roll - + Nombres de notas en piano roll Enable waveform display by default - + Activar osciloscopio por defecto Keep effects running even without input - + Mantener los efectos en proceso aun sin señal de entrada Create backup file when saving a project - + Crear un archivo de respaldo al guardar un proyecto LANGUAGE - + IDIOMA Paths - + Lugares LMMS working directory - + Directorio de trabajo de LMMS VST-plugin directory - - - - Artwork directory - + Directorio de complementos VST Background artwork - + Imagen de fondo FL Studio installation directory - - - - LADSPA plugin paths - + Directorio de instalación de FL-Studio STK rawwave directory - + Directorio STK rawwave Default Soundfont File - + Archivo SoundFont por defecto Performance settings - + Configuración de rendimiento UI effects vs. performance - + Efectos gráficos vs. rendimiento Smooth scroll in Song Editor - + Avance Suave en Editor de Canción Enable auto save feature - + Habilitar Auto-Guardado Show playback cursor in AudioFileProcessor - + Mostrar cursor de reproducción en AudioFileProcessor Audio settings - + Configuración de Audio AUDIO INTERFACE - + INTERFAZ DE AUDIO MIDI settings - + Configuración MIDI MIDI INTERFACE - + INTERFAZ MIDI OK - + OK Cancel - Cancelar + Cancelar Restart LMMS - + Reiniciar LMMS Please note that most changes won't take effect until you restart LMMS! - + ¡Por favor nota que la mayoría de los cambios no tendrán efecto hasta que reinicies LMMS! Frames: %1 Latency: %2 ms - + Cuadros: %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í puedes definir el tamaño del búfer interno usado por LMMS. Valores pequeños darán como resultado menor latencia pero también pueden provocar sonidos inutilizables o mal rendimiento, sobretodo en computadoras antiguas o en sistemas sin un núcleo con tiempo real (realtime kernel). Choose LMMS working directory - + Elige el directorio de trabajo de LMMS Choose your VST-plugin directory - + Elige tu directorio de complementos VST Choose artwork-theme directory - + Elige el directorio de temas (apariencia) Choose FL Studio installation directory - + Elige el directorio de instalación de FL-Studio Choose LADSPA plugin directory - + Elige el directorio de complementos LADSPA Choose STK rawwave directory - + Elige el directorio de STK rawwave Choose default SoundFont - + Elige la SoundFont por defecto Choose background artwork - + Elige una imagen para el fondo 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í puedes elegir tu interfaz de audio preferida. Dependiendo de la configuración de tu sistema durante la compilación, puedes elegir entre ALSA, JACK, OSS y otros. Debajo verás un cuadro que te permitirá configurar la interfaz de audio 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í puedes elegir tu interfaz MIDI preferida. Dependiendo de la configuración de tu sistema durante la configuración, puedes elegir entre ALSA, OSS y otros.Debajo verás un cuadro en el que podrás configurar la interfaz MIDI que hayas elegido. + + + Reopen last project on start + Abrir el último proyecto al iniciar + + + Directories + Directorios + + + Themes directory + Directorio de temas + + + GIG directory + Directorio GIG + + + SF2 directory + Directorio SF2 + + + LADSPA plugin directories + Directorios de complementos LADSPA + + + Auto save + Guardar automáticamente + + + Choose your GIG directory + Elige tu directorio GIG + + + Choose your SF2 directory + Elige tu directorio SF2 + + + minutes + minutos + + + minute + minuto + + + Auto save interval: %1 %2 + Guardar automáticamente cada: %1%2 + + + Set the time between automatic backup to %1. +Remember to also save your project manually. + Define el tiempo entre auto-guardados en %1. +Recuerda también guardar tu proyecto manualmente. Song Tempo - + Tempo Master volume - + Volumen maestro Master pitch - + Transporte Project saved - + Proyecto guardado The project %1 is now saved. - + El proyecto %1 ha sido guardado. Project NOT saved. - Proyecto NO guardado. + Proyecto NO guardado. The project %1 was not saved! - + ¡El proyecto %1 NO ha sido guardado! Import file - Importar archivo + Importar archivo MIDI sequences - - - - FL Studio projects - + secuencias MIDI Hydrogen projects - + Proyectos de Hydrogen All file types - + Todos los archivos Empty project - + Proyecto vacío This project is empty so exporting makes no sense. Please put some items into Song Editor first! - + Este proyecto está vacío por lo cual no tiene sentido exportarlo. ¡Por favor añade primero algunos elementos en el Editor de Canción! Select directory for writing exported tracks... - + Elige el directorio en el cual escribir las pistas exportadas... untitled - Sin título + Sin título Select file for project-export... - Seleccione archivo para exportar proyecto + Selecciona el archivo para exportar proyecto... The following errors occured while loading: - + Los siguientes errores ocurrieron durante la carga: + + + MIDI File (*.mid) + Archivos MISI (*.mid) + + + LMMS Error report + Reporte de errores LMMS @@ -5664,1140 +6316,1264 @@ Latency: %2 ms 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. - + No se puede abrir el archivo %1. Probablemente no tengas permisos para leer este archivo. Asegúrate de tener al menos permisos de lectura sobre este archivo e inténtalo nuevamente. Error in file - + Error en el archivo The file %1 seems to contain errors and therefore can't be loaded. - + El archivo %1 aparentemente contiene errores y por lo tanto no puede cargarse. Tempo - + Tempo TEMPO/BPM - + TEMPO/GPM tempo of song - tiempo de canción + tempo de la 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). - + El 'tempo' de una canción se define en golpes por minuto (GPM). Si quieres cambiar el tempo de tu canción, modifica este valor. En compases de 4 tiempos (los que usarás la mayoría de las veces, ¡sino siempre!), el valor del tempo entre 4 indicará cuántos compases se tocan en un minuto (1golpe = 1 beat = 1 tiempo de compás, por lo tanto GPM/4 = compases x minuto). High quality mode - + Modo de alta calidad Master volume - + Volumen maestro master volume - + volumen maestro Master pitch - + Transporte master pitch - tono principal + transporte Value: %1% - + Valor: %1% Value: %1 semitones - + Valor: %1% semitonos 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. - + No se pudo abrir el archivo %1 para escritura. Probablemente no tienes permisos de escritura sobre este archivo. Asegúrate de tener acceso de escritura a este archivo e inténtalo nuevamente. + + + template + plantilla + + + project + proyecto + + + Version difference + Diferencia de versiones + + + This %1 was created with LMMS %2. + Este %1 fue creado con LMMS %2. SongEditorWindow Song-Editor - Editor de canción + Editor de Canción Play song (Space) - Reproducir canción (Espaciador) + Reproducir canción (Espacio) Record samples from Audio-device - + Grabar muesta desde Dispositivo de Audio Record samples from Audio-device while playing song or BB track - + Grabar muestra desde Dispositivo de Audio escuchando la Canción o el Ritmo+Base Stop song (Space) - Detener canción (Espaciador) + Detener canción (Espacio) Add beat/bassline - Agregar beat/bassline + Agregar Ritmo/bajo Add sample-track - Agregar pista de ejemplo. + Agregar pista de muestras (samples) Add automation-track - + Agregar pista de Automatización Draw mode - + Modo de dibujo Edit mode (select and move) - + Modo de edición (seleccionar y mover) 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. + Haz click aquí si deseas reproducir la canción completa. La reproducción comenzará en el marcador de posición. Puede mover este marcador incluso durante la reproducción. 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. + Haz click aquí para detener la reproducción de la canción. (El marcador de posición volverá al principio de la canción, o a su posición inicial, o permanecerá en su lugar dependiendo del comportamiento que hayas seleccionado). + + + Track actions + Acciones de pista + + + Edit actions + Acciones de edición + + + Timeline controls + Controles de la línea de Tiempo + + + Zoom controls + Controles de Acercamiento SpectrumAnalyzerControlDialog Linear spectrum - + Espectro lineal Linear Y axis - + Eje Y lineal SpectrumAnalyzerControls Linear spectrum - + Espectro lineal Linear Y axis - + Eje Y lineal Channel mode - + Modo del canal + + + + SubWindow + + Close + Cerrar + + + Maximize + Maximizar + + + Minimize + Minimizar + + + Restore + Restaurar TabWidget Settings for %1 - + Configuración para %1 TempoSyncKnob Tempo Sync - + Sincronizar al-Tempo No Sync - + Sin Sincro Eight beats - + Ocho tiempos Whole note - + Redonda Half note - + Blanca Quarter note - + Negra 8th note - + Corchea 16th note - + Semicorchea 32nd note - + Fusa Custom... - + Personalizado... Custom - + Personalizado Synced to Eight Beats - + Sincro a ocho tiempos Synced to Whole Note - + Sincro a Redondas Synced to Half Note - + Sincro a Blancas Synced to Quarter Note - + Sincro a Negras Synced to 8th Note - + Sincro a Corcheas Synced to 16th Note - + Sincro a semicorcheas Synced to 32nd Note - + Sincro a Fusas TimeDisplayWidget click to change time units - + Haz click aquí para modificar las unidades de tiempo + + + MIN + MIN + + + SEC + SEG + + + MSEC + MSEG + + + BAR + COMPAS + + + BEAT + PULSO + + + TICK + TICK TimeLineWidget Enable/disable auto-scrolling - + Activar/Desactivar avance automático Enable/disable loop-points - + Activar/Desactivar blucle After stopping go back to begin - + Al detenerse volver al principio After stopping go back to position at which playing was started - + Al detenerse volver a la posición en la que comenzó la reproducción After stopping keep position - + Al detenerse quedarse en esa posición Hint - + Pista Press <%1> to disable magnetic loop points. - + Presiona <&1> para desactivar los puntos de bucle magnéticos. Hold <Shift> to move the begin loop point; Press <%1> to disable magnetic loop points. - + Mantén <Shift> para mover el punto de bucle inicial. Presiona <%1> para desactivar los puntos de bucle magnéticos. Track Mute - + Silencio Solo - + Solo TrackContainer Couldn't import file - + No se pudo importar el archivo - Couldn't find a filter for importing file %1. + Couldn't find a filter for importing file %1. You should convert this file into a format supported by LMMS using another software. - + No se pudo hallar un filtro para importar %1. +Debes convertir este archivo a un formato soportado por LMMS usando otra aplicación. Couldn't open file - + No se puede abrir el archivo - Couldn't open file %1 for reading. + 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! - + El archivo %1 no puede abrirse para lectura. +¡Asegúrate de tener permisos de lectura tanto del archivo como del directorio que lo contiene e inténtalo nuevamente! Loading project... - Cargando proyecto... + Cargando proyecto... Cancel - Cancelar + Cancelar Please wait... - Por favor, espere... + Por favor, espera... Importing MIDI-file... - Importar archivo MIDI... - - - Importing FLP-file... - + Importando archivo MIDI... TrackContentObject - Muted - + Mute + Silencio TrackContentObjectView Current position - + Posición actual Hint - + Pista Press <%1> and drag to make a copy. - + Presiona <%1> y arrastra para crear una copia. Current length - + Duración actual Press <%1> for free resizing. - + Presiona <%1> para redimensionar libremente. %1:%2 (%3:%4 to %5:%6) - + %1:%2 (%3:%4 a %5:%6) Delete (middle mousebutton) - + Borrar (click del medio [rueda]) Cut - Cortar + Cortar Copy - Copiar + Copiar Paste - Pegar + Pegar Mute/unmute (<%1> + middle click) - + Activar/Desacivar Silencio (<&1> + click del medio) TrackOperationsWidget Press <%1> while clicking on move-grip to begin a new drag'n'drop-action. - + Presiona <%1> al hacer click en el area de agarre para iniciar una nueva accion de 'arrastrar y soltar'. Actions for this track - + Acciones para esta pista Mute - + Silencio Solo - + Solo Mute this track - + Silenciar esta pista Clone this track - Clonar esta pista + Clonar esta pista Remove this track - + Eliminar esta pista Clear this track - + Limpiar esta pista FX %1: %2 - + FX %1: %2 Turn all recording on - + Encender todas las grabacioens Turn all recording off - + Apagar todas las grabacioens + + + Assign to new FX Channel + Asignar a un nuevo Canal FX TripleOscillatorView Use phase modulation for modulating oscillator 1 with oscillator 2 - + Usar modulacion de fase para modular el oscilador 1 con el oscilador 2 Use amplitude modulation for modulating oscillator 1 with oscillator 2 - + Usar modulacion de amplitud para modular el oscilador 1 con el oscilador 2 Mix output of oscillator 1 & 2 - + Mezclar la salida de los osciladores 1 y 2 Synchronize oscillator 1 with oscillator 2 - + Sincronizar el oscilador 1 con el oscilador 2 Use frequency modulation for modulating oscillator 1 with oscillator 2 - + Usar modulacion de frecuencia para mudular el oscilador 1 con el oscilador 2 Use phase modulation for modulating oscillator 2 with oscillator 3 - + Usar modulacion de fase para modular el oscilador 2 con el oscilador 3 Use amplitude modulation for modulating oscillator 2 with oscillator 3 - + Usar modulacion de amplitud para modular el oscilador 2 con el oscilador 3 Mix output of oscillator 2 & 3 - + Mezclar la salida de los osciladores 2 y 3 Synchronize oscillator 2 with oscillator 3 - + Sincronizar el oscilador 2 con el oscilador 3 Use frequency modulation for modulating oscillator 2 with oscillator 3 - + Usar modulacion de frecuencia para modular el oscilador 2 con el oscilador 3 Osc %1 volume: - Osc %1 Volumen: + 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í. + Con este control puedes establecer el volumen del oscilador %1. Al fijar un valor de 0 se apaga. De lo contrario podras oir al oscilador tan alto como lo especifiques aquí. Osc %1 panning: - Osc %1 encuadramiento: + Osc %1 paneo: 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. + Con este control puedes establecer el paneo 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: + Osc %1 desintonización gruesa: semitones - semitonos + semitonos With this knob you can set the coarse detuning of oscillator %1. You can detune the oscillator 24 semitones (2 octaves) 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 24 semitonos (2 octavas) arriba y abajo. Esto es útil para la creación de sonidos con acorde. + Con este control usted podrá establecer la desintonización gruesa del oscilador %1. Usted puede desintonizar el oscilador 24 semitonos (2 octavas) arriba y abajo. Esto es útil para la creación de sonidos con un acorde. Osc %1 fine detuning left: - Osc %1 desintonización fina izquierda: + Osc %1 desintonización fina izquierda: cents - 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\". + Esta perilla define la desintonización fina del canal izquierdo del oscilador %1. La extensión es de -100 cents a +100 cents. Util para crear sonidos 'gordos'. Osc %1 fine detuning right: - Osc %1 desintonización fina derecha: + 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\". + Esta perilla define la desintonización fina del canal derecho del oscilador %1. La extensión es de -100 cents a +100 cents. Util para crear sonidos 'gordos'. Osc %1 phase-offset: - Osc %1 fase de compensación: + Osc %1 balance de fase: degrees - grados + 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. + Con esta perilla. puedes definir el balance de la fase del oscilador %1. Esto significa que puedes mover el punto de la onda en el cual el oscilador comienza a oscilar. Por ejemplo, en una onda sinusoidal con un balace de fase de 180 grados la onda irá primero hacia abajo. Pasará lo mismo con una onda cuadrada. Osc %1 stereo phase-detuning: - + Osc %1 desintonización de fase estéreo: 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. - + Esta perilla define la desintonización de fase estéreo del oscilador %1. La desintonización de fase estéreo especifica el tamaño de la diferencia entre el balance de fase de los canales izquierdo y derecho. Muy bueno para crear sonidos estéreo amplios. Use a sine-wave for current oscillator. - + Usar una onda sinusoidal para el oscilador actual. Use a triangle-wave for current oscillator. - + Usar una onda triangular para el oscilador actual. Use a saw-wave for current oscillator. - + Usar una onda de sierra para el oscilador actual. Use a square-wave for current oscillator. - + Usar una onda cuadrada para el oscilador actual. Use a moog-like saw-wave for current oscillator. - + Usar una onda de sierra tipo moog para el oscilador actual. Use an exponential wave for current oscillator. - + Usar una onda exponencial para el oscilador actual. Use white-noise for current oscillator. - + Usar ruido-blanco para el oscilador actual. Use a user-defined waveform for current oscillator. - + Usar una onda definida por el usuario para el oscilador actual. VersionedSaveDialog Increment version number - + Usar un número de versión mayor Decrement version number - + Usar un número de versión menor VestigeInstrumentView Open other VST-plugin - + Abrir otro complemento 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. - + Haz click aquí si deseas abrir otro plugin VST. Al hacer click en este botón, se mostrará un diálogo para abrir el archivo y podrás elegir el archivo deseado. Show/hide GUI - + Mostrar/Ocultar INTERFAZ Click here to show or hide the graphical user interface (GUI) of your VST-plugin. - + Haz click aquí para mostrar u ocultar la interfaz (GUI) de tu VST. Turn off all notes - + Apagar todas las notas Open VST-plugin - + Abrir complemento VST DLL-files (*.dll) - + archivos DDL (*.dll) EXE-files (*.exe) - + archivos EXE (*.exe) No VST-plugin loaded - + Ningún complemento VST cargado Control VST-plugin from LMMS host - + Controlar el complemento VST desde anfitrión de LMMS Click here, if you want to control VST-plugin from host. - + Haz click aquí si deseas controlar tu instrumento VST desde el anfitrión. Open VST-plugin preset - + Abrir preconfiguración de VST Click here, if you want to open another *.fxp, *.fxb VST-plugin preset. - + Haz click aquí si deseas abrir otra preconfiguración de VST (*.fxp, *.fxb). Previous (-) - + Anterior (-) Click here, if you want to switch to another VST-plugin preset program. - + Haz click aquí si deseas cambiar a otro programa de preconfiguración de VST. Save preset - + Guardar preconfiguración Click here, if you want to save current VST-plugin preset program. - + Haz click aquí si deseas guardar el programa de preconfiguración del VST actual. Next (+) - + Siguiente (+) Click here to select presets that are currently loaded in VST. - + Haz click aquí para elegir preconfiguraciones que están actualmente cargadas en el VST. Preset - + Preconfiguración by - + por - VST plugin control - + control de complementos VST VisualizationWidget click to enable/disable visualization of master-output - click, para activar/desactivar visualización de la salida principal + Haz clcik aquí para activar o desactivar la visualización de la salida principal Click to enable - + Click para activar VstEffectControlDialog Show/hide - + Mostrar/Ocultar Control VST-plugin from LMMS host - + Controlar el complemento VST desde anfitrión de LMMS Click here, if you want to control VST-plugin from host. - + Haz click aquí si deseas controlar tu instrumento VST desde el anfitrión. Open VST-plugin preset - + Abrir preconfiguración de VST Click here, if you want to open another *.fxp, *.fxb VST-plugin preset. - + Haz click aquí si deseas abrir otra preconfiguración de VST (*.fxp, *.fxb). Previous (-) - + Anterior (-) Click here, if you want to switch to another VST-plugin preset program. - + Haz click aquí si deseas cambiar a otro programa de preconfiguración de VST. Next (+) - + Siguiente (+) Click here to select presets that are currently loaded in VST. - + Haz click aquí para elegir preconfiguraciones que están actualmente cargadas en el VST. Save preset - + Guardar preconfiguración Click here, if you want to save current VST-plugin preset program. - + Haz click aquí si deseas guardar el programa de preconfiguración del VST actual. Effect by: - + Efecto por: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /> - + &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /> VstPlugin Loading plugin - + Cargando complemento Open Preset - + Abrir Preconfiguración Vst Plugin Preset (*.fxp *.fxb) - + Preconfiguración VST (*.fxp *.fxb) : default - + : por defecto " - + " ' - + ' Save Preset - + Guardar preconfiguración .fxp - + .fxp .FXP - + .FXP .FXB - + FXB .fxb - + .fxb Please wait while loading VST plugin... - + Por favor espere mientras se carga el complemento VST... The VST plugin %1 could not be loaded. - + El complemento VST %1 no se ha podido cargar. WatsynInstrument Volume A1 - + A1 volumen Volume A2 - + A2 volumen Volume B1 - + B1 volumen Volume B2 - + B2 volumen Panning A1 - + A1 paneo Panning A2 - + A2 paneo Panning B1 - + B1 paneo Panning B2 - + B2 paneo Freq. multiplier A1 - + A1 frec multip Freq. multiplier A2 - + A2 frec multip Freq. multiplier B1 - + B1 frec multip Freq. multiplier B2 - + B2 frec multip Left detune A1 - + A1 desafin izq Left detune A2 - + A2 desafin izq Left detune B1 - + B1 desafin izq Left detune B2 - + B2 desafin izq Right detune A1 - + A1 desafin der Right detune A2 - + A2 desafin der Right detune B1 - + B1 desafin der Right detune B2 - + B2 desafin der A-B Mix - + Mezcla A-B A-B Mix envelope amount - + Cantidad de envolvente de la Mezcla A-B A-B Mix envelope attack - + Ataque de envolvente de la mezcla A-B A-B Mix envelope hold - + Sostén de envolvente de la mezcla A-B A-B Mix envelope decay - + Caída de envolvente de la mezcla A-B A1-B2 Crosstalk - + Diafonía A1-B2 A2-A1 modulation - + Modulación A2-A1 B2-B1 modulation - + Modulación B2-B1 Selected graph - + Gráfico seleccionado WatsynView Select oscillator A1 - + Seleccionar oscilador A1 Select oscillator A2 - + Seleccionar oscilador A2 Select oscillator B1 - + Seleccionar oscilador B1 Select oscillator B2 - + Seleccionar oscilador B2 Mix output of A2 to A1 - + Mezclar la salida de A2 con A1 Modulate amplitude of A1 with output of A2 - + Modular la amplitud de A1 con la salida de A2 Ring-modulate A1 and A2 - + Modular A1 y A2 en anillo Modulate phase of A1 with output of A2 - + Modular la fase de A1 con la salida de A2 Mix output of B2 to B1 - + Mezclar la salida de B2 con B1 Modulate amplitude of B1 with output of B2 - + Modular la amplitud de B1 con la salida de B2 Ring-modulate B1 and B2 - + Modular B1 y B2 en anillo Modulate phase of B1 with output of B2 - + Modular la fase de B1 con la salida de B2 Draw your own waveform here by dragging your mouse on this graph. - + Dibuja tu propia onda aquí arrastrando el ratón sobre el gráfico. Load waveform - + Cargar onda Click to load a waveform from a sample file - + Haz click para cargar una onda de un archivo de muestra Phase left - + Fase izquierda Click to shift phase by -15 degrees - + Haz click aquí para cambiar la fase en -15 grados Phase right - + Fase derecha Click to shift phase by +15 degrees - + Haz click aquí para cambiar la fase en +15 grados Normalize - + Normalizar Click to normalize - + Haz click para normalizar Invert - + Invertir Click to invert - + Haz click para invertir Smooth - + Suavizar Click to smooth - + Haz click para suavizar Sine wave - + Onda Sinusoidal Click for sine wave - + Haz click aquí para elegir una onda-sinusoidal Triangle wave - + Onda triangular Click for triangle wave - + Haz click aquí para seleccionar una onda triangular Click for saw wave - + Haz click aquí para elegir una onda de sierra Square wave - + Onda Cuadrada Click for square wave - + Haz click aquí para seleccionar una onda-cuadrada + + + Volume + Volumen + + + Panning + Paneo + + + Freq. multiplier + Multiplicador del frec. + + + Left detune + Desafinación izquierda + + + cents + cents + + + Right detune + Desafinación derecha + + + A-B Mix + Mezcla A-B + + + Mix envelope amount + Mezclar cantidad de envolvente + + + Mix envelope attack + Mezclar ataque de envolvente + + + Mix envelope hold + Mezclar sostén de envolvente + + + Mix envelope decay + Mezclar retraso de envolvente + + + Crosstalk + Diafonía ZynAddSubFxInstrument Portamento - + Portamento Filter Frequency - + Frecuencia de Filtro Filter Resonance - + Resonancia de Filtro Bandwidth - + AnchoDeBanda FM Gain - + Ganancia FM Resonance Center Frequency - + Frecuencia Central de Resonncia Resonance Bandwidth - + Ancho de banda de Resonancia Forward MIDI Control Change Events - + Enviar Eventos MIDI de cambios de control ZynAddSubFxView Show GUI - + Mostrar Interfaz Click here to show or hide the graphical user interface (GUI) of ZynAddSubFX. - + Haz click aquí para mostrar u ocultar la interfaz gráfica (GUI) de ZynAddSubFX. Portamento: - + Portamento: PORT - + PORT Filter Frequency: - + Frecuencia de Filtro: FREQ - + FREC Filter Resonance: - + Resonancia de Filtro: RES - + RESO Bandwidth: - + AnchoDeBanda: BW - + AB FM Gain: - + Ganancia FM: FM GAIN - + GAN FM Resonance center frequency: - + Frecuencia Central de Resonncia: RES CF - + FC RES Resonance bandwidth: - + Ancho de banda de Resonancia: RES BW - + AB RES Forward MIDI Control Changes - + Enviar cambios de Control MIDI @@ -6816,2452 +7592,2369 @@ La desintonización fina esta comprendida entre -100 cents y +100 cents. Esto es Reverse sample - + Reproducir la muestra en reversa Stutter - + Tartamudeo Loopback point - + Inicio del bucle Loop mode - + Modo Bucle Interpolation mode - + Modo de Interpolación None - + Ninguno Linear - + Lineal Sinc - + Sinc Sample not found: %1 - + Muestra no encontrada: %1 bitInvader Samplelength - + Longitud de la muestra bitInvaderView Sample Length - + Longitud de la muestra Sine wave - + Onda Sinusoidal Triangle wave - + Onda triangular Saw wave - + Onda de sierra Square wave - + Onda Cuadrada White noise wave - + Ruido-blanco User defined wave - + onda definida por el usuario Smooth - + Suavizar Click here to smooth waveform. - + Haz click aquí para suavizar la onda. Interpolation - + Interpolación Normalize - + Normalizar Draw your own waveform here by dragging your mouse on this graph. - + Dibuja tu propia onda aquí arrastrando el ratón sobre el gráfico. Click for a sine-wave. - + Haz click aquí para elegir una onda-sinusoidal. Click here for a triangle-wave. - + Haz click aquí para seleccionar una onda triangular. Click here for a saw-wave. - + Haz click aquí para elegir una onda de sierra. Click here for a square-wave. - + Haz click aquí para elegir una onda cuadrada. Click here for white-noise. - + Haz click aquí para elegir ruido-blanco. Click here for a user-defined shape. - + Haz click aquí para elegir una onda-personalizada. dynProcControlDialog INPUT - + ENTRADA Input gain: - + Ganancia de Entrada: OUTPUT - + SALIDA Output gain: - + Ganancia de Salida: ATTACK - + ATAQUE Peak attack time: - + Tiempo pico de ataque: RELEASE - + DISIPACIÓN Peak release time: - + Tiempo pico de disipación: Reset waveform - + Restaurar onda Click here to reset the wavegraph back to default - + Haz click aquí para restaurar el gráfico de onda por defecto Smooth waveform - + Suavizar onda Click here to apply smoothing to wavegraph - + Haz click aquí para aplicar suavizado al gráfico de onda Increase wavegraph amplitude by 1dB - + Aumentar la amplitud del gráfico 1dB Click here to increase wavegraph amplitude by 1dB - + Haz click aquí para aumentar la amplitud del gráfico en 1dB Decrease wavegraph amplitude by 1dB - + Disminuir la amplitud del gráfico en 1dB Click here to decrease wavegraph amplitude by 1dB - + Haz click aquí para disminuir la amplitud del gráfico en 1dB Stereomode Maximum - + ModoEstéreo Máximo Process based on the maximum of both stereo channels - + Proceso basado en el máximo de ambos canales estéreo Stereomode Average - + ModoEstéreo Promedio Process based on the average of both stereo channels - + Proceso basado en el promedio de ambos canales estéreo Stereomode Unlinked - + ModoEstéreo Desenlazado Process each stereo channel independently - + Procesa cada canal estéreo de manera independiente dynProcControls Input gain - + ganancia de entrada Output gain - + ganancia de salida Attack time - + Tiempo de ataque Release time - + Tiempo de disipación Stereo mode - + Modo Estéreo + + + + fxLineLcdSpinBox + + Assign to: + Asignar a: + + + New FX Channel + Nuevo Canal FX graphModel Graph - + Gráfico kickerInstrument Start frequency - + Frecuencia Inicial End frequency - + Frecuencia Final Gain - + Ganancia Length - + Duración Distortion Start - + Inicio de la distorsión Distortion End - + Final de la distorsión Envelope Slope - + Inclinación de la Envolvente Noise - + Ruido Click - + Chasquido Frequency Slope - + Inclinación de la Frecuencia Start from note - + Empenzar en la nota End to note - + Terminar en la nota kickerInstrumentView Start frequency: - + Frecuencia Inicial: End frequency: - + Frecuencia Final: Gain: - + Ganancia: Frequency Slope: - + Inclinación de la Frecuencia: Envelope Length: - + Longitud de la Envolvente: Envelope Slope: - + Inclinación de la Envolvente: Click: - + Chasquido: Noise: - + Ruido: Distortion Start: - + Inicio de la distorsión: Distortion End: - + Final de la distorsión: ladspaBrowserView Available Effects - + Efectos Disponibles Unavailable Effects - + Efectos No Disponibles Instruments - + Instrumentos Analysis Tools - + Herramientas de Análisis Don't know - + Desconocido 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. +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. +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. +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 muestra información de todos los complementos LADSPA que LMMS pudo encontrar. Se encuentran divididos en cinco (5) categorías basadas en una interpretación de los nombres y los tipos de puertos. + +Efectos Disponibles: son aquelos que pueden ser usados por LMMS. Para ello deben, primero y principalmente, ser efectos. O sea que deben tener tanto canales de entrada como de salida. LMMS identifica como caneles de entrada a los puertos de audio que contengan 'IN' en el nombre. Los canales de salida se identifican por la palabra 'OUT'. Además, el efecto debe tener la misma cantidad de canales de entrada como de salida y ser capaz de ejecutarse en tiempo real. + +Efectos No Disponibles: son aquellos que aún siendo identificados como efectos, no tienen el mismo número de entradas que de salidas y/o no pueden ser ejecutados en tiempo real. + +Instrumentos: son complementos que sólo poseen canales de salida. + +Herramientas de Análisis: son complementos que sólo cuentan con canales de entrada. + +Desconocido: son complementos en los cuales no se pudo identificar ningún canal ni de entrada ni de salida. + +Haciendo doble click en cualquier complementos mostrará la información de sus puertos. Type: - Tipo + Tipo: ladspaDescription Plugins - + Complementos Description - + Descripción ladspaPortDialog Ports - + Puertos Name - + Nombre Rate - + Tasa (rate) Direction - + Dirección Type - + Tipo Min < Default < Max - + Min < Defecto < Max Logarithmic - + Logarítmico SR Dependent - + Depende de SR Audio - + Audio Control - + Control Input - + Entrada Output - + Salida Toggled - + Alternado Integer - + Entero Float - + Decimal Yes - + Si lb302Synth VCF Cutoff Frequency - + FCV frecuencia de corte VCF Resonance - + FCV Resonancia VCF Envelope Mod - + FCV Mod de Envolvente VCF Envelope Decay - + FCV Caída de Envolvente Distortion - + Distorsión Waveform - + Forma de Onda Slide Decay - + Duración del Portamento Slide - + Portamento Accent - + Acento Dead - + Sordina 24dB/oct Filter - + Filtro 24db/oct lb302SynthView Cutoff Freq: - + Frec.de Corte: Resonance: - + Resonancia: Env Mod: - + Mod Env: Decay: - Decay: + Caída: 303-es-que, 24dB/octave, 3 pole filter - + Filtro Tipolar de 24dB/octava tipo-303 Slide Decay: - + Duración del Portamento: DIST: - + DIST: Saw wave - + Onda de sierra Click here for a saw-wave. - + Haz click aquí para elegir una onda de sierra. Triangle wave - + Onda triangular Click here for a triangle-wave. - + Haz click aquí para seleccionar una onda triangular. Square wave - + Onda Cuadrada Click here for a square-wave. - + Haz click aquí para elegir una onda cuadrada. Rounded square wave - + Onda Cuadrada-redondeada Click here for a square-wave with a rounded end. - + Haz click aquí para elegir una onda cuadrada-redondeada. Moog wave - + Onda Moog Click here for a moog-like wave. - + Haz click aquí para elegir una onda tipo moog. Sine wave - + Onda Sinusoidal Click for a sine-wave. - + Haz click aquí para elegir una onda-sinusoidal. White noise wave - + Ruido-blanco Click here for an exponential wave. - + Haz click aquí para elegir una onda exponencial. Click here for white-noise. - + Haz click aquí para elegir ruido-blanco. Bandlimited saw wave - + Onda de sierra de bandaLimitada Click here for bandlimited saw wave. - + Haz click aquí para una onda de de sierra de bandaLimitada. Bandlimited square wave - + Onda cuadrada de BandaLimitada Click here for bandlimited square wave. - + Haz click aquí para una onda cuadrada de bandaLimitada. Bandlimited triangle wave - + Onda triangular de BandaLimitada Click here for bandlimited triangle wave. - + Haz click aquí para una onda triangular de bandaLimitada. Bandlimited moog saw wave - + Onda de sierra Moog de banda Limitada 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 - + Haz click aquí para elegir una onda de sierra tipo Moog de banda Limitada. malletsInstrument Hardness - + Dureza Position - + Posición Vibrato Gain - + Ganancia del Vibrato Vibrato Freq - + Frec del Vibrato Stick Mix - + Golpe Modulator - + Modulador Crossfade - + Crossfade LFO Speed - + Velocidad del LFO LFO Depth - + Profundidad del LFO ADSR - + ADSR Pressure - + Presión Motion - + Movimiento Speed - + Velocidad Bowed - + Frotado Spread - + Propagación Marimba - + Marimba Vibraphone - + Vibráfono Agogo - + Agogo Wood1 - + Madera1 Reso - + Reso Wood2 - + Madera2 Beats - + Tiempos Two Fixed - + Dos-Fijos Clump - + Grupo Tubular Bells - + Campanas tubulares Uniform Bar - + Barras uniformes Tuned Bar - + Barra afinada Glass - + Vidrio Tibetan Bowl - - - - Missing files - - - - Your Stk-installation seems to be incomplete. Please make sure the full Stk-package is installed! - + Cuencos Tibetanos malletsInstrumentView Instrument - + Instrumento Spread - + Propagación Spread: - + Propagación: 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 - + Golpe Stick Mix: - + Golpe: Modulator - + Modulador Modulator: - + Modulador: Crossfade - + Crossfade Crossfade: - + Crossfade: LFO Speed - + Velocidad del LFO LFO Speed: - + velocidad del LFO: LFO Depth - + Profundidad del LFO LFO Depth: - + Profundidad del LFO: ADSR - + ADSR ADSR: - - - - Bowed - + ADSR: Pressure - + Presión Pressure: - - - - Motion - - - - Motion: - + Presión: Speed - + Velocidad Speed: - + Velocidad: - Vibrato - + Missing files + Archivos perdidos - Vibrato: - + Your Stk-installation seems to be incomplete. Please make sure the full Stk-package is installed! + Tu instalación de Stk se encuentra aparentemente incompleta. ¡Por favor asegúrate que el paquete Stk completo esta instalado! manageVSTEffectView - VST parameter control - + - control de parámetros VST VST Sync - + Sinc VST Click here if you want to synchronize all parameters with VST plugin. - + Haz click aquí si deseas sincronizar todos los parámetros con el complemento VST. Automated - + Autimatizado Click here if you want to display automated parameters only. - + Haz click aquí si deseas mostrar sólo los parámetros automatizados. Close - + Cerrar Close VST effect knob-controller window. - + Cerrar ventana de controlador de efecto VST. manageVestigeInstrumentView - VST plugin control - + control de complementos VST VST Sync - + Sinc VST Click here if you want to synchronize all parameters with VST plugin. - + Haz click aquí si deseas sincronizar todos los parámetros con el complemento VST. Automated - + Autimatizado Click here if you want to display automated parameters only. - + Haz click aquí si deseas mostrar sólo los parámetros automatizados. Close - + Cerrar Close VST plugin knob-controller window. - + Cerrar ventana de controlador de efecto VST. opl2instrument Patch - + Ajuste Op 1 Attack - + Op 1 Ataque Op 1 Decay - + Op 1 Caída Op 1 Sustain - + Op 1 Sostén Op 1 Release - + Op 1 Disipación Op 1 Level - + Op 1 Nivel Op 1 Level Scaling - + Op 1 Escala de Nivel Op 1 Frequency Multiple - + Op 1 Multiplicador de Frecuencia Op 1 Feedback - + Op 1 Feedback Op 1 Key Scaling Rate - + Op 1 tasa de escalado del teclado Op 1 Percussive Envelope - + Op 1 Envolvente Percusiva Op 1 Tremolo - + Op 1 Trémolo Op 1 Vibrato - + Op 1 Vibrato Op 1 Waveform - + Op 1 Forma de onda Op 2 Attack - + Op 2 Ataque Op 2 Decay - + Op 2 Caída Op 2 Sustain - + Op 2 Sostén Op 2 Release - + Op 2 Disipación Op 2 Level - + Op 2 Nivel Op 2 Level Scaling - + Op 2 Escala de Nivel Op 2 Frequency Multiple - + Op 2 Multiplicador de Frecuencia Op 2 Key Scaling Rate - + Op 2 tasa de escalado del teclado Op 2 Percussive Envelope - + Op 2 Envolvente Percusiva Op 2 Tremolo - + Op 2 Trémolo Op 2 Vibrato - + Op 2 Vibrato Op 2 Waveform - + Op 2 Forma de onda FM - + FM Vibrato Depth - + Profundidad del Vibrato Tremolo Depth - + Profundidad del Trémolo + + + + opl2instrumentView + + Attack + Ataque + + + Decay + Caída + + + Release + Disipación + + + Frequency multiplier + Multiplicador de la frecuencia organicInstrument Distortion - + Distorsión Volume - + Volumen organicInstrumentView Distortion: - + Distorsión: Volume: - + Volumen: Randomise - + Aleatorizar Osc %1 waveform: - + Forma de onda del osc %1: Osc %1 volume: - Osc %1 Volumen: + Osc %1 Volumen: Osc %1 panning: - Osc %1 encuadramiento: + Osc %1 paneo: cents - cents + cents The distortion knob adds distortion to the output of the instrument. - + La perilla de distorsión añade distorsión a la salida del instrumento. The volume knob controls the volume of the output of the instrument. It is cumulative with the instrument window's volume control. - + La perilla de Volumen controla el volumen de salida del instrumento. Es acumulativo con el control de volumen de la ventana. The randomize button randomizes all knobs except the harmonics,main volume and distortion knobs. - + El botón 'Aleatorizar' define valores aleatorios para todas las perillas con excepción de las de armónicos, volumen principal y distorsión. Osc %1 stereo detuning - + Desafinación estéreo del Osc %1 Osc %1 harmonic: - + armónicos del Osc %1: papuInstrument Sweep time - + Duración del barrido Sweep direction - + Dirección del barrido Sweep RtShift amount - + Cantidad RTShift de barrido Wave Pattern Duty - + Ciclo de trabajo del patrón de onda Channel 1 volume - + Canal 1 Volumen Volume sweep direction - + Dirección del barrido de Volumen Length of each step in sweep - + Duración de cada etapa en el barrido Channel 2 volume - + Canal 2 Volumen Channel 3 volume - + Canal 3 Volumen Channel 4 volume - + Canal 4 Volumen Right Output level - + Nivel de Salida derecha Left Output level - + Nivel de Salida izquierda Channel 1 to SO2 (Left) - + Canal 1 a SO2 (izq) Channel 2 to SO2 (Left) - + Canal 2 a SO2 (izq) Channel 3 to SO2 (Left) - + Canal 3 a SO2 (izq) Channel 4 to SO2 (Left) - + Canal 4 a SO2 (izq) Channel 1 to SO1 (Right) - + Canal 1 a SO1 (der) Channel 2 to SO1 (Right) - + Canal 2 a SO1 (der) Channel 3 to SO1 (Right) - + Canal 3 a SO1 (der) Channel 4 to SO1 (Right) - + Canal 4 a SO1 (der) Treble - + Agudos Bass - + Bajos Shift Register width - + Cambiar Amplitud del Registro papuInstrumentView Sweep Time: - + Duración del barrido: Sweep Time - + Duración del barrido Sweep RtShift amount: - + Cantidad RTShift de barrido: Sweep RtShift amount - + Cantidad RTShift de barrido Wave pattern duty: - + Ciclo de trabajo del patrón de onda: Wave Pattern Duty - + Ciclo de trabajo del patrón de onda Square Channel 1 Volume: - + Canal de onda cuadrada 1 Volumen: Length of each step in sweep: - + Duración de cada etapa en el barrido: Length of each step in sweep - + Duración de cada etapa en el barrido Wave pattern duty - + Ciclo de trabajo del patrón de onda Square Channel 2 Volume: - + Canal de onda cuadrada 2 Volumen: Square Channel 2 Volume - + Canal de onda cuadrada 2 Volumen Wave Channel Volume: - + Volumen del canal de Onda: Wave Channel Volume - + Volumen del canal de Onda Noise Channel Volume: - + Volumen del canal de Ruido: Noise Channel Volume - + Volumen del canal de Ruido SO1 Volume (Right): - + SO1 Volumen (der): SO1 Volume (Right) - + SO1 Volumen (der) SO2 Volume (Left): - + SO2 Volumen (Izq): SO2 Volume (Left) - + SO2 Volumen (Izq) Treble: - + Agudos: Treble - + Agudos Bass: - + Bajos: Bass - + Bajos Sweep Direction - + Dirección del barrido Volume Sweep Direction - + Dirección del barrido de Volumen Shift Register Width - + Cambiar Amplitud del Registro Channel1 to SO1 (Right) - + Canal 1 a SO1 (der) Channel2 to SO1 (Right) - + Canal 2 a SO1 (der) Channel3 to SO1 (Right) - + Canal 3 a SO1 (der) Channel4 to SO1 (Right) - + Canal 4 a SO1 (der) Channel1 to SO2 (Left) - + Canal 1 a SO2 (izq) Channel2 to SO2 (Left) - + Canal 2 a SO2 (izq) Channel3 to SO2 (Left) - + Canal 3 a SO2 (izq) Channel4 to SO2 (Left) - + Canal 4 a SO2 (izq) Wave Pattern - + Patrón de Onda The amount of increase or decrease in frequency - + La cantidad de aumento o disminución de frecuencia The rate at which increase or decrease in frequency occurs - + La tasa en la que el aumento o disminución de la frecuencia tiene lugar The duty cycle is the ratio of the duration (time) that a signal is ON versus the total period of the signal. - + El 'ciclo de trabajo' es la razón entre la duración (tiempo) que la señal esta ON (ENCENDIDA) y el período total de dicha señal. Square Channel 1 Volume - + Canal de onda cuadrada 1 Volumen The delay between step change - + El retraso entre el cambio de etapa Draw the wave here - + Dibuja la onda aquí + + + + patchesDialog + + Qsynth: Channel Preset + Qsynth: Preconfiguración del Canal + + + Bank selector + Selector de banco + + + Bank + Banco + + + Program selector + Selector de programa + + + Patch + Ajuste + + + Name + Nombre + + + OK + OK + + + Cancel + Cancelar pluginBrowser no description - + sin descripción Incomplete monophonic imitation tb303 - + Imitación monofónica incompleta del tb303 Plugin for freely manipulating stereo output - + Complemento para manipular libremente la salida estéreo Plugin for controlling knobs with sound peaks - + Complemento para controlar las perillas a través de los picos de sonido Plugin for enhancing stereo separation of a stereo input file - + Complemento para mejorar la separación estéreo de un archivo de entrada estéreo List installed LADSPA plugins - - - - Filter for importing FL Studio projects into LMMS - + Listar los complementos LADSPA instalados GUS-compatible patch instrument - + Instrumento de patches (*.pat) compatible con GUS Additive Synthesizer for organ-like sounds - + Sintetizador Aditivo para sonidos de órgano Tuneful things to bang on - + Cosas melodiosas para pegarles VST-host for using VST(i)-plugins within LMMS - + Anfitrión VST para usar complementos VST(i) en LMMS Vibrating string modeler - + Modelador de cuerdas vibrantes plugin for using arbitrary LADSPA-effects inside LMMS. - + complemento para usar efectos LADSPA a voluntad en LMMS. Filter for importing MIDI-files into LMMS - + Filtro para importar archivos MIDI en LMMS Emulation of the MOS6581 and MOS8580 SID. This chip was used in the Commodore 64 computer. - + Emulación del MOS6581 y del MOS8580 SID. +Este chip se usaba en las computadoras Commodore 64. Player for SoundFont files - + Reproductor de archivos SoundFont Emulation of GameBoy (TM) APU - + Emulación del GameBoy (TM) APU Customizable wavetable synthesizer - + Sintetizador de tabla de ondas personalizable Embedded ZynAddSubFX - + ZynAddSubFX integrado 2-operator FM Synth - + Sintetizador FM de 2 operadores Filter for importing Hydrogen files into LMMS - + Filtro para importar archivos de Hydrogen a LMMS LMMS port of sfxr - + Port de sfxr para LMMS Monstrous 3-oscillator synth with modulation matrix - + Monstruoso sinte de 3 osciladores con matriz de modulación Three powerful oscillators you can modulate in several ways - + Tres poderosos osciladores que puedes modular de muchas maneras A native amplifier plugin - + Un complemento de amplificación nativo Carla Rack Instrument - + Bandeja de instrumentos Carla 4-oscillator modulatable wavetable synth - + Sintetizador de 4 osciladores de tablas de modulacion y tablas de ondas plugin for waveshaping - + complemento para modear ondas Boost your bass the fast and simple way - + Potenciá tus bajos de forma rápida y fácil Versatile drum synthesizer - + Sintetizador de percusión versátil Simple sampler with various settings for using samples (e.g. drums) in an instrument-track - + Sampler simple con varias configuraciones para usar muestras (por ej percusión) en una pista de instrumento plugin for processing dynamics in a flexible way - + Complemento para procesar dinámicas de una manera flexible Carla Patchbay Instrument - + Bahía de Conexiones Carla plugin for using arbitrary VST effects inside LMMS. - + complemento para usar efectos VST a voluntad en LMMS. Graphical spectrum analyzer plugin - + Complemento analizador de espectro gráfico A NES-like synthesizer - + Un sintetizador tipo-NES + + + A native delay plugin + Un complemento de Delay nativo Player for GIG files - + Reproductor para archivos GIG A multitap echo delay plugin - + Un complemento de Multitap echo delay A native flanger plugin - - - - A native delay plugin - + Un complemento Flanger nativo An oversampling bitcrusher - + Un reductor de bits de sobremuestreo (Bitcrusher) A native eq plugin - + Un complemento de EQ nativo A 4-band Crossover Equalizer - - - - - setupWidget - - JACK (JACK Audio Connection Kit) - - - - OSS Raw-MIDI (Open Sound System) - - - - SDL (Simple DirectMedia Layer) - - - - PulseAudio - - - - Dummy (no MIDI support) - - - - ALSA Raw-MIDI (Advanced Linux Sound Architecture) - + Un ecualizador cruzado de 4 bandas - PortAudio - + A Dual filter plugin + Un complemento de filtro dual - Dummy (no sound output) - - - - ALSA (Advanced Linux Sound Architecture) - - - - OSS (Open Sound System) - - - - WinMM MIDI - - - - ALSA-Sequencer (Advanced Linux Sound Architecture) - + Filter for exporting MIDI-files from LMMS + Filtro para exportar archivos MIDI desde LMMS sf2Instrument Bank - + Banco Patch - + Ajuste Gain - + Ganancia Reverb - + Reverberancia Reverb Roomsize - + Aleatorizar reverberancia Reverb Damping - + Absorción (reverberancia) Reverb Width - + Amplitud de reverberancia Reverb Level - + Nivel de reverberación Chorus - + Coro (chorus) Chorus Lines - + Líneas de coro (chorus) Chorus Level - + Nivel de coro (chorus) Chorus Speed - + Velocidad del coro (chorus) Chorus Depth - + Profundidad del coro (chorus) A soundfont %1 could not be loaded. - + Una soundfont %1 no se pudo cargar. sf2InstrumentView Open other SoundFont file - + Abrir otro archivo SoundFont Click here to open another SF2 file - + Haz click aquí para abrir otro archivo SF2 Choose the patch - + Elige el lote (patch) Gain - + Ganancia Apply reverb (if supported) - + Aplicar reverberancia (si hay soporte) This button enables the reverb effect. This is useful for cool effects, but only works on files that support it. - + Este botón activa la reverberancia. Útil para lograr buenos efectos, pero sólo funciona en archivos que lo soporten. Reverb Roomsize: - + Tamaño de la habitación (reverberancia): Reverb Damping: - + Absorción (reverberancia): Reverb Width: - + Amplitud de reverberancia: Reverb Level: - + Nivel de reverberancia: Apply chorus (if supported) - + Aplicar coro (si hay soporte) 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 el coro (chorus). Útil para buenos efectos de eco, pero sólo funciona en archivos que lo soporten. Chorus Lines: - + Líneas de coro (chorus): Chorus Level: - + Nivel de coro (chorus): Chorus Speed: - + Velocidad del coro (chorus): Chorus Depth: - + Profundidad del coro (chorus): Open SoundFont file - + Abrir archivo SoundFont SoundFont2 Files (*.sf2) - + Archivo SoundFont2 (*.sf2) sfxrInstrument Wave Form - + Forma de Onda sidInstrument Cutoff - + Corte Resonance - + Resonancia Filter type - + Tipo de filtro Voice 3 off - + Voz 3 apagado Volume - + Volumen Chip model - + Modelo del chip sidInstrumentView Volume: - + Volumen: Resonance: - + Resonancia: Cutoff frequency: - + frecuencia de corte: High-Pass filter - + Filtro de PasoAlto Band-Pass filter - + Filtro de PasoBanda Low-Pass filter - + Filtro de PasoBajo Voice3 Off - + Voz 3 apagado MOS6581 SID - + MOS6581 SID MOS8580 SID - + MOS8580 SID Attack: - Ataque: + Ataque: Attack rate determines how rapidly the output of Voice %1 rises from zero to peak amplitude. - + La tasa de ataque determina que tan rápido la salida de la Voz %1 llega desde cero al pico de amplitud. Decay: - Decay: + Caída: Decay rate determines how rapidly the output falls from the peak amplitude to the selected Sustain level. - + La tasa de Caída determina que tan rápido la salida cae desde el pico de amplitud hasta el nivel de Sostén seleccionado. Sustain: - Sustain: + Sostén: Output of Voice %1 will remain at the selected Sustain amplitude as long as the note is held. - + La salida de la Voz %1 permanecerá a la amplitud de Sostén elegida mientras se mantenga presionada la tecla. Release: - Release: + Disipación: The output of of Voice %1 will fall from Sustain amplitude to zero amplitude at the selected Release rate. - + La salida de la Voz %1 caerá desde la amplitud de Sostén a cero de acuerdo a la tasa de Disipación seleccionada. Pulse Width: - + Amplitud del 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. - + La resolusión de la Amplitud del Pulso permite un barrido suave sin saltos audibles. La Onda de Pulso del Oscilador %1 debe estar seleccionada para que el efecto sea audible. Coarse: - + Gruesa: The Coarse detuning allows to detune Voice %1 one octave up or down. - + La desafinación gruesa permite desafinar la Voz %1 2 octavas hacia arriba o hacia abajo. Pulse Wave - + Onda de Pulso Triangle Wave - + Onda triangular SawTooth - + Onda de sierra Noise - + Ruido Sync - + Sincronizado Sync synchronizes the fundamental frequency of Oscillator %1 with the fundamental frequency of Oscillator %2 producing "Hard Sync" effects. - + 'Sincro' sincroniza la frecuencia fundamental del Oscilador %1 con la frecuencia fundamental del Oscilador %2 produciendo efectos 'Hard-Sync'. Ring-Mod - + Mod-Anillo Ring-mod replaces the Triangle Waveform output of Oscillator %1 with a "Ring Modulated" combination of Oscillators %1 and %2. - + Mod-Anillo reemplaza la salida de Onda Triangular del Oscilador %1 con una combinación "Modulada en anillo" de los Osciladores %1 y %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. - + Con 'Filtrado' activado, la Voz %1 se procesará a través del Filtro. Con 'Filtrado' desactivado, la Voz %1 pasará directamente a la salida y el Filtro no tendrá ningún efecto en ella. Test - + Prueba Test, when set, resets and locks Oscillator %1 at zero until Test is turned off. - + Cuando 'Prueba' está encendido, se restaura y mantiene el Oscilador %1 a cero hasta que apague 'Prueba'. stereoEnhancerControlDialog WIDE - + ANCHO Width: - + Amplitud: stereoEnhancerControls Width - + Amplitud stereoMatrixControlDialog Left to Left Vol: - + Vol izq a izq: Left to Right Vol: - + Vol izq a der: Right to Left Vol: - + Vol der a izq: Right to Right Vol: - + Vol der a der: stereoMatrixControls Left to Left - + izq a izq Left to Right - + izq a der Right to Left - + der a izq Right to Right - + der a der vestigeInstrument Loading plugin - + Cargando complemento Please wait while loading VST-plugin... - + Por favor espere mientras se carga el complemento VST... vibed String %1 volume - + Volumen Cuerda %1 String %1 stiffness - + Rigidez Cuerda %1 Pick %1 position - + Posición del plectro %1 Pickup %1 position - + Posición de micrófono %1 Pan %1 - + Pan %1 Detune %1 - + Desafinación %1 Fuzziness %1 - + Borrosidad %1 Length %1 - + Longitud %1 Impulse %1 - + Impulso %1 Octave %1 - + Octava %1 vibedView Volume: - + Volumen: The 'V' knob sets the volume of the selected string. - + La perilla 'V' define el volumen de la cuerda seleccionada. String stiffness: - + Rigidez de la cuerda: 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 perilla 'S' define la Rigidez de la cuerda. Esto afecta cuanto tiempo vibrará. A menor rigidez, por más tiempo continuará vibrando la cuerda. Pick position: - Posición de la selección: + Posición del plectro: 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 perilla 'P' selecciona el lugar en el que la cuerda será 'pulsada'. Cuanto menor sea el valor, más cerca del puente (ej. como en una guitarra). Pickup position: - Posición de agarre: + Posición de micrófono: 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 perilla 'PU' selecciona el lugar en donde se captarán las vibraciones de la cuerda seleccionada. Valores más bajos indican que el micrófono está más cerca del puente (Similar a la llave selectora de una guitarra eléctrica). Pan: - + Paneo: The Pan knob determines the location of the selected string in the stereo field. - + La perilla Pan determina la localización de la cuerda dentro del campo estéreo. Detune: - + Desafinación: 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 Perilla de Desafinación modifica la altura de la cuerda seleccionada. Valores menores a cero llevarán la cuerda hacia los bemoles. Valores mayores la llevarán hacia los sostenidos (-0.1=bb, -0.05=b; 0=sin cambios; +0,05=#; +0,1=##). Fuzziness: - + Borrosidad: 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 perilla Slap añade un poco de borrosidad a la cuerda, esto es más aparente durante el ataque, aunque puede usarse par darle a la cuerda un sonido más 'metálico'. 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 perilla 'Longitud' define el largo de la cuerda elegida. Cuerdas más largas vibrarán más y sonarán más brillantes. Sin embargo, también consumen más CPU. Impulse or initial state - + Impulso o 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. - + El selector 'Imp' determina si la forma de onda en la gráfica debe considerarse como el impulso impartido a la cuerda por el plectro o si es el estado inicial de la cuerda. 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 de Octava se usa para definir en qué armónico de la nota la cuerda vibrará. Por ejemplo, '-2' significa que la cuerda vibrará 2 octavas por debajo de la fundamental, 'F' significa que la cuerda vibrará en el sonido fundamental, y '6' significa que la cuerda vibrará 6 octabas por encima del sonido fundamental. Impulse Editor - + Editor de 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 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 'S' button will smooth the waveform. The 'N' button will normalize the waveform. - + El editor de Onda permite controlar el estado inicial o el impulso que es usado para poner la cuerda en vibración. Los botones a la derecha del gráfico inicializan la onda al tipo seleccionado. El botón '?' cargará una onda desde un archivo--sólo las primeras 128 muestras se cargarán. + +La onda también puede dibujarse en el gráfico. + +El botón 'S' suavizará la onda. + +El botón 'N' normalizará la 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. + 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. +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. +'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 '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 hasta nueve cuerdas vibrando independientemente. El selector de 'Cuerda' te permite seleccionar cada cuerda para su edición. El selector 'Imp' te permite definir si el gráfico representa el impulso o el estado inicial de la cuerda. El selector de Octava te permite definir en qué armónico vibrará la cuerda. + +El gráfico te permite definir el estado inicial de la cuerda o el impulso que la ponga en movimiento. + +'V' controla el volumen de la cuerda, 'S' controla la rigidez, 'P' la posición de la púa o plectro, 'PU' la posición del micrófono. + +Paneo y Desafinación seguro ya sabrás para qué son, y 'Slap' añade algo de borrosidad a la cuerda y le da un sonido 'metálico'. + +'Longitud' controla la longitud de la cuerda. + +El indicador LED en la esquina inferior derecha indica si la cuerda está activa en el presente instrumento. Enable waveform - + Activar Onda Click here to enable/disable waveform. - + Haz click aqui para activar o desactivar la onda. String - + Cuerda 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 de 'Cuerda' se usa para elegir la cuerda que quieres editat. Un instrumento Vibed puede estar formado hasta por nueve cuerdas vibrando independientemente. El indicador LED en la esquina inferior derecha indica si la cuerda seleccionada está activa. Sine wave - + Onda Sinusoidal Triangle wave - + Onda triangular Saw wave - + Onda de sierra Square wave - + Onda Cuadrada White noise wave - + Ruido-blanco User defined wave - + onda definida por el usuario Smooth - + Suavizar Click here to smooth waveform. - + Haz click aquí para suavizar la onda. Normalize - + Normalizar Click here to normalize waveform. - + Haz click aquí para normalizar la onda. Use a sine-wave for current oscillator. - + Usar una onda sinusoidal para el oscilador actual. Use a triangle-wave for current oscillator. - + Usar una onda triangular para el oscilador actual. Use a saw-wave for current oscillator. - + Usar una onda de sierra para el oscilador actual. Use a square-wave for current oscillator. - + Usar una onda cuadrada para el oscilador actual. Use white-noise for current oscillator. - + Usar ruido-blanco para el oscilador actual. Use a user-defined waveform for current oscillator. - + Usar una onda definida por el usuario para el oscilador actual. voiceObject Voice %1 pulse width - + Voz %1 amplitud de pulso Voice %1 attack - + Voz %1 ataque Voice %1 decay - + Voz %1 caída Voice %1 sustain - + Voz %1 sostén Voice %1 release - + Voz %1 disipación Voice %1 coarse detuning - + Voz %1 desafinación gruesa Voice %1 wave shape - + Voz %1 forma de onda Voice %1 sync - + Voz %1 sinc Voice %1 ring modulate - + Voz %1 modular en anillo Voice %1 filtered - + Voz %1 filtrada Voice %1 test - + Voz %1 prueba waveShaperControlDialog INPUT - + ENTRADA Input gain: - + Ganancia de Entrada: OUTPUT - + SALIDA Output gain: - + Ganancia de Salida: Reset waveform - + Restaurar onda Click here to reset the wavegraph back to default - + Haz click aquí para restaurar el gráfico de onda por defecto Smooth waveform - + Suavizar onda Click here to apply smoothing to wavegraph - + Haz click aquí para aplicar suavizado al gráfico de onda Increase graph amplitude by 1dB - + Aumentar la amplitud del gráfico 1dB Click here to increase wavegraph amplitude by 1dB - + Haz click aquí para aumentar la amplitud del gráfico en 1dB Decrease graph amplitude by 1dB - + Disminuir la amplitud del gráfico en 1dB Click here to decrease wavegraph amplitude by 1dB - + Haz click aquí para disminuir la amplitud del gráfico en 1dB Clip input - + Recortar entrada Clip input signal to 0dB - + Recortar señal de entrada a 0dB waveShaperControls Input gain - + ganancia de entrada Output gain - + ganancia de salida - + \ No newline at end of file diff --git a/data/locale/fr.ts b/data/locale/fr.ts index ab22441c61a..535ee18de57 100644 --- a/data/locale/fr.ts +++ b/data/locale/fr.ts @@ -1,6 +1,4 @@ - - - + AboutDialog @@ -31,31 +29,33 @@ 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 ! + Traduction française par Yann Collet (ycollet), midi-pascal, Olivier Humbert (trebmuh/olinuxx) et d'autres. + +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 + 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> - - LMMS - LMMS - Involved Personnes impliquées Contributors ordered by number of commits: - Contributeurs classés par nombre de commits: + Contributeurs classés par nombre de commits : + + + Copyright © %1 + Copyright © %1 @@ -66,7 +66,7 @@ If you're interested in translating LMMS in another language or want to imp Volume: - Volume: + Volume : PAN @@ -74,23 +74,23 @@ If you're interested in translating LMMS in another language or want to imp Panning: - Panoramique: + Panoramisation : LEFT - G + GAUCHE Left gain: - Gain gauche: + Gain de gauche : RIGHT - D + DROITE Right gain: - Gain droit: + Gain de droite : @@ -101,19 +101,19 @@ If you're interested in translating LMMS in another language or want to imp Panning - Panoramique + Panoramisation Left gain - Gain gauche + Gain de gauche Right gain - Gain droit + Gain de droite - AudioAlsa::setupWidget + AudioAlsaSetupWidget DEVICE PÉRIPHÉRIQUE @@ -139,7 +139,7 @@ If you're interested in translating LMMS in another language or want to imp 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. + Si vous activez ce bouton, l'échantillon complet est inversé. Ceci est utile pour certains effets, par exemple une cymbale crash inversée. Amplify: @@ -147,7 +147,7 @@ If you're interested in translating LMMS in another language or want to imp 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!) - Ce bouton permet de 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é !) + Ce bouton permet de régler le facteur d'amplification. Lorsque vous indiquez une valeur de 100%, votre échantillon n'est pas modifié. Sinon, il sera plus ou moins amplifié (votre fichier d'échantillon n'est pas modifié !) Startpoint: @@ -163,7 +163,7 @@ If you're interested in translating LMMS in another language or want to imp 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) + Activer cette option fait que l'échantillon continue de jouer à travers les différentes notes - si vous changez la tonalité, 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 @@ -171,7 +171,7 @@ If you're interested in translating LMMS in another language or want to imp This button disables looping. The sample plays only once from start to end. - Ce bouton désactive la boucle. L'échantillon ne joue qu'une fois du début à la fin. + Ce bouton désactive la boucle. L'échantillon n'est joué qu'une seule fois, du début à la fin. Enable loop @@ -179,34 +179,34 @@ If you're interested in translating LMMS in another language or want to imp This button enables forwards-looping. The sample loops between the end point and the loop point. - Ce bouton active la boucle. L'échantillon boucle entre sa fin et le poinr de bouclage. + Ce bouton active le bouclage permanent. L'échantillon boucle entre le point de fin et le point de bouclage. This button enables ping-pong-looping. The sample loops backwards and forwards between the end point and the loop point. - Ce bouton active la boucle en ping-pong. L'échantillon boucle d'arrière en avant entre sa fin et le point de bouclage. + Ce bouton active le bouclage en ping-pong. L'échantillon boucle d'avant en arrière entre son point de fin et le point de bouclage. With this knob you can set the point where AudioFileProcessor should begin playing your sample. - Ce bouton permet d'ajuster le point à partir duquel AudioFileProcessor commence à jouer l'échantillon. + Ce bouton permet d'ajuster le point à partir duquel AudioFileProcessor démarre la lecture de l'échantillon. With this knob you can set the point where AudioFileProcessor should stop playing your sample. - Ce bouton permet d'ajuster le point où AudioFileProcessor arrête de jouer l'échantillon. + Ce bouton permet d'ajuster le point où AudioFileProcessor arrête la lecture de l'échantillon. Loopback point: - Point de bouclage: + Point de bouclage : With this knob you can set the point where the loop starts. - Ce bouton pemet de déterminer le début de la boucle. + Ce bouton pemet de déterminer le point à partir duquel la boucle commence. AudioFileProcessorWaveView Sample length: - Longueur de l'échantillon: + Longueur de l'échantillon : @@ -217,7 +217,7 @@ If you're interested in translating LMMS in another language or want to imp 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. + LMMS a été jeté dehors 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 @@ -225,7 +225,7 @@ If you're interested in translating LMMS in another language or want to imp 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. + 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. CLIENT-NAME @@ -276,6 +276,28 @@ If you're interested in translating LMMS in another language or want to imp PÉRIPHÉRIQUE + + AudioSndio::setupWidget + + DEVICE + PÉRIPHÉRIQUE + + + CHANNELS + CANAUX + + + + AudioSoundIo::setupWidget + + BACKEND + SERVEUR + + + DEVICE + PÉRIPHÉRIQUE + + AutomatableModel @@ -320,7 +342,7 @@ If you're interested in translating LMMS in another language or want to imp Remove all linked controls - Supprime tous les contrôles liés + Supprimer tous les contrôles liés @@ -335,26 +357,26 @@ If you're interested in translating LMMS in another language or want to imp All selected values were copied to the clipboard. - Toutes les valeurs ont été copiées dans le presse-papier. + Toutes les valeurs sélectionnées ont été copiées dans le presse-papier. AutomationEditorWindow Play/pause current pattern (Space) - Jouer/Mettre en pause le motif (Barre d'espace) + Jouer/mettre en pause le motif (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 pour jouer le motif courant. Ceci est utile pendant son édition. Le motif est automatiquement rejoué lorsque sa fin est atteinte. + Cliquez ici pour jouer le motif actuel. Ceci est utile lors son édition. Le motif est automatiquement rejoué lorsque sa fin est atteinte. Stop playing of current pattern (Space) - Arrêter de jouer le motif courant (Barre d'espace) + Arrêter de jouer le motif actuel (barre d'espace) Click here if you want to stop playing of the current pattern. - Cliquez ici pour arrêter de jouer le motif courant. + Cliquez ici pour arrêter de jouer le motif actuel. Draw mode (Shift+D) @@ -382,11 +404,11 @@ If you're interested in translating LMMS in another language or want to imp 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 pour activer le mode dessin. Dans ce mode vous pouvez 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. + Cliquez ici pour activer le mode dessin. Dans ce mode, vous pouvez 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 pour activer le mode effacement. 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. + Cliquez ici pour activer le mode effacement. 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. Discrete progression @@ -406,7 +428,7 @@ If you're interested in translating LMMS in another language or want to imp 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 supérieure peut produire une courbe plus douce mais dépasser certaines valeurs. Une valeur de tension plus faible fera que la pente de la courbe se stabilise à chaque point de contrôle. + Une valeur de tension supérieure peut produire une courbe plus douce mais dépasser certaines valeurs. Une valeur de tension basse fera que la pente de la courbe se stabilisera à chaque point de contrôle. 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. @@ -414,7 +436,7 @@ If you're interested in translating LMMS in another language or want to imp 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 constant entre les points de contrôle et atteindra la valeur correcte à chaque point de contrôle sans changement brusque. + Cliquez ici pour choisir la progression linéaire pour ce motif d'automation. La valeur de l'objet connecté changera à un taux constant 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. @@ -434,15 +456,15 @@ If you're interested in translating LMMS in another language or want to imp 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 pour couper et coller les valeurs sélectionnées dans le presse-papier. Vous pourrez les coller n'importe où dans n'importe quel motif en cliquant sur le bouton coller. + Cliquez ici pour couper et coller les valeurs sélectionnées dans le presse-papier. Vous pourrez alors 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 pourcopier les valeurs sélectionnées dans le presse-papier. Vous pourrez les coller n'importe où dans n'importe quel motif en cliquant sur le bouton coller. + Cliquez ici pour copier les valeurs sélectionnées dans le presse-papier. Vous pourrez alors 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 pourcoller les valeurs se trouvant dans le presse-papier sur la première mesure visible. + Cliquez ici et les valeurs se trouvant dans le presse-papier seront alors collées sur la première mesure visible. Tension: @@ -456,6 +478,26 @@ If you're interested in translating LMMS in another language or want to imp Automation Editor - %1 Éditeur d'automation - %1 + + Edit actions + Actions d'édition + + + Interpolation controls + Contrôles d'interpolation + + + Timeline controls + Contrôles de la ligne de temps + + + Zoom controls + Contrôles du zoom + + + Quantization controls + Contrôles de quantification + Model is already connected to this pattern. Ce modèle est déjà connecté à ce motif. @@ -488,7 +530,7 @@ If you're interested in translating LMMS in another language or want to imp Change name - Changer le nom + Modifier le nom %1 Connections @@ -500,7 +542,7 @@ If you're interested in translating LMMS in another language or want to imp Set/clear record - Régler/Effacer l'enregistrement + Armer/désarmer l'enregistrement Flip Vertically (Visible) @@ -530,15 +572,15 @@ If you're interested in translating LMMS in another language or want to imp Play/pause current beat/bassline (Space) - Jouer/Mettre en pause le rythme ou la ligne de basse (Barre d'espace) + Jouer/mettre en pause le rythme ou la ligne de basse (barre d'espace) Stop playback of current beat/bassline (Space) - Arrêter de jouer le rythme ou la ligne de basse (Barre d'espace) + 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. + Cliquez ici pour jouer le rythme ou la ligne de basse actuel. Le rythme ou la ligne de basse est rejoué lorsque sa fin est atteinte. Click here to stop playing of current beat/bassline. @@ -560,6 +602,14 @@ If you're interested in translating LMMS in another language or want to imp Add steps Ajouter des pas + + Beat selector + Sélecteur de rythme + + + Track and step actions + Actions des pas et de piste + Clone Steps Cloner des pas @@ -577,15 +627,15 @@ If you're interested in translating LMMS in another language or want to imp Change name - Changer le nom + Modifier le nom Change color - Changer la couleur + Modifier la couleur Reset color to default - Remettre la couleur par défaut + Réinitialiser la couleur par défaut @@ -619,11 +669,11 @@ If you're interested in translating LMMS in another language or want to imp RATIO - RAPPORT + RATIO Ratio: - Rapport : + Ratio : @@ -638,18 +688,18 @@ If you're interested in translating LMMS in another language or want to imp Ratio - Rapport + Ratio BitcrushControlDialog IN - E + ENTRÉE OUT - S + SORTIE GAIN @@ -657,7 +707,7 @@ If you're interested in translating LMMS in another language or want to imp Input Gain: - Gain en entrée: + Gain en entrée : NOIS @@ -665,11 +715,11 @@ If you're interested in translating LMMS in another language or want to imp Input Noise: - Bruit en entrée: + Bruit en entrée : Output Gain: - Gain en sortie: + Gain en sortie : CLIP @@ -677,7 +727,7 @@ If you're interested in translating LMMS in another language or want to imp Output Clip: - Coupure en sortie: + Clip en sortie : Rate @@ -689,7 +739,7 @@ If you're interested in translating LMMS in another language or want to imp Enable samplerate-crushing - Activer l'écrasage de fréquence + Activer l'écrasement de fréquence Depth @@ -701,11 +751,11 @@ If you're interested in translating LMMS in another language or want to imp Enable bitdepth-crushing - Activer l'écrasage de la profondeur + Activer l'écrasement de la profondeur Sample rate: - Taux d'échantillonage: + Taux d'échantillonnage : STD @@ -713,22 +763,22 @@ If you're interested in translating LMMS in another language or want to imp Stereo difference: - Différence stéréo: + Différence stéréo : Levels - Niv + Niveaux Levels: - Niveaux: + Niveaux : CaptionMenu &Help - Aid&e + &Aide Help (not available) @@ -743,7 +793,7 @@ If you're interested in translating LMMS in another language or want to imp Click here to show or hide the graphical user interface (GUI) of Carla. - Cliquez ici pour montrer ou cacher l'interface utilisateur graphique de Carla. + Cliquez ici pour montrer ou cacher l'interface graphique utilisateur de Carla. @@ -785,7 +835,7 @@ If you're interested in translating LMMS in another language or want to imp MIDI-devices to receive MIDI-events from - Périphériques MIDI desquels recevoir des évènements MIDI + Périphériques MIDI desquels recevoir des événements MIDI USER CONTROLLER @@ -816,7 +866,7 @@ If you're interested in translating LMMS in another language or want to imp ControllerRackView Controller Rack - Rack d'effets + Rack de contrôleurs Add @@ -827,7 +877,7 @@ If you're interested in translating LMMS in another language or want to imp Confirmer la suppression - Confirm delete? There are existing connection(s) associted with this controller. There is no way to undo. + Confirm delete? There are existing connection(s) associated 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. @@ -858,63 +908,63 @@ If you're interested in translating LMMS in another language or want to imp CrossoverEQControlDialog Band 1/2 Crossover: - Fréquence de croisement des bandes 1/2: + Fréquence de croisement des bandes 1/2 : Band 2/3 Crossover: - Fréquence de croisement des bandes 2/3: + Fréquence de croisement des bandes 2/3 : Band 3/4 Crossover: - Fréquence de croisement des bandes 3/4: + Fréquence de croisement des bandes 3/4 : Band 1 Gain: - Gain bande 1: + Gain bande 1 : Band 2 Gain: - Gain bande 2: + Gain bande 2 : Band 3 Gain: - Gain bande 3: + Gain bande 3 : Band 4 Gain: - Gain bande 4: + Gain bande 4 : Band 1 Mute - Bande 1 muette + Bande 1 en sourdine Mute Band 1 - Couper la bande 1 + Mettre la bande 1 en sourdine Band 2 Mute - Bande 2 muette + Bande 2 en sourdine Mute Band 2 - Couper la bande 2 + Mettre la bande 2 en sourdine Band 3 Mute - Bande 3 muette + Bande 3 en sourdine Mute Band 3 - Couper la bande 3 + Mettre la bande 3 en sourdine Band 4 Mute - Bande 4 muette + Bande 4 en sourdine Mute Band 4 - Couper la bande 4 + Mettre la bande 4 en sourdine @@ -925,7 +975,7 @@ If you're interested in translating LMMS in another language or want to imp Feedback - Réaction + Réinjection Lfo Frequency @@ -946,6 +996,10 @@ If you're interested in translating LMMS in another language or want to imp Delay Délai + + Lfo Amt + Niveau LFO + Delay Time Durée du délai @@ -960,15 +1014,11 @@ If you're interested in translating LMMS in another language or want to imp Rate - Vitesse + Taux Lfo - Lfo - - - Lfo Amt - Niveau LFO + LFO Out Gain @@ -979,13 +1029,6 @@ If you're interested in translating LMMS in another language or want to imp Gain - - DetuningHelper - - Note detuning - Désaccordage de la note - - DualFilterControlDialog @@ -1045,7 +1088,7 @@ If you're interested in translating LMMS in another language or want to imp Filter 1 type - Type du filtre.1 + Type du filtre 1 Cutoff 1 frequency @@ -1117,27 +1160,27 @@ If you're interested in translating LMMS in another language or want to imp RC LowPass 12dB - RC Passe Bas 12dB + RC passe-bas 12dB RC BandPass 12dB - RC Passe Bande 12dB + RC passe-bande 12dB RC HighPass 12dB - RC Passe Haut 12dB + RC passe-haut 12dB RC LowPass 24dB - RC Passe Bas 24dB + RC passe-bas 24dB RC BandPass 24dB - RC Passe Bande 24dB + RC passe-bande 24dB RC HighPass 24dB - RC Passe Haut 24dB + RC Passe-haut 24dB Vocal Formant Filter @@ -1149,15 +1192,15 @@ If you're interested in translating LMMS in another language or want to imp SV LowPass - SV Passe-bas + SV passe-bas SV BandPass - SV Passe-bande + SV passe-bande SV HighPass - SV Passe-haut + SV passe-haut SV Notch @@ -1172,22 +1215,15 @@ If you're interested in translating LMMS in another language or want to imp Tripôle - - DummyEffect - - NOT FOUND - INTROUVABLE - - Editor Play (Space) - Jouer (Barre d'espace) + Jouer (barre d'espace) Stop (Space) - Arrêter (Barre d'espace) + Arrêter (barre d'espace) Record @@ -1197,6 +1233,10 @@ If you're interested in translating LMMS in another language or want to imp Record while playing Enregistrer en jouant + + Transport controls + Contrôle du transport + Effect @@ -1206,7 +1246,7 @@ If you're interested in translating LMMS in another language or want to imp Wet/Dry mix - Ratio + Mélange originel/traité Gate @@ -1214,7 +1254,7 @@ If you're interested in translating LMMS in another language or want to imp Decay - Descente + Affaiblissement (decay) @@ -1309,13 +1349,13 @@ If you're interested in translating LMMS in another language or want to imp 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 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 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 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. +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. @@ -1334,38 +1374,15 @@ Un clic-droit fera apparaître un menu contextuel où vous pourrez changer l&apo Move &up - Déplacer vers le ha&ut + Déplacer vers le &haut Move &down - &Déplacer vers le bas + Déplacer vers le &bas &Remove this plugin - Supp&rimer cet effet - - - - Engine - - Generating wavetables - Génération des tables d'ondes - - - Locating plugins - Localisation des greffons - - - Initializing data structures - Initialisation des structures - - - Opening audio and midi devices - Ouverture des périphériques audio et Midi - - - Launching mixer threads - Démarrage des mélangeurs + &Supprimer cet effet @@ -1384,7 +1401,7 @@ Un clic-droit fera apparaître un menu contextuel où vous pourrez changer l&apo Decay - Descente + Affaiblissement (decay) Sustain @@ -1439,7 +1456,7 @@ Un clic-droit fera apparaître un menu contextuel où vous pourrez changer l&apo 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. + Utilisez ce bouton pour régler le pré-délai de l'enveloppe. Plus la valeur est importante, plus le temps sera long avant de démarrer l'enveloppe. ATT @@ -1471,11 +1488,11 @@ Un clic-droit fera apparaître un menu contextuel où vous pourrez changer l&apo Decay: - Descente : + Affaiblissement (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. - 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. + Utilisez ce bouton pour régler le temps d'affaiblissement 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 @@ -1555,7 +1572,7 @@ Un clic-droit fera apparaître un menu contextuel où vous pourrez changer l&apo Click here for a saw-wave for current. - Cliquez ici pour une onde en dent de scie. + Cliquez ici pour une onde en dents-de-scie. Click here for a square-wave. @@ -1579,7 +1596,7 @@ Un clic-droit fera apparaître un menu contextuel où vous pourrez changer l&apo MODULATE ENV-AMOUNT - MODULER L'ENVELOPPE + MODULER LA QUANTITÉ D'ENVELOPPE Click here to make the envelope-amount controlled by this LFO. @@ -1618,7 +1635,7 @@ Un clic-droit fera apparaître un menu contextuel où vous pourrez changer l&apo Low shelf gain - + Gain du low-shelf Peak 1 gain @@ -1638,7 +1655,7 @@ Un clic-droit fera apparaître un menu contextuel où vous pourrez changer l&apo High Shelf gain - + Gain du high-shelf HP res @@ -1646,39 +1663,39 @@ Un clic-droit fera apparaître un menu contextuel où vous pourrez changer l&apo Low Shelf res - + Rés du low-shelf Peak 1 BW - + Bande-passante du pic 1 Peak 2 BW - + Bande-passante du pic 2 Peak 3 BW - + Bande-passante du pic 3 Peak 4 BW - + Bande-passante du pic 4 High Shelf res - + Rés du high-shelf LP res - PB rés + Rés. du passe-base HP freq - PH fréq + Fréquence du passe-haut Low Shelf freq - + Fréquence du low-shelf Peak 1 freq @@ -1698,19 +1715,19 @@ Un clic-droit fera apparaître un menu contextuel où vous pourrez changer l&apo High shelf freq - + Fréquence du high-shelf LP freq - Fréq. PB + Fréq. passe-base HP active - PH actif + Passe-haut actif Low shelf active - + Low-shelf actif Peak 1 active @@ -1730,43 +1747,51 @@ Un clic-droit fera apparaître un menu contextuel où vous pourrez changer l&apo High shelf active - + High-shelf actif LP active - PB actif + Passe-bas actif LP 12 - PB 12 + Passe-bas 12 LP 24 - PB 24 + Passe-bas 24 LP 48 - PB 48 + Passe-bas 48 HP 12 - PH 12 + Passe-haut 12 HP 24 - PH 24 + Passe-haut 24 HP 48 - PH 48 + Passe-haut 48 low pass type - type de Passe Bas + type de passe-bas high pass type - type de passe haut + type de passe-haut + + + Analyse IN + Analyse d'entrée + + + Analyse OUT + Analyse de sortie @@ -1777,7 +1802,7 @@ Un clic-droit fera apparaître un menu contextuel où vous pourrez changer l&apo Low Shelf - + Low-shelf Peak 1 @@ -1797,15 +1822,15 @@ Un clic-droit fera apparaître un menu contextuel où vous pourrez changer l&apo High Shelf - + High-shelf LP - PB + Passe-bas In Gain - + Gain d'entrée Gain @@ -1817,7 +1842,7 @@ Un clic-droit fera apparaître un menu contextuel où vous pourrez changer l&apo Bandwidth: - Largeur de bande: + Largeur de bande : Resonance : @@ -1828,31 +1853,43 @@ Un clic-droit fera apparaître un menu contextuel où vous pourrez changer l&apo Fréquence : - 12dB - 12dB + lp grp + passe-bas grp - 24dB - 24dB + hp grp + passe-haut grp - 48dB - 48dB + Octave + Octave - lp grp - pb grp + Frequency + Fréquence - hp grp - ph grp + Resonance + Résonance + + + Bandwidth + Bande passante - EqParameterWidget + EqHandle + + Reso: + Réso : + - Hz - Hz + BW: + Bande-passante : + + + Freq: + Fréquence : @@ -1871,7 +1908,7 @@ Un clic-droit fera apparaître un menu contextuel où vous pourrez changer l&apo Samplerate: - Vitesse d'échantillonage : + Taux d'échantillonnage : 44100 Hz @@ -1955,15 +1992,15 @@ Un clic-droit fera apparaître un menu contextuel où vous pourrez changer l&apo Sinc Medium (recommended) - Sync moyenne (Recommandée) + Sync moyenne (recommandée) Sinc Best (very slow!) - Sync optimale (Trés lent !) + Sync optimale (trés lent !) Oversampling (use with care!): - Suréchantillonage (Utiliser avec précaution!) : + Sur-échantillonnage (utiliser avec précaution !) : 1x (None) @@ -1995,7 +2032,7 @@ Un clic-droit fera apparaître un menu contextuel où vous pourrez changer l&apo Export between loop markers - Exporter la section entre les points de bouclage + Exporter la section entre les marqueurs de boucle Could not open file @@ -2004,8 +2041,8 @@ Un clic-droit fera apparaître un menu contextuel où vous pourrez changer l&apo 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 le contient et réessayez ! + Le fichier %1 ne peut pas être ouvert pour son écriture. +Veuillez vérifier que vous avez les droits d'accès en écriture à ce fichier et au répertoire qui le contient et réessayez ! Export project to %1 @@ -2044,13 +2081,9 @@ Veuillez vérifier que vous avez les droits d'accès en écriture pour ce f 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 + Ouvrir dans une nouvelle piste d'instrument / éditeur de rythme et de ligne de basse Loading sample @@ -2064,6 +2097,10 @@ Veuillez vérifier que vous avez les droits d'accès en écriture pour ce f --- Factory files --- --- Fichiers usine --- + + Open in new instrument-track/Song Editor + Ouvrir dans une nouvelle piste d'instrument / éditeur de morceau + Error Erreur @@ -2112,15 +2149,15 @@ Veuillez vérifier que vous avez les droits d'accès en écriture pour ce f Delay Time: - Temps de délai: + Temps de délai : Lfo Hz - Lfo Hz + LFO Hz Lfo: - Lfo: + LFO : Amt @@ -2128,7 +2165,7 @@ Veuillez vérifier que vous avez les droits d'accès en écriture pour ce f Amt: - Niv.: + Niv. : Regen @@ -2136,7 +2173,7 @@ Veuillez vérifier que vous avez les droits d'accès en écriture pour ce f Feedback Amount: - Niveau de réaction: + Niveau de réinjection : Noise @@ -2144,49 +2181,49 @@ Veuillez vérifier que vous avez les droits d'accès en écriture pour ce f White Noise Amount: - Niveau de bruit blanc: + Niveau de bruit blanc : FxLine Channel send amount - Niveau de signal envoyé + Quantité de signal envoyé du canal 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. + 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. - Le canal d'effet reçoit le signal d'une ou plusieurs pistes instrumentales. -Il peut à son tour être dirigé vers de multiples canaux d'effet. LMMS prend soin automatiquement d'éviter les boucles infinies pour vous et il ne permet pas de crééer une connexion qui produirait une telle boucle. + Le canal d'effet reçoit l'entrée depuis une ou plusieurs pistes d'instrument. + Il peut, à son tour, être routé vers de multiples autres canaux d'effets. LMMS prend automatiquement soin de vous en empêchant des boucles infinies et ne permet pas de faire une connexion qui résulterait en une boucle infinier. -Pour diriger un canal vers un autre, sélectionnez le canal d'effet et cliquez sur le bouton 'Envoyer' sur le canal vers lequel vous voulez l'envoyer. Le bouton sous le bouton 'Envoyer' contrôle le niveau de signal à envoyer vers ce canal . +Afin de router le canal vers un autre canal, sélectionnez le canal d'effet et cliquez sur le bouton "envoyer" sur le canal auquel vous voulez envoyer. Le bouton en dessous du bouton d'envoi contrôle le niveau du signal qui est envoyé au canal. -Vous pouvez supprimer et déplacer les canaux d'effet avec le menu contextuel accessible en faisant un clic droit sur le canal d'effet. +Vous pouvez supprimer et déplacer les canaux d'effets dans le menu contextuel, qui est accessible en cliquant-droit sur le canal d'effet. Move &left - Déplacer vers &la gauche + Déplacer à &gauche Move &right - Déplacer vers la d&roite + Déplacer à &droite Rename &channel - Renommer le &canal + &Renommer le canal R&emove channel - Supprim&er le canal + &Supprimer le canal Remove &unused channels - Supprimer les canaux in&utilisés + Supprimer les canaux &inutilisés @@ -2216,15 +2253,15 @@ Vous pouvez supprimer et déplacer les canaux d'effet avec le menu contextu FX Fader %1 - Curseur d'effet %1 + Chariot d'effet %1 Mute - Couper + Mettre en sourdine Mute this FX channel - Couper ce canal d'effet + Mettre ce canal d'effet en sourdine Solo @@ -2232,7 +2269,7 @@ Vous pouvez supprimer et déplacer les canaux d'effet avec le menu contextu Solo FX channel - Solo sur le canal d'effet + Mettre ce canal d'effet en solo @@ -2273,11 +2310,11 @@ Vous pouvez supprimer et déplacer les canaux d'effet avec le menu contextu Click here to change which patch of the GIG file to use - Cliquez ici pour changer le son du fichier GIG à utiliser + Cliquez ici pour modifier le son du fichier GIG à utiliser Change which instrument of the GIG file is being played - Changer l'instrument du fichier GIG qui joue + Modifier quel instrument du fichier GIG est joué Which GIG file is currently being used @@ -2285,7 +2322,7 @@ Vous pouvez supprimer et déplacer les canaux d'effet avec le menu contextu Which patch of the GIG file is currently being used - Quel instrument du chier GIG est actuellement utilisé + Quel instrument du fichier GIG est actuellement utilisé Gain @@ -2306,6 +2343,14 @@ Vous pouvez supprimer et déplacer les canaux d'effet avec le menu contextu GuiApplication + + 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 n'existe pas. Le créer maintenant ? Vous pouvez modifier le répertoire plus tard avec Éditer -> Configurations. + Preparing UI Préparation de l'interface utilisateur @@ -2320,7 +2365,7 @@ Vous pouvez supprimer et déplacer les canaux d'effet avec le menu contextu Preparing controller rack - Préparation du rack d'effets + Préparation du rack de contrôleurs Preparing project notes @@ -2462,7 +2507,7 @@ Vous pouvez supprimer et déplacer les canaux d'effet avec le menu contextu Chord: - Accord: + Accord : Direction: @@ -2485,7 +2530,7 @@ Vous pouvez supprimer et déplacer les canaux d'effet avec le menu contextu Majb5 - + Si majeur 5 minor @@ -2493,255 +2538,255 @@ Vous pouvez supprimer et déplacer les canaux d'effet avec le menu contextu minb5 - + Si mineur 5 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 @@ -2761,11 +2806,11 @@ Vous pouvez supprimer et déplacer les canaux d'effet avec le menu contextu Major pentatonic - Pentatonique majeur + Pentatonique majeure Minor pentatonic - Pentatonique mineur + Pentatonique mineure Jap in sen @@ -2809,7 +2854,7 @@ Vous pouvez supprimer et déplacer les canaux d'effet avec le menu contextu Phrygolydian - Phrygo-Lydienne + Phrygo-lydienne Lydian @@ -2880,7 +2925,7 @@ Vous pouvez supprimer et déplacer les canaux d'effet avec le menu contextu Chord: - Accord: + Accord : @@ -2907,11 +2952,11 @@ Vous pouvez supprimer et déplacer les canaux d'effet avec le menu contextu MIDI devices to receive MIDI events from - Périphériques MIDI desquels recevoir des évènements MIDI + 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 + Périphériques MIDI auxquels envoyer des événements MIDI NOTE @@ -2923,7 +2968,7 @@ Vous pouvez supprimer et déplacer les canaux d'effet avec le menu contextu Specify the velocity normalization base for MIDI-based instruments at 100% note velocity - Spécifiez la vélocité normalisée de base des instruments MIDI pour un volume de note de 100% + Spécifie la vélocité normalisée de base des instruments MIDI pour un volume de note de 100% BASE VELOCITY @@ -3013,15 +3058,15 @@ Vous pouvez supprimer et déplacer les canaux d'effet avec le menu contextu RC LowPass 12dB - RC Passe Bas 12dB + RC passe-bas 12dB RC BandPass 12dB - RC Passe Bande 12dB + RC passe-bande 12dB RC HighPass 12dB - RC Passe Haut 12dB + RC passe-haut 12dB RC LowPass 24dB @@ -3037,7 +3082,7 @@ Vous pouvez supprimer et déplacer les canaux d'effet avec le menu contextu Vocal Formant Filter - Filtre Formant Vocal + Filtre formant vocal 2x Moog @@ -3045,15 +3090,15 @@ Vous pouvez supprimer et déplacer les canaux d'effet avec le menu contextu SV LowPass - SV Passe-bas + SV passe-bas SV BandPass - SV Passe-bande + SV passe-bande SV HighPass - SV Passe-haut + SV passe-haut SV Notch @@ -3072,11 +3117,11 @@ Vous pouvez supprimer et déplacer les canaux d'effet avec le menu contextu InstrumentSoundShapingView TARGET - COMPOSANTE + CIBLE 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... ! + 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 panoramisation, 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 dents-de-scie avec juste quelques enveloppes... ! FILTER @@ -3084,7 +3129,7 @@ Vous pouvez supprimer et déplacer les canaux d'effet avec le menu contextu 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. + 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 @@ -3112,11 +3157,11 @@ Vous pouvez supprimer et déplacer les canaux d'effet avec le menu contextu cutoff frequency: - Fréquence de coupure: + Fréquence de coupure : Envelopes, LFOs and filters are not supported by the current instrument. - Les enveloppes, LFOs et filtres ne sont pas supportés par l'instrument courant. + Les enveloppes, les LFO et les filtres ne sont pas supportés par l'instrument actuel. @@ -3131,7 +3176,7 @@ Vous pouvez supprimer et déplacer les canaux d'effet avec le menu contextu Panning - Panoramique + Panoramisation Pitch @@ -3143,7 +3188,7 @@ Vous pouvez supprimer et déplacer les canaux d'effet avec le menu contextu Default preset - Préréglage par défaut + Pré-réglage par défaut With this knob you can set the volume of the opened channel. @@ -3178,11 +3223,11 @@ Vous pouvez supprimer et déplacer les canaux d'effet avec le menu contextu Panning - Panoramique + Panoramisation Panning: - Panoramique : + Panoramisation : PAN @@ -3202,7 +3247,7 @@ Vous pouvez supprimer et déplacer les canaux d'effet avec le menu contextu FX %1: %2 - Effet %1: %2 + Effet %1 : %2 @@ -3225,11 +3270,11 @@ Vous pouvez supprimer et déplacer les canaux d'effet avec le menu contextu Panning - Panoramique + Panoramisation Panning: - Panoramique : + Panoramisation : PAN @@ -3261,13 +3306,11 @@ Vous pouvez supprimer et déplacer les canaux d'effet avec le menu contextu FUNC - "FONCTIONS" (previous translation) is too long for the limited available width. - FONCT + FONCTIONS FX - "EFFETS" (previous translation) is too long for the limited available width. "FX" should be understable by all - FX + EFFETS MIDI @@ -3275,11 +3318,11 @@ Vous pouvez supprimer et déplacer les canaux d'effet avec le menu contextu Save preset - Enregistrer le préréglage + Enregistrer le pré-réglage XML preset file (*.xpf) - Fichier XML de préréglage (*.xpf) + Fichier XML de pré-réglage (*.xpf) PLUGIN @@ -3295,11 +3338,11 @@ Vous pouvez supprimer et déplacer les canaux d'effet avec le menu contextu Save current instrument track settings in a preset file - Sauvegarder les pré-réglages de la piste instrumentale dans un fichier de pré-réglages + Sauvegarder les paramètres de la piste de l'instrument actuel dans un fichier de pré-réglage 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. - Cliquer ici pour sauvegarder les pré-réglages de la piste instrumentale dans un fichier de pré-réglages. Vous pourrez recharger ces pré-réglages en double-cliquant le fichier dans le navigateur de pré-réglages. + Cliquer ici pour sauvegarder les pré-réglages actuels de la piste instrumentale dans un fichier de pré-réglages. Vous pourrez recharger ces pré-réglages en double-cliquant dessus dans le navigateur de pré-réglages. MISC @@ -3309,6 +3352,10 @@ Vous pouvez supprimer et déplacer les canaux d'effet avec le menu contextu Use these controls to view and edit the next/previous track in the song editor. Utiliser ces contôles pour voir ou éditer la piste suivante ou précédente dans l'éditeur de morceau. + + SAVE + SAVE + Knob @@ -3318,7 +3365,7 @@ Vous pouvez supprimer et déplacer les canaux d'effet avec le menu contextu Set logarithmic - Mode logarythmique + Mode logarithmique Please enter a new value between -96.0 dBV and 6.0 dBV: @@ -3458,7 +3505,7 @@ Vous pouvez supprimer et déplacer les canaux d'effet avec le menu contextu 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. + Utilisez ce bouton pour régler la vitesse du LFO. Plus la valeur est importante, plus l'oscillateur oscille vite et plus l'effet est rapide. AMT @@ -3470,7 +3517,7 @@ Vous pouvez supprimer et déplacer les canaux d'effet avec le menu contextu 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. + Utilisez ce bouton pour régler le niveau de modulation du LFO. Plus la valeur est importante, plus le contrôle connecté (p. ex. volume ou fréquence de coupure) sera influencé par le LFO. PHS @@ -3486,7 +3533,7 @@ Vous pouvez supprimer et déplacer les canaux d'effet avec le menu contextu 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. + 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. @@ -3498,7 +3545,7 @@ Vous pouvez supprimer et déplacer les canaux d'effet avec le menu contextu Click here for a saw-wave. - Cliquez ici pour une onde en dent de scie. + Cliquez ici pour une onde en dents-de-scie. Click here for a square-wave. @@ -3516,32 +3563,43 @@ Vous pouvez supprimer et déplacer les canaux d'effet avec le menu contextu 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. +Double-cliquez pour choisir un fichier. Click here for a moog saw-wave. - Cliquez ici pour une onde en dent de scie de type Moog. + Cliquez ici pour une onde Moog en dents-de-scie. - MainWindow + LmmsCore - Working directory - Répertoire de travail + Generating wavetables + Génération des tables d'ondes - 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. + Initializing data structures + Initialisation des structures de données + + + Opening audio and midi devices + Ouverture des périphériques audio et MIDI + + + Launching mixer threads + Lancement du mélangeur de threads + + + MainWindow 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. + 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. +Veuillez vérifier que vous avez les droits d'accès en écriture pour ce fichier et le répertoire qui le contient et réessayez. &New @@ -3585,7 +3643,7 @@ Veuillez vérifier que vous avez les droits d'accès en écriture pour ce f &Help - Aid&e + &Aide Help @@ -3605,7 +3663,7 @@ Veuillez vérifier que vous avez les droits d'accès en écriture pour ce f Create new project from template - + Créer un nouveau projet à partir d'un modèle Open existing project @@ -3625,7 +3683,7 @@ Veuillez vérifier que vous avez les droits d'accès en écriture pour ce f Song Editor - Montrer/Cacher l'éditeur de morceau + É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. @@ -3633,7 +3691,7 @@ Veuillez vérifier que vous avez les droits d'accès en écriture pour ce f Beat+Bassline Editor - Montrer/Cacher l'éditeur de rythme et de ligne de basse + É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. @@ -3641,7 +3699,7 @@ Veuillez vérifier que vous avez les droits d'accès en écriture pour ce f Piano Roll - Montrer/Cacher le piano virtuel + 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. @@ -3649,7 +3707,7 @@ Veuillez vérifier que vous avez les droits d'accès en écriture pour ce f Automation Editor - Montrer/Cacher l'éditeur d'automation + É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. @@ -3657,7 +3715,7 @@ Veuillez vérifier que vous avez les droits d'accès en écriture pour ce f FX Mixer - Montrer/Cacher le mélangeur d'effets + 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. @@ -3665,7 +3723,7 @@ Veuillez vérifier que vous avez les droits d'accès en écriture pour ce f Project Notes - Montrer/Cacher les notes du projet + 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. @@ -3673,7 +3731,7 @@ Veuillez vérifier que vous avez les droits d'accès en écriture pour ce f Controller Rack - Montrer/Cacher le rack de contrôleurs + Rack de contrôleurs Untitled @@ -3685,18 +3743,18 @@ Veuillez vérifier que vous avez les droits d'accès en écriture pour ce f Project not saved - Projet non enregistré + Projet non sauvegardé 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 ? + Ce projet a été modifié depuis son dernier enregistrement. Souhaitez-vous l'enregistrer maintenant ? Help not available L'aide n'est pas disponible - Currently there's no help available in LMMS. + 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. @@ -3739,7 +3797,7 @@ Veuillez visiter http://lmms.sf.net/wiki pour la documentation de LMMS. My Presets - Mes préréglages + Mes pré-réglages My Home @@ -3759,7 +3817,7 @@ Veuillez visiter http://lmms.sf.net/wiki pour la documentation de LMMS. Save as New &Version - Enregistrer nouvelle &Version + Enregistrer en tant que nouvelle &version E&xport Tracks... @@ -3781,29 +3839,129 @@ Veuillez visiter http://lmms.sf.net/wiki pour la documentation de LMMS.Save Project Enregistrer le projet + + Project recovery + Récupération de projet + + + There is a recovery file present. It looks like the last session did not end properly or another instance of LMMS is already running. Do you want to recover the project of this session? + Il y a un fichier de récupération présent. Il semble que la dernière session ne s'est pas fermée proprement ou bien qu'une aute instance de LMMS est déjà ouverte. Voulez-vous récupérer le projet de cette session ? + + + Recover + Récupérer + + + Recover the file. Please don't run multiple instances of LMMS when you do this. + Récupérer le fichier. Veuillez ne pas lancer de multiple instances de LMMS lorsque vous faites cela. + + + Ignore + Ignorer + + + Launch LMMS as usual but with automatic backup disabled to prevent the present recover file from being overwritten. + Lancer LMMS comme d'habitude mais en désactivant la sauvegarde automatique pour empêcher le fichier de récupération présent d'être ré-écrit. + + + Discard + Abandonner + + + Launch a default session and delete the restored files. This is not reversible. + Lancer une session par défaut et effacer les fichiers de récupération. Ceci n'est pas réversible. + + + Quit + Quitter + + + Shut down LMMS with no further action. + Fermer LMMS sans davantage d'action. + + + Exit + Sortir + Preparing plugin browser - Préraration du sélecteur de greffons + Préparation du navigateur de greffons Preparing file browsers - Préparation des sélecteurs de fichiers + Préparation du navigateur de fichiers Root directory - Répertoire maître + Répertoire racine Loading background artwork Chargement du thème graphique d'arrière-plan + + New from template + Nouveau à partir d'un modèle + + + Save as default template + Sauvegardder en tant que omdèle par défaut + Export &MIDI... Exporter en &MIDI... &View - &Voir + &Afficher + + + Toggle metronome + Activer/désactiver le métronome + + + Show/hide Song-Editor + Afficher/cacher l'éditeur de morceau + + + Show/hide Beat+Bassline Editor + Afficher/cacher l'éditeur de rythme et de ligne de basse + + + Show/hide Piano-Roll + Afficher/cacher le piano virtuel + + + Show/hide Automation Editor + Afficher/cacher l'éditeur d'automation + + + Show/hide FX Mixer + Afficher/cacher le mixeur d'effets + + + Show/hide project notes + Afficher/cacher les notes de projet + + + Show/hide controller rack + Afficher/cacher le rack de contrôleurs + + + Recover session. Please save your work! + Récupération de session. Veuillez sauvegarder votre travail ! + + + Automatic backup disabled. Remember to save your work! + Sauvegarde automatique désactivée. Rappelez-vous de sauvegarder votre travail ! + + + Recovered project not saved + Le projet récupéré n'a pas été sauvegardé + + + This project was recovered from the previous session. It is currently unsaved and will be lost if you don't save it. Do you want to save it now? + Ce projet a été récupéré de la session précédente. Il n'est pas encore sauvegardé et sera perdu si vous ne le sauvegardez pas. Voulez-vous le sauvegarder maintenant ? LMMS Project @@ -3813,6 +3971,14 @@ Veuillez visiter http://lmms.sf.net/wiki pour la documentation de LMMS.LMMS Project Template Modèle de projet LMMS + + Overwrite default template? + Écrire par dessus le modèle par défaut ? + + + This will overwrite your current default template. + Ceci ré-écrira votre modèle par défaut actuel. + Volume as dBV Volume en dBV @@ -3852,20 +4018,6 @@ Veuillez visiter http://lmms.sf.net/wiki pour la documentation de LMMS.Dénominateur - - MidiAlsaRaw::setupWidget - - DEVICE - PÉRIPHÉRIQUE - - - - MidiAlsaSeq - - DEVICE - PÉRIPHÉRIQUE - - MidiController @@ -3892,51 +4044,8 @@ Veuillez visiter http://lmms.sf.net/wiki pour la documentation de LMMS.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. - Bank select - Banque - - - Modulation - Modulation - - - Breath %1 - Contrôle par le souffle - - - Foot %1 - Contrôle par pédale - - - Portamento - Portamento - - - Volume - Volume - - - Balance - Balance - - - Panning - Panoramique - - - Pitch bend - Glissendo - - - CC - CC - - - - MidiOss::setupWidget - - DEVICE - PÉRIPHÉRIQUE + Track + Piste @@ -3967,15 +4076,15 @@ Veuillez visiter http://lmms.sf.net/wiki pour la documentation de LMMS. Output MIDI program - Programme de sortie MIDI + Programme MIDI de sortie Receive MIDI-events - Recevoir des évènements MIDI + Recevoir des événements MIDI Send MIDI-events - Envoyer des évènements MIDI + Envoyer des événements MIDI Fixed output note @@ -3986,51 +4095,58 @@ Veuillez visiter http://lmms.sf.net/wiki pour la documentation de LMMS.Vélocité de base + + MidiSetupWidget + + DEVICE + PERIPHERIQUES + + MonstroInstrument Osc 1 Volume - Volume Osc 1 + Volume de l'oscillateur 1 Osc 1 Panning - Panoramique Osc 1 + Panoramisation de l'oscillateur 1 Osc 1 Coarse detune - Désaccordage grossier Osc 1 + Désaccordage grossier de l'oscillateur 1 Osc 1 Fine detune left - Désaccordage fin (gauche) Osc 1 + Désaccordage fin de gauche de l'oscillateur 1 Osc 1 Fine detune right - Désaccordage fin (droite) Osc 1 + Désaccordage fin de droite de l'oscillateur 1 Osc 1 Stereo phase offset - Décalage stéréo de phase Osc 1 + Décalage de phase stéréo de l'oscillateur 1 Osc 1 Pulse width - Largeur d'impulsion Osc 1 + Largeur de la pulsation de l'oscillateur 1 Osc 1 Sync send on rise - Envoi de la synchro à l'élévation Osc 1 + Synchronisation envoyée lors de la montée de l'oscillateur 1 Osc 1 Sync send on fall - Envoi de la synchro à la descente Osc 1 + Synchronisation envoyée lors de la descente de l'oscillateur 1 Osc 2 Volume - Volume Osc 2 + Volume de l'oscillateur 2 Osc 2 Panning - Panoramique Osc 2 + Panoramisation de l'oscillateur 2 Osc 2 Coarse detune @@ -4038,15 +4154,15 @@ Veuillez visiter http://lmms.sf.net/wiki pour la documentation de LMMS. Osc 2 Fine detune left - Désaccordage fin (gauche) de l'oscillateur 2 + Désaccordage fin de gauche de l'oscillateur 2 Osc 2 Fine detune right - Désaccordage fin (droite) de l'oscillateur 2 + Désaccordage fin de droite de l'oscillateur 2 Osc 2 Stereo phase offset - Décalage stéréo de phase de l'oscillateur 2 + Décalage de phase stéréo de l'oscillateur 2 Osc 2 Waveform @@ -4054,19 +4170,19 @@ Veuillez visiter http://lmms.sf.net/wiki pour la documentation de LMMS. Osc 2 Sync Hard - Synchro fixe Osc 2 + Synchronisation dure de l'oscillateur 2 Osc 2 Sync Reverse - Synchro inversée Osc 2 + Synchronisation inverse de l'oscillateur 2 Osc 3 Volume - Volume Osc 3 + Volume de l'oscillateur 3 Osc 3 Panning - Panoramique Osc 3 + Panoramisation de l'oscillateur 3 Osc 3 Coarse detune @@ -4074,27 +4190,27 @@ Veuillez visiter http://lmms.sf.net/wiki pour la documentation de LMMS. Osc 3 Stereo phase offset - Décalage de phase de l'oscillateur 3 + Décalage de phase stéréo de l'oscillateur 3 Osc 3 Sub-oscillator mix - Mélange sous-oscillateur Osc 3 + Mélange du sous-oscillateur de l'oscillateur 3 Osc 3 Waveform 1 - Form d'onde 1 de l'oscillateur 3 + Forme d'onde 1 de l'oscillateur 3 Osc 3 Waveform 2 - Form d'onde 2 de l'oscillateur 3 + Forme d'onde 2 de l'oscillateur 3 Osc 3 Sync Hard - Synchro fixe Osc 2 + Synchronisation dure de l'oscillateur 3 Osc 3 Sync Reverse - Synchro inversée Osc 3 + Synchronisation inverse de l'oscillateur 3 LFO 1 Waveform @@ -4106,11 +4222,11 @@ Veuillez visiter http://lmms.sf.net/wiki pour la documentation de LMMS. LFO 1 Rate - Vitesse du LFO 1 + Taux du LFO 1 LFO 1 Phase - Phase LFO 1 + Phase du LFO 1 LFO 2 Waveform @@ -4122,75 +4238,75 @@ Veuillez visiter http://lmms.sf.net/wiki pour la documentation de LMMS. LFO 2 Rate - Vitesse du LFO 2 + Taux du LFO 2 LFO 2 Phase - Phase LFO 2 + Phase du LFO2 Env 1 Pre-delay - Pré-délai Env 1 + Pré-délai de l'enveloppe 1 Env 1 Attack - Attaque d'Env 1 + Attaque de l'enveloppe 1 Env 1 Hold - Maintien Env 1 + Tenue de l'enveloppe 1 Env 1 Decay - Descente Env 1 + Affaiblissement (decay) de l'enveloppe 1 Env 1 Sustain - Soutien Env 1 + Soutien (sustain) de l'enveloppe 1 Env 1 Release - Relâchement Env 1 + Relâche (release) de l'enveloppe 1 Env 1 Slope - Pente Env 1 + Pente de l'enveloppe 1 Env 2 Pre-delay - Pré-délai Env 2 + Pré-délai de l'enveloppe 2 Env 2 Attack - Attaque Env 2 + Attaque de l'enveloppe 2 Env 2 Hold - Maintien Env 2 + Tenue de l'enveloppe 2 Env 2 Decay - Descente Env 2 + Affaiblissement (decay) de l'enveloppe 2 Env 2 Sustain - Soutien Env 2 + Soutien (sustain) de l'enveloppe 2 Env 2 Release - Relâchement Env 2 + Relâche (release) de l'enveloppe 2 Env 2 Slope - Pente Env 2 + Pente de l'enveloppe 2 Osc2-3 modulation - Modulation.Osc 2-3 + Modulation des oscillateurs 2 et 3 Selected view - Sélection de la vue + Affichage sélectionné Vol1-Env1 @@ -4378,7 +4494,7 @@ Veuillez visiter http://lmms.sf.net/wiki pour la documentation de LMMS. Bandlimited Saw wave - Onde en dent de scie à bande limitée + Onde en dents-de-scie à bande limitée Bandlimited Ramp wave @@ -4390,7 +4506,7 @@ Veuillez visiter http://lmms.sf.net/wiki pour la documentation de LMMS. Bandlimited Moog saw wave - Onde en dent de scie Moog à bande limitée + Onde en dents-de-scie Moog à bande limitée Soft square wave @@ -4414,7 +4530,7 @@ Veuillez visiter http://lmms.sf.net/wiki pour la documentation de LMMS. Digital Saw wave - Onde en dent de scie digitale + Onde en dents-de-scie digitale Digital Ramp wave @@ -4426,7 +4542,7 @@ Veuillez visiter http://lmms.sf.net/wiki pour la documentation de LMMS. Digital Moog saw wave - Onde en dent de scie Moog digitale + Onde en dents-de-scie Moog digitale Triangle wave @@ -4434,7 +4550,7 @@ Veuillez visiter http://lmms.sf.net/wiki pour la documentation de LMMS. Saw wave - Onde en dent de scie + Onde en dents-de-scie Ramp wave @@ -4446,7 +4562,7 @@ Veuillez visiter http://lmms.sf.net/wiki pour la documentation de LMMS. Moog saw wave - Onde en dent de scie Moog + Onde en dents-de-scie Moog Abs. sine wave @@ -4471,9 +4587,9 @@ Veuillez visiter http://lmms.sf.net/wiki pour la documentation de LMMS.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 vue des opérateurs contient tous les opérateurs. Ceci inclut les opérateurs audibles (oscillateurs) et les opérateurs inaudibles, ou modulateurs: Oscillateurs basse fréquence et enveloppes. + La vue des opérateurs contient tous les opérateurs. Ceci inclut les opérateurs audibles (oscillateurs) et les opérateurs inaudibles, ou modulateurs : oscillateurs basse fréquence et enveloppes. -Les boutons et autres widgets dans la vue des opérateurs ont leur propre aide contextuelle, de sorte que vous pouvez obtenir une aide plus spécifique pour chacun de cette façon. +Les boutons et autres gadgets dans la vue des opérateurs ont leurs propres textes Qu'est-ce que c'est ?, de sorte que vous pouvez obtenir une aide plus spécifique pour chacun de cette façon. Matrix view @@ -4485,15 +4601,15 @@ Les boutons et autres widgets dans la vue des opérateurs ont leur propre aide c 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 vue de la matrice contient la matrice de modulation. Ici vous pouvez définir les relations de modulation entre les différents opérateurs: Chaque opérateur sonore (oscillateurs 1-3) a 3-4 propriétés qui peuvent être modulées par l'un des modulateurs. L'utilisation de plus de modulations consomme plus de puissance CPU. + La vue de la matrice contient la matrice de modulation. Vous pouvez ici définir les relations de modulation entre les différents opérateurs : Chaque opérateur audible (oscillateurs 1-3) possède 3 ou 4 propriétés pouvant être modulées par l'un des modulateurs. Utiliser davantage de modulation consomme davantage de puissance processeur. -La vue est divisée par cible de modulation, regroupés par oscillateur cible. Les cibles disponibles sont le volume, la hauteur, la phase, la largeur d'impulsion et le taux de sous-osc. Remarque: certaines cibles sont spécifiques à un oscillateur seulement. +Cette vue est divisée en cibles de modulation, groupée par l'oscillateur cible. Les cibles disponibles sont le volume, la hauteur, la phase, la largeur de pulsation et le ratio du sous-oscillateur. Remarque : certaines cibles sont spécifiques à un oscillateur uniquement. Chaque cible de modulation dispose de 4 boutons, un pour chaque modulateur. Par défaut, les boutons sont à 0, ce qui signifie pas de modulation. Tourner un bouton à 1 affecte la cible de modulation au maximum. Mis à -1 a le même effet mais la modulation est inversée. Mix Osc2 with Osc3 - Mélanger l'oscillateur 2 et l'oscillateur 3 + Mélanger l'oscillateur 2 avec l'oscillateur 3 Modulate amplitude of Osc3 with Osc2 @@ -4509,143 +4625,143 @@ Chaque cible de modulation dispose de 4 boutons, un pour chaque modulateur. Par The CRS knob changes the tuning of oscillator 1 in semitone steps. - Le bouton CRS change l'accord de l'oscillateur 1 par demi-tons. + Le bouton CRS modifie le réglage de l'oscillateur 1 en pas de demi-ton. The CRS knob changes the tuning of oscillator 2 in semitone steps. - Le bouton CRS change l'accord de l'oscillateur 2 par demi-tons. + Le bouton CRS modifie le réglage de l'oscillateur 2 en pas de demi-ton. The CRS knob changes the tuning of oscillator 3 in semitone steps. - Le bouton CRS change l'accord de l'oscillateur 3 par demi-tons. + Le bouton CRS modifie le réglage de l'oscillateur 3 en pas de demi-ton. 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. - Les boutons FTL et FTR changent le réglage fin de l'oscillateur pour les canaux gauche et droit respectivement. Ceux-ci peuvent ajouter un désaccord stéréo à l'oscillateur ce qui élargit l'image stéréo et provoque une illusion d'espace. + FTL et FTR modifient le réglage fin de l'oscillateur pour les canaux respectifs de gauche et de droite. Ceux-ci peuvent ajouter un dé-réglage stéréo à l'oscillateur ce qui élargit l'image stéréo et provoque une illusion d'espace. The SPO knob modifies the difference in phase between left and right channels. Higher difference creates a wider stereo image. - Le bouton SPO modifie la différence de phase entre les canaux gauche et droit. Une plus grande différence crée une image stéréo plus large. + Le bouton SPO modifie la différence de phase entre les canaux de droite et de gauche. Une plus grande différence crée une image stéréo plus large. 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. - Le bouton PW contrôle la largeur d'impulsion, également connu comme cycle, de l'oscillateur 1. L'oscillateur 1 est un oscillateur à onde de pulsation numérique, il ne produit pas de sortie à bande limitée, ce qui signifie que vous pouvez l'utiliser comme un oscillateur audible mais il provoquera de l'aliasing. Vous pouvez également l'utiliser comme une source inaudible d'un signal de synchronisation qui peut être utilisé pour synchroniser les oscillateurs 2 et 3. + Le bouton PW contrôle la largeur de la pulsation, également connue sous le nom de cycle de service, de l'oscillateur 1. L'oscillateur 1 est un oscillateur d' pulsée numérique, il ne produit pas de sortie à bande limitée, ce qui signifie que vous pouvez l'utiliser comme un oscillateur audible mais qu'il provoquera du crénelage. Vous pouvez également l'utiliser comme une source audible d'un signal synchronisé, ce qui peut être utilisé pour synchroniser les oscillateurs 2 et 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. - Envoyer Sync à l'élévation: Lorsqu'activé, le signal de synchronisation est envoyé chaque fois que l'état de l'oscillateur 1 change de faible à élevé, soit. lorsque l'amplitude du changements passe de -1 à 1. La phase et a longueur de l'impulsion de l'oscillateur 1 peuvent affecter la cadence des synchronisations, mais son volume n'a aucun effet sur eux. Les signaux de synchronisation sont envoyés indépendamment pour les canaux gauche et droite. + Synchronisation d'envoi lors de la montée : lorsqu'activé, le signal de synchronisation est envoyé à chaque fois que l'état de l'oscillateur 1 change du bas vers le haut, c'est à dire, lorsque l'amplitude change de -1 à 1. La tonalité, la phase et la largeur de la pulsation de l'oscillateur 1 peuvent affecter le timing des synchronisations, mais son volume n'a pas d'effet sur eux. Les signaux synchronisés sont envoyés indépendamment pour les canaux de droite et de gauche. 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. - Envoyer Sync à la descente: Lorsqu'activé, le signal de synchronisation est envoyé chaque fois que l'état de l'oscillateur 1 change d'élevé à faible, soit. lorsque l'amplitude du changements passe de 1 à -1. La phase et a longueur de l'impulsion de l'oscillateur 1 peuvent affecter la cadence des synchronisations, mais son volume n'a aucun effet sur eux. Les signaux de synchronisation sont envoyés indépendamment pour les canaux gauche et droite. + Synchronisation d'envoi lors de la descente : lorsqu'activé, le signal de synchronisation est envoyé à chaque fois que l'état de l'oscillateur 1 change du haut vers le bas, c'est à dire, lorsque l'amplitude change de 1 à -1. La tonalité, la phase et la largeur de la pulsation de l'oscillateur 1 peuvent affecter le timing des synchronisations, mais son volume n'a pas d'effet sur eux. Les signaux synchronisés sont envoyés indépendamment pour les canaux de droite et de gauche. Hard sync: Every time the oscillator receives a sync signal from oscillator 1, its phase is reset to 0 + whatever its phase offset is. - Synchronisation fixe: Chaque fois que l'oscillateur reçoit un signal de synchronisation de l'oscillateur 1, sa phase est remise à 0 + son décalage de phasea phase quel qu'il soit. + Synchronisation dure : à chaque fois que l'oscillateur reçoit un signal de synchronisation depuis l'oscillateur 1, sa phase est réinitialisée à 0 + son décalage. Reverse sync: Every time the oscillator receives a sync signal from oscillator 1, the amplitude of the oscillator gets inverted. - Synchronisation inversée: Chaque fois que l'oscillateur reçoit un signal de synchronisation de l'oscillateur 1, l'amplitude de l'oscillateur s'inverse. + Synchronisation inversée : à chaque fois que l'oscillateur reçoit un signal de synchronisation depuis l'oscillateur 1, l'amplitude de l'oscillateur est inversée. Choose waveform for oscillator 2. - Choisissez la forme d'onde de l'oscillateur 2. + Choisir une forme d'onde pour l'oscillateur 2. Choose waveform for oscillator 3's first sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. - Choisissez la forme d'onde pour le premier sous-osc de l'oscillateur 3. L'oscillateur 3 peut facilement interpoler entre deux formes d'onde différentes. + Choisir une forme d'onde pour le premier sous-oscillateur de l'oscillateur 3. L'oscillateur 3 peut interpoler doucement entre deux formes d'onde différentes. Choose waveform for oscillator 3's second sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. - Choisissez la forme d'onde pour le deuxième sous-osc de l'oscillateur 3. L'oscillateur 3 peut facilement interpoler entre deux formes d'onde différentes. + Choisir une forme d'onde pour le second sous-oscillateur de l'oscillateur 3. L'oscillateur 3 peut interpoler doucement entre deux formes d'onde différentes. 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. - Le bouton SUB modifie le rapport de mélange des deux sous-OSC de l'oscillateur 3. Chaque sous-osc peut être réglé pour produire une forme d'onde différente, et l'oscillateur 3 peut facilement interpoler entre eux. Toutes les modulations entrant dans l'oscillateur 3 sont appliquées aux deux sous-OSC / formes d'ondes exactement de la même façon. + Le bouton SUB modifie le ratio de mélange des deux sous-oscillateurs de l'oscillateur 3. Chaque sous-oscillateur peut être régler pour produire un forme d'onde différente, et l'oscillateur 3 peut interpoler doucement entre eux. Toutes les modulations entrantes dans l'oscillateur 3 sont appliquées aux sous-oscillateurs / formes d'onde exactement de la même manière. 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. - En plus des modulateurs dédiés, Monstro permet à l'oscillateur 3 de moduler la sortie de l'oscillateur 2. + En addition aux modulateurs dédiées, Monstro permet à l'oscillateurs 3 d'être modulé par la sortie de l'oscillateur 2. -Le mode Mix signifie pas de modulation: les sorties des oscillateurs sont simplement mélangées ensemble. +Le mode mélange signifie sans modulation : les sorties des oscillateurs sont simplement mélangées ensemble. 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. - En plus des modulateurs dédiés, Monstro permet à l'oscillateur 3 de moduler la sortie de l'oscillateur 2. + En addition aux modulateurs dédiées, Monstro permet à l'oscillateurs 3 d'être modulé par la sortie de l'oscillateur 2. -Le mode AM signifie modulation d'amplitude: l'amplitude de l'oscillateur 3 (volume) est modulé par l'oscillateur 2. +AM signifie Modulation d'Amplitude : l'amplitude de l' oscillateur 3 (son volume) est modulée par l'oscillateur 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. - En plus des modulateurs dédiés, Monstro permet à l'oscillateur 3 de moduler la sortie de l'oscillateur 2. + En addition aux modulateurs dédiées, Monstro permet à l'oscillateurs 3 d'être modulé par la sortie de l'oscillateur 2. -Le mode FM signifie modulation de fréquence: la fréquence de l'oscillateur 3 (pitch) est modulée par l'oscillateur 2. La modulation de fréquence est mise en oeuvre en tant que modulation de phase, ce qui donne une tonalité globale plus stable que la modulation de fréquence "pure". +FM signifie Modulation de Fréquence : la fréquence de l'oscillateur 3 (sa tonalité) est modulée par l'oscillateur 2. La modulation de fréquence est implémentée comme un modulation de phase, ce qui offre une tonalité généralement plus stable qu' modulation de fréquence "pure". 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. - En plus des modulateurs dédiés, Monstro permet à l'oscillateur 3 de moduler la sortie de l'oscillateur 2. + En addition aux modulateurs dédiées, Monstro permet à l'oscillateurs 3 d'être modulé par la sortie de l'oscillateur 2. -Le mode PM signifie modulation de phase: la phase de l'oscillateur 3 est modulée par l'oscillateur 2. Il diffère de la modulation de fréquence par le fait que les changements de phase ne sont pas cumulatifs. +PM signifie Modulation de Phase : la phase de l'oscillateur 3 est modulée par l'oscillateur 2. Elle fiddère de la modulation de fréquence en ce que les changements de phase ne sont pas cumulatifs. 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... - Choisissez la forme d'onde du LFO 1 -"Aléatoire" et "Aléatoire adoucie" sont des formes d'ondes spéciales: elles produisent une sortie aléatoire, où le taux du LFO contrôle la cadence des changements d'état du LFO. La version adoucie interpole entre ces états par une interpolation.cosinus. Ces modes aléatoires peuvent être utilisés pour donner «vie» à vos pré-réglages; ajouter un peu de cette imprévisibilité analogique... + Sélectionnez la forme d'onde du LFO 1. +"Random" et "Random smooth" sont des formes d' spéciales : elles produisent des sorties aléatoires, dans lesquelles le taux des LFO contrôle la fréquence des changements d' des LFO. La version smooth interpole entre ces deux états avec une interpolation cosinusoïdale. Ces modes de hasard peuvent être utilisés pour donner de la "vie" à vos pré-réglages - ça ajoute certaines de ces choses imprévisibles de l'analogique... 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... - Choisissez la forme d'onde du LFO 2 -"Aléatoire" et "Aléatoire adoucie" sont des formes d'ondes spéciales: elles produisent une sortie aléatoire, où le taux du LFO contrôle la cadence des changements d'état du LFO. La version adoucie interpole entre ces états par une interpolation.cosinus. Ces modes aléatoires peuvent être utilisés pour donner «vie» à vos pré-réglages; ajouter un peu de cette imprévisibilité analogique... + Sélectionnez la forme d'onde du LFO 2. +"Random" et "Random smooth" sont des formes d' spéciales : elles produisent des sorties aléatoires, dans lesquelles le taux des LFO contrôle la fréquence des changements d' des LFO. La version smooth interpole entre ces deux états avec une interpolation cosinusoïdale. Ces modes de hasard peuvent être utilisés pour donner de la "vie" à vos pré-réglages - ça ajoute certaines de ces choses imprévisibles de l'analogique... Attack causes the LFO to come on gradually from the start of the note. - L'attaque permet au LFO d'agir graduellement à partir du début de la note. + L'attaque fait que le LFO arrive graduellement à partir du début de la note. Rate sets the speed of the LFO, measured in milliseconds per cycle. Can be synced to tempo. - Vitesse détermine la vitesse du LFO, mesuré en millisecondes par cycle. Il peut être synchronisé au tempo. + Le taux règle la vitesse du LFO, mesuré en millisecondes par cycle. Peut être synchronisé au tempo. PHS controls the phase offset of the LFO. - PHS contrôle le décalage de phase du LFO. + PHS contrôle le décalage de phase du LFO. PRE, or pre-delay, delays the start of the envelope from the start of the note. 0 means no delay. - PRE, ou pré-délai, retarde le début de l'enveloppe depuis le début de la note. 0 signifie pas de délai. + PRE, ou pré-délai, délaie le départ de l'enveloppe du début de la note. 0 signifie sans délai. ATT, or attack, controls how fast the envelope ramps up at start, measured in milliseconds. A value of 0 means instant. - ATT, ou attaque, contrôle ls vitesse à laquelle l'enveloppe augmente au débute, mesurée en millisecondes. Une valeur de 0 signifie instantanée. + ATT, ou attaque, contrôle la rapidité de la rampe de l'enveloppe au départ, mesuré en milliscondes. Une valeur de 0 signifie instantanné. HOLD controls how long the envelope stays at peak after the attack phase. - HOLD contrôle combien de temps l'enveloppe reste à son maximum après la phase d'attaque. + HOLD contrôle la durée à laquelle l'enveloppe reste au pic après la phase d'attaque. 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 ou relâchement, contrôle la vitesse à laquelle l'enveloppe retombe de son pic, mesurée en millisecondes qu'il faudrait pour aller du maximum à zéro. La décroissance réelle peut être plus courte si le maintien est utilisé. + DEC, ou affaiblissement (decay), contrôle la rapidité avec laquelle l'enveloppe redescend de son pic, mesuré en millisecondes, elle va prendre pour aller du pic à zéro. L'affaiblissement réel peut être plus court si le soutien (sustain) est utilisé. 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, ou maintien, contrôle le niveau de maintien de l'enveloppe. La phase de décroissance ne sera pas inférieure à ce niveau tant que la note est tenue. + SUS, ou soutien (sustain), contrôle le niveau de soutien de l'enveloppe. La phase d'affaiblissment n'ira pas en dessous de ce niveau aussi longtemps que la note est tenue. 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, ou relâchement, contrôle la durée de relâchement de la note, mesurée en combien de temps il faudrait pour descendre du maximum à zéro. La durée de relâchement effective peut être plus courte en fonction de la phase pendant laquelle la note est relâchée. + REL, ou relâche, contrôle la longueur de la relâche pour une note, mesurée en combien de temps cela prendrait pour redescendre du pic à zéro. La relâche réelle peut être plus courte en fonction de quelle phase est active lorsque la note est relâchée. 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. - Le bouton de pente contrôle la courbe ou la forme de l'enveloppe. Une valeur de 0 crée des montées et descentes droites. Les valeurs négatives créent des courbes qui commencent lentement, arrivent au pic rapidement et descendent à nouveau lentement. Les valeurs positives créent des courbes qui commencent et se terminent rapidement et restent plus longtemps près du maximum. + Le bouton de pente contrôle la courbe ou la forme de l'enveloppe. Une valeur de 0 crée des montées et des descentes sèches. Des valeurs négatives créent des courbes qui démarrent lentement, font un pic rapide, et redescendent lentement de nouveau. Des valeurs positives créent des courbes qui démarrent et finnissent rapidement, et restent plus longtemps à côté des pics. Volume @@ -4653,7 +4769,7 @@ Le mode PM signifie modulation de phase: la phase de l'oscillateur 3 est mo Panning - Panoramique + Panoramisation Coarse detune @@ -4661,7 +4777,7 @@ Le mode PM signifie modulation de phase: la phase de l'oscillateur 3 est mo semitones - demi-tons + demi-tons Finetune left @@ -4685,27 +4801,35 @@ Le mode PM signifie modulation de phase: la phase de l'oscillateur 3 est mo Pulse width - Largeur d'impulsion + Largeur de pulsation - Sub-osc mix - Mélange du sous-oscillateur + Send sync on pulse rise + Envoi de la synchro à la montée - Phase - Phase + Send sync on pulse fall + Envoi de la synchro à la descente - Sustain - Soutien + Hard sync oscillator 2 + Synchro fixe oscillateur 2 - Slope - Pente + Reverse sync oscillator 2 + Synchro inverse oscillateur 2 - Modulation amount - Niveau de modulation + Sub-osc mix + Mélange du sous-oscillateur + + + Hard sync oscillator 3 + Synchro fixe oscillateur 3 + + + Reverse sync oscillator 3 + Synchro inverse oscillateur 3 Attack @@ -4715,6 +4839,10 @@ Le mode PM signifie modulation de phase: la phase de l'oscillateur 3 est mo Rate Vitesse + + Phase + Phase + Pre-delay Pré-délai @@ -4728,32 +4856,20 @@ Le mode PM signifie modulation de phase: la phase de l'oscillateur 3 est mo Descente - Release - Relâchement - - - Send sync on pulse rise - Envoi de la synchro à la montée - - - Send sync on pulse fall - Envoi de la synchro à la descente - - - Hard sync oscillator 2 - Synchro fixe oscillateur 2 + Sustain + Soutien - Reverse sync oscillator 2 - Synchro inverse oscillateur 2 + Release + Relâchement - Hard sync oscillator 3 - Synchro fixe oscillateur 3 + Slope + Pente - Reverse sync oscillator 3 - Synchro inverse oscillateur 3 + Modulation amount + Niveau de modulation @@ -4764,7 +4880,7 @@ Le mode PM signifie modulation de phase: la phase de l'oscillateur 3 est mo Step length: - Longueur de pas: + Longueur de pas : Dry @@ -4772,7 +4888,7 @@ Le mode PM signifie modulation de phase: la phase de l'oscillateur 3 est mo Dry Gain: - Gain sec: + Gain sec : Stages @@ -4780,7 +4896,7 @@ Le mode PM signifie modulation de phase: la phase de l'oscillateur 3 est mo Lowpass stages: - Niveaux passe-bas: + Niveaux passe-bas : Swap inputs @@ -4795,7 +4911,7 @@ Le mode PM signifie modulation de phase: la phase de l'oscillateur 3 est mo NesInstrument Channel 1 Coarse detune - Désaccordage grossier du canal 1 + Dé-réglage grossier du canal 1 Channel 1 Volume @@ -4803,23 +4919,23 @@ Le mode PM signifie modulation de phase: la phase de l'oscillateur 3 est mo Channel 1 Envelope length - Longueur de l'enveloppe canal 1 + Longueur d'enveloppe du canal 1 Channel 1 Duty cycle - Cycle du canal 1 + Cycle de service du canal 1 Channel 1 Sweep amount - Niveau de décalage du canal 1 + Quantité de balayage du canal 1 Channel 1 Sweep rate - Vitesse du décalage cu canal 1 + Taux de balayage du canal 1 Channel 2 Coarse detune - Désaccordage grossier du canal 2 + Dé-réglage grossier du canal 2 Channel 2 Volume @@ -4827,23 +4943,23 @@ Le mode PM signifie modulation de phase: la phase de l'oscillateur 3 est mo Channel 2 Envelope length - Longueur de l'enveloppe du canal 2 + Longueur d'enveloppe du canal 2 Channel 2 Duty cycle - Cycle du canal 2 + Cycle de service du canal 2 Channel 2 Sweep amount - Niveau de décalage du canal 2 + Quantité de balayage du canal 2 Channel 2 Sweep rate - Vitesse du décalage cu canal 2 + Taux de balayage du canal 2 Channel 3 Coarse detune - Désaccordage grossier du canal 3 + Dé-réglage grossier du canal 3 Channel 3 Volume @@ -4855,15 +4971,15 @@ Le mode PM signifie modulation de phase: la phase de l'oscillateur 3 est mo Channel 4 Envelope length - Longueur de l'enveloppe canal 4 + Longueur d'enveloppe du canal 4 Channel 4 Noise frequency - Fréquence du bruitdu canal 4 + Fréquence de bruit du canal 4 Channel 4 Noise frequency sweep - Fréquence du décalage du bruit du canal 4 + Balayage de fréquence de bruit de canal 4 Master volume @@ -4997,7 +5113,7 @@ Le mode PM signifie modulation de phase: la phase de l'oscillateur 3 est mo Osc %1 panning - Panoramique de l'oscillateur %1 + Panoramisation de l'oscillateur %1 Osc %1 coarse detuning @@ -5036,6 +5152,41 @@ Le mode PM signifie modulation de phase: la phase de l'oscillateur 3 est mo Harmonique de l'oscillateur %1 + + PatchesDialog + + Qsynth: Channel Preset + Qsynth : pré-réglage de canal + + + Bank selector + Sélecteur de banque + + + Bank + Banque + + + Program selector + Sélecteur de programme + + + Patch + Instrument + + + Name + Nom + + + OK + OK + + + Cancel + Annuler + + PatmanView @@ -5056,7 +5207,7 @@ Le mode PM signifie modulation de phase: la phase de l'oscillateur 3 est mo 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. S'il est activé, PatMan utilisera les informations de jeu en boucle disponibles dans le fichier. + Ici, vous pouvez permuter le mode de jeu en boucle. S'il est activé, PatMan utilisera les informations de jeu en boucle disponibles dans le fichier. Tune @@ -5068,7 +5219,7 @@ Le mode PM signifie modulation de phase: la phase de l'oscillateur 3 est mo 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. S'il est activé, PatMan accordera l'échantillon en fonction de la fréquence de la note. + Ici, vous pouvez permuter le mode d'accordage. S'il est activé, PatMan accordera l'échantillon en fonction de la fréquence de la note. No file selected @@ -5085,12 +5236,6 @@ Le mode PM signifie modulation de phase: la phase de l'oscillateur 3 est mo PatternView - - double-click to open this pattern in piano-roll -use mouse wheel to set velocity 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 @@ -5105,7 +5250,7 @@ utilisez la molette de la souris pour régler le volume d'un pas Change name - Changer le nom + Modifier le nom Add steps @@ -5115,6 +5260,18 @@ utilisez la molette de la souris pour régler le volume d'un pasRemove steps Supprimer des pas + + use mouse wheel to set velocity of a step + utiliser la molette de la souris pour régler la vélocité d'un pas + + + double-click to open in Piano Roll + double-cliquer pour l'ouvrir dans un piano virtuel + + + Clone Steps + Cloner les pas + PeakController @@ -5174,7 +5331,7 @@ utilisez la molette de la souris pour régler le volume d'un pas Amount Multiplicator: - Multiplicateur de quantité: + Multiplicateur de quantité : ATCK @@ -5190,7 +5347,7 @@ utilisez la molette de la souris pour régler le volume d'un pas Treshold: - Seuil: + Seuil : @@ -5205,7 +5362,7 @@ utilisez la molette de la souris pour régler le volume d'un pas Mute output - Couper la sortie + Mettre la sortie en sourdine Attack @@ -5230,17 +5387,9 @@ utilisez la molette de la souris pour régler le volume d'un pas PianoRoll - - 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! + Veuillez ouvrir un motif en double-cliquant dessus ! Last note @@ -5248,31 +5397,31 @@ utilisez la molette de la souris pour régler le volume d'un pas Note lock - Vérouiller la note + Verrouiller la note Note Velocity - Volume de note + Vélocité de la note Note Panning - Panoramique de note + Panoramisation de la note Mark/unmark current semitone - Cocher/décocher le demi-ton courant + Marquer/démarquer le demi-ton actuel Mark current scale - Cocher la gamme courante + Marquer la gamme actuelle Mark current chord - Cocher l'accord courant + Marquer l'accord actuel Unmark all - Déchocher tout + Démarquer tout No scale @@ -5284,30 +5433,38 @@ utilisez la molette de la souris pour régler le volume d'un pas Velocity: %1% - Velocity: %1% + Vélocité : %1% Panning: %1% left - Panoramique: %1% gauche + Panoramisation : %1% gauche Panning: %1% right - Panoramique: %1% droite + Panoramisation : %1% droite Panning: center - Panoramique: centre + Panoramisation : centre Please enter a new value between %1 and %2: Veuillez entrer une valeur entre %1 et %2 : + + Mark/unmark all corresponding octave semitones + Marquer/démarquer tous les demi-tons d'octave correspondant + + + Select all notes on this key + Sélectionner toutes les notes de cet clef + PianoRollWindow Play/pause current pattern (Space) - Jouer/Mettre en pause le motif (Barre d'espace) + Jouer/mettre en pause le motif (barre d'espace) Record notes from MIDI-device/channel-piano @@ -5319,7 +5476,7 @@ utilisez la molette de la souris pour régler le volume d'un pas Stop playing of current pattern (Space) - Arrêter de jouer.le motif (Barre d'espace) + Arrêter de jouer le motif (barre d'espace) Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached. @@ -5413,6 +5570,30 @@ utilisez la molette de la souris pour régler le volume d'un pasLet 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. Permet de sélectionner un accord que LMMS peut ensuite dessiner ou mettre en évidence.Vous trouverez les accords les plus courants dans ce menu déroulant. Après avoir sélectionné un accord, cliquez n'importe où pour placer l'accord, et cliquez à droite sur le clavier virtuel pour ouvrir le menu contextuel et souligner l'accord. Pour revenir à la mise en place d'une seule note, vous devez choisir 'Aucun accord' dans ce menu déroulant. + + Edit actions + Actions d'édition + + + Copy paste controls + Contrôles de copier/coller + + + Timeline controls + Contrôles de la ligne de temps + + + Zoom and note controls + Contrôles de zoom et de notes + + + Piano-Roll - %1 + Piano virtuel - %1 + + + Piano-Roll - no pattern + Piano virtuel - pas de motif + PianoView @@ -5428,7 +5609,7 @@ utilisez la molette de la souris pour régler le volume d'un pasLe greffon n'a pas été trouvé - The plugin "%1" wasn't found or could not be loaded! + 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" @@ -5441,10 +5622,6 @@ Raison : "%2" Failed to load plugin "%1"! Le chargement du greffon "%1" a échoué ! - - LMMS plugin %1 does not have a plugin descriptor named %2! - Le greffon LMMS %1 n'a pas de descripteur de greffon nommé %2! - PluginBrowser @@ -5454,13 +5631,24 @@ Raison : "%2" Instrument browser - Sélecteur d'instruments + Navigateur d'instruments Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track. Glissez un instrument dans l'éditeur de morceau, dans l'éditeur de rythme et de ligne de basse, ou dans une piste d'instrument existante. + + PluginFactory + + Plugin not found. + Greffon introuvable + + + LMMS plugin %1 does not have a plugin descriptor named %2! + Le greffon LMMS %1 n'a pas de descripteur de greffon nommé %2 ! + + ProjectNotes @@ -5469,7 +5657,7 @@ Raison : "%2" Put down your project notes here. - Ici vous pouvez prendre des notes concernant votre projet. + Ici, vous pouvez prendre des notes concernant votre projet. Edit Actions @@ -5591,111 +5779,23 @@ Raison : "%2" 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: + Nom : Maker: - Fabricant: + Fabricant : Copyright: - Copyright: + Copyright : Requires Real Time: - Nécessite le temps réel: + Nécessite le temps réel : Yes @@ -5707,27 +5807,27 @@ Raison : "%2" Real Time Capable: - Support temps réel: + Support temps réel : In Place Broken: - Inutilisable: + Inutilisable : Channels In: - Canaux d'entrée: + Canaux d'entrée : Channels Out: - Canaux de sortie: + Canaux de sortie : File: - Fichier: + Fichier : File: %1 - Fichier: %1 + Fichier : %1 @@ -5808,11 +5908,7 @@ Raison : "%2" Mute/unmute (<%1> + middle click) - Couper/Jouer (<%1> + clic-milieu) - - - Set/clear record - Régler/Effacer l'enregistrement + Sourdine (ou non) (<%1> + clic-milieu) @@ -5827,7 +5923,7 @@ Raison : "%2" Panning - Panoramique + Panoramisation @@ -5846,11 +5942,11 @@ Raison : "%2" Panning - Panoramique + Panoramisation Panning: - Panoramique : + Panoramisation : PAN @@ -5885,7 +5981,7 @@ Raison : "%2" Show restart warning after changing settings - Afficher l'invitation à redémarrer après un changement de configuration + Invitation à redémarrer après modification de la configuration Display volume as dBV @@ -5893,11 +5989,11 @@ Raison : "%2" Compress project files per default - Compresser par défaut les fichiers de projet + Compresser les fichiers de projet par défaut One instrument track window mode - Mode fenêtre une piste d'instrument + Mode une piste d'instrument par fenêtre HQ-mode for output audio-device @@ -5905,11 +6001,11 @@ Raison : "%2" Compact track buttons - Boutons de piste compacte + Boutons compacts de piste Sync VST plugins to host playback - Sync les greffons VST à la lecture de l'hôte + Synchroniser les greffons VST à la lecture de l'hôte Enable note labels in piano roll @@ -5949,7 +6045,7 @@ Raison : "%2" FL Studio installation directory - Répertoire d'installation de Fruity Loops Studio + Répertoire d'installation de FL Studio STK rawwave directory @@ -5965,7 +6061,7 @@ Raison : "%2" UI effects vs. performance - Effets graphiques vs Perfomances + Effets graphiques versus perfomances Smooth scroll in Song Editor @@ -5981,7 +6077,7 @@ Raison : "%2" Audio settings - Configuration audio + Configurations audio AUDIO INTERFACE @@ -5989,7 +6085,7 @@ Raison : "%2" MIDI settings - Configuration MIDI + Configurations MIDI MIDI INTERFACE @@ -6009,7 +6105,7 @@ Raison : "%2" Please note that most changes won't take effect until you restart LMMS! - Veuillez noter que la plupart des modifications ne prendront pas effet sans redémarrer LMMS ! + Veuillez noter que la plupart des modifications ne prendront pas effet avant que vous ne redémarriez LMMS ! Frames: %1 @@ -6019,7 +6115,7 @@ 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. + 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 @@ -6035,7 +6131,7 @@ Latence : %2 ms Choose FL Studio installation directory - Choisissez le répertoire d'installation de Fruity Loops Studio + Choisissez le répertoire d'installation de FL Studio Choose LADSPA plugin directory @@ -6055,11 +6151,15 @@ Latence : %2 ms 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. + 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. + 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. + + + Reopen last project on start + Ré-ouvrir le dernier projet à l'ouverture Directories @@ -6081,6 +6181,10 @@ Latence : %2 ms LADSPA plugin directories Répertoire des greffons LADSPA + + Auto save + Sauvegarde automatique + Choose your GIG directory Choisissez le répertoire des fichiers GIG @@ -6089,6 +6193,24 @@ Latence : %2 ms Choose your SF2 directory Choisissez le répertoire des fichiers SF2 + + minutes + minutes + + + minute + minute + + + Auto save interval: %1 %2 + Intervalle de sauvegarde automatique : %1 %2 + + + Set the time between automatic backup to %1. +Remember to also save your project manually. + Régler le temps entre deux sauvegarde automatique à %1. +Rappelez-vous de sauvegarder également votre projet manuellement. + Song @@ -6130,7 +6252,7 @@ Latence : %2 ms FL Studio projects - Projets Fruity Loops Studio + Projets FL Studio Hydrogen projects @@ -6162,12 +6284,16 @@ Latence : %2 ms The following errors occured while loading: - Les erreurs suivantes sont survenues lors du chargement: + Les erreurs suivantes sont survenues lors du chargement : MIDI File (*.mid) Fichier MIDI (*.mid) + + LMMS Error report + Rapport d'erreur LMMS + SongEditor @@ -6182,16 +6308,16 @@ Latence : %2 ms 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. + Le fichier %1 n'a pas pu être ouvert. Vous n'avez probablement pas les droits pour lire ce fichier. +Veuillez vérifier que vous avez au moins les droits en lecture pour ce fichier et réessayez. Error in file - Il y a une ou plusieurs erreurs dans le fichier + Erreur 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. + Le fichier %1 semble contenir des erreurs et ne peut donc pas être chargé. Tempo @@ -6207,7 +6333,7 @@ Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le ré 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). + Le tempo d'un morceau est spécifié en battements par minute (BPM). Si vous souhaitez modifier 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 @@ -6249,6 +6375,14 @@ Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le ré This %1 was created with LMMS version %2, but version %3 is installed Ce %1 a été créé avec la version %2 de LMMS mais la version installée est %3 + + template + modèle + + + project + projet + SongEditorWindow @@ -6258,7 +6392,7 @@ Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le ré Play song (Space) - Jouer le morceau (Barre d'espace) + Jouer le morceau (barre d'espace) Record samples from Audio-device @@ -6270,7 +6404,7 @@ Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le ré Stop song (Space) - Arrêter de jouer le morceau (Barre d'espace) + Arrêter de jouer le morceau (barre d'espace) Add beat/bassline @@ -6290,16 +6424,32 @@ Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le ré Edit mode (select and move) - Mode édition (Sélectionner et déplacer) + Mode édition (sélectionner et déplacer) 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. + Cliquez ici si vous souhaitez jouer le morceau en entier. L'écoute commencera à partir du marqueur (vert) de position dans le morceau. Vous pouvez aussi déplacer ce curseur pendant l'écoute. 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. + + Track actions + Actions de la piste + + + Edit actions + Actions d'édition + + + Timeline controls + Contrôles de la ligne de temps + + + Zoom controls + Contrôle du zoom + SpectrumAnalyzerControlDialog @@ -6413,18 +6563,42 @@ Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le ré TimeDisplayWidget click to change time units - cliquez pour changer les unités de temps + cliquez pour modifier les unités de temps + + + MIN + MIN + + + SEC + DEC + + + MSEC + MSEC + + + BAR + BAR + + + BEAT + BATT + + + TICK + TICK TimeLineWidget Enable/disable auto-scrolling - Activer/Désactiver l'auto-défilement + Activer/désactiver l'auto-défilement Enable/disable loop-points - Activer/Désactiver les marqueurs de jeu en boucle + Activer/désactiver les marqueurs de jeu en boucle After stopping go back to begin @@ -6436,7 +6610,7 @@ Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le ré After stopping keep position - Ne rien faire après l'arrêt + Ne rien faire après l'arrêt Hint @@ -6455,7 +6629,7 @@ Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le ré Track Mute - Muet + Mettre en sourdine Solo @@ -6469,7 +6643,7 @@ Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le ré Le fichier n'a pas pu être importé - Couldn't find a filter for importing file %1. + 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. @@ -6479,7 +6653,7 @@ Vous devriez convertir ce fichier dans un format pris en charge par LMMS en util Le fichier n'a pas pu être ouvert - Couldn't open file %1 for reading. + 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 ! @@ -6509,7 +6683,7 @@ Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le ré TrackContentObject Mute - Muet + Mettre en sourdine @@ -6556,7 +6730,7 @@ Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le ré Mute/unmute (<%1> + middle click) - Couper/Jouer (<%1> + clic-milieu) + Mettre en sourdine (ou pas) (<%1> + clic-milieu) @@ -6571,7 +6745,7 @@ Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le ré Mute - Mode muet + Mode sourdine Solo @@ -6579,7 +6753,7 @@ Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le ré Mute this track - Rendre cette piste muette + Mettre cette piste en sourdine Clone this track @@ -6595,15 +6769,15 @@ Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le ré FX %1: %2 - Effet %1: %2 + Effet %1 : %2 Turn all recording on - Activer l'enregistrementsur toutes les pistes + Armer tous les enregistrements Turn all recording off - Désactiver l'enregistrement sur toutes les pistes + Désarmer tous les enregistrements Assign to new FX Channel @@ -6646,7 +6820,7 @@ Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le ré Synchronize oscillator 2 with oscillator 3 - Synchroniser l'oscillateur 2 avec l'oscillateur 3 + Synchroniser l'oscillateur 2 avec l'oscillateur 3 Use frequency modulation for modulating oscillator 2 with oscillator 3 @@ -6662,11 +6836,11 @@ Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le ré Osc %1 panning: - Panoramique de l'oscillateur %1 : + Panoramisation 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. + Avec ce bouton vous pouvez régler le panoramisation 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: @@ -6730,7 +6904,7 @@ Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le ré Use a saw-wave for current oscillator. - Utiliser une onde en dent de scie pour cet oscillateur. + Utiliser une onde en dents-de-scie pour cet oscillateur. Use a square-wave for current oscillator. @@ -6738,7 +6912,7 @@ Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le ré Use a moog-like saw-wave for current oscillator. - Utiliser une onde en dent de scie de type Moog pour cet oscillateur. + Utiliser une onde en dents-de-scie de type Moog pour cet oscillateur. Use an exponential wave for current oscillator. @@ -6776,7 +6950,7 @@ Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le ré Show/hide GUI - Montrer/Cacher l'interface utilisateur graphique + Montrer/cacher l'interface utilisateur graphique Click here to show or hide the graphical user interface (GUI) of your VST-plugin. @@ -6832,7 +7006,7 @@ Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le ré 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. + Cliquez ici si vous voulez sauvegarder le programme de pré-réglage de greffon VST actuel. Next (+) @@ -6870,7 +7044,7 @@ Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le ré VstEffectControlDialog Show/hide - Montrer/Cacher + Montrer/cacher Control VST-plugin from LMMS host @@ -6910,11 +7084,11 @@ Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le ré 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. + Cliquez ici si vous voulez sauvegarder le programme de pré-réglage de greffon VST actuel. Effect by: - Effet par: + Effet par : &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /> @@ -6937,7 +7111,7 @@ Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le ré : default - : défaut + : défaut " @@ -6996,19 +7170,19 @@ Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le ré Panning A1 - Panoramique A1 + Panoramisation A1 Panning A2 - Panoramique A2 + Panoramisation A2 Panning B1 - Panoramique B1 + Panoramisation B1 Panning B2 - Panoramique B2 + Panoramisation B2 Freq. multiplier A1 @@ -7028,35 +7202,35 @@ Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le ré Left detune A1 - Désaccordage gauche A1 + Dé-réglage gauche A1 Left detune A2 - Désaccordage gauche A2 + Dé-réglage gauche A2 Left detune B1 - Désaccordage gauche B1 + Dé-réglage gauche B1 Left detune B2 - Désaccordage gauche B2 + Dé-réglage gauche B2 Right detune A1 - Désaccordage droite A1 + Dé-réglage droit A1 Right detune A2 - Désaccordage droite A2 + Dé-réglage droit A2 Right detune B1 - Désaccordage droite B1 + Dé-réglage droit B1 Right detune B2 - Désaccordage droite B2 + Dé-réglage droit B2 A-B Mix @@ -7072,15 +7246,15 @@ Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le ré A-B Mix envelope hold - Niveau de mélange du maintien.d'enveloppe A-B + Niveau de mélange du maintien d'enveloppe A-B A-B Mix envelope decay - Niveau de mélange de la descente.d'enveloppe A-B + Niveau de mélange de l'affaiblissement (decay) d'enveloppe A-B A1-B2 Crosstalk - Transfert de signal A1-B2 + Diaphonie A1-B2 A2-A1 modulation @@ -7092,26 +7266,26 @@ Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le ré Selected graph - Graphique choisi + Graphique sélectionné WatsynView Select oscillator A1 - Choisissez l'oscillateur A1 + Sélectionner l'oscillateur A1 Select oscillator A2 - Choisissez l'oscillateur A2 + Sélectionner l'oscillateur A2 Select oscillator B1 - Choisissez l'oscillateur B1 + Sélectionner l'oscillateur B1 Select oscillator B2 - Choisissez l'oscillateur B2 + Sélectionner l'oscillateur B2 Mix output of A2 to A1 @@ -7163,7 +7337,7 @@ Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le ré Click to shift phase by -15 degrees - Cliquez pour déphaser de -15 degrés + Cliquez pour décaler la phase de -15 degrés Phase right @@ -7171,7 +7345,7 @@ Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le ré Click to shift phase by +15 degrees - Cliquez pour déphaser de +15 degrés + Cliquez pour décaler la phase de +15 degrés Normalize @@ -7203,7 +7377,7 @@ Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le ré Click for sine wave - Cliquez ici pour une onde sinusoïdale + Cliquez pour une onde sinusoïdale Triangle wave @@ -7211,11 +7385,11 @@ Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le ré Click for triangle wave - Cliquez ici pour une onde triangulaire + Cliquez pour une onde triangulaire Click for saw wave - Cliquez pour une onde en dent de scie + Cliquez pour une onde en dents-de-scie Square wave @@ -7223,7 +7397,7 @@ Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le ré Click for square wave - Cliquez ici pour une onde carrée + Cliquez pour une onde carrée Volume @@ -7231,7 +7405,7 @@ Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le ré Panning - Panoramique + Panoramisation Freq. multiplier @@ -7239,15 +7413,15 @@ Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le ré Left detune - Désaccordage gauche + Déréglage gauche cents - centièmes + centièmes Right detune - Désaccordage droite + Déréglage droite A-B Mix @@ -7263,15 +7437,15 @@ Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le ré Mix envelope hold - Mélanger le maintien.d'enveloppe + Mélanger le maintien d'enveloppe Mix envelope decay - Mélanger la descente.d'enveloppe + Mélanger la descente d'enveloppe Crosstalk - Transfert de signal + Diaphonie @@ -7282,11 +7456,11 @@ Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le ré Filter Frequency - Fréquence du Filtre + Fréquence du filtre Filter Resonance - Résonance du Filtre + Résonance du filtre Bandwidth @@ -7306,7 +7480,7 @@ Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le ré Forward MIDI Control Change Events - Transmet les évènements MIDI Control Change + Transmet les événements MIDI Control Change @@ -7321,7 +7495,7 @@ Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le ré Portamento: - Portamento: + Portamento : PORT @@ -7329,7 +7503,7 @@ Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le ré Filter Frequency: - Fréquence du Filtre: + Fréquence du filtre : FREQ @@ -7337,7 +7511,7 @@ Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le ré Filter Resonance: - Résonance du Filtre: + Résonance du filtre : RES @@ -7345,15 +7519,15 @@ Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le ré Bandwidth: - Largeur de bande: + Largeur de bande : BW - BW + LB FM Gain: - Gain FM: + Gain FM : FM GAIN @@ -7361,7 +7535,7 @@ Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le ré Resonance center frequency: - Fréquence centrale de la résonance: + Fréquence centrale de la résonance : RES CF @@ -7369,7 +7543,7 @@ Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le ré Resonance bandwidth: - Largeur de Bande de la Résonance: + Largeur de bande de la résonance : RES BW @@ -7377,7 +7551,7 @@ Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le ré Forward MIDI Control Changes - Transmet les évènements MIDI Control Change + Transmet les événements MIDI Control Change @@ -7400,7 +7574,6 @@ Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le ré Stutter - ?? Bégaiement @@ -7455,7 +7628,7 @@ Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le ré Saw wave - Onde en dent de scie + Onde en dents-de-scie Square wave @@ -7499,7 +7672,7 @@ Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le ré Click here for a saw-wave. - Cliquez ici pour une onde en dent de scie. + Cliquez ici pour une onde en dents-de-scie. Click here for a square-wave. @@ -7522,7 +7695,7 @@ Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le ré Input gain: - Gain d'entrée: + Gain d'entrée : OUTPUT @@ -7530,7 +7703,7 @@ Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le ré Output gain: - Gain de sortie: + Gain de sortie : ATTACK @@ -7538,7 +7711,7 @@ Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le ré Peak attack time: - Temps d'attaque maximal: + Temps d'attaque du pic : RELEASE @@ -7546,7 +7719,7 @@ Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le ré Peak release time: - Temps de relâchement: + Temps de relâchement : Reset waveform @@ -7554,7 +7727,7 @@ Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le ré Click here to reset the wavegraph back to default - Cliquer ici pour réinitialiser le graphe à la valeur par défaut + Cliquer ici pour réinitialiser le graphique d'onde par défaut Smooth waveform @@ -7566,35 +7739,35 @@ Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le ré Increase wavegraph amplitude by 1dB - Augmenter l'amplidude du graphe de 1 dB + Augmenter l'amplitude du graphique de l'onde d'1 dB Click here to increase wavegraph amplitude by 1dB - Cliquez ici pour augmenter l'amplidude du graphe de 1dB + Cliquez ici pour augmenter l'amplitude du graphique de l'onde d'1 dB Decrease wavegraph amplitude by 1dB - Réduire l'amplitude du graphe de 1dB + Réduire l'amplitude du graphique de l'onde d'1 dB Click here to decrease wavegraph amplitude by 1dB - Cliquez ici pour réduire l'amplitude du graphe de 1dB + Cliquer ici pour réduire l'amplitude du graphique de l'onde d'1 dB Stereomode Maximum - Mode stéréo maximum + Maximum du mode stéréo Process based on the maximum of both stereo channels - Processus basé sur le maximum des deux canaux stéréo + Traitement basé sur le maximum des deux canaux stéréo Stereomode Average - Mode stéréo moyen + Moyenne du mode stéréo Process based on the average of both stereo channels - Processus basé sur la moyenne des deux canaux stéréo + Traitement basé sur la moyenne des deux canaux stéréo Stereomode Unlinked @@ -7602,7 +7775,7 @@ Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le ré Process each stereo channel independently - Processus basé indépendamment sur les deux canaux stéréo + Traiter chaque canal stéréo indépendamment @@ -7613,7 +7786,7 @@ Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le ré Output gain - Gain en sortie + Gain de sortie Attack time @@ -7632,7 +7805,7 @@ Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le ré fxLineLcdSpinBox Assign to: - Assigner à: + Assigner à : New FX Channel @@ -7713,31 +7886,31 @@ Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le ré Frequency Slope: - Pente de fréquence: + Pente de fréquence : Envelope Length: - Longueur de l'enveloppe: + Longueur de l'enveloppe : Envelope Slope: - Pente de l'enveloppe: + Pente de l'enveloppe : Click: - Clic: + Clic : Noise: - Bruit: + Bruit : Distortion Start: - Début de distorsion: + Début de distorsion : Distortion End: - Fin de distorsion: + Fin de distorsion : @@ -7765,15 +7938,15 @@ Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le ré 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. +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. +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. +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. @@ -7834,11 +8007,11 @@ En double-cliquant sur ces greffons vous ferez apparaître des informations sur Logarithmic - Logarythmique + Logarithmique SR Dependent - + Dépendant du taux d'échantillonnage Audio @@ -7889,7 +8062,7 @@ En double-cliquant sur ces greffons vous ferez apparaître des informations sur VCF Envelope Decay - Descente de l'enveloppe du VCF + Affaiblissement (decay) de l'enveloppe du VCF Distortion @@ -7901,7 +8074,7 @@ En double-cliquant sur ces greffons vous ferez apparaître des informations sur Slide Decay - Descente de la liaison + Affaiblissement (decay) glissant Slide @@ -7936,7 +8109,7 @@ En double-cliquant sur ces greffons vous ferez apparaître des informations sur Decay: - Descente : + Affaiblissement : 303-es-que, 24dB/octave, 3 pole filter @@ -7944,7 +8117,7 @@ En double-cliquant sur ces greffons vous ferez apparaître des informations sur Slide Decay: - Descente de la liaison : + Affaiblissement glissant : DIST: @@ -7952,11 +8125,11 @@ En double-cliquant sur ces greffons vous ferez apparaître des informations sur Saw wave - Onde en dent de scie + Onde en dents-de-scie Click here for a saw-wave. - Cliquez ici pour une onde en dent de scie. + Cliquez ici pour une onde en dents-de-scie. Triangle wave @@ -8012,11 +8185,11 @@ En double-cliquant sur ces greffons vous ferez apparaître des informations sur Bandlimited saw wave - Onde en dent de scie à bande limitée + Onde en dents-de-scie à bande limitée Click here for bandlimited saw wave. - Cliquez ici pour une onde en dent de scie.à bande limitée. + Cliquez ici pour une onde en dents-de-scie à bande limitée. Bandlimited square wave @@ -8032,125 +8205,15 @@ En double-cliquant sur ces greffons vous ferez apparaître des informations sur Click here for bandlimited triangle wave. - Cliquez ici pour une onde triangulaire.à bande limitée. + Cliquez ici pour une onde triangulaire à bande limitée. Bandlimited moog saw wave - Onde en dent de scie Moog à bande limitée + Onde en dents-de-scie Moog à bande limitée Click here for bandlimited moog saw wave. - Cliquez ici pour une onde en dent de scie de type Moog.à bande limitée. - - - - 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 + Cliquez ici pour une onde en dents-de-scie de type Moog à bande limitée. @@ -8271,14 +8334,6 @@ En double-cliquant sur ces greffons vous ferez apparaître des informations sur 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 @@ -8374,10 +8429,6 @@ En double-cliquant sur ces greffons vous ferez apparaître des informations sur ADSR: ADSR : - - Bowed - Courbé - Pressure Pression @@ -8386,14 +8437,6 @@ En double-cliquant sur ces greffons vous ferez apparaître des informations sur Pressure: Pression : - - Motion - Mouvement - - - Motion: - Mouvement : - Speed Vitesse @@ -8402,21 +8445,13 @@ En double-cliquant sur ces greffons vous ferez apparaître des informations sur Speed: Vitesse : - - Vibrato - Vibrato - - - Vibrato: - Vibrato : - 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é! + Votre installation de STK semble incomplète. Veuillez vous assurer que le paquet STK complet est installé ! @@ -8493,11 +8528,11 @@ En double-cliquant sur ces greffons vous ferez apparaître des informations sur Op 1 Decay - Descente Op 1 + Affaiblissement (decay) Op 1 Op 1 Sustain - Soutien Op 1 + Soutien (sustain) Op 1 Op 1 Release @@ -8509,7 +8544,7 @@ En double-cliquant sur ces greffons vous ferez apparaître des informations sur Op 1 Level Scaling - Échelle Op 1 + Graduation de niveau Op 1 Op 1 Frequency Multiple @@ -8517,11 +8552,11 @@ En double-cliquant sur ces greffons vous ferez apparaître des informations sur Op 1 Feedback - Réaction Op 1 + Réinjection Op 1 Op 1 Key Scaling Rate - + Taux de graduation de clé Op 1 Op 1 Percussive Envelope @@ -8545,11 +8580,11 @@ En double-cliquant sur ces greffons vous ferez apparaître des informations sur Op 2 Decay - Descente Op 2 + Affaiblissement (decay) Op 2 Op 2 Sustain - Soutien Op 2 + Soutien (sustain) Op 2 Op 2 Release @@ -8561,7 +8596,7 @@ En double-cliquant sur ces greffons vous ferez apparaître des informations sur Op 2 Level Scaling - Échelle Op 2 + Graduation de niveau Op 2 Op 2 Frequency Multiple @@ -8569,7 +8604,7 @@ En double-cliquant sur ces greffons vous ferez apparaître des informations sur Op 2 Key Scaling Rate - + Taux de graduation de clé Op 2 Op 2 Percussive Envelope @@ -8600,6 +8635,25 @@ En double-cliquant sur ces greffons vous ferez apparaître des informations sur Profondeur de Trémolo + + opl2instrumentView + + Attack + Attaque + + + Decay + Affaiblissement (decay) + + + Release + Relâchement + + + Frequency multiplier + Multiplicateur de fréquence + + organicInstrument @@ -8635,7 +8689,7 @@ En double-cliquant sur ces greffons vous ferez apparaître des informations sur Osc %1 panning: - Panoramique de l'oscillateur %1 : + Panoramisation de l'oscillateur %1 : cents @@ -8643,23 +8697,23 @@ En double-cliquant sur ces greffons vous ferez apparaître des informations sur The distortion knob adds distortion to the output of the instrument. - Le bouton 'Distorsion' ajoute de la distorsion au son de l'instrument. + Le bouton de distorsion ajoute de la distorsion à la sortie de l'instrument. The volume knob controls the volume of the output of the instrument. It is cumulative with the instrument window's volume control. - Le bouton 'Volume' contrôle le volume de sortie de l'instrument. Son effet est ajouté au contôle de volume de la fenêtre de l'instrument. + Le bouton de volume contrôle le volume de la sortie de l'instrument. Il est cumulatif avec le volume de contrôle de la fenêtre de l'instrument. The randomize button randomizes all knobs except the harmonics,main volume and distortion knobs. - Le bouton « Randomise» ajuste aléatoirement tous les réglages sauf les hamoniques, le volume et la distorsion. + Le bouton d'aléation ajoute du hasard à tous les boutons sauf les boutons d'harmoniques, de volume principal, et de distorsion Osc %1 stereo detuning - Désaccordage stéréo de l'oscillateur %1 + Dé-réglage stéréo de l'oscillateur %1 Osc %1 harmonic: - Harmoniques de l'oscillateur %1: + Harmonique de l'oscillateur %1 : @@ -8928,6 +8982,41 @@ En double-cliquant sur ces greffons vous ferez apparaître des informations sur Dessinez votre onde ici + + patchesDialog + + Qsynth: Channel Preset + Qsynth : pré-réglage de canal + + + Bank selector + Sélecteur de banque + + + Bank + Banque + + + Program selector + Sélecteur de programme + + + Patch + Patch + + + Name + Nom + + + OK + OK + + + Cancel + Annuler + + pluginBrowser @@ -8944,7 +9033,7 @@ En double-cliquant sur ces greffons vous ferez apparaître des informations sur Plugin for controlling knobs with sound peaks - Greffon pour le contrôle les boutons avec des crêtes de son + Greffon pour des boutons de contrôles avec des crêtes de son Plugin for enhancing stereo separation of a stereo input file @@ -8956,7 +9045,7 @@ En double-cliquant sur ces greffons vous ferez apparaître des informations sur Filter for importing FL Studio projects into LMMS - Filtre pour l'importation de projets Fruity Loops Studio dans LMMS + Filtre pour l'importation de projets FL Studio dans LMMS GUS-compatible patch instrument @@ -8980,7 +9069,7 @@ En double-cliquant sur ces greffons vous ferez apparaître des informations sur plugin for using arbitrary LADSPA-effects inside LMMS. - Greffon pour l'utilisation arbitraire d'effets LADSPA dans LMMS. + Greffon pour l'utilisation de tout effet LADSPA dans LMMS. Filter for importing MIDI-files into LMMS @@ -8989,7 +9078,8 @@ En double-cliquant sur ces greffons vous ferez apparaître des informations sur 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. + Émulateur des SID MOS6581 et MOS8580. +Cette puce était utilisée dans l'ordinateur Commodore 64. Player for SoundFont files @@ -9021,15 +9111,15 @@ This chip was used in the Commodore 64 computer. Monstrous 3-oscillator synth with modulation matrix - Synthé.Monstrous à 3-oscillateurs et matrice de modulation + Synthétiseur à 3 oscillateurs monstrueux avec matrice de modulation Three powerful oscillators you can modulate in several ways - Trois puissants oscillateurs modulables de bien des façons + Trois oscillateurs puissants que vous pouvez moduler de différentes manières A native amplifier plugin - Greffon amplificateur natif + Un greffon d'amplification natif Carla Rack Instrument @@ -9037,23 +9127,23 @@ This chip was used in the Commodore 64 computer. 4-oscillator modulatable wavetable synth - Synthé de table d'ondes à 4 oscillateurs + Synthétiseur de table d'ondes modulables à 4 oscillateurs plugin for waveshaping - Greffon de.mise en forme d'onde + Greffon pour du modelage d'onde Boost your bass the fast and simple way - Augmentez les basses de façon simple et rapide + Renforcer vos basses de la manière la plus simple et la plus rapide Versatile drum synthesizer - Synthé de percussions versatile + Synthétiseur de batterie polyvalent Simple sampler with various settings for using samples (e.g. drums) in an instrument-track - Échantillonneur simple avec paramètrage (p.ex. percussions) pour les pistes instrumentales + Échantillonneur simple avec divers paramètres pour utiliser des échantillons (par exemple : percussions) dans une piste d'instrument plugin for processing dynamics in a flexible way @@ -9065,7 +9155,7 @@ This chip was used in the Commodore 64 computer. plugin for using arbitrary VST effects inside LMMS. - Greffon pour utiliser les effets VST avec LMMS. + Greffon pour l'utilisation de tout effet VST dans LMMS. Graphical spectrum analyzer plugin @@ -9073,7 +9163,11 @@ This chip was used in the Commodore 64 computer. A NES-like synthesizer - Synthé à la façon NES + Un synthétiseur genre 'NES' + + + A native delay plugin + Greffon délai natif Player for GIG files @@ -9081,86 +9175,31 @@ This chip was used in the Commodore 64 computer. A multitap echo delay plugin - Greffon d'écho et délai multitap + Un greffon d'écho et délai multitap A native flanger plugin - Greffon flanger natif - - - A native delay plugin - Greffon délai natif + Un greffon flanger natif An oversampling bitcrusher - Sur-échantillonneur bitcrusher + Un bitcrusher sur-échantillonneur A native eq plugin - Greffon égaliseur natif + Un greffon égaliseur natif A 4-band Crossover Equalizer - Égaliseur Crossover à 4 bandes - - - Filter for exporting MIDI-files from LMMS - Filtre pour l'exportation de fichiers MIDI depuis LMMS + Un égaliseur crossover à 4 bandes A Dual filter plugin - Greffon double filtre - - - - setupWidget - - JACK (JACK Audio Connection Kit) - JACK (JACK Audio Connection Kit) + Un greffon de filtre double - OSS Raw-MIDI (Open Sound System) - OSS Raw-MIDI (Open Sound System) - - - SDL (Simple DirectMedia Layer) - SDL (Simple DirectMedia Layer) - - - PulseAudio - PulseAudio - - - Dummy (no MIDI support) - Dummy (Pas de support MIDI) - - - ALSA Raw-MIDI (Advanced Linux Sound Architecture) - ALSA Raw-MIDI (Advanced Linux Sound Architecture) - - - PortAudio - PortAudio - - - Dummy (no sound output) - Dummy (Pas de sortie audio) - - - ALSA (Advanced Linux Sound Architecture) - ALSA (Advanced Linux Sound Architecture) - - - OSS (Open Sound System) - OSS (Open Sound System) - - - WinMM MIDI - WinMM MIDI - - - ALSA-Sequencer (Advanced Linux Sound Architecture) - ALSA-Sequencer (Advanced Linux Sound Architecture) + Filter for exporting MIDI-files from LMMS + Filtre pour l'exportation de fichiers MIDI depuis LMMS @@ -9183,7 +9222,7 @@ This chip was used in the Commodore 64 computer. Reverb Roomsize - Réverbération (Salle) + Réverbération (taille de la salle) Reverb Damping @@ -9219,7 +9258,7 @@ This chip was used in the Commodore 64 computer. A soundfont %1 could not be loaded. - La fonte de sons %1 n'a pu être chargée. + La banque de sons %1 n'a pu être chargée. @@ -9250,7 +9289,7 @@ This chip was used in the Commodore 64 computer. Reverb Roomsize: - Réverbération (Salle) : + Réverbération (taille de la salle) : Reverb Damping: @@ -9301,7 +9340,7 @@ This chip was used in the Commodore 64 computer. sfxrInstrument Wave Form - Forme d'Onde + Forme d'onde @@ -9379,11 +9418,11 @@ This chip was used in the Commodore 64 computer. Decay: - Descente : + Affaiblissement : 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. + La vitesse d'affaiblissement détermine la rapidité à laquelle la vitesse la sortie passera de l'amplitude de crête au niveau de soutien (sustain) choisi. Sustain: @@ -9403,11 +9442,11 @@ This chip was used in the Commodore 64 computer. Pulse Width: - Largeur d'impulsion : + Largeur de pulsation : 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. + La résolution de la largeur de la pulsation permet à la largeur d'être balayée doucement sans pas discernable. La forme d'onde de la plusation de l'oscillateur %1 doit être choisie pour n'avoir aucun effet audible. Coarse: @@ -9419,7 +9458,7 @@ This chip was used in the Commodore 64 computer. Pulse Wave - Onde d'impulsion + Onde de pulsation Triangle Wave @@ -9427,7 +9466,7 @@ This chip was used in the Commodore 64 computer. SawTooth - Dent de scie + Dents-de-scie Noise @@ -9553,7 +9592,7 @@ This chip was used in the Commodore 64 computer. Pan %1 - Panoramique %1 + Panoramisation %1 Detune %1 @@ -9569,7 +9608,7 @@ This chip was used in the Commodore 64 computer. Impulse %1 - Impulsion %1 + Pulsation %1 Octave %1 @@ -9612,7 +9651,7 @@ This chip was used in the Commodore 64 computer. Pan: - Panoramique : + Panoramisation : The Pan knob determines the location of the selected string in the stereo field. @@ -9663,11 +9702,11 @@ This chip was used in the Commodore 64 computer. É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 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 '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. @@ -9679,18 +9718,18 @@ 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. + 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. +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. +'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 '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. + Vibed modélise jusqu'à neuf cordes vibrant indépendamment. 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. @@ -9716,7 +9755,7 @@ Le LED situé dans le coin en bas à droite de l'éditeur de forme d'o 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. + 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épendamment. Le LED situé dans le coin en bas à droite de l'éditeur de forme indique si la corde choisie est utilisée. Sine wave @@ -9728,7 +9767,7 @@ Le LED situé dans le coin en bas à droite de l'éditeur de forme d'o Saw wave - Onde en dent de scie + Onde en dents-de-scie Square wave @@ -9768,7 +9807,7 @@ Le LED situé dans le coin en bas à droite de l'éditeur de forme d'o Use a saw-wave for current oscillator. - Utiliser une onde en dent de scie pour cet oscillateur. + Utiliser une onde en dents-de-scie pour cet oscillateur. Use a square-wave for current oscillator. @@ -9787,7 +9826,7 @@ Le LED situé dans le coin en bas à droite de l'éditeur de forme d'o voiceObject Voice %1 pulse width - Largeur d'impulsion de la voix %1 + Largeur de pulsation de la voix %1 Voice %1 attack @@ -9795,7 +9834,7 @@ Le LED situé dans le coin en bas à droite de l'éditeur de forme d'o Voice %1 decay - Descente de la voix %1 + Affaiblissement de la voix %1 Voice %1 sustain @@ -9838,7 +9877,7 @@ Le LED situé dans le coin en bas à droite de l'éditeur de forme d'o Input gain: - Gain d'entrée: + Gain d'entrée : OUTPUT @@ -9846,7 +9885,7 @@ Le LED situé dans le coin en bas à droite de l'éditeur de forme d'o Output gain: - Gain de sortie: + Gain de sortie : Reset waveform @@ -9854,7 +9893,7 @@ Le LED situé dans le coin en bas à droite de l'éditeur de forme d'o Click here to reset the wavegraph back to default - Cliquer ici pour réinitialiser le graphe à la valeur par défaut + Cliquez ici pour réinitialiser le graphique d'onde par défaut Smooth waveform @@ -9866,19 +9905,19 @@ Le LED situé dans le coin en bas à droite de l'éditeur de forme d'o Increase graph amplitude by 1dB - Augmenter l'amplidude du graphe de 1 dB + Augmenter l'amplitude du graphe de 1 dB Click here to increase wavegraph amplitude by 1dB - Cliquez ici pour augmenter l'amplidude du graphe de 1dB + Cliquez ici pour augmenter l'amplitude du graphe de 1dB Decrease graph amplitude by 1dB - Réduire l'amplitude du graphe de 1dB + Réduire l'amplitude du graphique d'1 dB Click here to decrease wavegraph amplitude by 1dB - Cliquez ici pour réduire l'amplitude du graphe de 1dB + Cliquer ici pour réduire l'amplitude du graphique d'1 dB Clip input @@ -9893,11 +9932,11 @@ Le LED situé dans le coin en bas à droite de l'éditeur de forme d'o waveShaperControls Input gain - Gain en entrée + Gain d'entrée Output gain - Gain en sortie + Gain de sortie - + \ No newline at end of file diff --git a/data/locale/it.ts b/data/locale/it.ts index 6f47bb1ae11..459ab345805 100644 --- a/data/locale/it.ts +++ b/data/locale/it.ts @@ -1,11 +1,9 @@ - - - + AboutDialog About LMMS - About LMMS + Informazioni su LMMS Version %1 (%2/%3, Qt %4, %5) @@ -31,7 +29,6 @@ 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! @@ -41,24 +38,24 @@ Se sei interessato a tradurre LMMS o vuoi migliorare una traduzione esistente, s Licenza - Copyright (c) 2004-2014, LMMS developers - Copyright (c) 2004-2014, LMMS developers + 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> - - LMMS - LMMS - Involved - Coinvolti + Coinvolti Contributors ordered by number of commits: - Hanno collaborato (ordinati per numero di contributi): + Hanno collaborato (ordinati per numero di contributi): + + + Copyright © %1 + Copyright © %1 @@ -116,7 +113,7 @@ Se sei interessato a tradurre LMMS o vuoi migliorare una traduzione esistente, s - AudioAlsa::setupWidget + AudioAlsaSetupWidget DEVICE PERIFERICA @@ -232,11 +229,11 @@ Se sei interessato a tradurre LMMS o vuoi migliorare una traduzione esistente, s CLIENT-NAME - NOME DEL CLIENT + NOME DEL CLIENT CHANNELS - CANALI + CANALI @@ -279,6 +276,28 @@ Se sei interessato a tradurre LMMS o vuoi migliorare una traduzione esistente, s PERIFERICA + + AudioSndio::setupWidget + + DEVICE + PERIFERICA + + + CHANNELS + CANALI + + + + AudioSoundIo::setupWidget + + BACKEND + INTERFACCIA + + + DEVICE + PERIFERICA + + AutomatableModel @@ -345,119 +364,143 @@ Se sei interessato a tradurre LMMS o vuoi migliorare una traduzione esistente, s AutomationEditorWindow Play/pause current pattern (Space) - + Riproduci/metti in pausa il beat/bassline selezionato (Spazio) 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. + Cliccando qui si riproduce il pattern selezionato. Questo è utile mentre lo si modifica. Il pattern viene automaticamente ripetuto quando finisce. Stop playing of current pattern (Space) - + Ferma il beat/bassline selezionato (Spazio) Click here if you want to stop playing of the current pattern. - Cliccando qui si ferma la riproduzione del pattern. + Cliccando qui si ferma la riproduzione del pattern attivo. Draw mode (Shift+D) - Modalità disegno (Shift+D) + Modalità disegno (Shift+D) Erase mode (Shift+E) - + Modalità cancella (Shift+E) Flip vertically - + Contrario Flip horizontally - + Retrogrado Click here and the pattern will be inverted.The points are flipped in the y direction. - + Clicca per mettere riposizionare i punti al contrario verticalmente. Click here and the pattern will be reversed. The points are flipped in the x direction. - + Clicca per riposizionare i punti come se venissero letti da destra a sinistra. 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'. + 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'. + 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'. Discrete progression - Progressione discreta + Progressione discreta Linear progression - Progressione lineare + Progressione lineare Cubic Hermite progression - Progressione a cubica di Hermite + Progressione a cubica di Hermite Tension value for spline - Valore di tensione per la spline + Valore di tensione delle curve 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. - + Una tensione alta garantisce una curva più morbida, ma potrebbe tralasciare alcuni valori. Abbassando la tensione, invece, la curva si fletterà per sostare per più tempo sui valori indicati dai punti. 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. + 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. + 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. + 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. Cut selected values (%1+X) - Taglia i valori selezionati (%1+X) + Taglia i valori selezionati (%1+X) Copy selected values (%1+C) - Copia i valori selezionati (%1+C) + Copia i valori selezionati (%1+C) Paste values from clipboard (%1+V) - + Incolla i valori dagli appunti (%1+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. + Cliccando qui i valori selezionati vengono spostati negli appunti. È 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. + Cliccando qui i valori selezionati vengono copiati negli appunti. È 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. + Cliccando qui i valori negli appunti vengono incollati alla prima battuta visibile. Tension: - tensione: + Tensione: Automation Editor - no pattern - Editor dell'automazione - nessun pattern + Editor dell'automazione - nessun pattern Automation Editor - %1 - Editor dell'automazione - %1 + Editor dell'automazione - %1 + + + Edit actions + Modalità di modifica + + + Interpolation controls + Modalità Interpolazione + + + Timeline controls + Controlla griglia + + + Zoom controls + Opzioni di zoom + + + Quantization controls + Controlli di quantizzazione + + + Model is already connected to this pattern. + Il controllo è già connesso a questo pattern. @@ -466,10 +509,6 @@ Se sei interessato a tradurre LMMS o vuoi migliorare una traduzione esistente, s Drag a control while pressing <%1> Trascina un controllo tenendo premuto <%1> - - Model is already connected to this pattern. - Il cntrollo è già connesso a questo pattern. - AutomationPatternView @@ -507,11 +546,15 @@ Se sei interessato a tradurre LMMS o vuoi migliorare una traduzione esistente, s Flip Vertically (Visible) - + Contrario Flip Horizontally (Visible) - + Retrogrado + + + Model is already connected to this pattern. + Il controllo è già connesso a questo pattern. @@ -525,73 +568,85 @@ Se sei interessato a tradurre LMMS o vuoi migliorare una traduzione esistente, s BBEditor Beat+Bassline Editor - Beat+Bassline Editor + Beat+Bassline Editor Play/pause current beat/bassline (Space) - Riproduci/metti in pausa il beat/bassline selezionato (Spazio) + Riproduci/metti in pausa il beat/bassline selezionato (Spazio) Stop playback of current beat/bassline (Space) - Ferma il beat/bassline attuale (Spazio) + 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. + 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. + Cliccando qui si ferma la riproduzione del beat/bassline attivo. Add beat/bassline - Aggiungi beat/bassline + Aggiungi beat/bassline Add automation-track - Aggiungi una traccia di automazione + Aggiungi una traccia di automazione Remove steps - Elimina note + Elimina note Add steps - Aggiungi note + Aggiungi note + + + Beat selector + Selezione del Beat + + + Track and step actions + Controlli tracce e step + + + Clone Steps + Clona gli step BBTCOView Open in Beat+Bassline-Editor - Apri nell'editor di Beat+Bassline + Apri nell'editor di Beat+Bassline Reset name - + Reimposta nome Change name - + Rinomina Change color - Cambia colore + Cambia colore Reset color to default - Reimposta il colore a default + Reimposta il colore a default BBTrack Beat/Bassline %1 - Beat/Bassline %1 + Beat/Bassline %1 Clone of %1 - Clone di %1 + Clone di %1 @@ -640,94 +695,94 @@ Se sei interessato a tradurre LMMS o vuoi migliorare una traduzione esistente, s BitcrushControlDialog IN - + IN OUT - + OUT GAIN - GUAD + GUAD Input Gain: - + Guadagno in Input: NOIS - + RUMO Input Noise: - + Rumore in Input: Output Gain: - + Guadagno in Output: CLIP - + CLIP Output Clip: - + Clip in Output: Rate - Frequenza + Frequenza Rate Enabled - + Abilita Frequenza Enable samplerate-crushing - + Abilità la riduzione di frequnza di campionamento Depth - + Risoluzione Depth Enabled - + Abilita Risoluzione Enable bitdepth-crushing - + Abilità la riduzione di bit di quantizzazione Sample rate: - + Frequenza di campionamento: STD - + STD Stereo difference: - + Differenza stereo: Levels - + Livelli Levels: - + Livelli di quantizzazione: CaptionMenu &Help - &Aiuto + &Aiuto Help (not available) - + Aiuto (non disponibile) @@ -822,7 +877,7 @@ Se sei interessato a tradurre LMMS o vuoi migliorare una traduzione esistente, s Conferma eliminazione - Confirm delete? There are existing connection(s) associted with this controller. There is no way to undo. + Confirm delete? There are existing connection(s) associated with this controller. There is no way to undo. Confermi l'eliminazione? Ci sono connessioni associate a questo controller: non sarà possibile ripristinarle. @@ -845,128 +900,137 @@ Se sei interessato a tradurre LMMS o vuoi migliorare una traduzione esistente, s Inserire il nuovo nome di questo controller - &Remove this plugin - &Elimina questo plugin + &Remove this controller + &Rimuovi questo controller + + + Re&name this controller + Ri&nomina questo controller CrossoverEQControlDialog Band 1/2 Crossover: - + Punto di separazione 1/2: Band 2/3 Crossover: - + Punto di separazione 2/3: Band 3/4 Crossover: - + Punto di separazione 3/4: Band 1 Gain: - + Guadagno banda 1: Band 2 Gain: - + Guadagno banda 2: Band 3 Gain: - + Guadagno banda 3: Band 4 Gain: - + Guadagno banda 4: Band 1 Mute - + Muto Banda 1 Mute Band 1 - + Muto Banda 1 Band 2 Mute - + Muto Banda 2 Mute Band 2 - + Muto Banda 2 Band 3 Mute - + Muto Banda 3 Mute Band 3 - + Muto Banda 3 Band 4 Mute - + Muto Banda 4 Mute Band 4 - + Muto Banda 4 DelayControls Delay Samples - + Campioni di Delay Feedback - + Feedback Lfo Frequency - + Frequenza Lfo Lfo Amount - + Ampiezza Lfo + + + Output gain + Guadagno in output DelayControlsDialog Delay - + Delay + + + Lfo Amt + Quantità Lfo Delay Time - + Tempo di ritardo Regen - + Regen Feedback Amount - + Quantità di Feedback Rate - Frequenza + Frequenza Lfo - + Lfo - Lfo Amt - + Out Gain + Guadagno in output - - - DetuningHelper - Note detuning - + Gain + Guadagno @@ -987,6 +1051,38 @@ Se sei interessato a tradurre LMMS o vuoi migliorare una traduzione esistente, s Click to enable/disable Filter 2 Clicca qui per abilitare/disabilitare il filtro 2 + + FREQ + FREQ + + + Cutoff frequency + Frequenza di taglio + + + RESO + RISO + + + Resonance + Risonanza + + + GAIN + GUAD + + + Gain + Guadagno + + + MIX + MIX + + + Mix + Mix + DualFilterControls @@ -1096,57 +1192,54 @@ Se sei interessato a tradurre LMMS o vuoi migliorare una traduzione esistente, s 2x Moog - + 2x Moog SV LowPass - + PassaBasso SV SV BandPass - + PassaBanda SV SV HighPass - + PassaAlto SV SV Notch - + Notch SV Fast Formant - + Formante veloce Tripole - - - - - DummyEffect - - NOT FOUND - + Tre poli Editor Play (Space) - + Play (Spazio) Stop (Space) - + Fermo (Spazio) Record - + Registra Record while playing - + Registra in play + + + Transport controls + Controlli trasporto @@ -1193,8 +1286,20 @@ Se sei interessato a tradurre LMMS o vuoi migliorare una traduzione esistente, s Aggiungi effetto - Plugin description - Descrizione Plugin + Name + Nome + + + Type + Tipo + + + Description + Descrizione + + + Author + Autore @@ -1252,13 +1357,13 @@ Se sei interessato a tradurre LMMS o vuoi migliorare una traduzione esistente, s 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 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 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 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. +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. @@ -1530,249 +1635,269 @@ Con il click destro si apre un menu conestuale che permette di cambiare l'o EqControls Input gain - Guadagno in input + Guadagno in input Output gain - Guadagno in output + Guadagno in output Low shelf gain - + Guadagno basse frequenze Peak 1 gain - + Guadagno picco 1 Peak 2 gain - + Guadagno picco 2 Peak 3 gain - + Guadagno Picco 3 Peak 4 gain - + Guadagno picco 4 High Shelf gain - + Guadagno alte frequenze HP res - + Ris Passa Alto Low Shelf res - + Ris basse frequenze Peak 1 BW - + LB Picco 1 Peak 2 BW - + LB Picco 2 Peak 3 BW - + LB Picco 3 Peak 4 BW - + LB Picco 4 High Shelf res - + Ris alte frequenze LP res - + Ris Passa Basso HP freq - + Freq Passa Alto Low Shelf freq - + Freq basse frequenze Peak 1 freq - + Frequenza picco 1 Peak 2 freq - + Frequenza picco 2 Peak 3 freq - + Frequenza picco 3 Peak 4 freq - + Frequenza picco 4 High shelf freq - + Freq alte frequenze LP freq - + Freq Passa Basso HP active - + Attiva Passa Alto Low shelf active - + Attiva basse frequenze Peak 1 active - + Attiva picco 1 Peak 2 active - + Attiva picco 2 Peak 3 active - + Attiva picco 3 Peak 4 active - + Attiva picco 4 High shelf active - + Attiva alte frequenze LP active - + Attiva Passa Basso LP 12 - + Passa Basso 12 dB LP 24 - + Passa Basso 24 dB LP 48 - + Passa Basso 48 dB HP 12 - + Passa Alto 12 dB HP 24 - + Passa Alto 24 dB HP 48 - + Passa Alto 48 dB low pass type - + Tipo di passa basso high pass type - + Tipo di passa alto + + + Analyse IN + Analizza Input + + + Analyse OUT + Analizza Output EqControlsDialog HP - + PA Low Shelf - + Bassi Peak 1 - + Picco 1 Peak 2 - + Picco 2 Peak 3 - + Picco 3 Peak 4 - + Picco 4 High Shelf - + Acuti LP - + PB In Gain - + Guadagno in input Gain - Guadagno + Guadagno Out Gain - + Guadagno in output Bandwidth: - + Larghezza di banda: Resonance : - + Risonanza: Frequency: - Frequenza: + Frequenza: + + + lp grp + lp grp - 12dB - + hp grp + hp grp - 24dB - + Octave + Ottave - 48dB - + Frequency + Frequenza - lp grp - + Resonance + Risonanza - hp grp - + Bandwidth + Larghezza di Banda - EqParameterWidget + EqHandle + + Reso: + Risonanza: + - Hz - + BW: + Largh: + + + Freq: + Freq: @@ -1795,23 +1920,23 @@ Con il click destro si apre un menu conestuale che permette di cambiare l'o 44100 Hz - + 44100 Hz 48000 Hz - + 48000 Hz 88200 Hz - + 88200 Hz 96000 Hz - + 96000 Hz 192000 Hz - + 192000 Hz Bitrate: @@ -1819,27 +1944,27 @@ Con il click destro si apre un menu conestuale che permette di cambiare l'o 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: @@ -1847,11 +1972,11 @@ Con il click destro si apre un menu conestuale che permette di cambiare l'o 16 Bit Integer - + Interi 16 Bit 32 Bit Float - + Virgola mobile 32 Bit Please note that not all of the parameters above apply for all file formats. @@ -1867,11 +1992,11 @@ Con il click destro si apre un menu conestuale che permette di cambiare l'o Zero Order Hold - + Zero Order Hold Sinc Fastest - + Più veloce Sinc Medium (recommended) @@ -1891,15 +2016,15 @@ Con il click destro si apre un menu conestuale che permette di cambiare l'o 2x - + 2x 4x - + 4x 8x - + 8x Start @@ -1915,40 +2040,40 @@ Con il click destro si apre un menu conestuale che permette di cambiare l'o Export between loop markers - + Esporta solo tra i punti di loop Could not open file - Non è stato possibile aprire il 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. + 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! Export project to %1 - Esporta il progetto in %1 + Esporta il progetto in %1 Error - Errore + 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. + 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% + Renderizzazione: %1% Fader Please enter a new value between %1 and %2: - Inserire un valore compreso tra %1 e %2: + Inserire un valore compreso tra %1 e %2: @@ -1964,10 +2089,6 @@ Assicurarsi di avere i permessi in scrittura per il file e per la directory cont 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 @@ -1984,75 +2105,91 @@ Assicurarsi di avere i permessi in scrittura per il file e per la directory cont --- Factory files --- --- File di fabbrica --- + + Open in new instrument-track/Song Editor + Usa in una nuova traccia nel Song-Editor + + + Error + Errore + + + does not appear to be a valid + non sembra essere un file + + + file + valido + FlangerControls Delay Samples - + Campioni di Delay Lfo Frequency - + Frequenza Lfo Seconds - + Secondi Regen - + Regen Noise - Rumore + Rumore Invert - Inverti + Inverti FlangerControlsDialog Delay - + Delay Delay Time: - + Tempo di Ritardo: Lfo Hz - + Lfo Hz Lfo: - + Frequenza Lfo: Amt - + Q.tà Amt: - + Quantità: Regen - + Regen Feedback Amount: - + Quantità di Feedback: Noise - Rumore + Rumore White Noise Amount: - + Quantità di Rumore Bianco: @@ -2063,7 +2200,7 @@ Assicurarsi di avere i permessi in scrittura per il file e per la directory cont 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. + 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. @@ -2094,7 +2231,7 @@ Puoi rimuovere e muovere i canali con il menù contestuale, cliccando con il tas Remove &unused channels - + Rimuovi i canali in&utilizzati @@ -2124,23 +2261,23 @@ Puoi rimuovere e muovere i canali con il menù contestuale, cliccando con il tas FX Fader %1 - Volume FX %1 + Volume FX %1 Mute - Muto + Muto Mute this FX channel - Silenzia questo canale FX + Silenzia questo canale FX Solo - Solo + Solo Solo FX channel - + Ascolta questo canale da solo @@ -2154,62 +2291,105 @@ Puoi rimuovere e muovere i canali con il menù contestuale, cliccando con il tas GigInstrument Bank - Banco + Banco Patch - Patch + Patch Gain - Guadagno + Guadagno GigInstrumentView Open other GIG file - + Apri un altro file GIG Click here to open another GIG file - + Clicca per aprire un nuovo file GIG Choose the patch - Seleziona il patch + Seleziona il patch Click here to change which patch of the GIG file to use - + Clicca per scegliere quale patch del file GIG usare Change which instrument of the GIG file is being played - + Cambia lo strumento del file GIG da suonare Which GIG file is currently being used - + Strumento del file GIG attualmente in uso Which patch of the GIG file is currently being used - + Patch del file GIG attualmente in uso Gain - Guadagno + Guadagno Factor to multiply samples by - + Moltiplica i campioni per questo fattore Open GIG file - + Apri file GIG GIG Files (*.gig) - + File GIG (*.gig) + + + + GuiApplication + + 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. + + + Preparing UI + Caricamento interfaccia + + + Preparing song editor + Caricamento Song Editor + + + Preparing mixer + Caricamento Mixer + + + Preparing controller rack + Caricamento rack di Controller + + + Preparing project notes + Caricamento note del progetto + + + Preparing beat/bassline editor + Caricamento beat e bassline editor + + + Preparing piano roll + Caricamento Piano Roll + + + Preparing automation editor + Caricamento Editor di Automazione @@ -2788,7 +2968,7 @@ Puoi rimuovere e muovere i canali con il menù contestuale, cliccando con il tas NOTE - + NOTA CUSTOM BASE VELOCITY @@ -2807,11 +2987,11 @@ Puoi rimuovere e muovere i canali con il menù contestuale, cliccando con il tas InstrumentMiscView MASTER PITCH - + TRASPORTO Enables the use of Master Pitch - + Abilita l'uso del Trasporto @@ -2914,31 +3094,31 @@ Puoi rimuovere e muovere i canali con il menù contestuale, cliccando con il tas 2x Moog - + 2x Moog SV LowPass - + PassaBasso SV SV BandPass - + PassaBanda SV SV HighPass - + PassaAlto SV SV Notch - + Notch SV Fast Formant - + Formante veloce Tripole - + Tre poli @@ -3032,7 +3212,7 @@ Puoi rimuovere e muovere i canali con il menù contestuale, cliccando con il tas Master Pitch - + Trasporto @@ -3073,6 +3253,10 @@ Puoi rimuovere e muovere i canali con il menù contestuale, cliccando con il tas Output Uscita + + FX %1: %2 + FX %1: %2 + InstrumentTrackWindow @@ -3170,26 +3354,34 @@ Puoi rimuovere e muovere i canali con il menù contestuale, cliccando con il tas MISC - VARIE + VARIE + + + Use these controls to view and edit the next/previous track in the song editor. + Usa questi controlli per visualizzare e modificare la prossima traccia o quella precedente nel Song Editor + + + SAVE + SALVA Knob Set linear - + Modalità lineare Set logarithmic - + Modalità logaritmica 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: + Inserire un nuovo valore tra -96.0 dBV e 6.0 dBV: Please enter a new value between %1 and %2: - Inserire un valore compreso tra %1 e %2: + Inserire un valore compreso tra %1 e %2: @@ -3239,6 +3431,25 @@ Puoi rimuovere e muovere i canali con il menù contestuale, cliccando con il tas Inserire un valore compreso tra %1 e %2: + + LeftRightNav + + Previous + Precedente + + + Next + Successivo + + + Previous (%1) + Precedente (%1) + + + Next (%1) + Successivo (%1) + + LfoController @@ -3304,10 +3515,6 @@ Puoi rimuovere e muovere i canali con il menù contestuale, cliccando con il tas 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: @@ -3364,25 +3571,40 @@ Fare doppio click per scegliere il file dell'onda. Click here for a moog saw-wave. - + Clicca per usare un'onda Moog a banda limitata. + + + AMNT + Q.TÀ - MainWindow + LmmsCore - Working directory - Directory di lavoro + Generating wavetables + Generazione wavetable - 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. + Initializing data structures + Inizializzazione strutture dati + + + Opening audio and midi devices + Accesso ai dispositivi audio e midi + + + Launching mixer threads + Accensione dei thread del mixer + + + MainWindow 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. + 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. @@ -3477,7 +3699,7 @@ Assicurati di avere i permessi in scrittura per il file e riprova. Beat+Bassline Editor - Mostra/nascondi il Beat+Bassline Editor + 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. @@ -3540,14 +3762,14 @@ Assicurati di avere i permessi in scrittura per il file e riprova. Aiuto non disponibile - Currently there's no help available in LMMS. + 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. LMMS (*.mmp *.mmpz) - + LMMS (*.mmp *.mmpz) Version %1 @@ -3573,71 +3795,211 @@ Visitare http://lmms.sf.net/wiki per la documentazione di LMMS. Redo Rifai - - LMMS Project - Progetto LMMS - - - LMMS Project Template - Progetto Template LMMS - My Projects - + I miei Progetti My Samples - + I miei Campioni My Presets - + I miei Preset My Home - + Directory di Lavoro My Computer - - - - Root Directory - + Computer &File - + &File &Recently Opened Projects - + Progetti &Recenti Save as New &Version - + Salva come nuova &Versione E&xport Tracks... - + E&sporta Tracce... Online Help - + Aiuto Online What's This? - + Cos'è questo? Open Project - + Apri Progetto Save Project - + Salva Progetto - + + Project recovery + Recupero del progetto + + + There is a recovery file present. It looks like the last session did not end properly or another instance of LMMS is already running. Do you want to recover the project of this session? + E' stato trovato un file di recupero. Questo accade se la sessione precedente non è stata ben chiusa o se ce n'è un'altra in esecuzione. Vuoi usare il progetto di recupero? + + + Recover + Recupera + + + Recover the file. Please don't run multiple instances of LMMS when you do this. + Recupera il file. Non usare più instanze di LMMS quando effettui il recupero. + + + Ignore + Ignora + + + Launch LMMS as usual but with automatic backup disabled to prevent the present recover file from being overwritten. + Fai partire LMMS come al solito. Il salvataggio automatico verrà disabilitato per evitare la sovrascrittura del file di recupero. + + + Discard + Elimina + + + Launch a default session and delete the restored files. This is not reversible. + Fai partire una sessione normale, cancellando il file di recupero in modo irreversibile. + + + Quit + Esci + + + Shut down LMMS with no further action. + Chiudi LMMS senza effettuare alcuna azione. + + + Exit + Esci + + + Preparing plugin browser + Caricamento browser dei plugin + + + Preparing file browsers + Caricamento browser dei file + + + Root directory + Directory principale + + + Loading background artwork + Caricamento sfondo + + + New from template + Nuovo da modello + + + Save as default template + Salva come progetto default + + + Export &MIDI... + Esporta &MIDI... + + + &View + &Visualizza + + + Toggle metronome + Metronomo on/off + + + Show/hide Song-Editor + Mostra/nascondi il Song-Editor + + + Show/hide Beat+Bassline Editor + Mostra/nascondi il Beat+Bassline Editor + + + Show/hide Piano-Roll + Mostra/nascondi il Piano-Roll + + + Show/hide Automation Editor + Mostra/nascondi l'Editor dell'automazione + + + Show/hide FX Mixer + Mostra/nascondi il mixer degli effetti + + + Show/hide project notes + Mostra/nascondi le note del progetto + + + Show/hide controller rack + Mostra/nascondi il rack di controller + + + Recover session. Please save your work! + Sessione di recupero. Salva al più presto! + + + Automatic backup disabled. Remember to save your work! + Salvataggio automatico disabilitato. Ricorda di salvare spesso! + + + Recovered project not saved + Progetto recuperato non salvato + + + This project was recovered from the previous session. It is currently unsaved and will be lost if you don't save it. Do you want to save it now? + Il progetto è stato recuperato dalla sessione precedente. Attualmente non è stato salvato. Vuoi salvarlo adesso per evitare di perderlo? + + + LMMS Project + Progetto LMMS + + + LMMS Project Template + Modello di Progetto LMMS + + + Overwrite default template? + Sovrascrivere il progetto default? + + + This will overwrite your current default template. + In questo modo verrà modificato il tuo progetto di default corrente. + + + Volume as dBV + Volume in dBV + + + Smooth scroll + Scorrimento morbido + + + Enable note labels in piano roll + Abilita l'etichetta delle note nel piano roll + + MeterDialog @@ -3664,20 +4026,6 @@ Visitare http://lmms.sf.net/wiki per la documentazione di LMMS. Denominatore - - MidiAlsaRaw::setupWidget - - DEVICE - PERIFERICA - - - - MidiAlsaSeq - - DEVICE - PERIFERICA - - MidiController @@ -3703,12 +4051,9 @@ Visitare http://lmms.sf.net/wiki per la documentazione di LMMS. 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 + Track + Traccia @@ -3758,6 +4103,13 @@ Visitare http://lmms.sf.net/wiki per la documentazione di LMMS. Velocity base + + MidiSetupWidget + + DEVICE + PERIFERICA + + MonstroInstrument @@ -3966,271 +4318,271 @@ Visitare http://lmms.sf.net/wiki per la documentazione di LMMS. Vol1-Env1 - + Vol1-Inv1 Vol1-Env2 - + Vol1-Inv2 Vol1-LFO1 - + Vol1-LFO1 Vol1-LFO2 - + Vol1-LFO2 Vol2-Env1 - + Vol2-Inv1 Vol2-Env2 - + Vol2-Inv2 Vol2-LFO1 - + Vol2-LFO1 Vol2-LFO2 - + Vol2-LFO2 Vol3-Env1 - + Vol3-Inv1 Vol3-Env2 - + Vol3-Inv2 Vol3-LFO1 - + Vol3-LFO1 Vol3-LFO2 - + Vol3-LFO2 Phs1-Env1 - + Fas1-Inv1 Phs1-Env2 - + Fas1-Inv2 Phs1-LFO1 - + Fas1-LFO1 Phs1-LFO2 - + Fas1-LFO2 Phs2-Env1 - + Fas2-Inv1 Phs2-Env2 - + Fas2-Inv2 Phs2-LFO1 - + Fas2-LFO1 Phs2-LFO2 - + Fas2-LFO2 Phs3-Env1 - + Fas3-Inv1 Phs3-Env2 - + Fas3-Inv2 Phs3-LFO1 - + Fas3-LFO1 Phs3-LFO2 - + Fas3-LFO2 Pit1-Env1 - + Alt1-Inv1 Pit1-Env2 - + Alt1-Inv2 Pit1-LFO1 - + Alt1-LFO1 Pit1-LFO2 - + Alt1-LFO2 Pit2-Env1 - + Alt2-Inv1 Pit2-Env2 - + Alt2-Inv2 Pit2-LFO1 - + Alt2-LFO1 Pit2-LFO2 - + Alt2-LFO2 Pit3-Env1 - + Alt3-Inv1 Pit3-Env2 - + Alt3-Inv2 Pit3-LFO1 - + Alt3-LFO1 Pit3-LFO2 - + Alt3-LFO2 PW1-Env1 - + LI1-Inv1 PW1-Env2 - + LI1-Inv2 PW1-LFO1 - + LI1-LFO1 PW1-LFO2 - + LI1-LFO2 Sub3-Env1 - + Sub3-Inv1 Sub3-Env2 - + Sub3-Inv2 Sub3-LFO1 - + Sub3-LFO1 Sub3-LFO2 - + Sub3-LFO2 Sine wave - Onda sinusoidale + Onda sinusoidale Bandlimited Triangle wave - + Onda triangolare limitata Bandlimited Saw wave - + Onda a dente di sega limitata Bandlimited Ramp wave - + Onda a rampa limitata Bandlimited Square wave - + Onda quadra limitata Bandlimited Moog saw wave - + Onda Moog limitata Soft square wave - + Onda quadra morbida Absolute sine wave - + Onda sinusoidale assoluta Exponential wave - + Onda esponenziale White noise - + Rumore bianco Digital Triangle wave - + Onda triangolare digitale Digital Saw wave - + Onda a dente di sega digitale Digital Ramp wave - + Onda a rampa digitale Digital Square wave - + Onda quadra digitale Digital Moog saw wave - + Onda Moog digitale Triangle wave - Onda triangolare + Onda triangolare Saw wave - Onda a dente di sega + Onda a dente di sega Ramp wave - + Onda a rampa Square wave - Onda quadra + Onda quadra Moog saw wave - + Onda Moog Abs. sine wave - + Sinusoide Ass. Random - Casuale + Casuale Random smooth - + Casuale morbida @@ -4419,40 +4771,148 @@ Vi sono due forme speciali: "Random" e "Random morbido" sono 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. + + Volume + Volume + + + Panning + Bilanciamento + + + Coarse detune + Intonazione grezza + + + semitones + semitoni + + + Finetune left + Intonazione precisa sinistra + + + cents + centesimi + + + Finetune right + Intonazione precisa destra + + + Stereo phase offset + Spostamento di fase stereo + + + deg + gradi + + + Pulse width + Larghezza impulso + + + Send sync on pulse rise + Manda sincro alle salite + + + Send sync on pulse fall + Manda sincro alle discese + + + Hard sync oscillator 2 + Sincro Duro oscillatore 2 + + + Reverse sync oscillator 2 + Sincro Inverso oscillatore 2 + + + Sub-osc mix + Missaggio Sub-osc + + + Hard sync oscillator 3 + Sincro Duro oscillatore 3 + + + Reverse sync oscillator 3 + Sincro Inverso oscillatore 3 + + + Attack + Attacco + + + Rate + Periodo + + + Phase + Fase + + + Pre-delay + Pre-ritardo + + + Hold + Mantenimento + + + Decay + Decadimento + + + Sustain + Sostegno + + + Release + Rilascio + + + Slope + Curvatura + + + Modulation amount + Quantità di modulazione: + MultitapEchoControlDialog Length - Lunghezza + Lunghezza Step length: - + Durata degli step: Dry - + Dry Dry Gain: - + Guadagno senza effetto: Stages - + Fasi Lowpass stages: - + Fasi del Passa Basso: Swap inputs - + Scambia input Swap left and right input channel for reflections - + Scambia i canali destro e sinistro per le ripetizioni @@ -4538,6 +4998,121 @@ Vi sono due forme speciali: "Random" e "Random morbido" sono Vibrato + + NesInstrumentView + + Volume + Volume + + + Coarse detune + Intonazione grezza + + + Envelope length + Lunghezza inviluppo + + + Enable channel 1 + Abilita canale 1 + + + Enable envelope 1 + Abilita inviluppo 1 + + + Enable envelope 1 loop + Abilita ripetizione inviluppo 1 + + + Enable sweep 1 + Abilita glissando 1 + + + Sweep amount + Profondità glissando + + + Sweep rate + Durata glissando + + + 12.5% Duty cycle + 12.5% del periodo + + + 25% Duty cycle + 25% del periodo + + + 50% Duty cycle + 50% del periodo + + + 75% Duty cycle + 75% del periodo + + + Enable channel 2 + Abilita canale 2 + + + Enable envelope 2 + Abilita inviluppo 2 + + + Enable envelope 2 loop + Abilita ripetizione inviluppo 2 + + + Enable sweep 2 + Abilita glissando 2 + + + Enable channel 3 + Abilita canale 3 + + + Noise Frequency + Frequenza rumore + + + Frequency sweep + Glissando + + + Enable channel 4 + Abilita canale 4 + + + Enable envelope 4 + Abilita inviluppo 4 + + + Enable envelope 4 loop + Abilita ripetizione inviluppo 4 + + + Quantize noise frequency when using note frequency + Quantizza la frequenza del rumore, se relativa alla nota + + + Use note frequency for noise + La frequenza del rumore è relativa alla nota suonata + + + Noise mode + Modalità rumore + + + Master Volume + Volume Principale + + + Vibrato + Vibrato + + OscillatorObject @@ -4585,6 +5160,41 @@ Vi sono due forme speciali: "Random" e "Random morbido" sono Armoniche Osc %1 + + PatchesDialog + + Qsynth: Channel Preset + Qsynth: Preset Canale + + + Bank selector + Selezione banco + + + Bank + Banco + + + Program selector + Selezione programma + + + Patch + Programma + + + Name + Nome + + + OK + OK + + + Cancel + Annulla + + PatmanView @@ -4634,12 +5244,6 @@ Vi sono due forme speciali: "Random" e "Random morbido" sono PatternView - - double-click to open this pattern in piano-roll -use mouse wheel to set velocity 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 @@ -4664,6 +5268,18 @@ la rotellina del mouse impostare il volume delle note Remove steps Elimina note + + use mouse wheel to set velocity of a step + Usa la rotella del mouse per impostare il volume di uno step + + + double-click to open in Piano Roll + Fai doppio-click per aprire il pattern nel Piano Roll + + + Clone Steps + Clona gli step + PeakController @@ -4735,11 +5351,11 @@ la rotellina del mouse impostare il volume delle note TRES - + SOGL Treshold: - + Soglia: @@ -4774,19 +5390,11 @@ la rotellina del mouse impostare il volume delle note Treshold - + Soglia PianoRoll - - 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! @@ -4851,116 +5459,152 @@ la rotellina del mouse impostare il volume delle note Please enter a new value between %1 and %2: Inserire un valore compreso tra %1 e %2: + + Mark/unmark all corresponding octave semitones + Evidenza (o togli evidenziazione) i semitoni alle altre ottave + + + Select all notes on this key + Seleziona tutte le note in questo tasto + PianoRollWindow Play/pause current pattern (Space) - + Riproduci/metti in pausa il beat/bassline selezionato (Spazio) Record notes from MIDI-device/channel-piano - Registra note da una periferica/canale piano MIDI + Registra note da una periferica/canale piano MIDI 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 + Registra note da una periferica MIDI/canale piano mentre la traccia o la BB track è in riproduzione Stop playing of current pattern (Space) - + Riproduci/metti in pausa il beat/bassline selezionato (Spazio) 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. + 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. + 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. + 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. + Cliccando qui si ferma la riproduzione del pattern attivo. Draw mode (Shift+D) - Modalità disegno (Shift+D) + Modalità disegno (Shift+D) Erase mode (Shift+E) - + Modalità cancella (Shift+E) Select mode (Shift+S) - Modalità selezione (Shift+S) + Modalità selezione (Shift+S) Detune mode (Shift+T) - Modalità intonanzione (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 %1 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. + 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 %1 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'. + 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 %1 in draw mode to temporarily use select mode. - Cliccando qui viene attivata la modalità selezione. Puoi selezionare le note. Puoi anche tenere premuto %1 durante la modalità disegno per usare la modalità selezione temporaneamente. + Cliccando qui viene attivata la modalità selezione. Puoi selezionare le note. Puoi anche tenere premuto %1 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à. + 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à. Cut selected notes (%1+X) - Taglia le note selezionate (%1+X) + Taglia le note selezionate (%1+X) Copy selected notes (%1+C) - Copia le note selezionate (%1+C) + Copia le note selezionate (%1+C) Paste notes from clipboard (%1+V) - Incolla le note selezionate (%1+V) + Incolla le note selezionate (%1+V) 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. + 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. + 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. + Cliccando qui i valori nella clipboard vengono incollati alla prima battuta visibile. 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. + 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. + 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 + 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! + 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ù. + 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 'Nessuno' in questo menù. + + + Edit actions + Modalità di modifica + + + Copy paste controls + Controlli di copia-incolla + + + Timeline controls + Controlla griglia + + + Zoom and note controls + Controlli di zoom e note + + + Piano-Roll - %1 + Piano-Roll - %1 + + + Piano-Roll - no pattern + Piano-Roll - nessun pattern + + + Quantize + Quantizza @@ -4977,7 +5621,7 @@ la rotellina del mouse impostare il volume delle note Plugin non trovato - The plugin "%1" wasn't found or could not be loaded! + 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" @@ -4990,143 +5634,150 @@ Motivo: "%2" 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! - PluginBrowser Instrument plugins - Plugin strumentali + Plugin strumentali Instrument browser - Navigatore degli strumenti + Browser 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. + È possibile trascinare uno strumento nel Song-Editor, nel Beat+Bassline Editor o direttamente in un canale esistente. + + + + PluginFactory + + Plugin not found. + Plugin non trovato. + + + LMMS plugin %1 does not have a plugin descriptor named %2! + Il plugin LMMS %1 non ha una descrizione chiamata %2! ProjectNotes Project notes - Note del progetto + Note del progetto Put down your project notes here. - Scrivi qui le note per il tuo progetto. + Scrivi qui le note per il tuo progetto. Edit Actions - Modifica azioni + Modifica azioni &Undo - &Annulla operazione + &Annulla operazione %1+Z - %1+Z + %1+Z &Redo - &Ripeti operazione + &Ripeti operazione %1+Y - %1+Y + %1+Y &Copy - &Copia + &Copia %1+C - %1+C + %1+C Cu&t - &Taglia + &Taglia %1+X - %1+X + %1+X &Paste - &Incolla + &Incolla %1+V - %1+V + %1+V Format Actions - Formatta azioni + Opzioni di formattazione &Bold - &Grassetto + &Grassetto %1+B - %1+B + %1+B &Italic - &Corsivo + Cors&ivo %1+I - %1+I + %1+I &Underline - &Sottolineato + &Sottolineato %1+U - %1+U + %1+U &Left - &Sinistra + &Sinistra %1+L - %1+L + %1+L C&enter - &Centro + C&entro %1+E - %1+E + %1+E &Right - &Destra + Dest&ra %1+R - %1+R + %1+R &Justify - &Giustifica + &Giustifica %1+J - %1+J + %1+J &Color... - &Colore... + &Colore... @@ -5140,94 +5791,6 @@ Motivo: "%2" 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 @@ -5238,6 +5801,10 @@ Motivo: "%2" Maker: Autore: + + Copyright: + Copyright: + Requires Real Time: Richiede Real Time: @@ -5254,6 +5821,10 @@ Motivo: "%2" Real Time Capable: Abilitato al Real Time: + + In Place Broken: + In Place Broken: + Channels In: Canali in ingresso: @@ -5266,14 +5837,6 @@ Motivo: "%2" File: File: - - Copyright: - Copyright: - - - In Place Broken: - In Place Broken: - File: %1 File: %1 @@ -5283,7 +5846,7 @@ Motivo: "%2" RenameDialog Rename... - Rinomina... + Rinomina... @@ -5359,10 +5922,6 @@ Motivo: "%2" Mute/unmute (<%1> + middle click) Attiva/disattiva la modalità muta (<%1> + tasto centrale) - - Set/clear record - Set/clear record - SampleTrack @@ -5376,7 +5935,7 @@ Motivo: "%2" Panning - + Bilanciamento @@ -5395,303 +5954,357 @@ Motivo: "%2" Panning - + Bilanciamento Panning: - + Bilanciamento: PAN - + BIL SetupDialog Setup LMMS - Cofigura LMMS + Cofigura LMMS General settings - Impostazioni generali + Impostazioni generali BUFFER SIZE - DIMENSIONE DEL BUFFER + DIMENSIONE DEL BUFFER Reset to default-value - Reimposta al valore predefinito + Reimposta al valore predefinito MISC - VARIE + VARIE Enable tooltips - Abilita i suggerimenti + Abilita i suggerimenti Show restart warning after changing settings - Dopo aver modificato le impostazioni, mostra un avviso al riavvio + Dopo aver modificato le impostazioni, mostra un avviso al riavvio Display volume as dBV - Mostra il volume in dBV + Mostra il volume in dBV Compress project files per default - Per impostazione predefinita, comprimi i file di progetto + Per impostazione predefinita, comprimi i file di progetto One instrument track window mode - Modalità finestra ad una traccia strumento + Mostra un solo strumento per volta HQ-mode for output audio-device - Modalità alta qualità per l'uscita audio + Modalità alta qualità per l'uscita audio Compact track buttons - Pulsanti della traccia compatti + Pulsanti della traccia compatti Sync VST plugins to host playback - Sincronizza i plugin VST al playback dell'host + Sincronizza i plugin VST alla riproduzione del programma Enable note labels in piano roll - Abilita i nomi delle note nel piano-roll + Abilita l'etichetta delle note nel piano roll Enable waveform display by default - Abilità il display della forma d'onda per default + Abilità il display della forma d'onda per default Keep effects running even without input - + Lascia gli effetti attivi anche senza input Create backup file when saving a project - + Crea un file di backup quando salva i progetti LANGUAGE - + LINGUA Paths - Percorsi + Percorsi LMMS working directory - Directory di lavoro di LMMS + Directory di lavoro di LMMS VST-plugin directory - Directory dei plugin VST - - - Artwork directory - DIrectory del tema grafico + Directory dei plugin VST Background artwork - Grafica dello sfondo + Grafica dello sfondo FL Studio installation directory - Directory di installazione di FL Studio - - - LADSPA plugin paths - Percorsi dei plugin LADSPA + Directory di installazione di FL Studio STK rawwave directory - Directory per i file rawwave STK + Directory per i file rawwave STK Default Soundfont File - File SoundFont predefinito + File SoundFont predefinito Performance settings - Impostazioni prestazioni + Impostazioni prestazioni UI effects vs. performance - Effetti UI (interfaccia grafica) vs. prestazioni + Effetti UI (interfaccia grafica) vs. prestazioni Smooth scroll in Song Editor - Scorrimento morbido nel Song-Editor + Scorrimento morbido nel Song-Editor Enable auto save feature - Abilita la funzione di salvataggio automatico + Abilita la funzione di salvataggio automatico Show playback cursor in AudioFileProcessor - Mostra il cursore di riproduzione dentro AudioFileProcessor + Mostra il cursore di riproduzione dentro AudioFileProcessor Audio settings - Impostazioni audio + Impostazioni audio AUDIO INTERFACE - INTERFACCIA AUDIO + INTERFACCIA AUDIO MIDI settings - Impostazioni MIDI + Impostazioni MIDI MIDI INTERFACE - INTERFACCIA MIDI + INTERFACCIA MIDI OK - OK + OK Cancel - Annulla + Annulla Restart LMMS - Riavvia 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! + Si prega di notare che la maggior parte delle modifiche non avrà effetto fino al riavvio di LMMS! Frames: %1 Latency: %2 ms - Frames: %1 + Frames: %1 Latenza: %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. - 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. + 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. Choose LMMS working directory - Seleziona la directory di lavoro di LMMS + Seleziona la directory di lavoro di LMMS Choose your VST-plugin directory - Seleziona la tua directory dei plugin VST + Seleziona la directory dei plugin VST Choose artwork-theme directory - Seleziona la directory del tema grafico + Seleziona la directory del tema grafico Choose FL Studio installation directory - Seleziona la directory di installazione di FL Studio + Seleziona la directory di installazione di FL Studio Choose LADSPA plugin directory - Seleziona le directory dei plugin LADSPA + Seleziona le directory dei plugin LADSPA Choose STK rawwave directory - Seleziona le directory dei file rawwave STK + Seleziona le directory dei file rawwave STK Choose default SoundFont - Scegliere il SoundFont predefinito + Scegliere il SoundFont predefinito Choose background artwork - Scegliere la grafica dello sfondo + Scegliere la grafica dello sfondo 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. + 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. + 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. + + + Reopen last project on start + Apri l'ultimo progetto all'avvio + + + Directories + Percorsi cartelle + + + Themes directory + Directory del tema grafico + + + GIG directory + Directory di GIG + + + SF2 directory + Directory dei SoundFont + + + LADSPA plugin directories + Directory dei plugin VST + + + Auto save + Salvataggio automatico + + + Choose your GIG directory + Selezione la directory di GIG + + + Choose your SF2 directory + Seleziona la directory dei SoundFont + + + minutes + minuti + + + minute + minuto + + + Auto save interval: %1 %2 + Intervallo di auto-salvataggio: %1 %2 + + + Set the time between automatic backup to %1. +Remember to also save your project manually. + Imposta l'intervallo del backup automatico a %1. +Ricorda di salvare il tuo progetto anche manualmente. Song Tempo - Tempo + Tempo Master volume - Volume principale + Volume principale Master pitch - Altezza principale + Altezza principale Project saved - Progeto salvato + Progeto salvato The project %1 is now saved. - Il progetto %1 è stato salvato. + Il progetto %1 è stato salvato. Project NOT saved. - Il progetto NON è stato salvato. + Il progetto NON è stato salvato. The project %1 was not saved! - Il progetto %1 non è stato salvato! + Il progetto %1 non è stato salvato! Import file - Importa file + Importa file MIDI sequences - Sequenze MIDI + Sequenze MIDI FL Studio projects - Progetti FL Studio + Progetti FL Studio Hydrogen projects - Progetti Hydrogen + Progetti Hydrogen All file types - Tutti i tipi di file + Tutti i tipi di file Empty project - Empty project + Progetto vuoto 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! + Questo progetto è vuoto, pertanto non c'è nulla da esportare. Prima, è necessario inserire alcuni elementi nel Song Editor! Select directory for writing exported tracks... - Seleziona una directory per le tracce esportate... + Seleziona una directory per le tracce esportate... untitled - senza_nome + senza_nome Select file for project-export... - Scegliere il file per l'esportazione del progetto... + Scegliere il file per l'esportazione del progetto... The following errors occured while loading: - + Errori durante il caricamento: + + + MIDI File (*.mid) + File MIDI (*.mid) + + + LMMS Error report + Informazioni sull'errore di LMMS @@ -5766,56 +6379,88 @@ Assicurati di avere almeno i permessi di lettura del file 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. 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. + + Project Version Mismatch + Incompatibilità di versione + + + This %1 was created with LMMS version %2, but version %3 is installed + Questo %1 è stato creato con LMMS versione %2, ma ora è in uso la versione %3 + + + template + modello + + + project + progetto + SongEditorWindow Song-Editor - Song-Editor + Song-Editor Play song (Space) - Riproduci la canzone (Spazio) + Riproduci il brano (Spazio) Record samples from Audio-device - Registra campioni da una periferica audio + 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 + Registra campioni da una periferica audio mentre il brano o una traccia BB sono in riproduzione Stop song (Space) - Ferma la riproduzione della canzone (Spazio) + Ferma la riproduzione del brano (Spazio) Add beat/bassline - Aggiungi beat/bassline + Aggiungi beat/bassline Add sample-track - Aggiungi traccia di campione + Aggiungi traccia di campione Add automation-track - Aggiungi una traccia di automazione + Aggiungi una traccia di automazione Draw mode - Modalità disegno + Modalità disegno Edit mode (select and move) - Modalità modifica (seleziona e sposta) + Modalità modifica (seleziona e sposta) 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. + Cliccando qui si riproduce l'intero brano. 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. + Cliccando qui si ferma la riproduzione del brano. Il cursore verrà portato all'inizio della canzone. + + + Track actions + Azioni sulle tracce + + + Edit actions + Modalità di modifica + + + Timeline controls + Controlla griglia + + + Zoom controls + Opzioni di zoom @@ -5844,11 +6489,30 @@ Assicurati di avere almeno i permessi di lettura del file e prova di nuovo.Modalità del canale + + SubWindow + + Close + Chiudi + + + Maximize + Massimizza + + + Minimize + Minimizza + + + Restore + Apri + + TabWidget Settings for %1 - + Impostazioni per %1 @@ -5932,51 +6596,75 @@ Assicurati di avere almeno i permessi di lettura del file e prova di nuovo.click to change time units Clicca per cambiare l'unità di tempo visualizzata + + MIN + MIN + + + SEC + SEC + + + MSEC + MSEC + + + BAR + BAR + + + BEAT + BATT + + + TICK + TICK + TimeLineWidget Enable/disable auto-scrolling - Abilita/disabilita lo scorrimento automatico + Abilita/disabilita lo scorrimento automatico Enable/disable loop-points - Abilita/disabilita i punti di ripetizione + Abilita/disabilita i punti di ripetizione After stopping go back to begin - Una volta fermata la riproduzione, torna all'inizio + 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 + Una volta fermata la riproduzione, torna alla posizione da cui si è partiti After stopping keep position - Una volta fermata la riproduzione, mantieni la posizione + Una volta fermata la riproduzione, mantieni la posizione Hint - Suggerimento + Suggerimento Press <%1> to disable magnetic loop points. - Premi <%1> per disabilitare i punti di loop magnetici. + Premi <%1> per disabilitare i punti di loop magnetici. Hold <Shift> to move the begin loop point; Press <%1> to disable magnetic loop points. - Tieni premuto <Shift> per spostare l'inizio del punto di loop; premi <%1> per disabilitare i punti di loop magnetici. + Tieni premuto <Shift> per spostare l'inizio del punto di loop; premi <%1> per disabilitare i punti di loop magnetici. Track Mute - Muto + Muto Solo - Solo + Solo @@ -5986,7 +6674,7 @@ Assicurati di avere almeno i permessi di lettura del file e prova di nuovo.Non è stato possibile importare il file - Couldn't find a filter for importing file %1. + 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. @@ -5996,7 +6684,7 @@ You should convert this file into a format supported by LMMS using another softw Non è stato possibile aprire il file - Couldn't open file %1 for reading. + 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! @@ -6025,102 +6713,106 @@ Assicurarsi di avere i permessi in lettura per il file e per la directory che lo TrackContentObject - Muted - Muto + Mute + Muto TrackContentObjectView Current position - Posizione attuale + Posizione attuale Hint - Suggerimento + Suggerimento Press <%1> and drag to make a copy. - Premere <%1>, cliccare e trascinare per copiare. + Premere <%1>, cliccare e trascinare per copiare. Current length - Lunghezza attuale + Lunghezza attuale Press <%1> for free resizing. - Premere <%1> per ridimensionare liberamente. + Premere <%1> per ridimensionare liberamente. %1:%2 (%3:%4 to %5:%6) - %1:%2 (da %3:%4 a %5:%6) + %1:%2 (da %3:%4 a %5:%6) Delete (middle mousebutton) - Elimina (tasto centrale del mouse) + Elimina (tasto centrale del mouse) Cut - Taglia + Taglia Copy - Copia + Copia Paste - Incolla + Incolla Mute/unmute (<%1> + middle click) - Attiva/disattiva la modalità muta (<%1> + tasto centrale) + Attiva/disattiva la modalità muta (<%1> + tasto centrale) TrackOperationsWidget Press <%1> while clicking on move-grip to begin a new drag'n'drop-action. - Premere <%1> mentre si clicca sulla maniglia per lo spostamento per iniziare una nuova azione di drag'n'drop. + Premere <%1> 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 + Azioni per questa traccia Mute - Muto + Muto Solo - Solo + Solo Mute this track - Metti questa traccia in modalità muta + Silezia questa traccia Clone this track - Clona questa traccia + Clona questa traccia Remove this track - Elimina questa traccia + Elimina questa traccia Clear this track - Pulisci questa traccia + Pulisci questa traccia FX %1: %2 - + FX %1: %2 Turn all recording on - Accendi tutti i processi di registrazione + Accendi tutti i processi di registrazione Turn all recording off - Spegni tutti i processi di registrazione + Spegni tutti i processi di registrazione + + + Assign to new FX Channel + Assegna ad un nuovo canale FX @@ -6372,11 +7064,11 @@ Assicurarsi di avere i permessi in lettura per il file e per la directory che lo VisualizationWidget click to enable/disable visualization of master-output - cliccando si abilita/disabilita la visualizzazione dell'uscita principale + cliccando si abilita/disabilita la visualizzazione dell'uscita principale Click to enable - Clicca per abilitare + Clicca per abilitare @@ -6486,7 +7178,7 @@ Assicurarsi di avere i permessi in lettura per il file e per la directory che lo The VST plugin %1 could not be loaded. - + Non è stato possibile caricare il plugin VST %1. @@ -6738,12 +7430,60 @@ Assicurarsi di avere i permessi in lettura per il file e per la directory che lo Click for square wave Clicca per rimpiazzare il grafico con una forma d'onda quadra + + Volume + Volume + + + Panning + Bilanciamento + + + Freq. multiplier + Moltiplicatore freq. + + + Left detune + Intonazione sinistra + + + cents + centesimi + + + Right detune + Intonazione destra + + + A-B Mix + Mix A-B + + + Mix envelope amount + Quantità di inviluppo sul Mix + + + Mix envelope attack + Attacco inviluppo sul Mix + + + Mix envelope hold + Mantenimento inviluppo sul Mix + + + Mix envelope decay + Decadimento inviluppo sul Mix + + + Crosstalk + Scambio + ZynAddSubFxInstrument Portamento - + Portamento Filter Frequency @@ -6755,7 +7495,7 @@ Assicurarsi di avere i permessi in lettura per il file e per la directory che lo Bandwidth - + Larghezza di Banda FM Gain @@ -6786,11 +7526,11 @@ Assicurarsi di avere i permessi in lettura per il file e per la directory che lo Portamento: - + Portamento: PORT - + PORT Filter Frequency: @@ -6810,11 +7550,11 @@ Assicurarsi di avere i permessi in lettura per il file e per la directory che lo Bandwidth: - + Larghezza di banda: BW - + Largh: FM Gain: @@ -6847,10 +7587,6 @@ Assicurarsi di avere i permessi in lettura per il file e per la directory che lo audioFileProcessor - - Reverse sample - Inverti il campione - Amplify Amplificazione @@ -6863,9 +7599,13 @@ Assicurarsi di avere i permessi in lettura per il file e per la directory che lo End of sample Fine del campione + + Reverse sample + Inverti il campione + Stutter - + Passaggio Loopback point @@ -6893,7 +7633,7 @@ Assicurarsi di avere i permessi in lettura per il file e per la directory che lo Sample not found: %1 - + Campione non trovato: %1 @@ -7092,6 +7832,17 @@ Assicurarsi di avere i permessi in lettura per il file e per la directory che lo Modalità stereo + + fxLineLcdSpinBox + + Assign to: + Assegna a: + + + New FX Channel + Nuovo canale FX + + graphModel @@ -7218,15 +7969,15 @@ Assicurarsi di avere i permessi in lettura per il file e per la directory che lo 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. +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. +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. +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. @@ -7293,6 +8044,10 @@ Facendo doppio click sui plugin verranno fornite informazioni sulle relative por SR Dependent Dipendente da SR + + Audio + Audio + Control Controllo @@ -7321,10 +8076,6 @@ Facendo doppio click sui plugin verranno fornite informazioni sulle relative por Yes - - Audio - Audio - lb302Synth @@ -7496,116 +8247,6 @@ Facendo doppio click sui plugin verranno fornite informazioni sulle relative por 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 @@ -7624,10 +8265,18 @@ Facendo doppio click sui plugin verranno fornite informazioni sulle relative por Vibrato Freq Fequenza del vibrato + + Stick Mix + Stick Mix + Modulator Modulatore + + Crossfade + Crossfade + LFO Speed Velocità dell'LFO @@ -7637,44 +8286,28 @@ Facendo doppio click sui plugin verranno fornite informazioni sulle relative por Profondità dell'LFO - Pressure - Pressione - - - Motion - Moto - - - Speed - Velocità - - - Spread - Apertura + ADSR + ADSR - Stick Mix - Stick Mix + Pressure + Pressione - Crossfade - Crossfade + Motion + Moto - ADSR - ADSR + Speed + Velocità 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! + Spread + Apertura Marimba @@ -7835,14 +8468,6 @@ Facendo doppio click sui plugin verranno fornite informazioni sulle relative por Pressure: Pressione: - - Motion - Moto - - - Motion: - Moto: - Speed Velocità @@ -7852,16 +8477,12 @@ Facendo doppio click sui plugin verranno fornite informazioni sulle relative por Velocità: - Bowed - Bowed - - - Vibrato - Vibrato + Missing files + File mancanti - Vibrato: - Vibrato: + 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! @@ -8045,6 +8666,25 @@ Facendo doppio click sui plugin verranno fornite informazioni sulle relative por Profondità del Tremolo + + opl2instrumentView + + Attack + Attacco + + + Decay + Decadimento + + + Release + Rilascio + + + Frequency multiplier + Moltiplicatore della frequenza + + organicInstrument @@ -8374,63 +9014,98 @@ Facendo doppio click sui plugin verranno fornite informazioni sulle relative por - pluginBrowser + patchesDialog - no description - nessuna descrizione + Qsynth: Channel Preset + Qsynth: Preset Canale - VST-host for using VST(i)-plugins within LMMS - Host VST per usare i plugin VST con LMMS + Bank selector + Selezione banca - Filter for importing FL Studio projects into LMMS - Filtro per importare progetti di FL Studio in LMMS + Bank + Banco - Filter for importing MIDI-files into LMMS - Filtro per importare file MIDI in LMMS + Program selector + Selezione programma - Additive Synthesizer for organ-like sounds - Sintetizzatore additivo per suoni tipo organo + Patch + Programma - Vibrating string modeler - Modulatore di corde vibranti + Name + Nome - Plugin for enhancing stereo separation of a stereo input file - Plugin per migliorare la separazione stereo di un file + OK + OK - Plugin for controlling knobs with sound peaks - Plugin per controllare le manopole con picchi di suono + Cancel + Annulla + + + pluginBrowser - GUS-compatible patch instrument - strumento compatibile con GUS + no description + nessuna descrizione - plugin for using arbitrary LADSPA-effects inside LMMS. - Plugin per usare qualsiasi effetto LADSPA in LMMS. + Incomplete monophonic imitation tb303 + Imitazione monofonica del tb303 incompleta Plugin for freely manipulating stereo output Plugin per manipolare liberamente un'uscita stereo - Incomplete monophonic imitation tb303 - Imitazione monofonica del tb303 incompleta + Plugin for controlling knobs with sound peaks + Plugin per controllare le manopole con picchi di suono - Tuneful things to bang on - Oggetti dotati di intonazione su cui picchiare + Plugin for enhancing stereo separation of a stereo input file + Plugin per migliorare la separazione stereo di un file List installed LADSPA plugins Elenca i plugin LADSPA installati + + Filter for importing FL Studio projects into LMMS + Filtro per importare progetti di FL Studio in LMMS + + + GUS-compatible patch instrument + strumento compatibile con GUS + + + Additive Synthesizer for organ-like sounds + Sintetizzatore additivo per suoni tipo organo + + + Tuneful things to bang on + Oggetti dotati di intonazione su cui picchiare + + + VST-host for using VST(i)-plugins within LMMS + Host VST per usare i plugin VST con LMMS + + + Vibrating string modeler + Modulatore di corde vibranti + + + plugin for using arbitrary LADSPA-effects inside LMMS. + Plugin per usare qualsiasi effetto LADSPA in LMMS. + + + Filter for importing MIDI-files into LMMS + Filtro per importare file MIDI in LMMS + Emulation of the MOS6581 and MOS8580 SID. This chip was used in the Commodore 64 computer. @@ -8521,84 +9196,41 @@ Questo chip era utilizzato nel Commode 64. A NES-like synthesizer Un sintetizzatore che imita i suoni del Nintendo Entertainment System + + A native delay plugin + Un plugin di ritardi eco nativo + Player for GIG files - + Riproduttore di file GIG A multitap echo delay plugin - + Un plugin di ritardo eco multitap A native flanger plugin - - - - A native delay plugin - + Un plugin di flager nativo An oversampling bitcrusher - + Un riduttore di bit con oversampling A native eq plugin - + Un plugin di equalizzazione nativo A 4-band Crossover Equalizer - - - - - setupWidget - - JACK (JACK Audio Connection Kit) - - - - OSS Raw-MIDI (Open Sound System) - - - - SDL (Simple DirectMedia Layer) - - - - PulseAudio - - - - Dummy (no MIDI support) - - - - ALSA Raw-MIDI (Advanced Linux Sound Architecture) - - - - PortAudio - - - - Dummy (no sound output) - - - - ALSA (Advanced Linux Sound Architecture) - - - - OSS (Open Sound System) - + Un equalizzatore Crossover a 4 bande - WinMM MIDI - + A Dual filter plugin + Un plugin di duplice filtraggio - ALSA-Sequencer (Advanced Linux Sound Architecture) - + Filter for exporting MIDI-files from LMMS + Filtro per esportare file MIDI da LMMS @@ -8607,6 +9239,10 @@ Questo chip era utilizzato nel Commode 64. Bank Banco + + Patch + Patch + Gain Guadagno @@ -8631,6 +9267,10 @@ Questo chip era utilizzato nel Commode 64. Reverb Level Riverbero - livello + + Chorus + Chorus + Chorus Lines Chorus - voci @@ -8647,17 +9287,9 @@ Questo chip era utilizzato nel Commode 64. Chorus Depth Chorus - profondità - - Patch - Patch - - - Chorus - Chorus - A soundfont %1 could not be loaded. - + Non è stato possibile caricare un soundfont %1. @@ -8811,26 +9443,50 @@ Questo chip era utilizzato nel Commode 64. Attack: Attacco: + + 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: Decadimento: + + 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. + Sustain: Sostegno: + + 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. + Release: Rilascio: + + 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. + Pulse Width: Ampiezza pulse: + + 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. + Coarse: Approssimativo: + + 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. + Pulse Wave Onda pulse @@ -8851,46 +9507,22 @@ Questo chip era utilizzato nel Commode 64. 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 + Modulazione ring + 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. + + Filtered + Filtrato + 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. @@ -8989,10 +9621,18 @@ Questo chip era utilizzato nel Commode 64. Pickup %1 position Posizione del pickup %1 + + Pan %1 + Pan %1 + Detune %1 Intonazione %1 + + Fuzziness %1 + Fuzziness %1 + Length %1 Lunghezza %1 @@ -9005,14 +9645,6 @@ Questo chip era utilizzato nel Commode 64. Octave %1 Ottava %1 - - Pan %1 - Pan %1 - - - Fuzziness %1 - Fuzziness %1 - vibedView @@ -9101,11 +9733,11 @@ Questo chip era utilizzato nel Commode 64. 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 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 '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. @@ -9117,15 +9749,15 @@ 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. + 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. +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. +'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 '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. @@ -9338,4 +9970,4 @@ Il LED nell'angolo in basso a destra sull'editor della forma d'on Guadagno in output - + \ No newline at end of file diff --git a/data/locale/ru.ts b/data/locale/ru.ts index 3ecafb55c03..3d2ee46b504 100644 --- a/data/locale/ru.ts +++ b/data/locale/ru.ts @@ -1,101 +1,117 @@ - - - + AboutDialog + About LMMS - Об LMMS О программе LMMS + + LMMS + ЛММС + + + Version %1 (%2/%3, Qt %4, %5) Версия %1 (%2/%3, Qt %4, %5) + About Подробнее + LMMS - easy music production for everyone LMMS - лёгкое создание музыки для всех + + Copyright © %1 + Все права защищены © %1 + + + + <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.io</span></a></p></body></html> + + + Authors Авторы + + Involved + Участники + + + + Contributors ordered by number of commits: + Разработчики сортированные по числу коммитов: + + + 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! - Перевод выполнили: -Alexey Kouznetsov <alexey/dot/kouznetsov/at/gmail/dot/com> -Oe Ai <oeai/at/symbiants/dot/com> + Если Вы заинтересованы в переводе LMMS на другой язык или хотите улучшить существующий перевод, мы приветствуем любую помощь! Просто свяжитесь с разработчиками! -Музыкльные термины можно нйти в словаре dic.academic.ru/dic.nsf/enc_colier/6207/ТЕРМИНЫ -Если Вы заинтересованы в переводе LMMS на другой язык или хотите улучшить существующий перевод, мы приветствуем любую помощь! Просто свяжитесь с разработчиками! - +Перевод выполнили: +Alexey Kouznetsov <alexey/dot/kouznetsov/at/gmail/dot/com> +Oe Ai <oeai/at/symbiants/dot/com> + 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 - ЛММС - - - Involved - Участники - - - Contributors ordered by number of commits: - Разработчики сортированные по числу коммитов: - AmplifierControlDialog + VOL - ГРОМ + ГРОМ + Volume: Громкость: + PAN - БАЛ + БАЛ + Panning: - Балансировка: + Баланс: + LEFT Лево + Left gain: Лево мощность: + RIGHT Право + Right gain: Право мощность: @@ -103,109 +119,134 @@ Oe Ai <oeai/at/symbiants/dot/com> AmplifierControls + Volume Громкость + Panning Баланс + Left gain Лево мощн + Right gain Право мощн - AudioAlsa::setupWidget + AudioAlsaSetupWidget + 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: - Усиление: + + Disable loop + Отключить петлю - 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% исходный звук не меняется, в противном случае ― он будет ослаблен или усилен. (Обратите внимание, что исходная запись при этом останется нетронутой.) + + This button disables looping. The sample plays only once from start to end. + Эта кнопка отключает петлю (loop-цикл). Запись проигрывается только один раз от начала до конца. - Startpoint: - Начало: + + + Enable loop + Включить петлю - Endpoint: - Конец: + + 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. + Эта кнопка включает пинг-понг петлю. Сэмпл кольцуется обратно и вперёд между конечной точкой и точкой петли. + 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. - Эта кнопка отключает петлю (loop-цикл). Запись проигрывается только один раз от начала до конца. - - - Enable loop - Включить петлю + + Amplify: + Усиление: - This button enables forwards-looping. The sample loops between the end point and the loop point. - Эта кнопка включает переднюю петлю. Сэмпл кольцуется между конечной точкой и точкой петли. + + 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% исходный звук не меняется, в противном случае ― он будет ослаблен или усилен. (Обратите внимание, что исходная запись при этом останется нетронутой.) - This button enables ping-pong-looping. The sample loops backwards and forwards between the end point and the loop point. - Эта кнопка включает пинг-понг петлю. Сэмпл кольцуется обратно и вперёд между конечной точкой и точкой петли. + + Startpoint: + Начало: + With this knob you can set the point where AudioFileProcessor should begin playing your sample. Этим регулятором можно установить точку где АудиоФайлПроцессор должен начать воспроизведение сэмпла. + + Endpoint: + Конец: + + + 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. Этот регулятор ставит точку начала петли. @@ -213,6 +254,7 @@ Oe Ai <oeai/at/symbiants/dot/com> AudioFileProcessorWaveView + Sample length: Длина записи: @@ -220,26 +262,32 @@ Oe Ai <oeai/at/symbiants/dot/com> 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. + CLIENT-NAME ИМЯ КЛИЕНТА + CHANNELS КАНАЛЫ @@ -247,10 +295,12 @@ Oe Ai <oeai/at/symbiants/dot/com> AudioOss::setupWidget + DEVICE УСТРОЙСТВО + CHANNELS КАНАЛЫ @@ -258,11 +308,12 @@ Oe Ai <oeai/at/symbiants/dot/com> AudioPortAudio::setupWidget + BACKEND - драйвер? УПРАВЛЕНИЕ + DEVICE УСТРОЙСТВО @@ -270,10 +321,12 @@ Oe Ai <oeai/at/symbiants/dot/com> AudioPulseAudio::setupWidget + DEVICE УСТРОЙСТВО + CHANNELS КАНАЛЫ @@ -281,68 +334,96 @@ Oe Ai <oeai/at/symbiants/dot/com> AudioSdl::setupWidget + DEVICE УСТРОЙСТВО + + AudioSoundIo::setupWidget + + + BACKEND + + + + + 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 Изменить глоабльную автоматизацию композиции + + Remove song-global automation + Убрать глобальную автоматизацию композиции + + + + Remove all linked controls + Убрать всё присоединенное управление + + + Connected to %1 Подсоединено к %1 + Connected to controller Подсоединено к контроллеру + Edit connection... Настроить соединение... + Remove connection Удалить соединение + Connect to controller... Соединить с контроллером... - - Remove song-global automation - Убрать глобальную автоматизацию композиции - - - Remove all linked controls - Убрать всё присоединенное управление - AutomationEditor + Please open an automation pattern with the context menu of a control! Откройте редатор автоматизации через контекстное меню регулятора! + Values copied Значения скопированы + All selected values were copied to the clipboard. Все выбранные значения скопированы в буфер обмена. @@ -350,182 +431,253 @@ Oe Ai <oeai/at/symbiants/dot/com> AutomationEditorWindow + Play/pause 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. Нажмите здесь чтобы проиграть текущую мелодию. Это может пригодиться при его редактировании. Мелодия автоматически закольцуется при достижении конца. + Stop playing of current pattern (Space) Остановить воспроизведение текущей мелодии (Пробел) + Click here if you want to stop playing of the current pattern. Нажмите здесь, если вы хотите остановить воспроизведение текущей мелодии. + + Edit actions + + + + Draw mode (Shift+D) Режим рисования (Shift+D) + Erase mode (Shift+E) Режим стирания (Shift-E) + Flip vertically - Перевернуть вертикально + Перевернуть вертикально + Flip horizontally - Перевернуть горизонтально + Перевернуть горизонтально + Click here and the pattern will be inverted.The points are flipped in the y direction. Нажмите здесь и мелодия перевернётся. Точки переворачиваются в Y направлении. + Click here and the pattern will be reversed. The points are flipped in the x direction. Нажмите здесь и мелодия перевернётся в направлении X. + 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. + + Interpolation controls + Управление интерполяцией + + + Discrete progression Дискретная прогрессия + Linear progression Линейная прогрессия + Cubic Hermite progression Кубическая Эрмитова прогрессия + 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. Более высокое напряжение может сделать кривую более мягкой, но перегрузит некоторые величины. Низкое напряжение сделает наклон кривой ниже в каждой контрольной точке. + 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: + + + + Cut selected values (%1+X) Вырезать выбранные ноты (%1+X) + Copy selected values (%1+C) Копировать выбранные ноты в буфер (%1+C) + Paste values from clipboard (%1+V) Вставить запомненные значения (%1+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. При нажатии на эту кнопку ноты из буфера будут вставлены в первый видимый такт. - Tension: - Напряжение: + + Timeline controls + Управление временем + + + + Zoom controls + Приблизить управление + + Quantization controls + + + + Automation Editor - no pattern Редактор автоматизаци — нет шаблона + Automation Editor - %1 Редактор автоматизации — %1 + + + Model is already connected to this pattern. + Модель уже подключена к этому шаблону. + AutomationPattern + Drag a control while pressing <%1> Тяните контроль удерживая <%1> - - 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 Установить/очистить запись + Flip Vertically (Visible) - Перевернуть вертикально (Видимое) + Перевернуть вертикально (Видимое) + Flip Horizontally (Visible) - Перевернуть горизонтально (Видимое) + Перевернуть горизонтально (Видимое) + + + + %1 Connections + Соединения %1 + + + + Disconnect "%1" + Отсоединить «%1» + + + + Model is already connected to this pattern. + Модель уже подключена к этому шаблону. AutomationTrack + Automation track Дорожка автоматизации @@ -533,61 +685,90 @@ Oe Ai <oeai/at/symbiants/dot/com> BBEditor + Beat+Bassline Editor Ритм+Бас Редактор + Play/pause current beat/bassline (Space) Игра/пауза текущей линии ритма/баса (<Space>) + 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. Остановить воспроизведение (Пробел). + + Beat selector + Выбор бита + + + + Track and step actions + + + + Add beat/bassline Добавить ритм/бас + Add automation-track Добавить дорожку автоматизации + Remove steps Убрать такты + Add steps Добавить такты + + + Clone Steps + Клонировать такты + BBTCOView + Open in Beat+Bassline-Editor Открыть в редакторе ритм + баса + Reset name Сбросить название + Change name Переименовать + Change color Изменить цвет + Reset color to default Установить цвет по умолчанию @@ -595,10 +776,12 @@ Oe Ai <oeai/at/symbiants/dot/com> BBTrack + Beat/Bassline %1 Ритм-Бас Линия %1 + Clone of %1 Копия %1 @@ -606,26 +789,32 @@ Oe Ai <oeai/at/symbiants/dot/com> BassBoosterControlDialog + FREQ ЧАСТ + Frequency: Частота: + GAIN МОЩ + Gain: Мощность: + RATIO ОТН + Ratio: Отношение: @@ -633,14 +822,17 @@ Oe Ai <oeai/at/symbiants/dot/com> BassBoosterControls + Frequency Частота + Gain Мощность + Ratio Отношение @@ -648,82 +840,104 @@ Oe Ai <oeai/at/symbiants/dot/com> BitcrushControlDialog + IN - + + OUT - + + + GAIN - + МОЩ + Input Gain: - Входная мощность: + Входная мощность: + NOIS - + + Input Noise: - Входной шум: + + Output Gain: - + Выходная мощность: + CLIP - + + Output Clip: - + + + Rate - Частота выборки + Частота выборки + Rate Enabled - + + Enable samplerate-crushing - + + Depth - + + Depth Enabled - + + Enable bitdepth-crushing - + + Sample rate: - + Частота сэмплирования: + STD - + + Stereo difference: - Стерео разница: + Стерео разница: + Levels Уровни + Levels: Уровни: @@ -731,10 +945,12 @@ Oe Ai <oeai/at/symbiants/dot/com> CaptionMenu + &Help &H Справка + Help (not available) Справка (не доступна) @@ -742,10 +958,12 @@ Oe Ai <oeai/at/symbiants/dot/com> CarlaInstrumentView + Show GUI Показать интерфейс + Click here to show or hide the graphical user interface (GUI) of Carla. Нажмите сюда, чтобы показать или скрыть графический интерфейс Карла. @@ -753,6 +971,7 @@ Oe Ai <oeai/at/symbiants/dot/com> Controller + Controller %1 Контроллер %1 @@ -760,58 +979,73 @@ Oe Ai <oeai/at/symbiants/dot/com> 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. Обнаружен цикл. @@ -819,41 +1053,50 @@ Oe Ai <oeai/at/symbiants/dot/com> ControllerRackView + Controller Rack Рэка контроллеров + Add Добавить + Confirm Delete Подтвердить удаление - Confirm delete? There are existing connection(s) associted with this controller. There is no way to undo. - Подтверждаете удаление? Есть возможные соединения с этим контроллером, потом нельзя будет их возвратить. + + Confirm delete? There are existing connection(s) associated 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 Убрать этот фильтр @@ -861,138 +1104,223 @@ Oe Ai <oeai/at/symbiants/dot/com> CrossoverEQControlDialog + Band 1/2 Crossover: - + + Band 2/3 Crossover: - + + Band 3/4 Crossover: - + + Band 1 Gain: - + + Band 2 Gain: - + + Band 3 Gain: - + + Band 4 Gain: - + + Band 1 Mute - + + Mute Band 1 - + + Band 2 Mute - + + Mute Band 2 - + + Band 3 Mute - + + Mute Band 3 - + + Band 4 Mute - + + Mute Band 4 - + DelayControls + Delay Samples Задержка сэмплов + Feedback Возврат + Lfo Frequency - + + Lfo Amount - + + + + + Output gain + DelayControlsDialog + Delay - Задержка + + Delay Time - Время задержки + + Regen - + + Feedback Amount - + Объём возврата: + Rate - Частота выборки + Частота выборки + + Lfo - + + Lfo Amt - + + + + + Out Gain + - - - DetuningHelper - Note detuning - Расстройка нот + + Gain + DualFilterControlDialog + + + FREQ + + + + + + Cutoff frequency + Срез частот + + + + + RESO + + + + + + Resonance + Резонанс + + + + + GAIN + + + + + + Gain + + + + + MIX + + + + + Mix + + + + Filter 1 enabled Фильтр 1 включен + Filter 2 enabled Фильтр 2 включен + Click to enable/disable Filter 1 Кликнуть для включения/выключения Фильтра 1 + Click to enable/disable Filter 2 Кликнуть для включения/выключения Фильтра 2 @@ -1000,160 +1328,217 @@ Oe Ai <oeai/at/symbiants/dot/com> DualFilterControls + Filter 1 enabled - + Фильтр 1 включен + Filter 1 type - + + Cutoff 1 frequency - + + Q/Resonance 1 - + + Gain 1 - + + Mix - + + Filter 2 enabled - + Фильтр 2 включен + Filter 2 type - + + Cutoff 2 frequency - + + Q/Resonance 2 - + + Gain 2 - + + + LowPass - Низ.ЧФ + Низ.ЧФ + + HiPass - Выс.ЧФ + Выс.ЧФ + + BandPass csg - Сред.ЧФ csg + Сред.ЧФ csg + + BandPass czpg - Сред.ЧФ czpg + Сред.ЧФ czpg + + Notch - Полосно-заграждающий + Полосно-заграждающий + + Allpass - Все проходят + Все проходят + + Moog - Муг + Муг + + 2x LowPass - 2х Низ.ЧФ + 2х Низ.ЧФ + + RC LowPass 12dB - RC Низ.ЧФ 12дБ + RC Низ.ЧФ 12дБ + + RC BandPass 12dB - RC Сред.ЧФ 12 дБ + RC Сред.ЧФ 12 дБ + + RC HighPass 12dB - RC Выс.ЧФ 12дБ + RC Выс.ЧФ 12дБ + + RC LowPass 24dB - RC Низ.ЧФ 24дБ + RC Низ.ЧФ 24дБ + + RC BandPass 24dB - RC Сред.ЧФ 24дБ + RC Сред.ЧФ 24дБ + + RC HighPass 24dB - RC Выс.ЧФ 24дБ + RC Выс.ЧФ 24дБ + + Vocal Formant Filter - Фильтр Вокальной форманты + Фильтр Вокальной форманты + + 2x Moog - + + + SV LowPass - + + + SV BandPass - + + + SV HighPass - + + + SV Notch - + + + Fast Formant - + + + Tripole - + - DummyEffect + Editor - NOT FOUND - НЕ НАЙДЕН + + Transport controls + Управление транспортом - - - Editor + Play (Space) Игра (Пробел) + Stop (Space) Стоп (Пробел) + Record Запись + Record while playing Запись при игре @@ -1161,19 +1546,22 @@ Oe Ai <oeai/at/symbiants/dot/com> Effect + Effect enabled Эффект включён + Wet/Dry mix Насыщенность + Gate - Проход Шлюз + Decay Затихание @@ -1181,6 +1569,7 @@ Oe Ai <oeai/at/symbiants/dot/com> EffectChain + Effects enabled Эффекты включёны @@ -1188,10 +1577,12 @@ Oe Ai <oeai/at/symbiants/dot/com> EffectRackView + EFFECTS CHAIN ЦЕПЬ ЭФФЕКТОВ + Add effect Добавить эффект @@ -1199,79 +1590,101 @@ Oe Ai <oeai/at/symbiants/dot/com> EffectSelectDialog + Add effect Добавить эффект - Plugin description - Описание модуля + + Name + Имя + + + + Description + Описание + + + + Author + 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 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 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 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. +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. Сигнал проходит последовательно через все установленные фильтры (сверху вниз). @@ -1290,14 +1703,17 @@ Right clicking will bring up a context menu where you can change the order in wh Контекстное меню, вызываемое щелчком правой кнопкой мыши, позволяет менять порядок следования фильтров или удалять их вместе с другими. + Move &up &u Переместить выше + Move &down &d Переместить ниже + &Remove this plugin &R Убрать фильтр @@ -1305,58 +1721,72 @@ Right clicking will bring up a context menu where you can change the order in wh 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 Модулировать огибающую @@ -1364,596 +1794,774 @@ Right clicking will bring up a context menu where you can change the order in wh 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. + + Click here for random wave. + Нажмите сюда для случайной волны. + + + 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. - Нажмите сюда для случайной волны. - EqControls + Input gain Входная мощность + Output gain Выходная мощность + Low shelf gain - + + Peak 1 gain - + + Peak 2 gain - + + Peak 3 gain - + + Peak 4 gain - + + High Shelf gain - + + HP res - + + Low Shelf res - + + Peak 1 BW - + + Peak 2 BW - + + Peak 3 BW - + + Peak 4 BW - + + High Shelf res - + + LP res - + + HP freq - + + Low Shelf freq - + + Peak 1 freq - + + Peak 2 freq - + + Peak 3 freq - + + Peak 4 freq - + + High shelf freq - + + LP freq - + + HP active - + + Low shelf active - + + Peak 1 active - + + Peak 2 active - + + Peak 3 active - + + Peak 4 active - + + High shelf active - + + LP active - + + LP 12 - + + LP 24 - + + LP 48 - + + HP 12 - + + HP 24 - + + HP 48 - + + low pass type - + + high pass type - + + + + + Analyse IN + + + + + Analyse OUT + EqControlsDialog + HP - + + Low Shelf - + + Peak 1 - + + Peak 2 - + + Peak 3 - + + Peak 4 - + + High Shelf - + + LP - + + In Gain - + + + + Gain Мощность + Out Gain - + + Bandwidth: - Полоса: + + + + + Octave + + Resonance : Резонанс: + Frequency: Частота: - 12dB - + + lp grp + - 24dB - + + hp grp + - 48dB - + + Frequency + Частота - lp grp - + + + Resonance + Резонанс - hp grp - + + Bandwidth + Полоса пропускания: - EqParameterWidget + EqHandle - Hz - Гц + + Reso: + + + + + BW: + + + + + + Freq: + 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 - Начать + + Export as loop (remove end silence) + Экспортировать как петлю (убрать тишину в конце) - Cancel - Отменить + + Export between loop markers + Экспорт между метками петли - Export as loop (remove end silence) - Экспортировать как петлю (убрать тишину в конце) + + Start + Начать - Export between loop markers - Экспорт между метками петли + + Cancel + Отменить + 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 для записи. Проверьте, обладаете ли вы правами на запись в выбранный файл и содержащий его каталог и попробуйте снова! + Export project to %1 Экспорт проекта в %1 + Error Ошибка + Error while determining file-encoder device. Please try to choose a different output format. Ошибка при определении кодека файла. Попробуйте выбрать другой формат вывода. + Rendering: %1% Обработка: %1% @@ -1961,6 +2569,8 @@ Please make sure you have write-permission to the file and the directory contain Fader + + Please enter a new value between %1 and %2: Введите новое значение от %1 до %2: @@ -1968,6 +2578,7 @@ Please make sure you have write-permission to the file and the directory contain FileBrowser + Browser Обозреватель файлов @@ -1975,26 +2586,47 @@ Please make sure you have write-permission to the file and the directory contain FileBrowserTreeWidget + Send to active instrument-track Послать на активную инструментальную-дорожку - Open in new instrument-track/Song-Editor + + Open in new instrument-track/Song Editor Отркрыть в новой инструментальной дорожке/редакторе песни + Open in new instrument-track/B+B Editor Открыть в новой инструментальной дорожке/Б+Б редакторе + Loading sample Загрузка записи + Please wait, loading sample for preview... Пж. ждите, запись загружается для просмотра... + + Error + Ошибка + + + + does not appear to be a valid + Не похоже на правильное + + + + file + + + + --- Factory files --- --- Заводские файлы --- @@ -2002,82 +2634,100 @@ Please make sure you have write-permission to the file and the directory contain FlangerControls + Delay Samples - + Задержка сэмплов + Lfo Frequency - + + Seconds - + Секунды + Regen - + + Noise - Шум + Шум + Invert - + FlangerControlsDialog + Delay - Задержка + + Delay Time: - Время задержки: + + Lfo Hz - + + Lfo: - + + Amt - + + Amt: - + + Regen - + + Feedback Amount: - + Объём возврата: + Noise - Шум + Шум + White Noise Amount: - Объём белого шума: + Объём белого шума: 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. + 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. @@ -2090,22 +2740,27 @@ You can remove and move FX channels in the context menu, which is accessed by ri + Move &left Двигать влево &L + Move &right Двигать вправо &r + Rename &channel Переименовать канал &c + R&emove channel Удалить канал &e + Remove &unused channels Удалить неиспользуемые каналы &u @@ -2113,10 +2768,14 @@ You can remove and move FX channels in the context menu, which is accessed by ri FxMixer + Master Главный + + + FX %1 Эффект %1 @@ -2124,41 +2783,51 @@ You can remove and move FX channels in the context menu, which is accessed by ri FxMixerView - Rename FX channel - Переименовать канал Эффекта - - - Enter the new name for this FX channel - Введите новое название для этого канала Эффекта - - + FX-Mixer Микшер Эффектов + FX Fader %1 - Ползунок Эффекта %1 + + Mute - Заглушить + Тихо + Mute this FX channel - Тишина на этом канале Эффекта + Заглушить этот канал ЭФ + Solo - Соло + Соло + Solo FX channel - Соло канал ЭФ + Соло канал ЭФ + + + + Rename FX channel + Переименовать канал Эффекта + + + + Enter the new name for this FX channel + Введите новое название для этого канала Эффекта FxRoute + + Amount to send from channel %1 to channel %2 Величина отправки с канала %1 на канал %2 @@ -2166,14 +2835,17 @@ You can remove and move FX channels in the context menu, which is accessed by ri GigInstrument + Bank Банк + Patch Патч + Gain Мощность @@ -2181,180 +2853,277 @@ You can remove and move FX channels in the context menu, which is accessed by ri GigInstrumentView + Open other GIG file Открыть другой GIG файл + Click here to open another GIG file Кликните сюда, чтобы открыть другой GIG файл + Choose the patch Выбрать патч + Click here to change which patch of the GIG file to use Нажмите здесь для смены используемого патча GIG файла + + Change which instrument of the GIG file is being played Изменить инструмент, который воспроизводит GIG файл + Which GIG file is currently being used Какой GIG файл сейчас используется + Which patch of the GIG file is currently being used Какой патч GIG файла сейчас используется + Gain Мощность + Factor to multiply samples by Фактор умножения сэмплов + Open GIG file Открыть GIG файл + GIG Files (*.gig) GIG Файлы (*.gig) + + GuiApplication + + + Working directory + Рабочий каталог + + + + The LMMS working directory %1 does not exist. Create it now? You can change the directory later via Edit -> Settings. + Рабочий каталог LMMS (%1) не существует. Создать его? Позже вы сможете сменить его через Правка -> Параметры. + + + + Preparing UI + Подготовка UI + + + + Preparing song editor + Подготовка редактора песни + + + + Preparing mixer + Подготовка микшера + + + + Preparing controller rack + Подготовка стойки управления + + + + Preparing project notes + Подготовка заметок проекта + + + + Preparing beat/bassline editor + Подготовка Ритм+Бас редактора + + + + Preparing piano roll + Подготовка редактора нот + + + + Preparing automation editor + Подготовка редактора автоматизации + + InstrumentFunctionArpeggio + Arpeggio Арпеджио + Arpeggio type Тип арпеджио + Arpeggio range Диапазон арпеджио + Arpeggio time Период арпеджио + Arpeggio gate Шлюз арпеджио + Arpeggio direction Направление арпеджио + Arpeggio mode Режим арпеджио + Up Вверх + Down Вниз + Up and down Вверх и вниз + Random Случайно + + Down and up + Вниз и вверх + + + 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: Режим: @@ -2362,457 +3131,571 @@ You can remove and move FX channels in the context menu, which is accessed by ri InstrumentFunctionNoteStacking + octave Октава + + Major Мажорный + Majb5 - + + minor минорный + minb5 - + + sus2 - + + sus4 - + + aug - + + augsus4 - + + tri - + + 6 - + + 6sus4 - + + 6add9 - + + m6 - + + m6add9 - + + 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 - Аккорды + + Minor + - Chord type - Тип аккорда + + Chromatic + - Chord range - Диапазон аккорда + + Half-Whole Diminished + - Minor - + + 5 + - Chromatic - + + Chords + Аккорды - Half-Whole Diminished - + + Chord type + Тип аккорда - 5 - 8х {5?} + + Chord range + Диапазон аккорда InstrumentFunctionNoteStackingView + + STACKING + СТЫКОВКА + + + + Chord: + Аккорд: + + + 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 + + NOTE + NOTE + + + 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 100% note velocity Опрделяет базовую скорость нормальизации для MiDi инструментов при громкости ноты 100% + BASE VELOCITY БАЗОВАЯ СКОРОСТЬ @@ -2820,10 +3703,12 @@ You can remove and move FX channels in the context menu, which is accessed by ri InstrumentMiscView + MASTER PITCH - + + Enables the use of Master Pitch Включает использование основной тональности @@ -2831,179 +3716,222 @@ You can remove and move FX channels in the context menu, which is accessed by ri 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 Фильтр Вокальной форманты + 2x Moog - + + SV LowPass - + + SV BandPass - + + SV HighPass - + + SV Notch - + + Fast Formant - + + Tripole - + 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. Здесь вы можете выбрать фильтр для дорожки этого инструмента. Фильтры могут довольно сильно менять звучание. + + FREQ + ЧАСТ + + + + cutoff frequency: + Срез частот: + + + 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. Огибающие, LFO и фильтры не поддерживаются этим инструментом. @@ -3011,199 +3939,264 @@ You can remove and move FX channels in the context menu, which is accessed by ri InstrumentTrack + + + Default preset + Основная предустановка + + + + With this knob you can set the volume of the opened channel. + Регулировка громкости текущего канала. + + + + unnamed_track безымянная_дорожка + + Base note + Опорная нота + + + Volume Громкость + Panning Стерео + Pitch Тональность - FX channel - Канал ЭФ - - - Default preset - Основная предустановка - - - With this knob you can set the volume of the opened channel. - Регулировка громкости текущего канала. - - - Base note - Опорная нота - - + Pitch range Диапазон тональности + + FX channel + Канал ЭФ + + + Master Pitch - + InstrumentTrackView + Volume Громкость + Volume: Громкость: + VOL ГРОМ + Panning Баланс + Panning: Баланс: + PAN БАЛ + MIDI MIDI + Input Вход + Output Выход + + + FX %1: %2 + + InstrumentTrackWindow + GENERAL SETTINGS ОСНОВНЫЕ НАСТРОЙКИ + + Use these controls to view and edit the next/previous track in the song editor. + Используйте эти регуляторы, чтобы видеть и редактировать дорожку в редакторе песни. + + + Instrument volume Громкость инструмента + Volume: Громкость: + VOL ГРОМ + Panning Баланс + Panning: Стереобаланс: + PAN БАЛ + Pitch Тональность + Pitch: Тональность: + cents процентов + PITCH ТОН - FX channel - Канал ЭФ + + Pitch range (semitones) + Диапазон тональности (полутона) - ENV/LFO - ОГИБ/LFO + + RANGE + ДИАП - FUNC - ФУНКЦ + + FX channel + Канал ЭФ + + FX ЭФ - MIDI - MIDI + + Save current instrument track settings in a preset file + Сохранить текущую инструментаьную дорожку в файл предустановок - Save 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. + Нажать здесь, чтобы сохранить настройки текущей инстр. дорожки в файл предустановок. Позже можно загрузить эту предустановку двойным кликом в браузере предустановок. - XML preset file (*.xpf) - XML файл настроек (*.xpf) + + SAVE + - PLUGIN - ПЛАГИН + + ENV/LFO + ОГИБ/LFO - Pitch range (semitones) - Диапазон тональности (полутона) + + FUNC + ФУНКЦ - RANGE - ДИАП + + MIDI + MIDI - Save current instrument track settings in a preset file - Сохранить текущую инструментаьную дорожку в файл предустановок + + MISC + РАЗН - 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. - Нажать здесь, чтобы сохранить настройки текущей инстр. дорожки в файл предустановок. Позже можно загрузить эту предустановку двойным кликом в браузере предустановок. + + Save preset + Сохранить предустановку - MISC - РАЗН + + XML preset file (*.xpf) + XML файл настроек (*.xpf) + + + + PLUGIN + ПЛАГИН Knob + Set linear - Установить линейно + Установить линейно + Set logarithmic - Установить логарифмически + Установить логарифмически + Please enter a new value between -96.0 dBV and 6.0 dBV: Введите новое значение от –96,0 дБВ до 6,0 дБВ: + Please enter a new value between %1 and %2: Введите новое значение от %1 до %2: @@ -3211,6 +4204,7 @@ You can remove and move FX channels in the context menu, which is accessed by ri LadspaControl + Link channels Связать каналы @@ -3218,10 +4212,12 @@ You can remove and move FX channels in the context menu, which is accessed by ri LadspaControlDialog + Link Channels Связать каналы + Channel Канал @@ -3229,14 +4225,17 @@ You can remove and move FX channels in the context menu, which is accessed by ri LadspaControlView + Link channels Связать каналы + Value: Значение: + Sorry, no help available. Извините, справки нет. @@ -3244,6 +4243,7 @@ You can remove and move FX channels in the context menu, which is accessed by ri LadspaEffect + Unknown LADSPA plugin %1 requested. Запрошен неизвестный модуль LADSPA «%1». @@ -3251,38 +4251,72 @@ You can remove and move FX channels in the context menu, which is accessed by ri LcdSpinBox + Please enter a new value between %1 and %2: Введите новое значение от %1 до %2: + + LeftRightNav + + + + + Previous + Предыдущий + + + + + + Next + Следующий + + + + Previous (%1) + Предыдущий (%1) + + + + Next (%1) + Следующий (%1) + + LfoController + LFO Controller - Низко-частотный осциллятор (генератор) Контроллер LFO + Base value Основное значение + Oscillator speed Скорость волны + Oscillator amount Размер волны + Oscillator phase Фаза волны + Oscillator waveform Форма волны + Frequency Multiplier Множитель частоты @@ -3290,390 +4324,669 @@ You can remove and move FX channels in the context menu, which is accessed by ri 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 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. Нажмите здесь для определения своей формы. Двойное нажатие для выбора файла. + + + LmmsCore + + + Generating wavetables + Генерация волн + - Click here for a moog saw-wave. - Нажать здесь для зигзагообразной муг волны. + + Initializing data structures + Инициализация структуры данных + + + + Opening audio and midi devices + Открываем аудио и миди устройства + + + + Launching mixer threads + Запускаем потоки микшера MainWindow - Working directory - Рабочий каталог LMMS + + Configuration file + Файл настроек - The LMMS working directory %1 does not exist. Create it now? You can change the directory later via Edit -> Settings. - Рабочий каталог LMMS (%1) не существует. Создать его? Позже вы сможете сменить его через Правку -> Параметры. + + Error while parsing configuration file at line %1:%2: %3 + Ошибка во время обработки файла настроек в строке %1:%2: %3 + Could not save config-file Не могу сохранить настройки - Could not save configuration file %1. You're probably not permitted to write to this 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. Возможно, вы не обладаете правами на запись в него. Пожалуйста, проверьте свои права и попробуйте снова. - &New - &N Новый + + Project recovery + Восстановление проекта - &Open... - &Открыть... + + There is a recovery file present. It looks like the last session did not end properly or another instance of LMMS is already running. Do you want to recover the project of this session? + Остался файл для восстановления. Похоже последняя сессия не была нормально завершена или запущен ещё один процесс LMMS. +Хотите восстановить проект из этой сессии? - &Save + + + Recover + Восстановить + + + + Recover the file. Please don't run multiple instances of LMMS when you do this. + Восстановить файл. Пожалуйства, не запускайте несколько процессов ЛММС во время этого. + + + + + Ignore + Игнорировать + + + + Launch LMMS as usual but with automatic backup disabled to prevent the present recover file from being overwritten. + Запуск ЛММС как обычно, но с отключенным автоматическим восстановлением, чтобы предотвратить перезапись текущего файла восстановления. + + + + Discard + Отказать + + + + Launch a default session and delete the restored files. This is not reversible. + Запустить обычную сессию и удалить восстановленные файлы. Это безвозвратно. + + + + Quit + Покинуть + + + + Shut down LMMS with no further action. + Выключить ЛММС без последствий. + + + + Exit + Выход + + + + Version %1 + Версия %1 + + + + Preparing plugin browser + Подготовка обзора плагинов + + + + Preparing file browsers + Подготовка обзора файлов + + + + My Projects + Мои проекты + + + + My Samples + Мои сэмплы + + + + My Presets + Мои предустановки + + + + My Home + Моя домашняя папка + + + + Root directory + Корневая директория + + + + Volumes + + + + + My Computer + Мой компьютер + + + + Loading background artwork + Загружаем фоновый рисунок + + + + &File + &F Файл + + + + &New + &N Новый + + + + New from template + + + + + &Open... + &Открыть... + + + + &Recently Opened Projects + &R Недавние проекты + + + + &Save &S Сохранить + Save &As... &A Сохранить как... + + Save as New &Version + &V Сохранить как новую версию + + + + Save as default template + Сохранить как обычный шаблон + + + Import... Импорт... + E&xport... &X Экспорт... + + E&xport Tracks... + &x Экспорт дорожек... + + + + Export &MIDI... + Экспорт &MIDI... + + + &Quit &Q Выйти + &Edit &E Правка + + Undo + Откатить действие + + + + Redo + Возврат действия + + + Settings Параметры + + &View + + + + &Tools &T Сервис + &Help &H Справка + + Online Help + Помощь онлайн + + + Help Справка - What's this? + + What's This? Что это? + About О программе + Create new project Создать новый проект + Create new project from template Создать новый проект по шаблону + Open existing project Открыть существующий проект + Recently opened projects Недавние проекты + Save current project Сохранить текущий проект + Export current project Экспорт проекта - Song Editor + + What's this? + Что это? + + + + Toggle metronome + Включить метроном + + + + 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. Сим запускается или скрывается музыкальный редактор. С его помощью вы можете редактировать композицию и задавать время воспроизведения каждой дорожки. Также вы можете вставлять и передвигать записи прямо в списке воспроизведения. - Beat+Bassline Editor - Показать/скрыть ритм-бас редактор + + 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. Сим запускается ритм-бас редактор. Он необходим для установки ритма, открытия, добавления и удаления каналов, а также вырезания, копирования и вставки ритм-бас шаблонов, мелодий и т. п. - Piano Roll - Показать/скрыть нотный редактор + + 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. Запуск редатора нот. С его помощью вы можете легко редактировать мелодии. - Automation Editor + + 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. Показать/скрыть окно редактора автоматизации. С его помощью вы можете легко редактироватьдинамику выбранных величин. - FX Mixer + + 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. Скрыть/показать микшер ЭФфектов. Он является мощным инструментом для управления эффектами. Вы можете вставлять эффекты в различные каналы. - Project Notes - Показать/скрыть заметки к проекту + + Show/hide project notes + Показать/скрыть заметки проекта + Click here to show or hide the project notes window. In this window you can put down your project notes. Эта кнопка показывает/прячет окно с заметками. В этом окне вы можете помещать любые комментарии к своей композиции. - Controller Rack + + 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? - Проект был изменён. Сохранить его сейчас? + + Recover session. Please save your work! + Восстановление сессии. Пожалуйста, сохраните свою работу! - Help not available - Справка недоступна + + Automatic backup disabled. Remember to save your work! + Автоматическое сохранение отключено. Не забудьте сохранять свои работы! - 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 %1 + LMMS %1 - LMMS (*.mmp *.mmpz) - LMMS (*.mmp *.mmpz) + + Recovered project not saved + Восстановленный проект не сохранён. - Version %1 - Версия %1 + + This project was recovered from the previous session. It is currently unsaved and will be lost if you don't save it. Do you want to save it now? + Проект был восстановлен из предыдущей сессии. Сейчас он не сохранён и будет потерян, если его не сохранить. +Хотите сохранить его сейчас? - Configuration file - Файл настроек + + Project not saved + Проект не сохранён - Error while parsing configuration file at line %1:%2: %3 - Ошибка во время обработки файла настроек в строке %1:%2: %3 + + The current project was modified since last saving. Do you want to save it now? + Проект был изменён. Сохранить его сейчас? - Volumes - Объёмы? - Громкости + + Open Project + Открыть проект - Undo - Откатить действие + + LMMS (*.mmp *.mmpz) + LMMS (*.mmp *.mmpz) - Redo - Возврат действия + + Save Project + Сохранить проект - LMMS Project - + + LMMS Project + ЛММС Проект - LMMS Project Template - + + LMMS Project Template + Шаблон ЛММС Проекта - My Projects - Мои проекты + + Overwrite default template? + Перезаписать обычный шаблон? - My Samples - Мои сэмплы + + This will overwrite your current default template. + Это перезапишет текущий обычный шаблон. - My Presets - Мои предустановки + + Help not available + Справка недоступна - My Home - Моя домашняя папка + + 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 Computer - Мой компьютер + + Song Editor + Показать/скрыть музыкальный редактор - Root Directory - Корневая директория + + Beat+Bassline Editor + Показать/скрыть ритм-бас редактор - &File - &F Файл + + Piano Roll + Показать/скрыть нотный редактор - &Recently Opened Projects - &R Недавние проекты + + Automation Editor + Показать/скрыть редактор автоматизации - Save as New &Version - &V Сохранить как новую версию + + FX Mixer + Показать/скрыть микшер ЭФ - E&xport Tracks... - &x Экспорт дорожек... + + Project Notes + Показать/скрыть заметки к проекту - Online Help - Помощь онлайн + + Controller Rack + Показать/скрыть управление контроллерами - What's This? - Что это? + + Volume as dBV + - Open Project - Открыть проект + + Smooth scroll + Плавная прокрутка - Save Project - Сохранить проект + + Enable note labels in piano roll + Включить обозначение нот в музыкальном редакторе MeterDialog + + Meter Numerator - числитель Шкала чисел + + Meter Denominator - знаменатель Шкала делений + TIME SIG ПЕРИОД @@ -3681,35 +4994,25 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS. MeterModel + Numerator Числитель + Denominator Знаменатель - - MidiAlsaRaw::setupWidget - - DEVICE - УСТРОЙСТВО - - - - MidiAlsaSeq - - DEVICE - УСТРОЙСТВО - - MidiController + MIDI Controller Контроллер MIDI + unnamed_midi_controller нераспознанный миди контроллер @@ -3717,555 +5020,699 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS. 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 - УСТРОЙСТВО + + Track + MidiPort + Input channel Вход + Output channel Выход + Input controller Контроллер входа + Output controller Контроллер выхода + Fixed input velocity Постоянная скорость ввода + Fixed output velocity Постоянная скорость вывода + + Fixed output note + Постоянный вывод нот + + + Output MIDI program Программа для вывода MiDi + + Base velocity + Базовая скорость + + + Receive MIDI-events Принимать события MIDI + Send MIDI-events Отправлять события MIDI + + + MidiSetupWidget - Fixed output note - Постоянный вывод нот - - - Base velocity - Базовая скорость + + DEVICE + 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 - + + + Sine wave - Синусоида + Синусоида + Bandlimited Triangle wave - + Ограниченная по частоте треугольная волна + Bandlimited Saw wave - + Ограниченная по частоте острая волна + Bandlimited Ramp wave - + + Bandlimited Square wave - + Ограниченная по частоте квадратная волна + Bandlimited Moog saw wave - + Ограниченная по частоте Муг острая волна + + Soft square wave - + Сглаженная квадратная волна + Absolute sine wave - + + + Exponential wave - + Экспоненциальная волна + White noise - + Белый шум + Digital Triangle wave - + Цифровая треугольная волна + Digital Saw wave - + Цифровая острая волна + Digital Ramp wave - + + Digital Square wave - + Цифровая квадратная волна + Digital Moog saw wave - + Цифровая Муг острая волна + Triangle wave - + Треугольная волна + Saw wave - Зигзаг + Зигзаг + Ramp wave - + + Square wave - + Квадрат + Moog saw wave - + + Abs. sine wave - + + Random - Случайно + Случайно + Random smooth - + Случайное сглаживание 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. @@ -4274,10 +5721,12 @@ Knobs and other widgets in the Operators view have their own what's this -t Регуляторы и другие виджеты в Операторском виде имеют свои подписи "Что это?", можно получить по ним более детальную справку таким образом. + 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. @@ -4290,80 +5739,266 @@ Each modulation target has 4 knobs, one for each modulator. By default the knobs Каждая цель модуляции имеет 4 регулятора, один на каждый модулятор. По умолчанию регуляторы установлены на 0, то есть без модуляции. Включая регулятор на 1 ведёт к тому, что модулятор влияет на цель модуляции на столько на сколько возможно. Включая его на -1 делает то же, но с обратной модуляцией. - Mix Osc2 with Osc3 - Смешать Осц2 с Осц3 + + + + Volume + Громкость - Modulate amplitude of Osc3 with Osc2 - Модулировать амплитуду осциллятора 3 сигналом с осц2 + + + + Panning + - Modulate frequency of Osc3 with Osc2 - Модулировать частоту осциллятора 3 сигналом с осц2 + + + + Coarse detune + - Modulate phase of Osc3 with Osc2 - Модулировать фазу Осц3 осциллятором2 + + + + semitones + полутона + + + Finetune left + + + + + + + + cents + + + + + + Finetune right + + + + + + + Stereo phase offset + Сдвиг стерео фазы + + + + + + + + deg + + + + + Pulse width + Длительность импульса + + + + Send sync on pulse rise + + + + + Send sync on pulse fall + + + + + Hard sync oscillator 2 + + + + + Reverse sync oscillator 2 + + + + + Sub-osc mix + + + + + Hard sync oscillator 3 + + + + + Reverse sync oscillator 3 + + + + + + + + Attack + + + + + + Rate + + + + + + Phase + + + + + + Pre-delay + + + + + + Hold + + + + + + Decay + + + + + + Sustain + + + + + + Release + + + + + + Slope + + + + + Mix Osc2 with Osc3 + Смешать Осц2 с Осц3 + + + + Modulate amplitude of Osc3 with Osc2 + Модулировать амплитуду осциллятора 3 сигналом с осц2 + + + + Modulate frequency of Osc3 with Osc2 + Модулировать частоту осциллятора 3 сигналом с осц2 + + + + Modulate phase of Osc3 with Osc2 + Модулировать фазу Осц3 осциллятором2 + + + The CRS knob changes the tuning of oscillator 1 in semitone steps. Регулятор CRS меняет настройку осциллятора 1 в размере полутона. + The CRS knob changes the tuning of oscillator 2 in semitone steps. Регулятор CRS меняет настройку осциллятора 2 в размере полутона. + The CRS knob changes the tuning of oscillator 3 in semitone steps. Регулятор CRS меняет настройку осциллятора 3 в размере полутона. + + + + 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 и FTR меняют подстройку осциллятора для левого и правого канала соответственно. Они могут добавить стерео расстраивания осциллятора, которое расширяет стерео картину и создаёт иллюзию космоса. + + + The SPO knob modifies the difference in phase between left and right channels. Higher difference creates a wider stereo image. Регулятор SPO меняет фазовую разницу между левым и правым каналами. Высокая разница создаёт более широкую стерео картину. + 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. PW регулятор контролирует ширину пульсаций, также известную как рабочий цикл осциллятора 1. Осциллятор 1 это цифровой импульсный волновой генератор, он не воспроизводит сигнал с ограниченной полосой, это значит, что его можно использовать как слышимый осциллятор, но приведёт к наложению сигналов (или сглаживанию). Его можно использовать и как не слышимый источник синхронизирующего сигнала, для использования в синхронизации осцилляторов 2 и 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. Посылать синхронизацию при повышении: при включении, сигнал синхронизации посылается каждый раз когда состояние осциллятора 1 меняется с низкого на высокое, т.е. когда амплитуда меняется от -1 до 1. Тон осциллятора 1, фаза и ширина пульсаций может влиять на время синхронизации, но громкость не имеет эффекта. Сигнал синхронизации посылается независимо для левого и правого каналов. + 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. Посылать синхронизацию при падении: при включении, сигнал синхронизации посылается каждый раз когда состояние осциллятора 1 меняется с выского на низкое, т.е. когда амплитуда меняется от 1 до -1. Тон осциллятора 1, фаза и ширина пульсаций может влиять на время синхронизации, но громкость не имеет эффекта. Сигнал синхронизации посылается независимо для левого и правого каналов. + + Hard sync: Every time the oscillator receives a sync signal from oscillator 1, its phase is reset to 0 + whatever its phase offset is. Жесткая синхр. : Каждый раз при получении осциллятором сигнала синхронизации от осциллятора 1, его фаза сбрасывается до 0 + его граница фазы, какой бы она ни была. + + Reverse sync: Every time the oscillator receives a sync signal from oscillator 1, the amplitude of the oscillator gets inverted. Обратная синхронизация: Каждый раз при получении сигнала синхронизации от осциллятора 1, амплитуда осцилятора переворачивается. + Choose waveform for oscillator 2. Выбрать форму волны для осциллятора 2. + Choose waveform for oscillator 3's first sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. Выберите форму волны для первого доп. осциллятора осциллятора 3. Осциллятор 3 может мягко переходить между двумя разными волнами. + Choose waveform for oscillator 3's second sub-osc. Oscillator 3 can smoothly interpolate between two different waveforms. Выберите форму волны для второго доп. осциллятора осциллятора 3. Осциллятор 3 может мягко переходить между двумя разными волнами. + 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. SUB меняет смешивание двух доп. осяцилляторов осциллятора 3. Каждый доп. осц. может быть установлен для создания разных волн и осциллятор 3 может мягко переходить между ними. Все входящие модуляции для осциллятора 3 применяются на оба доп.осц./волны одним и тем же образом. + 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. @@ -4372,6 +6007,7 @@ Mix mode means no modulation: the outputs of the oscillators are simply mixed to Смешанный (Mix) режим значит без модуляции: выходы осцилляторов просто смешиваются друг с другом. + 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. @@ -4380,6 +6016,7 @@ AM means amplitude modulation: Oscillator 3's amplitude (volume) is modulat AM режим значит Амплитуда Модуляции: Осциллятор 2 модулирует амплитуду (громкость) осциллятора 3. + 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. @@ -4388,6 +6025,7 @@ FM means frequency modulation: Oscillator 3's frequency (pitch) is modulate FM (ЧМ) режим значит Частотная Модуляция: Осциллятор 2 модулирует частоту (pitch, тональность) осциллятора 3. Частота модуляции происходит в фазе модуляции, которая даёт более стабильный общий тон, чем "чистая" частотная модуляция. + 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. @@ -4396,6 +6034,7 @@ PM means phase modulation: Oscillator 3's phase is modulated by oscillator PM (ФМ) режим значит фазовая модуляция: Осциллятор 2 модулирует фазу осциллятора 3. Это отличается от частотной модуляции тем, что изменения фаз не суммируются. + 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... Выберите форму волны для LFO 1 (НизкоЧастотныйГенератор). @@ -4403,6 +6042,7 @@ PM (ФМ) режим значит фазовая модуляция: Осцил Сглаженная версия переходит между этими состояниями с косинусоидальной интерплояцией. Эти случайные режимы могут быть использованы, чтобы дать "жизни" вашим настройкам - добавить немного аналоговой непредсказуемости... + 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... Выберите форму волны для LFO 2 (НизкоЧастотныйГенератор). @@ -4410,77 +6050,153 @@ PM (ФМ) режим значит фазовая модуляция: Осцил Сглаженная версия переходит между этими состояниями с косинусоидальной интерплояцией. Эти случайные режимы могут быть использованы, чтобы дать "жизни" вашим настройкам - добавить немного аналоговой непредсказуемости... + + Attack causes the LFO to come on gradually from the start of the note. Атака отвечает за плавность поведения LFO от начала ноты. + + Rate sets the speed of the LFO, measured in milliseconds per cycle. Can be synced to tempo. Rate (Частота) устанавливает скорость LFO, измеряемую в миллисекундах за цикл. Может синхронизироваться с темпом. + + PHS controls the phase offset of the LFO. PHS контролирует сдвиг фазы LFO (НЧГ). + + PRE, or pre-delay, delays the start of the envelope from the start of the note. 0 means no delay. PRE предзадержка, задерживает старт огибающей от начала ноты. 0 значит без задержки. + + ATT, or attack, controls how fast the envelope ramps up at start, measured in milliseconds. A value of 0 means instant. ATT атака контролирует как быстро огибающая наращивается на старте, измеряясь в милисекундах. Значение 0 значит мгновенно. + + HOLD controls how long the envelope stays at peak after the attack phase. HOLD (УДЕРЖ) контролирует как долго огибающая остаётся на пике после фазы атаки. + + 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 (decay) затухание контролирует как быстро огибающая спадает с пикового значения, измеряется в милисекундах, как долго будет идти с пика до нуля. Реальное затухание может быть короче, если используется выдержка. + + 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 (sustain) выдержка, контролирует уровень огибающей. Затухание фазы не пойдёт ниже этого уровня пока нота удерживается. + + 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 (release) отпуск контролирует как долго нота отпускается, измеряясь в долготе падения от пика до нуля. Реальный отпуск может быть короче, в зависимости от фазы, в которой нота отпущена. + + 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. Регулятор наклона контролирует кривую или образ огибающей. Значение 0 создаёт прямые подъёмы и спады. Отрицательные величины создают кривые с замедленным началом, быстрым пиком и снова замедленным спадом. Позитивные значения создают кривые которые начинаются и кончаются быстро, но долбше остаются на пиках. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Modulation amount + + MultitapEchoControlDialog + Length - + + Step length: - + + Dry - + + Dry Gain: - + + Stages - + + Lowpass stages: - + + Swap inputs - + + Swap left and right input channel for reflections Поменять вход левого и правого канала для отзвуков @@ -4488,176 +6204,420 @@ PM (ФМ) режим значит фазовая модуляция: Осцил NesInstrument + Channel 1 Coarse detune - + + Channel 1 Volume - + Громкость 1 канала + Channel 1 Envelope length - + + Channel 1 Duty cycle - + + Channel 1 Sweep amount - + + Channel 1 Sweep rate - + + Channel 2 Coarse detune - + + Channel 2 Volume - + Громкость 2 канала + Channel 2 Envelope length - + + Channel 2 Duty cycle - + + Channel 2 Sweep amount - + + Channel 2 Sweep rate - + + Channel 3 Coarse detune - + + Channel 3 Volume - + Громкость 3 канала + Channel 4 Volume - + Громкость 4 канала + Channel 4 Envelope length - + + Channel 4 Noise frequency - + + Channel 4 Noise frequency sweep - + + Master volume - + Основная громкость + + + + Vibrato + Вибрато + + + + NesInstrumentView + + + + + + Volume + Громкость + + + + + + Coarse detune + + + + + + + Envelope length + + + + + Enable channel 1 + + + + + Enable envelope 1 + + + + + Enable envelope 1 loop + + + + + Enable sweep 1 + + + + + + Sweep amount + + + + + + Sweep rate + + + + + + 12.5% Duty cycle + + + + + + 25% Duty cycle + + + + + + 50% Duty cycle + + + + + + 75% Duty cycle + + + + + Enable channel 2 + + + + + Enable envelope 2 + + + + + Enable envelope 2 loop + + + + + Enable sweep 2 + + + + + Enable channel 3 + + + + + Noise Frequency + + + + + Frequency sweep + + + + + Enable channel 4 + + + + + Enable envelope 4 + + + + + Enable envelope 4 loop + + + + + Quantize noise frequency when using note frequency + + + + + Use note frequency for noise + + + Noise mode + + + + + Master Volume + + + + Vibrato - Вибрато + OscillatorObject + + Osc %1 waveform + Форма сигнала осциллятора %1 + + + + Osc %1 harmonic + Осц %1 гармонический + + + + Osc %1 volume Громкость осциллятора %1 + + Osc %1 panning Стереобаланс для осциллятора %1 - Osc %1 coarse detuning - Подстройка осциллятора %1 грубая - - + + Osc %1 fine detuning left Подстройка левого канала осциллятора %1 тонкая + + Osc %1 coarse detuning + Подстройка осциллятора %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 + + + PatchesDialog - Osc %1 waveform - Форма сигнала осциллятора %1 + + Qsynth: Channel Preset + - Osc %1 harmonic - Осц %1 гармонический + + Bank selector + + + + + Bank + + + + + Program selector + Выбор программ + + + + Patch + + + + + Name + Имя + + + + OK + ОК + + + + Cancel + Отмена 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) @@ -4665,32 +6625,42 @@ PM (ФМ) режим значит фазовая модуляция: Осцил PatternView - double-click to open this pattern in piano-roll -use mouse wheel to set velocity of a step - Чтобы открыть эту мелодию в нотном редакторе, дважды на нём щёлкните -Используйте колёсико мыши для установки громкости отдельного такта + + use mouse wheel to set velocity of a step + + + + + double-click to open in Piano Roll + Двойной щелчок открывает в Редакторе Нот + Open in piano-roll Открыть в редакторе нот + Clear all notes Очистить все ноты + Reset name Сбросить название + Change name Переименовать + Add steps Добавить такты + Remove steps Удалить такты @@ -4698,14 +6668,17 @@ use mouse wheel to set velocity of a step 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 контроллеры вершин не могут правильно подключаться. Пж. убедитесь, что контроллеры вершин правильно подсоединены и пересохраните этот файл, извините, за причинённые неудобства. @@ -4713,10 +6686,12 @@ use mouse wheel to set velocity of a step PeakControllerDialog + PEAK ПИК + LFO Controller Контроллер LFO @@ -4724,160 +6699,199 @@ use mouse wheel to set velocity of a step PeakControllerEffectControlDialog + BASE БАЗА + Base amount: Базовое значение: - Modulation amount: - Глубина модуляции: - - - Attack: - Вступление: - - - Release: - Убывание: - - + AMNT ГЛУБ + + Modulation amount: + Глубина модуляции: + + + MULT МНОЖ + Amount Multiplicator: Величина множителя: + ATCK ВСТУП + + Attack: + Вступление: + + + DCAY СПАД + + Release: + Убывание: + + + TRES - + + Treshold: - + PeakControllerEffectControls + Base value Опорное значение + Modulation amount Глубина модуляции - Mute output - Заглушить вывод - - + Attack Вступление + Release Убывание + + Treshold + + + + + Mute output + Заглушить вывод + + + Abs Value Абс значение + Amount Multiplicator Величина множителя - - Treshold - Порог - PianoRoll - Piano-Roll - no pattern - Нотный редактор - нет мелодии - - - Piano-Roll - %1 - Нотный редактор - %1 - - - Please open a pattern by double-clicking on it! - Откройте мелодию с помощью двойного щелчка мышью! - - - Last note - По посл. ноте - - - Note lock - Фиксация нот - - + Note Velocity Громкость нот + Note Panning Стереофония нот + Mark/unmark current semitone Отметить/Снять отметку с текущего полутона + + Mark/unmark all corresponding octave semitones + Отметить/Снять отметку со всех соответствующих октав полутонов + + + Mark current scale Отметить текущий подъём + Mark current chord Отметить текущий аккорд + Unmark all Снять выделение + + Select all notes on this key + Выбрать все ноты по этой кнопке + + + + Note lock + Фиксация нот + + + + Last note + По посл. ноте + + + No scale Без подъёма + No chord Убрать аккорды + Velocity: %1% Громкость %1% + Panning: %1% left Баланс: %1% лево + Panning: %1% right Баланс: %1% право + Panning: center Баланс: центр + + Please open a pattern by double-clicking on it! + Откройте мелодию с помощью двойного щелчка мышью! + + + + Please enter a new value between %1 and %2: Введите новое значение от %1 до %2: @@ -4885,118 +6899,176 @@ use mouse wheel to set velocity of a step PianoRollWindow + Play/pause current pattern (Space) Игра/Пауза текущей мелодии (Пробел) + Record notes from MIDI-device/channel-piano Записать ноты с музыкального инструмента (MIDI)/канала + Record notes from MIDI-device/channel-piano while playing song or BB track Записать ноты с цифрового музыкального инструмента (MIDI) во время воспроизведения композиции или дорожки Ритм-Баса + Stop playing of current pattern (Space) Остановить воспроизведение текущей мелодии (Пробел) + 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. Нажмите здесь, если вы хотите остановить воспроизведение текущей мелодии. + + Edit actions + + + + Draw mode (Shift+D) Режим рисования (Shift+D) + Erase mode (Shift+E) Режим стирания (Shift+E) + Select mode (Shift+S) Режим выбора нот (Shift+S) + 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 %1 to temporarily go into select mode. Режим рисования нот, в нём вы можете добавлять/перемещать и изменять длительность одиночных нот. Это режим по умолчанию и используется большую часть времени. Для включения этого режима можно использовать комбинацию клавиш Shift+D, удерживайте %1 для временного переключения в режим выбора. + 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 %1 in draw mode to temporarily use select mode. Режим выделения. В этом режиме можно выделять ноты, можно также удерживать %1 в режиме рисования, чтобы можно было на время войти в режим выделения. + 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>. + + Copy paste controls + Копировать-вставить управление + + + Cut selected notes (%1+X) Переместить выделенные ноты в буфер (%1+X) + Copy selected notes (%1+C) Копировать выделенные ноты в буфер (%1+X) + Paste notes from clipboard (%1+V) Вставить ноты из буфера (%1+V) + 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. При нажатии на эту кнопку ноты из буфера будут вставлены в первый видимый такт. + + Timeline controls + Управление временем + + + + Zoom and note controls + + + + 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. "Q" обозначает квантизацию и контролирует размер нотной сетки и контрольные точки притяжения. С меньшей величиной квантизации, можно рисовать короткие ноты в редаторе нот и более точно контролировать точки в Редакторе Автоматизации. + 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 Позволяет выбрть длину новой ноты. "Последняя Нота" значит, что LMMS будет использовать длину ноты, изменённой в последний раз + 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! Функция напрямую связана с контекстным меню на виртуальной клавиатуре слева в нотном редакторе. После того, как выбран масштаб в выпадающем меню, можно кликнуть правой кнопкой в виртуальной клавиатуре и выбрать "Mark Current Scale" (Отметить текущий масштаб). LMMS подсветит все ноты лежащие в выбранном масштабе для выбранной клавиши! + 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. Позволяет выбрать аккорд, который LMMS затем сможет нарисовать или подсветить. В этом меню можно найти ниболее популярные аккорды. После того, как вы выбрали аккорд, кликните в любом месте, чтобы поставить его и правым кликом по виртуальной клавиатуре открывается контекстное меню и подсветка аккорда. Для возврата в режим одной ноты нужно выбрать "Без аккорда" в этом выпадающем меню. - - - PianoView + + Piano-Roll - %1 + + + + + Piano-Roll - no pattern + + + + + PianoView + + Base note Опорная нота @@ -5004,315 +7076,306 @@ use mouse wheel to set velocity of a step Plugin + Plugin not found Модуль не найден - The plugin "%1" wasn't found or could not be loaded! + + 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! - ЛММС плагин %1 не имеет описания плагина с именем %2! - PluginBrowser + Instrument plugins Плагины инструментов + Instrument browser Обзор инструментов + Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track. Вы можете переносить нужные вам инструменты из этой панели в музыкальный, ритм-бас редактор или в существующую дорожку инструмента. + + PluginFactory + + + Plugin not found. + Плагин не найден + + + + LMMS plugin %1 does not have a plugin descriptor named %2! + ЛММС плагин %1 не имеет описания плагина с именем %2! + + ProjectNotes + Project notes Заметки к проекту + Put down your project notes here. Здесь вы можете держать заметки к своему проекту. + Edit Actions Правка + &Undo &U Отменить + %1+Z %1+Z + &Redo &R Повторить + %1+Y %1+Y + &Copy &C Копировать + %1+C %1+C + Cu&t &t Вырезать + %1+X %1+X + &Paste &P Вставить + %1+V %1+V + Format Actions Форматирование + &Bold &b Полужирный + %1+B %1+B + &Italic &i Курсив + %1+I %1+I + &Underline &U Подчеркнутый + %1+U %1+U + &Left &L По левому краю + %1+L %1+L + C&enter По &центру + %1+E - + + &Right - По &правому краю + + %1+R - + + &Justify - По &ширине + + %1+J - + + &Color... - &Цвет... + 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 Файл: %1 + + + File: + Файл: + RenameDialog + Rename... Переименовать... @@ -5320,120 +7383,142 @@ Reason: "%2" SampleBuffer + Open audio file Открыть звуковой файл + + All Audio-Files (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw) + Все аудио файлы (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw) + + + 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 (<%1> + middle click) Заглушить/включить (<%1> + средняя кнопка мыши) - - Set/clear record - Установить/очистить запись - SampleTrack - Sample track - Дорожка записи - - + Volume Громкость + Panning Баланс + + + + Sample track + Дорожка записи + SampleTrackView + Track volume Громкость дорожки + Channel volume: Громкость канала: + VOL ГРОМ + Panning Баланс + Panning: Баланс: + PAN БАЛ @@ -5441,212 +7526,327 @@ Reason: "%2" 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 По умолчанию сжимать файлы проектов + One instrument track window mode Режим окна одной инструментальной дорожки + HQ-mode for output audio-device Режим высокого качества для устройства вывода звука + Compact track buttons Ужать кнопки дорожки + Sync VST plugins to host playback Синхронизировать VST плагины с хостом воспроизведения + Enable note labels in piano roll Включить обозначение нот в музыкальном редакторе + Enable waveform display by default Включить отображение формы звуков по умолчанию + Keep effects running even without input Продолжать работу эффектов даже без входящего сигнала + Create backup file when saving a project Создать запасной файл при сохранении проекта + + Reopen last project on start + Открыть последний проект на старте + + + LANGUAGE ЯЗЫК + + Paths Пути - LMMS working directory - Рабочий каталог LMMS + + Directories + Папки - VST-plugin directory - Каталог модулей VST + + LMMS working directory + Рабочий каталог LMMS - Artwork directory - Каталог с элементами оформления + + Themes directory + Папка тем + Background artwork Фоновое изображение + FL Studio installation directory Каталог установки FL Studio - LADSPA plugin paths - Пути модулей LADSPA + + VST-plugin directory + Каталог модулей VST + + + + GIG directory + Папка GIG + + + + SF2 directory + Папка SF2 + + + + LADSPA plugin directories + Папка плагинов LADSPA + STK rawwave directory Каталог STK rawwave + Default Soundfont File Основной Soundfont файл + + Performance settings Параметры производительности + + Auto save + Автосохранение + + + + Enable auto save feature + Включить функцию авто-сохранения + + + UI effects vs. performance Визуальные эффекты/производительность + Smooth scroll in Song Editor Плавная прокрутка в музыкальном редакторе - Enable auto save feature - Включить функцию авто-сохранения - - + Show playback cursor in AudioFileProcessor Показывать указатель воспроизведения в процессоре аудио файлов (AFP) + + 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! Учтите, что большинство настроек не вступят в силу до перезапуска ЛММС! + 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 GIG directory + Выберите вашу папку GIG + + + + Choose your SF2 directory + Выберите вашу папку SF2 + + + Choose your VST-plugin directory Выбор своего каталога для модулей VST + Choose artwork-theme directory Выбор каталога с темой оформления для LMMS + Choose FL Studio installation directory Выбор каталога установленной FL Studio + Choose LADSPA plugin directory Выбор каталога с модулями LADSPA + Choose STK rawwave directory Выбор каталога STK rawwave + Choose default SoundFont Выбрать главный SoundFont + Choose background artwork Выбрать фоновое изображение + + minutes + + + + + minute + + + + + Auto save interval: %1 %2 + Интервал автосохранения: %1 %2 + + + + Set the time between automatic backup to %1. +Remember to also save your project manually. + Установить время между автоматическим бэкапом на %1. +Не забывайте сохранять проект вручную. + + + 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 и другие. В нижней части окна настройки можно задать специфические параметры выбранного интерфейса. @@ -5654,74 +7854,101 @@ Latency: %2 ms 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 Импорт файла + MIDI sequences MiDi последовательности + FL Studio projects FL Studio проекты + Hydrogen projects Hydrogen проекты + All file types Все типы файлов + + Empty project Пустой проект + + This project is empty so exporting makes no sense. Please put some items into Song Editor first! Проект ничего не содержит, так что и экспортировать нечего. Сначала добавьте хотя бы одну дорожку в музыкальном редакторе! + Select directory for writing exported tracks... Выберите папку для записи экспортированных дорожек... + + untitled Неназванное + + Select file for project-export... Выбор файла для экспорта проекта... + + MIDI File (*.mid) + + + + The following errors occured while loading: Следующие ошибки возникли при загрузке: @@ -5729,134 +7956,197 @@ Latency: %2 ms SongEditor + Could not open file Не могу открыть файл - Could not write file - Не могу записать файл - - + 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, вероятно, нет разрешений на его чтение. Пж. убедитесь, что есть по крайней мере права на чтение этого файла и попробуйте ещё раз. + + Could not write file + Не могу записать файл + + + + 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 для записи, возможно, нет разрешений на запись в этот файл, пж. удостоверьтесь, что есть доступ к этому файлу и попробуйте снова. + + + Error in file Ошибка в файле + The file %1 seems to contain errors and therefore can't be loaded. Файл %1 возможно содержит ошибки из-за которых не может загрузиться. + + Project Version Mismatch + Расходятся версии проектов + + + + This %1 was created with LMMS version %2, but version %3 is installed + %1 был создан в ЛММС версии %2, а установлена версия %3 + + + 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 для записи, возможно, нет разрешений на запись в этот файл, пж. удостоверьтесь, что есть доступ к этому файлу и попробуйте снова. - SongEditorWindow + Song-Editor Музыкальный редактор + Play song (Space) Начать воспроизведение (Пробел) + Record samples from Audio-device Записать сэмпл со звукового устройства + Record samples from Audio-device while playing song or BB track Записать сэмпл с аудио-устройства во время воспроизведения в музыкальном или ритм/бас редакторе + Stop 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. + Нажмите, чтобы прослушать созданную мелодию. Воспроизведение начнётся с позиции курсора (зелёный треугольник); вы можете двигать его во время проигрывания. + + + + Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song. + Нажмите сюда, если вы хотите остановить воспроизведение мелодии. Курсор при этом будет установлен на начало композиции. + + + + Track actions + + + + Add beat/bassline Добавить ритм/бас + Add sample-track Добавить дорожку записи + Add automation-track Добавить дорожку автоматизации + + Edit actions + + + + 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. - Нажмите, чтобы прослушать созданную мелодию. Воспроизведение начнётся с позиции курсора (зелёный треугольник); вы можете двигать его во время проигрывания. + + Timeline controls + Управление временем - Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song. - Нажмите сюда, если вы хотите остановить воспроизведение мелодии. Курсор при этом будет установлен на начало композиции. + + Zoom controls + Приблизить управление SpectrumAnalyzerControlDialog + Linear spectrum Линейный спектр + Linear Y axis Линейная ось ординат (Y) @@ -5864,14 +8154,17 @@ Latency: %2 ms SpectrumAnalyzerControls + Linear spectrum Линейный спектр + Linear Y axis Линейная ось ординат (Y) + Channel mode Режим канала @@ -5879,6 +8172,8 @@ Latency: %2 ms TabWidget + + Settings for %1 Настройки для %1 @@ -5886,74 +8181,93 @@ Latency: %2 ms TempoSyncKnob + + Tempo Sync Синхронизация темпа + No Sync Синхронизации нет + Eight beats Восемь ударов (две ноты) + Whole note Целая нота + Half note Полунота + Quarter note Четверть ноты + 8th note Восьмая ноты + 16th note 1/16 ноты + 32nd note 1/32 ноты + Custom... Своя... + 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 ноты @@ -5961,6 +8275,7 @@ Latency: %2 ms TimeDisplayWidget + click to change time units нажми для изменения единиц времени @@ -5968,34 +8283,43 @@ Latency: %2 ms TimeLineWidget + 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 <%1> to disable magnetic loop points. Нажмите <%1>, чтобы убрать прилипание точек петли. + Hold <Shift> to move the begin loop point; Press <%1> to disable magnetic loop points. Зажмите <Shift> чтобы сдвинуть начало точек петли; Нажмите <%1>, чтобы убрать прилипание точек петли. @@ -6003,10 +8327,12 @@ Latency: %2 ms Track + Mute Тихо + Solo Соло @@ -6014,96 +8340,122 @@ Latency: %2 ms TrackContainer + + Importing FLP-file... + Импортирую файл FLP... + + + + + + Cancel + Отменить + + + + + + Please wait... + Подождите, пожалуйста... + + + + Importing MIDI-file... + Импортирую файл MIDI... + + + Couldn't import file Не могу импортировать файл - Couldn't find a filter for importing file %1. + + 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. + + 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... - TrackContentObject - Muted - Тихо + + Mute + TrackContentObjectView + Current position Текущая позиция + + Hint Подсказка + Press <%1> and drag to make a copy. Нажмите <%1> и тащите мышью, чтобы создать копию. + Current length Текущая длительность + Press <%1> for free resizing. Для свободного изменения размера нажмите <%1>. + %1:%2 (%3:%4 to %5:%6) %1:%2 (от %3:%4 до %5:%6) + Delete (middle mousebutton) Удалить (средняя кнопка мыши) + Cut Вырезать + Copy Копировать + Paste Вставить + Mute/unmute (<%1> + middle click) Тихо/громко (<%1> + middle click) @@ -6111,46 +8463,63 @@ Please make sure you have read-permission to the file and the directory containi TrackOperationsWidget + Press <%1> while clicking on move-grip to begin a new drag'n'drop-action. Зажмите <Сtrl> и нажимайте мышь во время движения, чтобы начать новую переброску. + Actions for this track Действия для этой дорожки + Mute Тихо + + Solo Соло + Mute this track Заглушить эту дорожку + Clone this track Клонировать дорожку + Remove this track Удалить дорожку + Clear this track Очистить эту дорожку + FX %1: %2 ЭФ %1: %2 + + Assign to new FX Channel + Назначить на другой канал ЭФфектов + + + Turn all recording on Включить всё на запись + Turn all recording off Выключить всю запись @@ -6158,142 +8527,179 @@ Please make sure you have read-permission to the file and the directory containi TripleOscillatorView + Use phase modulation for modulating oscillator 1 with oscillator 2 Модулировать фазу осциллятора 2 сигналом с 1 + Use amplitude modulation for modulating oscillator 1 with oscillator 2 Модулировать амплитуду осциллятора 2 сигналом с первого + Mix output of oscillator 1 & 2 Смешать выводы 1 и 2 осцилляторов + Synchronize oscillator 1 with oscillator 2 Синхронизировать первый осциллятор по второму + Use frequency modulation for modulating oscillator 1 with oscillator 2 Модулировать частоту осциллятора 2 сигналом с 1 + Use phase modulation for modulating oscillator 2 with oscillator 3 Модулировать фазу осциллятора 3 сигналом с 2 + Use amplitude modulation for modulating oscillator 2 with oscillator 3 Модулировать амплитуду осциллятора 3 сигналом с 2 + Mix output of oscillator 2 & 3 Совместить вывод осцилляторов 2 и 3 + Synchronize oscillator 2 with oscillator 3 Синхронизировать осциллятор 2 и 3 + Use frequency modulation for modulating oscillator 2 with oscillator 3 Модулировать частоту осциллятора 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 24 semitones (2 octaves) up and down. This is useful for creating sounds with a chord. Грубая регулировка подстройки осциллятора %1. Возможна подстройка до 24 полутонов (до 2 октавы) вверх и вниз. Полезно для создания аккордов. + 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. Задать форму сигнала. @@ -6301,10 +8707,12 @@ Please make sure you have read-permission to the file and the directory containi VersionedSaveDialog + Increment version number Увеличивающийся номер версии + Decrement version number Понижающийся номер версии @@ -6312,156 +8720,196 @@ Please make sure you have read-permission to the file and the directory containi 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 - Предустановка + + Show/hide GUI + Показать/скрыть интерфейс - by - от + + Click here to show or hide the graphical user interface (GUI) of your VST-plugin. + Скрывает/показывает графический пользовательский интерфейс (GUI) выбранного модуля VST. - - VST plugin control - - управление VST плагином + + Turn off all notes + Выключить все ноты - - - VisualizationWidget - click to enable/disable visualization of master-output - Нажмите, чтобы включить/выключить визуализацию главного вывода + + Open VST-plugin + Открыть модуль VST - Click to enable - Нажать для включения + + DLL-files (*.dll) + Бибилиотеки DLL (*.dll) - - - VstEffectControlDialog - Show/hide + + EXE-files (*.exe) + Программы EXE (*.exe) + + + + No VST-plugin loaded + Модуль VST не загружен + + + + Preset + Предустановка + + + + by + от + + + + - VST plugin control + - управление VST плагином + + + + VisualizationWidget + + + click to enable/disable visualization of master-output + Нажмите, чтобы включить/выключить визуализацию главного вывода + + + + Click to enable + Нажать для включения + + + + 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 /> @@ -6469,339 +8917,509 @@ Please make sure you have read-permission to the file and the directory containi VstPlugin - Loading plugin - Загрузка модуля + + + The VST plugin %1 could not be loaded. + VST плагин %1 не может быть загружен. + 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... - Пожалуйста, подождите пока грузится VST плагин... + + Loading plugin + Загрузка модуля - The VST plugin %1 could not be loaded. - VST плагин %1 не может быть загружен. + + Please wait while loading VST plugin... + Пожалуйста, подождите пока грузится VST плагин... 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 + + + + + Volume + Громкость + + + + + + + Panning + + + + + + + + Freq. multiplier + + + + + + + + Left detune + + + + + + + + + + + + cents + + + + + + + + Right detune + + + + + A-B Mix + + + + + Mix envelope amount + + + + + Mix envelope attack + + + + + Mix envelope hold + + + + + Mix envelope decay + + + + + Crosstalk + + + + 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 Модулировать амплитуду A1 сигналом с A2 + Ring-modulate A1 and A2 Кольцевая модуляция А1 и А2 + Modulate phase of A1 with output of A2 Модулировать фазу A1 сигналом с A2 + Mix output of B2 to B1 - + + Modulate amplitude of B1 with output of B2 Модулировать амплитуду B1 сигналом с B2 + Ring-modulate B1 and B2 Кольцевая модуляция B1 и B2 + Modulate phase of B1 with output of B2 Модулировать фазу B1 сигналом с 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 управления @@ -6809,128 +9427,158 @@ Please make sure you have read-permission to the file and the directory containi 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 управления + + + Show GUI + Показать интерфейс + + + + Click here to show or hide the graphical user interface (GUI) of ZynAddSubFX. + Скрыть или показать графический интерфейс ZynAddSubFX. + audioFileProcessor + Amplify Усиление + Start of sample Начало записи + End of sample Конец записи - Reverse sample - Перевернуть запись + + Loopback point + Точка петли - Stutter - Запинание + + Reverse sample + Перевернуть запись - Loopback point - + + Loop mode + Режим повтора - Loop mode - Режим повтора + + Stutter + Запинание + Interpolation mode - + + None - + + Linear - + + Sinc - + + Sample not found: %1 - + bitInvader + Samplelength Длительность @@ -6938,74 +9586,92 @@ Please make sure you have read-permission to the file and the directory containi 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 Нормализовать @@ -7013,90 +9679,112 @@ Please make sure you have read-permission to the file and the directory containi 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 Нажмите здесь, чтобы увеличить амплитуду графа волны на 1дБ + Decrease wavegraph amplitude by 1dB - + + Click here to decrease wavegraph amplitude by 1dB Нажмите здесь, чтобы снизить амплитуду графа волны на 1дБ + 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 Обрабатывает каждый стерео канал независимо @@ -7104,29 +9792,48 @@ Please make sure you have read-permission to the file and the directory containi dynProcControls + Input gain - + Входная мощность + Output gain - + Выходная мощность + Attack time - + + Release time - + + Stereo mode - + + + + + fxLineLcdSpinBox + + + Assign to: + + + + + New FX Channel + graphModel + Graph Граф @@ -7134,131 +9841,164 @@ Please make sure you have read-permission to the file and the directory containi kickerInstrument + Start frequency Начальная частота + End frequency Конечная частота - Gain - Усиление - - + Length - + + Distortion Start - + + Distortion End - + + + + + Gain + Усиление + Envelope Slope - + + Noise - Шум + Шум + Click - + + Frequency Slope - + + Start from note - + + End to note - + kickerInstrumentView + Start frequency: Начальная частота: + End frequency: Конечная частота: - Gain: - Усиление: + + Frequency Slope: + - Frequency Slope: - + + Gain: + Усиление: + Envelope Length: - + + Envelope Slope: - + + Click: - + + Noise: - + + Distortion Start: - + + Distortion End: - + 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. +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. +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. +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. Они разделены на пять категорий, в зависимости от названий и типов портов. @@ -7276,6 +10016,7 @@ Double clicking any of the plugins will bring up information on the ports. + Type: Тип: @@ -7283,10 +10024,12 @@ Double clicking any of the plugins will bring up information on the ports. ladspaDescription + Plugins Модули + Description Описание @@ -7294,113 +10037,141 @@ Double clicking any of the plugins will bring up information on the ports. ladspaPortDialog + + Ports + Порты + + + 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 - Акцент + + Distortion + Искажение - Dead - Глухо + + Waveform + Форма сигнала + Slide Decay Сдвиг затухания - Distortion - Искажение + + Slide + Сдвиг - Waveform - Форма сигнала + + Accent + Акцент + + + + Dead + Глухо + 24dB/oct Filter 24дБ/окт фильтр @@ -7408,364 +10179,301 @@ Double clicking any of the plugins will bring up information on the ports. 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. Нажать здесь для пилообразной муг (moog) волны с ограниченной полосой. - lb303Synth + malletsInstrument - VCF Cutoff Frequency - Частота среза VCF + + Hardness + Жёсткость - VCF Resonance - Резонанс VCF + + Position + Положение - VCF Envelope Mod - Мод Огибающей VCF + + Vibrato Gain + Усиление вибрато - VCF Envelope Decay - Спад огибающей VCF + + Vibrato Freq + Частота вибрато - Distortion - Искажение + + Stick Mix + Сведение ручек - Waveform - Форма сигнала + + Modulator + Модулятор - Slide Decay - Сдвиг спада + + Crossfade + Переход - Slide - Сдвиг + + LFO Speed + Скорость LFO - Accent - Акцент + + LFO Depth + Глубина LFO - Dead - Глухо + + ADSR + ADSR - 24dB/oct Filter - 24дБ/окт фильтр + + Pressure + Давление - - - lb303SynthView - Cutoff Freq: - Частота среза: + + Motion + Движение - CUT - СРЕЗ + + Speed + Скорость - Resonance: - Резонанс: + + Bowed + Наклон - RES - РЕЗ + + Spread + Разброс - Env Mod: - Мод Огибающей: + + Marimba + Маримба - ENV MOD - МОД ОГИБ + + Vibraphone + Вибрафон - Decay: - Спад: + + Agogo + Дискотека - DEC - СПАД + + Wood1 + Дерево1 - 303-es-que, 24dB/octave, 3 pole filter - 303-ий, 24дБ/октаву, 3-польный фильтр + + Reso + Резо - Slide Decay: - Сдвиг спада: + + Wood2 + Дерево2 - SLIDE - Сдвиг + + Beats + Удары - DIST: - ИСК: + + Two Fixed + Два фиксированных - DIST - ИСК + + Clump + Тяжёлая поступь - WAVE: - Волна: + + Tubular Bells + Трубные колокола - 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 - Равномерные полосы + + Uniform Bar + Равномерные полосы + Tuned Bar Подстроенные полосы + Glass Стекло + Tibetan Bowl Тибетские шары @@ -7773,130 +10481,173 @@ Double clicking any of the plugins will bring up information on the ports. malletsInstrumentView + Instrument Инструмент + Spread Разброс + Spread: Разброс: + + Missing files + Файлы отсутствуют + + + + Your Stk-installation seems to be incomplete. Please make sure the full Stk-package is installed! + Похоже устновка Stk прошла не полностью. Пожалуйста, убедитесь, что пакет Stk полностью установлен! + + + 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: Вибрато: @@ -7904,30 +10655,38 @@ Double clicking any of the plugins will bring up information on the ports. 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 эффектов. @@ -7935,30 +10694,39 @@ Double clicking any of the plugins will bring up information on the ports. 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 плагина. @@ -7966,129 +10734,187 @@ Double clicking any of the plugins will bring up information on the ports. 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 Глубина тремоло + + opl2instrumentView + + + + Attack + + + + + + Decay + + + + + + Release + + + + + + Frequency multiplier + + + organicInstrument + Distortion Искажение + Volume Громкость @@ -8096,50 +10922,63 @@ Double clicking any of the plugins will bring up information on the ports. organicInstrumentView + Distortion: Искажение: + + The distortion knob adds distortion to the output of the instrument. + Дисторшн добавляет искажения к выводу инструмента. + + + Volume: Громкость: + + The volume knob controls the volume of the output of the instrument. It is cumulative with the instrument window's volume control. + Регулятор громкости вывода инструмента, суммируется с регулятором громкости окна инструмента. + + + Randomise Случайно + + The randomize button randomizes all knobs except the harmonics,main volume and distortion knobs. + Кнопка рандомизации случайно устанавливает все регуляторы, кроме гармоник, основной громкости и регулятора искажений (дисторшн). + + + + 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 Осц %1 стерео расстройка + + cents + сотые + + + Osc %1 harmonic: Осц %1 гармоника: @@ -8147,552 +10986,697 @@ Double clicking any of the plugins will bring up information on the ports. 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) От первого канала к 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 Время развёртки + + 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: Громкость квадратного канала 1: + + Square Channel 1 Volume + Громкость квадратного канала 1 + + + + + Length of each step in sweep: - Длина каждого такта в развёртке: + Длина каждого такта в развёртке: + + + Length of each step in sweep - Длина каждого такта в развёртке + Длина каждого такта в распространении + + + + + + The delay between step change + Задержка между изменениями такта + 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 - - no description - описание отсутствует - + patchesDialog - VST-host for using VST(i)-plugins within LMMS - VST - хост для поддержки модулей VST(i) в LMMS + + Qsynth: Channel Preset + - Additive Synthesizer for organ-like sounds - Синтезатор звуков вроде органа + + Bank selector + - Filter for importing MIDI-files into LMMS - Фильтр для включения файла MIDI в проект ЛММС + + Bank + - plugin for using arbitrary LADSPA-effects inside LMMS. - Модуль, позволяющий использовать в LMMS любые эффекты LADSPA. + + Program selector + Выбор программ - Tuneful things to bang on - Мелодичные ударные - - - Vibrating string modeler - Эмуляция вибрирующих струн + + Patch + - Filter for importing FL Studio projects into LMMS - Фильтр для импортирования файлов FL Stuio + + Name + Имя - Incomplete monophonic imitation tb303 - Незавершённая монофоническая имитация tb303 + + OK + ОК - Plugin for enhancing stereo separation of a stereo input file - Модуль, усиливающий разницу между каналами стереозаписи + + Cancel + Отмена + + + pluginBrowser - Emulation of GameBoy (TM) APU - Эмуляция GameBoy (TM) + + A native amplifier plugin + Родной плагин усилителя - Plugin for freely manipulating stereo output - Модуль для произвольного управления стереовыходом + + Simple sampler with various settings for using samples (e.g. drums) in an instrument-track + Простой сэмплер с разными установками по использованию сэмплов (как барабаны) в инструментальной дорожке - Emulation of the MOS6581 and MOS8580 SID. -This chip was used in the Commodore 64 computer. - Эмуляция MOS6581 и MOS8580. -Использовалось на компьютере Commodore 64. + + Boost your bass the fast and simple way + Накачай свой бас быстро и просто - List installed LADSPA plugins - Показать установленные модули LADSPA + + Customizable wavetable synthesizer + Настраиваемый синтезатор звукозаписей (wavetable) - Player for SoundFont files - Проигрыватель файлов SoundFont + + An oversampling bitcrusher + - Plugin for controlling knobs with sound peaks - Модуль для установки значений регуляторов по пикам громкости + + Carla Patchbay Instrument + - GUS-compatible patch instrument - Патч-инструмент, совместимый с GUS + + Carla Rack Instrument + Карла инструментальная стойка - Customizable wavetable synthesizer - Настраиваемый синтезатор звукозаписей (wavetable) + + A 4-band Crossover Equalizer + - Embedded ZynAddSubFX - Встроенный ZynAddSubFX + + A native delay plugin + - 2-operator FM Synth - 2-режимный синт модуляции частот (FM synth) + + A Dual filter plugin + - Filter for importing Hydrogen files into LMMS - Фильтр для импорта Hydrogen файлов в LMMS + + plugin for processing dynamics in a flexible way + - LMMS port of sfxr - LMMS порт SFXR + + A native eq plugin + Родной плагин эквалайзера - Monstrous 3-oscillator synth with modulation matrix - Монстро 3-осциляторный синт с матрицей модуляции + + A native flanger plugin + - Three powerful oscillators you can modulate in several ways - Три мощных осциллятора, которые можно модулировать несколькими способами + + Filter for importing FL Studio projects into LMMS + Фильтр для импортирования файлов FL Stuio - A native amplifier plugin - Родной плагин усилителя + + Player for GIG files + - Carla Rack Instrument - Карла инструментальная стойка + + Filter for importing Hydrogen files into LMMS + Фильтр для импорта Hydrogen файлов в LMMS - 4-oscillator modulatable wavetable synth - + + Versatile drum synthesizer + - plugin for waveshaping - Плагин для сглаживания волн + + List installed LADSPA plugins + Показать установленные модули LADSPA - Boost your bass the fast and simple way - Накачай свой бас быстро и просто + + plugin for using arbitrary LADSPA-effects inside LMMS. + Модуль, позволяющий использовать в LMMS любые эффекты LADSPA. - Versatile drum synthesizer - + + Incomplete monophonic imitation tb303 + Незавершённая монофоническая имитация tb303 - Simple sampler with various settings for using samples (e.g. drums) in an instrument-track - + + Filter for exporting MIDI-files from LMMS + - plugin for processing dynamics in a flexible way - + + Filter for importing MIDI-files into LMMS + Фильтр для включения файла MIDI в проект ЛММС - Carla Patchbay Instrument - + + Monstrous 3-oscillator synth with modulation matrix + Монстро 3-осциляторный синт с матрицей модуляции - plugin for using arbitrary VST effects inside LMMS. - + + A multitap echo delay plugin + - Graphical spectrum analyzer plugin - + + A NES-like synthesizer + Синтезатор типа NES - A NES-like synthesizer - + + 2-operator FM Synth + 2-режимный синт модуляции частот (FM synth) - Player for GIG files - + + Additive Synthesizer for organ-like sounds + Синтезатор звуков вроде органа - A multitap echo delay plugin - + + Emulation of GameBoy (TM) APU + Эмуляция GameBoy (TM) - A native flanger plugin - + + GUS-compatible patch instrument + Патч-инструмент, совместимый с GUS - A native delay plugin - + + Plugin for controlling knobs with sound peaks + Модуль для установки значений регуляторов по пикам громкости - An oversampling bitcrusher - + + Player for SoundFont files + Проигрыватель файлов SoundFont - A native eq plugin - Родной плагин эквалайзера + + LMMS port of sfxr + LMMS порт SFXR - A 4-band Crossover Equalizer - + + Emulation of the MOS6581 and MOS8580 SID. +This chip was used in the Commodore 64 computer. + Эмуляция MOS6581 и MOS8580. +Использовалось на компьютере Commodore 64. - - - setupWidget - JACK (JACK Audio Connection Kit) - + + Graphical spectrum analyzer plugin + Плагин графического анализа спектра - OSS Raw-MIDI (Open Sound System) - + + Plugin for enhancing stereo separation of a stereo input file + Модуль, усиливающий разницу между каналами стереозаписи - SDL (Simple DirectMedia Layer) - + + Plugin for freely manipulating stereo output + Модуль для произвольного управления стереовыходом - PulseAudio - PulseAudio (большая задержка!) + + Tuneful things to bang on + Мелодичные ударные - Dummy (no MIDI support) - Dummy (без поддержки MIDI) + + Three powerful oscillators you can modulate in several ways + Три мощных осциллятора, которые можно модулировать несколькими способами - ALSA Raw-MIDI (Advanced Linux Sound Architecture) - + + VST-host for using VST(i)-plugins within LMMS + VST - хост для поддержки модулей VST(i) в LMMS - PortAudio - + + Vibrating string modeler + Эмуляция вибрирующих струн - Dummy (no sound output) - Dummy (без вывода звука) + + plugin for using arbitrary VST effects inside LMMS. + Плагин для использования любых VST эффектов в ЛММС - ALSA (Advanced Linux Sound Architecture) - + + 4-oscillator modulatable wavetable synth + - OSS (Open Sound System) - + + plugin for waveshaping + Плагин для сглаживания волн - WinMM MIDI - + + Embedded ZynAddSubFX + Встроенный ZynAddSubFX - ALSA-Sequencer (Advanced Linux Sound Architecture) - + + no description + описание отсутствует sf2Instrument + Bank Банк + Patch Патч + Gain Усиление + Reverb Эхо + Reverb Roomsize Объём эха + Reverb Damping Затухание эха + Reverb Width Долгота эха + Reverb Level Уровень эха + Chorus Хор (припев) + Chorus Lines Линии хора + Chorus Level Уровень хора + Chorus Speed Скорость хора + Chorus Depth Глубина хора + A soundfont %1 could not be loaded. Soundfont %1 не удаётся загрузить. @@ -8700,75 +11684,92 @@ This chip was used in the Commodore 64 computer. 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) @@ -8776,6 +11777,7 @@ This chip was used in the Commodore 64 computer. sfxrInstrument + Wave Form Форма волны @@ -8783,26 +11785,32 @@ This chip was used in the Commodore 64 computer. sidInstrument + Cutoff Срез + Resonance Усиление + Filter type Тип фильтра + Voice 3 off Голос 3 откл + Volume Громкость + Chip model Модель чипа @@ -8810,134 +11818,172 @@ This chip was used in the Commodore 64 computer. 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-й осциллятор выдаёт нулевой сигнал (пока флажок не снимется). @@ -8945,10 +11991,12 @@ This chip was used in the Commodore 64 computer. stereoEnhancerControlDialog + WIDE ШИРЕ + Width: Ширина: @@ -8956,6 +12004,7 @@ This chip was used in the Commodore 64 computer. stereoEnhancerControls + Width Ширина @@ -8963,18 +12012,22 @@ This chip was used in the Commodore 64 computer. stereoMatrixControlDialog + Left to Left Vol: От левого на левый: + Left to Right Vol: От левого на правый: + Right to Left Vol: От правого на левый: + Right to Right Vol: От правого на правый: @@ -8982,18 +12035,22 @@ This chip was used in the Commodore 64 computer. stereoMatrixControls + Left to Left От левого на левый + Left to Right От левого на правый + Right to Left От правого на левый + Right to Right От правого на правый @@ -9001,10 +12058,12 @@ This chip was used in the Commodore 64 computer. vestigeInstrument + Loading plugin Загрузка модуля + Please wait while loading VST-plugin... Подождите, пока загрузится модуль VST... @@ -9012,42 +12071,52 @@ This chip was used in the Commodore 64 computer. 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 @@ -9055,95 +12124,117 @@ This chip was used in the Commodore 64 computer. 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 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 'S' button will smooth the waveform. The 'N' button will normalize the waveform. Редактор формы позволяет явно указать профиль струны в начальный момент времени, либо её начальный импульс (в заисимости от состояния переключателя „Imp“). @@ -9156,15 +12247,16 @@ The 'N' button will normalize the waveform. Кнопка '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. + + 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. +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. +'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 '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“ моделирует до девяти независимых одновременно звучащих струн. @@ -9186,82 +12278,102 @@ The LED in the lower right corner of the waveform editor determines whether the Индикатор-переключатель слева внизу определяет, включена ли текущая струна. + 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. Нажмите, чтобы нормализовать сигнал. @@ -9269,46 +12381,57 @@ The LED in the lower right corner of the waveform editor determines whether the 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 тест @@ -9316,58 +12439,72 @@ The LED in the lower right corner of the waveform editor determines whether the 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 Повыситьить амплитуду графа волны на 1дБ + Decrease graph amplitude by 1dB - + + Click here to decrease wavegraph amplitude by 1dB Снизить амплитуду графа волны на 1дБ + Clip input - + + Clip input signal to 0dB Срезать входной сигнал до 0дБ @@ -9375,12 +12512,14 @@ The LED in the lower right corner of the waveform editor determines whether the waveShaperControls + Input gain Входная мощность + Output gain Выходная мощность - + \ No newline at end of file diff --git a/data/locale/sr.ts b/data/locale/sr.ts new file mode 100644 index 00000000000..43fac091537 --- /dev/null +++ b/data/locale/sr.ts @@ -0,0 +1,12430 @@ + + + AboutDialog + + + About LMMS + + + + + LMMS + + + + + Version %1 (%2/%3, Qt %4, %5) + + + + + About + + + + + LMMS - easy music production for everyone + + + + + Copyright © %1 + + + + + <html><head/><body><p><a href="http://lmms.io"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.io</span></a></p></body></html> + + + + + Authors + + + + + Involved + + + + + Contributors ordered by number of commits: + + + + + 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 + + + + + AmplifierControlDialog + + + VOL + + + + + Volume: + + + + + PAN + + + + + Panning: + + + + + LEFT + + + + + Left gain: + + + + + RIGHT + + + + + Right gain: + + + + + AmplifierControls + + + Volume + + + + + Panning + + + + + Left gain + + + + + Right gain + + + + + AudioAlsaSetupWidget + + + 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. + + + + + 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. + + + + + 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) + + + + + 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: + + + + + With this knob you can set the point where AudioFileProcessor should begin playing your sample. + + + + + Endpoint: + + + + + 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. + + + + + CLIENT-NAME + + + + + CHANNELS + + + + + AudioOss::setupWidget + + + DEVICE + + + + + CHANNELS + + + + + AudioPortAudio::setupWidget + + + BACKEND + + + + + DEVICE + + + + + AudioPulseAudio::setupWidget + + + DEVICE + + + + + CHANNELS + + + + + AudioSdl::setupWidget + + + DEVICE + + + + + AudioSoundIo::setupWidget + + + BACKEND + + + + + DEVICE + + + + + AutomatableModel + + + &Reset (%1%2) + + + + + &Copy value (%1%2) + + + + + &Paste value (%1%2) + + + + + Edit song-global automation + + + + + Remove song-global automation + + + + + Remove all linked controls + + + + + Connected to %1 + + + + + Connected to controller + + + + + Edit connection... + + + + + Remove connection + + + + + Connect to controller... + + + + + AutomationEditor + + + Please open an automation pattern with the context menu of a control! + + + + + Values copied + + + + + All selected values were copied to the clipboard. + + + + + AutomationEditorWindow + + + Play/pause 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. + + + + + Stop playing of current pattern (Space) + + + + + Click here if you want to stop playing of the current pattern. + + + + + Edit actions + + + + + Draw mode (Shift+D) + + + + + Erase mode (Shift+E) + + + + + Flip vertically + + + + + Flip horizontally + + + + + Click here and the pattern will be inverted.The points are flipped in the y direction. + + + + + Click here and the pattern will be reversed. The points are flipped in the x direction. + + + + + 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. + + + + + Interpolation controls + + + + + Discrete progression + + + + + Linear progression + + + + + Cubic Hermite progression + + + + + 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. + + + + + 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: + + + + + Cut selected values (%1+X) + + + + + Copy selected values (%1+C) + + + + + Paste values from clipboard (%1+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. + + + + + Timeline controls + + + + + Zoom controls + + + + + Quantization controls + + + + + Automation Editor - no pattern + + + + + Automation Editor - %1 + + + + + Model is already connected to this pattern. + + + + + AutomationPattern + + + Drag a control while pressing <%1> + + + + + AutomationPatternView + + + double-click to open this pattern in automation editor + + + + + Open in Automation editor + + + + + Clear + + + + + Reset name + + + + + Change name + + + + + Set/clear record + + + + + Flip Vertically (Visible) + + + + + Flip Horizontally (Visible) + + + + + %1 Connections + + + + + Disconnect "%1" + + + + + Model is already connected to this pattern. + + + + + AutomationTrack + + + Automation track + + + + + BBEditor + + + Beat+Bassline Editor + + + + + Play/pause current beat/bassline (Space) + + + + + 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. + + + + + Beat selector + + + + + Track and step actions + + + + + Add beat/bassline + + + + + Add automation-track + + + + + Remove steps + + + + + Add steps + + + + + Clone Steps + + + + + BBTCOView + + + Open in Beat+Bassline-Editor + + + + + Reset name + + + + + Change name + + + + + Change color + + + + + Reset color to default + + + + + BBTrack + + + Beat/Bassline %1 + + + + + Clone of %1 + + + + + BassBoosterControlDialog + + + FREQ + + + + + Frequency: + + + + + GAIN + + + + + Gain: + + + + + RATIO + + + + + Ratio: + + + + + BassBoosterControls + + + Frequency + + + + + Gain + + + + + Ratio + + + + + BitcrushControlDialog + + + IN + + + + + OUT + + + + + + GAIN + + + + + Input Gain: + + + + + NOIS + + + + + Input Noise: + + + + + Output Gain: + + + + + CLIP + + + + + Output Clip: + + + + + + Rate + + + + + Rate Enabled + + + + + Enable samplerate-crushing + + + + + Depth + + + + + Depth Enabled + + + + + Enable bitdepth-crushing + + + + + Sample rate: + + + + + STD + + + + + Stereo difference: + + + + + Levels + + + + + Levels: + + + + + CaptionMenu + + + &Help + + + + + Help (not available) + + + + + 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) associated 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 + + + + + CrossoverEQControlDialog + + + Band 1/2 Crossover: + + + + + Band 2/3 Crossover: + + + + + Band 3/4 Crossover: + + + + + Band 1 Gain: + + + + + Band 2 Gain: + + + + + Band 3 Gain: + + + + + Band 4 Gain: + + + + + Band 1 Mute + + + + + Mute Band 1 + + + + + Band 2 Mute + + + + + Mute Band 2 + + + + + Band 3 Mute + + + + + Mute Band 3 + + + + + Band 4 Mute + + + + + Mute Band 4 + + + + + DelayControls + + + Delay Samples + + + + + Feedback + + + + + Lfo Frequency + + + + + Lfo Amount + + + + + Output gain + + + + + DelayControlsDialog + + + Delay + + + + + Delay Time + + + + + Regen + + + + + Feedback Amount + + + + + Rate + + + + + + Lfo + + + + + Lfo Amt + + + + + Out Gain + + + + + Gain + + + + + DualFilterControlDialog + + + + FREQ + + + + + + Cutoff frequency + + + + + + RESO + + + + + + Resonance + + + + + + GAIN + + + + + + Gain + + + + + MIX + + + + + Mix + + + + + 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 + + + + + + 2x Moog + + + + + + SV LowPass + + + + + + SV BandPass + + + + + + SV HighPass + + + + + + SV Notch + + + + + + Fast Formant + + + + + + Tripole + + + + + Editor + + + Transport controls + + + + + Play (Space) + + + + + Stop (Space) + + + + + Record + + + + + Record while playing + + + + + Effect + + + Effect enabled + + + + + Wet/Dry mix + + + + + Gate + + + + + Decay + + + + + EffectChain + + + Effects enabled + + + + + EffectRackView + + + EFFECTS CHAIN + + + + + Add effect + + + + + EffectSelectDialog + + + Add effect + + + + + Name + + + + + Description + + + + + Author + + + + + 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 + + + + + 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. + + + + + Click here for random wave. + + + + + 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. + + + + + EqControls + + + Input gain + + + + + Output gain + + + + + Low shelf gain + + + + + Peak 1 gain + + + + + Peak 2 gain + + + + + Peak 3 gain + + + + + Peak 4 gain + + + + + High Shelf gain + + + + + HP res + + + + + Low Shelf res + + + + + Peak 1 BW + + + + + Peak 2 BW + + + + + Peak 3 BW + + + + + Peak 4 BW + + + + + High Shelf res + + + + + LP res + + + + + HP freq + + + + + Low Shelf freq + + + + + Peak 1 freq + + + + + Peak 2 freq + + + + + Peak 3 freq + + + + + Peak 4 freq + + + + + High shelf freq + + + + + LP freq + + + + + HP active + + + + + Low shelf active + + + + + Peak 1 active + + + + + Peak 2 active + + + + + Peak 3 active + + + + + Peak 4 active + + + + + High shelf active + + + + + LP active + + + + + LP 12 + + + + + LP 24 + + + + + LP 48 + + + + + HP 12 + + + + + HP 24 + + + + + HP 48 + + + + + low pass type + + + + + high pass type + + + + + Analyse IN + + + + + Analyse OUT + + + + + EqControlsDialog + + + HP + + + + + Low Shelf + + + + + Peak 1 + + + + + Peak 2 + + + + + Peak 3 + + + + + Peak 4 + + + + + High Shelf + + + + + LP + + + + + In Gain + + + + + + + Gain + + + + + Out Gain + + + + + Bandwidth: + + + + + Octave + + + + + Resonance : + + + + + Frequency: + + + + + lp grp + + + + + hp grp + + + + + Frequency + + + + + + Resonance + + + + + Bandwidth + + + + + EqHandle + + + Reso: + + + + + BW: + + + + + + Freq: + + + + + 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 + + + + + Export as loop (remove end silence) + + + + + Export between loop markers + + + + + Start + + + + + Cancel + + + + + 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! + + + + + Export project to %1 + + + + + Error + + + + + Error while determining file-encoder device. Please try to choose a different output format. + + + + + Rendering: %1% + + + + + Fader + + + + Please enter a new value between %1 and %2: + + + + + 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... + + + + + Error + + + + + does not appear to be a valid + + + + + file + + + + + --- Factory files --- + + + + + FlangerControls + + + Delay Samples + + + + + Lfo Frequency + + + + + Seconds + + + + + Regen + + + + + Noise + + + + + Invert + + + + + FlangerControlsDialog + + + Delay + + + + + Delay Time: + + + + + Lfo Hz + + + + + Lfo: + + + + + Amt + + + + + Amt: + + + + + Regen + + + + + Feedback Amount: + + + + + Noise + + + + + White Noise Amount: + + + + + 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 + + + + + Remove &unused channels + + + + + FxMixer + + + Master + + + + + + + FX %1 + + + + + FxMixerView + + + FX-Mixer + + + + + FX Fader %1 + + + + + Mute + + + + + Mute this FX channel + + + + + Solo + + + + + Solo FX channel + + + + + Rename FX channel + + + + + Enter the new name for this FX channel + + + + + FxRoute + + + + Amount to send from channel %1 to channel %2 + + + + + GigInstrument + + + Bank + + + + + Patch + + + + + Gain + + + + + GigInstrumentView + + + Open other GIG file + + + + + Click here to open another GIG file + + + + + Choose the patch + + + + + Click here to change which patch of the GIG file to use + + + + + + Change which instrument of the GIG file is being played + + + + + Which GIG file is currently being used + + + + + Which patch of the GIG file is currently being used + + + + + Gain + + + + + Factor to multiply samples by + + + + + Open GIG file + + + + + GIG Files (*.gig) + + + + + GuiApplication + + + Working directory + + + + + The LMMS working directory %1 does not exist. Create it now? You can change the directory later via Edit -> Settings. + + + + + Preparing UI + + + + + Preparing song editor + + + + + Preparing mixer + + + + + Preparing controller rack + + + + + Preparing project notes + + + + + Preparing beat/bassline editor + + + + + Preparing piano roll + + + + + Preparing automation editor + + + + + InstrumentFunctionArpeggio + + + Arpeggio + + + + + Arpeggio type + + + + + Arpeggio range + + + + + Arpeggio time + + + + + Arpeggio gate + + + + + Arpeggio direction + + + + + Arpeggio mode + + + + + Up + + + + + Down + + + + + Up and down + + + + + Random + + + + + Down and up + + + + + Free + + + + + Sort + + + + + Sync + + + + + 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 + + + + + Minor + + + + + Chromatic + + + + + Half-Whole Diminished + + + + + 5 + + + + + Chords + + + + + Chord type + + + + + Chord range + + + + + InstrumentFunctionNoteStackingView + + + STACKING + + + + + Chord: + + + + + 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. + + + + + InstrumentMidiIOView + + + ENABLE MIDI INPUT + + + + + + CHANNEL + + + + + + VELOCITY + + + + + ENABLE MIDI OUTPUT + + + + + PROGRAM + + + + + NOTE + + + + + MIDI devices to receive MIDI events from + + + + + MIDI devices to send MIDI events to + + + + + CUSTOM BASE VELOCITY + + + + + Specify the velocity normalization base for MIDI-based instruments at 100% note velocity + + + + + BASE VELOCITY + + + + + InstrumentMiscView + + + MASTER PITCH + + + + + Enables the use of Master Pitch + + + + + 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 + + + + + 2x Moog + + + + + SV LowPass + + + + + SV BandPass + + + + + SV HighPass + + + + + SV Notch + + + + + Fast Formant + + + + + Tripole + + + + + 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. + + + + + FREQ + + + + + cutoff frequency: + + + + + 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. + + + + + Envelopes, LFOs and filters are not supported by the current instrument. + + + + + InstrumentTrack + + + + Default preset + + + + + With this knob you can set the volume of the opened channel. + + + + + + unnamed_track + + + + + Base note + + + + + Volume + + + + + Panning + + + + + Pitch + + + + + Pitch range + + + + + FX channel + + + + + Master Pitch + + + + + InstrumentTrackView + + + Volume + + + + + Volume: + + + + + VOL + + + + + Panning + + + + + Panning: + + + + + PAN + + + + + MIDI + + + + + Input + + + + + Output + + + + + FX %1: %2 + + + + + InstrumentTrackWindow + + + GENERAL SETTINGS + + + + + Use these controls to view and edit the next/previous track in the song editor. + + + + + Instrument volume + + + + + Volume: + + + + + VOL + + + + + Panning + + + + + Panning: + + + + + PAN + + + + + Pitch + + + + + Pitch: + + + + + cents + + + + + PITCH + + + + + Pitch range (semitones) + + + + + RANGE + + + + + FX channel + + + + + + FX + + + + + 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. + + + + + SAVE + + + + + ENV/LFO + + + + + FUNC + + + + + MIDI + + + + + MISC + + + + + Save preset + + + + + XML preset file (*.xpf) + + + + + PLUGIN + + + + + Knob + + + Set linear + + + + + Set logarithmic + + + + + Please enter a new value between -96.0 dBV and 6.0 dBV: + + + + + Please enter a new value between %1 and %2: + + + + + LadspaControl + + + Link channels + + + + + LadspaControlDialog + + + Link Channels + + + + + Channel + + + + + LadspaControlView + + + Link channels + + + + + Value: + + + + + Sorry, no help available. + + + + + LadspaEffect + + + Unknown LADSPA plugin %1 requested. + + + + + LcdSpinBox + + + Please enter a new value between %1 and %2: + + + + + LeftRightNav + + + + + Previous + + + + + + + Next + + + + + Previous (%1) + + + + + Next (%1) + + + + + 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 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. + + + + + LmmsCore + + + Generating wavetables + + + + + Initializing data structures + + + + + Opening audio and midi devices + + + + + Launching mixer threads + + + + + MainWindow + + + Configuration file + + + + + Error while parsing configuration file at line %1:%2: %3 + + + + + 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 recovery + + + + + There is a recovery file present. It looks like the last session did not end properly or another instance of LMMS is already running. Do you want to recover the project of this session? + + + + + + Recover + + + + + Recover the file. Please don't run multiple instances of LMMS when you do this. + + + + + + Ignore + + + + + Launch LMMS as usual but with automatic backup disabled to prevent the present recover file from being overwritten. + + + + + Discard + + + + + Launch a default session and delete the restored files. This is not reversible. + + + + + Quit + + + + + Shut down LMMS with no further action. + + + + + Exit + + + + + Version %1 + + + + + Preparing plugin browser + + + + + Preparing file browsers + + + + + My Projects + + + + + My Samples + + + + + My Presets + + + + + My Home + + + + + Root directory + + + + + Volumes + + + + + My Computer + + + + + Loading background artwork + + + + + &File + + + + + &New + + + + + New from template + + + + + &Open... + + + + + &Recently Opened Projects + + + + + &Save + + + + + Save &As... + + + + + Save as New &Version + + + + + Save as default template + + + + + Import... + + + + + E&xport... + + + + + E&xport Tracks... + + + + + Export &MIDI... + + + + + &Quit + + + + + &Edit + + + + + Undo + + + + + Redo + + + + + Settings + + + + + &View + + + + + &Tools + + + + + &Help + + + + + Online Help + + + + + Help + + + + + What's This? + + + + + About + + + + + Create new project + + + + + Create new project from template + + + + + Open existing project + + + + + Recently opened projects + + + + + Save current project + + + + + Export current project + + + + + What's this? + + + + + Toggle metronome + + + + + 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 + + + + + Recover session. Please save your work! + + + + + Automatic backup disabled. Remember to save your work! + + + + + LMMS %1 + + + + + Recovered project not saved + + + + + This project was recovered from the previous session. It is currently unsaved and will be lost if you don't save it. Do you want to save it now? + + + + + Project not saved + + + + + The current project was modified since last saving. Do you want to save it now? + + + + + Open Project + + + + + LMMS (*.mmp *.mmpz) + + + + + Save Project + + + + + LMMS Project + + + + + LMMS Project Template + + + + + Overwrite default template? + + + + + This will overwrite your current default template. + + + + + Help not available + + + + + Currently there's no help available in LMMS. +Please visit http://lmms.sf.net/wiki for documentation on LMMS. + + + + + Song Editor + + + + + Beat+Bassline Editor + + + + + Piano Roll + + + + + Automation Editor + + + + + FX Mixer + + + + + Project Notes + + + + + Controller Rack + + + + + Volume as dBV + + + + + Smooth scroll + + + + + Enable note labels in piano roll + + + + + MeterDialog + + + + Meter Numerator + + + + + + Meter Denominator + + + + + TIME SIG + + + + + MeterModel + + + Numerator + + + + + Denominator + + + + + 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. + + + + + Track + + + + + MidiPort + + + Input channel + + + + + Output channel + + + + + Input controller + + + + + Output controller + + + + + Fixed input velocity + + + + + Fixed output velocity + + + + + Fixed output note + + + + + Output MIDI program + + + + + Base velocity + + + + + Receive MIDI-events + + + + + Send MIDI-events + + + + + MidiSetupWidget + + + DEVICE + + + + + 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 + + + + + + Sine wave + + + + + Bandlimited Triangle wave + + + + + Bandlimited Saw wave + + + + + Bandlimited Ramp wave + + + + + Bandlimited Square wave + + + + + Bandlimited Moog saw wave + + + + + + Soft square wave + + + + + Absolute sine wave + + + + + + Exponential wave + + + + + White noise + + + + + Digital Triangle wave + + + + + Digital Saw wave + + + + + Digital Ramp wave + + + + + Digital Square wave + + + + + Digital Moog saw wave + + + + + Triangle wave + + + + + Saw wave + + + + + Ramp wave + + + + + Square wave + + + + + Moog saw wave + + + + + Abs. sine wave + + + + + Random + + + + + Random smooth + + + + + 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. + + + + + + + Volume + + + + + + + Panning + + + + + + + Coarse detune + + + + + + + semitones + + + + + + Finetune left + + + + + + + + cents + + + + + + Finetune right + + + + + + + Stereo phase offset + + + + + + + + + deg + + + + + Pulse width + + + + + Send sync on pulse rise + + + + + Send sync on pulse fall + + + + + Hard sync oscillator 2 + + + + + Reverse sync oscillator 2 + + + + + Sub-osc mix + + + + + Hard sync oscillator 3 + + + + + Reverse sync oscillator 3 + + + + + + + + Attack + + + + + + Rate + + + + + + Phase + + + + + + Pre-delay + + + + + + Hold + + + + + + Decay + + + + + + Sustain + + + + + + Release + + + + + + Slope + + + + + 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. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Modulation amount + + + + + MultitapEchoControlDialog + + + Length + + + + + Step length: + + + + + Dry + + + + + Dry Gain: + + + + + Stages + + + + + Lowpass stages: + + + + + Swap inputs + + + + + Swap left and right input channel for reflections + + + + + 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 + + + + + NesInstrumentView + + + + + + Volume + + + + + + + Coarse detune + + + + + + + Envelope length + + + + + Enable channel 1 + + + + + Enable envelope 1 + + + + + Enable envelope 1 loop + + + + + Enable sweep 1 + + + + + + Sweep amount + + + + + + Sweep rate + + + + + + 12.5% Duty cycle + + + + + + 25% Duty cycle + + + + + + 50% Duty cycle + + + + + + 75% Duty cycle + + + + + Enable channel 2 + + + + + Enable envelope 2 + + + + + Enable envelope 2 loop + + + + + Enable sweep 2 + + + + + Enable channel 3 + + + + + Noise Frequency + + + + + Frequency sweep + + + + + Enable channel 4 + + + + + Enable envelope 4 + + + + + Enable envelope 4 loop + + + + + Quantize noise frequency when using note frequency + + + + + Use note frequency for noise + + + + + Noise mode + + + + + Master Volume + + + + + Vibrato + + + + + OscillatorObject + + + Osc %1 waveform + + + + + Osc %1 harmonic + + + + + + Osc %1 volume + + + + + + Osc %1 panning + + + + + + Osc %1 fine detuning left + + + + + Osc %1 coarse detuning + + + + + Osc %1 fine detuning right + + + + + Osc %1 phase-offset + + + + + Osc %1 stereo phase-detuning + + + + + Osc %1 wave shape + + + + + Modulation type %1 + + + + + PatchesDialog + + + Qsynth: Channel Preset + + + + + Bank selector + + + + + Bank + + + + + Program selector + + + + + Patch + + + + + Name + + + + + OK + + + + + Cancel + + + + + 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 + + + use mouse wheel to set velocity of a step + + + + + double-click to open in Piano Roll + + + + + 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: + + + + + AMNT + + + + + Modulation amount: + + + + + MULT + + + + + Amount Multiplicator: + + + + + ATCK + + + + + Attack: + + + + + DCAY + + + + + Release: + + + + + TRES + + + + + Treshold: + + + + + PeakControllerEffectControls + + + Base value + + + + + Modulation amount + + + + + Attack + + + + + Release + + + + + Treshold + + + + + Mute output + + + + + Abs Value + + + + + Amount Multiplicator + + + + + PianoRoll + + + Note Velocity + + + + + Note Panning + + + + + Mark/unmark current semitone + + + + + Mark/unmark all corresponding octave semitones + + + + + Mark current scale + + + + + Mark current chord + + + + + Unmark all + + + + + Select all notes on this key + + + + + Note lock + + + + + Last note + + + + + No scale + + + + + No chord + + + + + Velocity: %1% + + + + + Panning: %1% left + + + + + Panning: %1% right + + + + + Panning: center + + + + + Please open a pattern by double-clicking on it! + + + + + + Please enter a new value between %1 and %2: + + + + + PianoRollWindow + + + Play/pause current pattern (Space) + + + + + Record notes from MIDI-device/channel-piano + + + + + Record notes from MIDI-device/channel-piano while playing song or BB track + + + + + Stop playing of current pattern (Space) + + + + + 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. + + + + + Edit actions + + + + + Draw mode (Shift+D) + + + + + Erase mode (Shift+E) + + + + + Select mode (Shift+S) + + + + + 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 %1 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 %1 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. + + + + + Copy paste controls + + + + + Cut selected notes (%1+X) + + + + + Copy selected notes (%1+C) + + + + + Paste notes from clipboard (%1+V) + + + + + 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. + + + + + Timeline controls + + + + + Zoom and note controls + + + + + 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. + + + + + Piano-Roll - %1 + + + + + Piano-Roll - no pattern + + + + + 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"! + + + + + PluginBrowser + + + Instrument plugins + + + + + Instrument browser + + + + + Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track. + + + + + PluginFactory + + + Plugin not found. + + + + + LMMS plugin %1 does not have a plugin descriptor named %2! + + + + + ProjectNotes + + + Project notes + + + + + Put down your project notes here. + + + + + Edit Actions + + + + + &Undo + + + + + %1+Z + + + + + &Redo + + + + + %1+Y + + + + + &Copy + + + + + %1+C + + + + + Cu&t + + + + + %1+X + + + + + &Paste + + + + + %1+V + + + + + Format Actions + + + + + &Bold + + + + + %1+B + + + + + &Italic + + + + + %1+I + + + + + &Underline + + + + + %1+U + + + + + &Left + + + + + %1+L + + + + + C&enter + + + + + %1+E + + + + + &Right + + + + + %1+R + + + + + &Justify + + + + + %1+J + + + + + &Color... + + + + + ProjectRenderer + + + WAV-File (*.wav) + + + + + Compressed OGG-File (*.ogg) + + + + + QWidget + + + + + Name: + + + + + + Maker: + + + + + + Copyright: + + + + + + Requires Real Time: + + + + + + + + + + Yes + + + + + + + + + + No + + + + + + Real Time Capable: + + + + + + In Place Broken: + + + + + + Channels In: + + + + + + Channels Out: + + + + + File: %1 + + + + + File: + + + + + RenameDialog + + + Rename... + + + + + SampleBuffer + + + Open audio file + + + + + All Audio-Files (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw) + + + + + 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) + + + + + SampleTCOView + + + double-click to select sample + + + + + Delete (middle mousebutton) + + + + + Cut + + + + + Copy + + + + + Paste + + + + + Mute/unmute (<%1> + middle click) + + + + + SampleTrack + + + Volume + + + + + Panning + + + + + + Sample track + + + + + SampleTrackView + + + Track volume + + + + + Channel volume: + + + + + VOL + + + + + Panning + + + + + Panning: + + + + + PAN + + + + + 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 + + + + + One instrument track window mode + + + + + HQ-mode for output audio-device + + + + + Compact track buttons + + + + + Sync VST plugins to host playback + + + + + Enable note labels in piano roll + + + + + Enable waveform display by default + + + + + Keep effects running even without input + + + + + Create backup file when saving a project + + + + + Reopen last project on start + + + + + LANGUAGE + + + + + + Paths + + + + + Directories + + + + + LMMS working directory + + + + + Themes directory + + + + + Background artwork + + + + + FL Studio installation directory + + + + + VST-plugin directory + + + + + GIG directory + + + + + SF2 directory + + + + + LADSPA plugin directories + + + + + STK rawwave directory + + + + + Default Soundfont File + + + + + + Performance settings + + + + + Auto save + + + + + Enable auto save feature + + + + + UI effects vs. performance + + + + + Smooth scroll in Song Editor + + + + + Show playback cursor in AudioFileProcessor + + + + + + 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 GIG directory + + + + + Choose your SF2 directory + + + + + Choose your VST-plugin directory + + + + + Choose artwork-theme directory + + + + + Choose FL Studio installation directory + + + + + Choose LADSPA plugin directory + + + + + Choose STK rawwave directory + + + + + Choose default SoundFont + + + + + Choose background artwork + + + + + minutes + + + + + minute + + + + + Auto save interval: %1 %2 + + + + + Set the time between automatic backup to %1. +Remember to also save your project manually. + + + + + 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. + + + + + 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 + + + + + MIDI sequences + + + + + FL Studio projects + + + + + Hydrogen projects + + + + + All file types + + + + + + Empty project + + + + + + This project is empty so exporting makes no sense. Please put some items into Song Editor first! + + + + + Select directory for writing exported tracks... + + + + + + untitled + + + + + + Select file for project-export... + + + + + MIDI File (*.mid) + + + + + The following errors occured while loading: + + + + + SongEditor + + + Could not open file + + + + + 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. + + + + + Could not write file + + + + + 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. + + + + + Error in file + + + + + The file %1 seems to contain errors and therefore can't be loaded. + + + + + Project Version Mismatch + + + + + This %1 was created with LMMS version %2, but version %3 is installed + + + + + 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 + + + + + SongEditorWindow + + + Song-Editor + + + + + Play song (Space) + + + + + Record samples from Audio-device + + + + + Record samples from Audio-device while playing song or BB track + + + + + Stop 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. + + + + + Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song. + + + + + Track actions + + + + + Add beat/bassline + + + + + Add sample-track + + + + + Add automation-track + + + + + Edit actions + + + + + Draw mode + + + + + Edit mode (select and move) + + + + + Timeline controls + + + + + Zoom controls + + + + + SpectrumAnalyzerControlDialog + + + Linear spectrum + + + + + Linear Y axis + + + + + SpectrumAnalyzerControls + + + Linear spectrum + + + + + Linear Y axis + + + + + Channel mode + + + + + TabWidget + + + + Settings for %1 + + + + + TempoSyncKnob + + + + Tempo Sync + + + + + No Sync + + + + + Eight beats + + + + + Whole note + + + + + Half note + + + + + Quarter note + + + + + 8th note + + + + + 16th note + + + + + 32nd note + + + + + Custom... + + + + + 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 + + + + + TimeLineWidget + + + 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 <%1> to disable magnetic loop points. + + + + + Hold <Shift> to move the begin loop point; Press <%1> to disable magnetic loop points. + + + + + Track + + + Mute + + + + + Solo + + + + + TrackContainer + + + Importing FLP-file... + + + + + + + Cancel + + + + + + + Please wait... + + + + + Importing MIDI-file... + + + + + 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... + + + + + TrackContentObject + + + Mute + + + + + TrackContentObjectView + + + Current position + + + + + + Hint + + + + + Press <%1> and drag to make a copy. + + + + + Current length + + + + + Press <%1> for free resizing. + + + + + %1:%2 (%3:%4 to %5:%6) + + + + + Delete (middle mousebutton) + + + + + Cut + + + + + Copy + + + + + Paste + + + + + Mute/unmute (<%1> + middle click) + + + + + TrackOperationsWidget + + + Press <%1> while clicking on move-grip to begin a new drag'n'drop-action. + + + + + Actions for this track + + + + + Mute + + + + + + Solo + + + + + Mute this track + + + + + Clone this track + + + + + Remove this track + + + + + Clear this track + + + + + FX %1: %2 + + + + + Assign to new FX Channel + + + + + Turn all recording on + + + + + Turn all recording off + + + + + TripleOscillatorView + + + Use phase modulation for modulating oscillator 1 with oscillator 2 + + + + + Use amplitude modulation for modulating oscillator 1 with oscillator 2 + + + + + Mix output of oscillator 1 & 2 + + + + + Synchronize oscillator 1 with oscillator 2 + + + + + Use frequency modulation for modulating oscillator 1 with oscillator 2 + + + + + Use phase modulation for modulating oscillator 2 with oscillator 3 + + + + + Use amplitude modulation for modulating oscillator 2 with oscillator 3 + + + + + Mix output of oscillator 2 & 3 + + + + + Synchronize oscillator 2 with oscillator 3 + + + + + Use frequency modulation for modulating oscillator 2 with oscillator 3 + + + + + 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 24 semitones (2 octaves) 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. + + + + + 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. + + + + + 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. + + + + + 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 + + + + + Preset + + + + + by + + + + + - VST plugin control + + + + + VisualizationWidget + + + click to enable/disable visualization of master-output + + + + + Click to enable + + + + + 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 + + + + The VST plugin %1 could not be loaded. + + + + + Open Preset + + + + + + Vst Plugin Preset (*.fxp *.fxb) + + + + + : default + + + + + " + + + + + ' + + + + + Save Preset + + + + + .fxp + + + + + .FXP + + + + + .FXB + + + + + .fxb + + + + + Loading plugin + + + + + Please wait while loading VST plugin... + + + + + 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 + + + + + + Volume + + + + + + + + Panning + + + + + + + + Freq. multiplier + + + + + + + + Left detune + + + + + + + + + + + + cents + + + + + + + + Right detune + + + + + A-B Mix + + + + + Mix envelope amount + + + + + Mix envelope attack + + + + + Mix envelope hold + + + + + Mix envelope decay + + + + + Crosstalk + + + + + 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 + + + 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 + + + + + Show GUI + + + + + Click here to show or hide the graphical user interface (GUI) of ZynAddSubFX. + + + + + audioFileProcessor + + + Amplify + + + + + Start of sample + + + + + End of sample + + + + + Loopback point + + + + + Reverse sample + + + + + Loop mode + + + + + Stutter + + + + + Interpolation mode + + + + + None + + + + + Linear + + + + + Sinc + + + + + Sample not found: %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 + + + + + fxLineLcdSpinBox + + + Assign to: + + + + + New FX Channel + + + + + graphModel + + + Graph + + + + + kickerInstrument + + + Start frequency + + + + + End frequency + + + + + Length + + + + + Distortion Start + + + + + Distortion End + + + + + Gain + + + + + Envelope Slope + + + + + Noise + + + + + Click + + + + + Frequency Slope + + + + + Start from note + + + + + End to note + + + + + kickerInstrumentView + + + Start frequency: + + + + + End frequency: + + + + + Frequency Slope: + + + + + Gain: + + + + + Envelope Length: + + + + + Envelope Slope: + + + + + Click: + + + + + Noise: + + + + + Distortion Start: + + + + + Distortion End: + + + + + 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. + + + + + 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 + + + + + malletsInstrumentView + + + Instrument + + + + + Spread + + + + + Spread: + + + + + Missing files + + + + + Your Stk-installation seems to be incomplete. Please make sure the full Stk-package is installed! + + + + + 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. + + + + + 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 + + + + + opl2instrumentView + + + + Attack + + + + + + Decay + + + + + + Release + + + + + + Frequency multiplier + + + + + organicInstrument + + + Distortion + + + + + Volume + + + + + organicInstrumentView + + + Distortion: + + + + + The distortion knob adds distortion to the output of the instrument. + + + + + Volume: + + + + + The volume knob controls the volume of the output of the instrument. It is cumulative with the instrument window's volume control. + + + + + Randomise + + + + + The randomize button randomizes all knobs except the harmonics,main volume and distortion knobs. + + + + + + Osc %1 waveform: + + + + + Osc %1 volume: + + + + + Osc %1 panning: + + + + + Osc %1 stereo detuning + + + + + cents + + + + + 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 + + + + + patchesDialog + + + Qsynth: Channel Preset + + + + + Bank selector + + + + + Bank + + + + + Program selector + + + + + Patch + + + + + Name + + + + + OK + + + + + Cancel + + + + + pluginBrowser + + + A native amplifier plugin + + + + + Simple sampler with various settings for using samples (e.g. drums) in an instrument-track + + + + + Boost your bass the fast and simple way + + + + + Customizable wavetable synthesizer + + + + + An oversampling bitcrusher + + + + + Carla Patchbay Instrument + + + + + Carla Rack Instrument + + + + + A 4-band Crossover Equalizer + + + + + A native delay plugin + + + + + A Dual filter plugin + + + + + plugin for processing dynamics in a flexible way + + + + + A native eq plugin + + + + + A native flanger plugin + + + + + Filter for importing FL Studio projects into LMMS + + + + + Player for GIG files + + + + + Filter for importing Hydrogen files into LMMS + + + + + Versatile drum synthesizer + + + + + List installed LADSPA plugins + + + + + plugin for using arbitrary LADSPA-effects inside LMMS. + + + + + Incomplete monophonic imitation tb303 + + + + + Filter for exporting MIDI-files from LMMS + + + + + Filter for importing MIDI-files into LMMS + + + + + Monstrous 3-oscillator synth with modulation matrix + + + + + A multitap echo delay plugin + + + + + A NES-like synthesizer + + + + + 2-operator FM Synth + + + + + Additive Synthesizer for organ-like sounds + + + + + Emulation of GameBoy (TM) APU + + + + + GUS-compatible patch instrument + + + + + Plugin for controlling knobs with sound peaks + + + + + Player for SoundFont files + + + + + LMMS port of sfxr + + + + + Emulation of the MOS6581 and MOS8580 SID. +This chip was used in the Commodore 64 computer. + + + + + Graphical spectrum analyzer plugin + + + + + Plugin for enhancing stereo separation of a stereo input file + + + + + Plugin for freely manipulating stereo output + + + + + Tuneful things to bang on + + + + + Three powerful oscillators you can modulate in several ways + + + + + VST-host for using VST(i)-plugins within LMMS + + + + + Vibrating string modeler + + + + + plugin for using arbitrary VST effects inside LMMS. + + + + + 4-oscillator modulatable wavetable synth + + + + + plugin for waveshaping + + + + + Embedded ZynAddSubFX + + + + + no description + + + + + sf2Instrument + + + Bank + + + + + Patch + + + + + Gain + + + + + Reverb + + + + + Reverb Roomsize + + + + + Reverb Damping + + + + + Reverb Width + + + + + Reverb Level + + + + + Chorus + + + + + Chorus Lines + + + + + Chorus Level + + + + + Chorus Speed + + + + + Chorus Depth + + + + + A soundfont %1 could not be loaded. + + + + + 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. + + + + + 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 + + + + + vestigeInstrument + + + Loading plugin + + + + + Please wait while loading VST-plugin... + + + + + 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 + + + + + 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. + + + + + 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 + + + + \ No newline at end of file diff --git a/data/locale/uk.ts b/data/locale/uk.ts index 98d43370ffb..a718298fadb 100644 --- a/data/locale/uk.ts +++ b/data/locale/uk.ts @@ -1,55 +1,50 @@ - - - + AboutDialog - About - Про програму - - - License - Ліцензія - - - Authors - Автори + About LMMS + Про програму LMMS - Translation - Переклад + Version %1 (%2/%3, Qt %4, %5) + Версія %1 (%2/%3, Qt %4, %5) - About LMMS - Про програму LMMS + About + Про програму LMMS - easy music production for everyone LMMS - легке створення музики для всіх - Copyright (c) 2004-2014, LMMS developers - Авторське право (c) 2004-2014, LMMS-розробники + Authors + Автори - Version %1 (%2/%3, Qt %4, %5) - Версія %1 (%2/%3, Qt %4, %5) + 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! - На цій мові не перекладено (або встановлено Англійську). + Переклад виконали: +Михайло Рожко <mihail.rozshko@gmail.com> Якщо Ви зацікавлені в перекладі LMMS на іншу мову або хочете поліпшити існуючий переклад, ми будемо раді будь-якій допомогі! Просто зв'яжіться з розробниками! + + License + Ліцензія + 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 @@ -59,6 +54,10 @@ If you're interested in translating LMMS in another language or want to imp Contributors ordered by number of commits: Розробники відсортовані за кількістю коммітов: + + Copyright © %1 + Авторське право © %1 + AmplifierControlDialog @@ -132,40 +131,40 @@ If you're interested in translating LMMS in another language or want to imp Відкрити інший запис - If you enable this button, the whole sample is reversed. This is useful for cool effects, e.g. a reversed crash. - Якщо включити цю кнопку, весь запис піде у зворотний бік, це зручно для крутих ефектів, наприклад зворотного гуркоту. + 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. + Натисніть тут, щоб відкрити інший звуковий файл. У новому вікні діалогу ви зможете вибрати потрібний файл. Такі налаштування, як режим повтору, точки початку/кінця, підсилення та інші не скинуться, тому звучання може відрізнятися від оригіналу. - Continue sample playback across notes - Продовжити відтворення запису по нотах + Reverse sample + Реверс запису + + + If you enable this button, the whole sample is reversed. This is useful for cool effects, e.g. a reversed crash. + Якщо включити цю кнопку, весь запис піде у зворотний бік, це зручно для крутих ефектів, наприклад зворотного гуркоту. Amplify: Підсилення: - 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 Гц) + 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: Початок: - - Reverse sample - Реверс запису - Endpoint: Кінець: - 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. - Натисніть тут, щоб відкрити інший звуковий файл. У новому вікні діалогу ви зможете вибрати потрібний файл. Такі налаштування, як режим повтору, точки початку/кінця, підсилення та інші не скинуться, тому звучання може відрізнятися від оригіналу. + Continue sample playback across notes + Продовжити відтворення запису по нотах - 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% вихідний звук не змінюється, в іншому випадку - він буде ослаблений або підсилений. (Зверніть увагу, що вихідний запис при цьому залишиться недоторканим.) + 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 @@ -213,10 +212,6 @@ If you're interested in translating LMMS in another language or want to imp AudioJack - - JACK server down - JACK-сервер не доступний - JACK client restarted JACK-клієнт перезапущений @@ -225,6 +220,10 @@ If you're interested in translating LMMS in another language or want to imp 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. @@ -251,14 +250,14 @@ If you're interested in translating LMMS in another language or want to imp AudioPortAudio::setupWidget - - DEVICE - ПРИСТРІЙ - BACKEND УПРАВЛІННЯ + + DEVICE + ПРИСТРІЙ + AudioPulseAudio::setupWidget @@ -278,6 +277,17 @@ If you're interested in translating LMMS in another language or want to imp ПРИСТРІЙ + + AudioSndio::setupWidget + + DEVICE + ПРИСТРІЙ + + + CHANNELS + КАНАЛИ + + AudioSoundIo::setupWidget @@ -292,56 +302,52 @@ If you're interested in translating LMMS in another language or want to imp AutomatableModel - Connected to %1 - Приєднано до %1 - - - Remove song-global automation - Прибрати глобальну автоматизацію композиції - - - Edit connection... - Налаштувати з'єднання... + &Reset (%1%2) + &R Скинути (%1%2) &Copy value (%1%2) &C Копіювати значення (%1%2) - Remove connection - Видалити з'єднання + &Paste value (%1%2) + &P Вставити значення (%1%2) - &Reset (%1%2) - &R Скинути (%1%2) + Edit song-global automation + Змінити глоабльную автоматизацію композиції + + + Connected to %1 + Приєднано до %1 Connected to controller Приєднано до контролера - Edit song-global automation - Змінити глоабльную автоматизацію композиції + Edit connection... + Налаштувати з'єднання... + + + Remove connection + Видалити з'єднання Connect to controller... З'єднати з контролером ... - Remove all linked controls - Прибрати все приєднане управління + Remove song-global automation + Прибрати глобальну автоматизацію композиції - &Paste value (%1%2) - &P Вставити значення (%1%2) + Remove all linked controls + Прибрати все приєднане управління AutomationEditor - - All selected values were copied to the clipboard. - Всі вибрані значення скопійовані до буферу обміну. - Please open an automation pattern with the context menu of a control! Відкрийте редатор автоматизації через контекстне меню регулятора! @@ -350,6 +356,10 @@ If you're interested in translating LMMS in another language or want to imp Values copied Значення скопійовані + + All selected values were copied to the clipboard. + Всі вибрані значення скопійовані до буферу обміну. + AutomationEditorWindow @@ -471,13 +481,9 @@ If you're interested in translating LMMS in another language or want to imp Automation Editor - %1 Редактор автоматизації - %1 - - Model is already connected to this pattern. - Модель вже підключена до цього шаблону. - Edit actions - Редагувати дії + Зміна Interpolation controls @@ -495,6 +501,10 @@ If you're interested in translating LMMS in another language or want to imp Quantization controls Управління квантуванням + + Model is already connected to this pattern. + Модель вже підключена до цього шаблону. + AutomationPattern @@ -506,24 +516,16 @@ If you're interested in translating LMMS in another language or want to imp AutomationPatternView - Clear - Очистити + double-click to open this pattern in automation editor + Двічі клацніть мишею щоб налаштувати автоматизацію для цього шаблону Open in Automation editor Відкрити в редакторі автоматизації - Disconnect "%1" - Від'єднати «%1» - - - double-click to open this pattern in automation editor - Двічі клацніть мишею щоб налаштувати автоматизацію для цього шаблону - - - %1 Connections - З'єднання %1 + Clear + Очистити Reset name @@ -533,6 +535,14 @@ If you're interested in translating LMMS in another language or want to imp Change name Перейменувати + + %1 Connections + З'єднання %1 + + + Disconnect "%1" + Від'єднати «%1» + Set/clear record Встановити/очистити запис @@ -595,10 +605,6 @@ If you're interested in translating LMMS in another language or want to imp Add steps Додати такти - - Clone Steps - Клонувати такти - Beat selector Вибір ударних @@ -607,6 +613,10 @@ If you're interested in translating LMMS in another language or want to imp Track and step actions Дії для доріжки чи її частини + + Clone Steps + Клонувати такти + BBTCOView @@ -732,8 +742,7 @@ If you're interested in translating LMMS in another language or want to imp Enable samplerate-crushing - Уточнити і перевірии, дуже не зрозуміло - Включити дроблення частоти дискртизації + Включити дроблення частоти дискретизації Depth @@ -745,8 +754,7 @@ If you're interested in translating LMMS in another language or want to imp Enable bitdepth-crushing - Знову не зовсім зрозуміло - Включити глибину кольору ​​дроблення + Включити ​​дроблення глибини кольору Sample rate: @@ -754,7 +762,7 @@ If you're interested in translating LMMS in another language or want to imp STD - + STD Stereo difference: @@ -801,32 +809,16 @@ If you're interested in translating LMMS in another language or want to imp ControllerConnectionDialog - OK - ОК - - - LMMS - ЛММС - - - Cycle Detected. - Виявлено цикл. + Connection Settings + Параметры соединения MIDI CONTROLLER MIDI-КОНТРОЛЕР - USER CONTROLLER - КОРИСТ. КОНТРОЛЕР - - - Cancel - Відміна - - - Auto Detect - Автовизначення + Input channel + Канал введення CHANNEL @@ -841,24 +833,44 @@ If you're interested in translating LMMS in another language or want to imp КОНТРОЛЕР - Input channel - Канал введення - - - Connection Settings - Параметры соединения + Auto Detect + Автовизначення MIDI-devices to receive MIDI-events from Пристрої MiDi для прийому подій + + USER CONTROLLER + КОРИСТ. КОНТРОЛЕР + MAPPING FUNCTION ПЕРЕВИЗНАЧЕННЯ + + OK + ОК + + + Cancel + Відміна + + + LMMS + ЛММС + + + Cycle Detected. + Виявлено цикл. + ControllerRackView + + Controller Rack + Стійка контролерів + Add Додати @@ -868,13 +880,9 @@ If you're interested in translating LMMS in another language or want to imp Підтвердити видалення - Confirm delete? There are existing connection(s) associted with this controller. There is no way to undo. + Confirm delete? There are existing connection(s) associated with this controller. There is no way to undo. Чи підтверджуєте видалення? Є можливі зв'язки з цим контролером, потім їх не можна буде повернути.. - - Controller Rack - Стійка контролерів - ControllerView @@ -883,16 +891,16 @@ If you're interested in translating LMMS in another language or want to imp Управління - Enter the new name for this controller - Введіть нову назву контролера + Controllers are able to automate the value of a knob, slider, and other controls. + Контролери можуть автоматизувати зміни значень регуляторів, повзунків та іншого управління. Rename controller Перейменувати контролер - Controllers are able to automate the value of a knob, slider, and other controls. - Контролери можуть автоматизувати зміни значень регуляторів, повзунків та іншого управління. + Enter the new name for this controller + Введіть нову назву контролера &Remove this plugin @@ -991,6 +999,10 @@ If you're interested in translating LMMS in another language or want to imp Delay Затримка + + Lfo Amt + Вел LFO + Delay Time Час затримки @@ -1011,10 +1023,6 @@ If you're interested in translating LMMS in another language or want to imp Lfo LFO - - Lfo Amt - Вел LFO - Out Gain Вих підсилення @@ -1024,13 +1032,6 @@ If you're interested in translating LMMS in another language or want to imp Підсилення - - DetuningHelper - - Note detuning - Расстройка примітки - - DualFilterControlDialog @@ -1217,13 +1218,6 @@ If you're interested in translating LMMS in another language or want to imp Тріполі - - DummyEffect - - NOT FOUND - НЕ ЗНАЙДЕНО - - Editor @@ -1244,19 +1238,11 @@ If you're interested in translating LMMS in another language or want to imp Transport controls - Управління засобами сполучення + Управління засобами сполучення Effect - - Gate - Шлюз - - - Decay - Згасання - Effect enabled Ефект включений @@ -1265,6 +1251,14 @@ If you're interested in translating LMMS in another language or want to imp Wet/Dry mix Насиченість + + Gate + Шлюз + + + Decay + Згасання + EffectChain @@ -1275,14 +1269,14 @@ If you're interested in translating LMMS in another language or want to imp EffectRackView - - Add effect - Додати ефект - EFFECTS CHAIN МЕРЕЖА ЕФЕКТІВ + + Add effect + Додати ефект + EffectSelectDialog @@ -1305,38 +1299,66 @@ If you're interested in translating LMMS in another language or want to imp EffectView + + Toggles the effect on or off. + Увімк/Вимк ефект. + + + On/Off + Увімк/Вимк + W/D НАСИЧ - GATE - ШЛЮЗ + 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: Шлюз: - Time: - Час: + 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 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 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 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. +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. Сигнал проходить послідовно через всі встановлені фільтри (зверху вниз). @@ -1354,22 +1376,6 @@ Right clicking will bring up a context menu where you can change the order in wh Контекстне меню, яке викликається клацанням правою кнопкою миші, дозволяє змінювати порядок проходження фільтрів або видаляти їх разом з іншими. - - Wet Level: - Рівень насиченості: - - - 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) ефектах. - - - On/Off - Увімк/Вимк - - - Controls - Управління - Move &up &u Перемістити вище @@ -1378,44 +1384,21 @@ Right clicking will bring up a context menu where you can change the order in wh Move &down &d Перемістити нижче - - Toggles the effect on or off. - Увімк/Вимк ефект. - - - The Wet/Dry knob sets the ratio between the input signal and the effect signal that forms the output. - Регулятор насиченості визначає частку обробленого сигналу, яка буде на виході. - - - The Gate knob controls the signal level that is considered to be 'silence' while deciding when to stop processing signals. - GATE (Шлюз) визначає рівень сигналу, який буде вважатися "тишею" при визначенні зупинки оброблення сигналів. - &Remove this plugin &R Видалити цей плагін - Engine - - Generating wavetables - Генерування синтезатора звукозаписів - - - Initializing data structures - Ініціалізація структур даних - + EnvelopeAndLfoParameters - Opening audio and midi devices - Відкриття аудіо та міді пристроїв + Predelay + Затримка - Launching mixer threads - Запуск потоків міксера + Attack + Вступ - - - EnvelopeAndLfoParameters Hold Утримання @@ -1425,48 +1408,40 @@ Right clicking will bring up a context menu where you can change the order in wh Згасання - LFO Modulation - Модуляція LFO + Sustain + Витримка - LFO speed - Швидкість LFO + Release + Зменшення - Freq x 100 - ЧАСТ x 100 + Modulation + Модуляція - Attack - Вступ + LFO Predelay + Затримка LFO LFO Attack Вступ LFO - Predelay - Затримка - - - Release - Зменшення - - - Sustain - Витримка + LFO speed + Швидкість LFO - Modulation - Модуляція + LFO Modulation + Модуляція LFO LFO Wave Shape Форма сигналу LFO - LFO Predelay - Затримка LFO + Freq x 100 + ЧАСТ x 100 Modulate Env-Amount @@ -1476,72 +1451,44 @@ Right clicking will bring up a context menu where you can change the order in wh EnvelopeAndLfoView - AMT - AMT + DEL + DEL - ATT - ATT + Predelay: + Предзатримка: - DEC - DEC + Use this knob for setting predelay of the current envelope. The bigger this value the longer the time before start of actual envelope. + Ця ручка визначає затримку обвідної. Чим більша ця величина, тим довший час до старту поточної обвідної. - DEL - DEL + ATT + ATT - REL - REL + Attack: + Вступ: - SPD - SPD + 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 - - Hint - Підказка - - - SUST - SUST - Hold: Утримання: - 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 user-defined wave. Afterwards, drag an according sample-file onto the LFO graph. - Задати свою форму сигналу. Згодом, перетягнути відповідний файл із записом в граф LFO. - - - multiply LFO-frequency by 100 - Помножити частоту LFO на 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. - Ця ручка встановлює швидкість поточного LFO. Чим більше значення, тим швидше LFO коливається і швидше виробляється ефект. - - - FREQ x 100 - ЧАСТОТА x 100 - - - Click here if the frequency of this LFO should be multiplied by 100. - Натисніть, щоб помножити частоту цього LFO на 100. + 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. + Ця ручка встановлює тривалість обвідної. Чим більше значення, тим довше обвідна тримається на найвищому рівні. - ms/LFO: - мс/LFO: + DEC + DEC Decay: @@ -1551,101 +1498,129 @@ Right clicking will bring up a context menu where you can change the order in wh 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. Ця ручка встановлює рівень витримки. Чим більша ця величина, тим вище рівень на якому залишається обвідна, перш ніж опуститися до нуля. - 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 почне працювати. + REL + REL - Click here to make the envelope-amount controlled by this LFO. - Натисніть сюди, щоб глибина модуляції обвідної задавалася цим LFO. + 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. Ця ручка встановлює час відпускання для поточної обвідної. Чим більше значення, тим довша характеристика (н-д, гучність) зменшується від рівня витримки до нуля. Для струнних інструментів слід вибирати великі значення. - Click here for a sine-wave. - Генерувати гармонійний (синусоїдальний) сигнал. + AMT + AMT - LFO speed: - Швидкість LFO: + Modulation amount: + Глибина модуляції: - Attack: - Вступ: + 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: - MODULATE ENV-AMOUNT - МОДЕЛЮВ ОБВІДНУ + 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 почне працювати. - Predelay: - Предзатримка: + LFO- attack: + Вступ LFO: - Modulation amount: - Глибина модуляції: + 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 потребує збільшення своєї амплітуди до максимуму. - Use this knob for setting predelay of the current envelope. The bigger this value the longer the time before start of actual envelope. - Ця ручка визначає затримку обвідної. Чим більша ця величина, тим довший час до старту поточної обвідної. + SPD + SPD - Click here for a square-wave. - Згенерувати квадратний сигнал. + LFO speed: + Швидкість LFO: - Release: - Зменшення: - - - Sustain: - Витримка: + 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 envelope. The bigger this value the more the according size (e.g. volume or cutoff-frequency) will be influenced by this envelope. - Ця ручка встановлює глибину модуляції для поточної обвідної. Чим більше значення, тим більшою мірою обрана характеристика (н-д, гучність або частота зрізу) буде залежати від цієї обвідної. + 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. - LFO- attack: - Вступ LFO: + Click here for a sine-wave. + Генерувати гармонійний (синусоїдальний) сигнал. Click here for a triangle-wave. Згенерувати трикутний сигнал. - - Drag a sample from somewhere and drop it in this window. - Перетягніть в це вікно який-небудь запис. - Click here for a saw-wave for current. Згенерувати зигзагоподібний сигнал. - 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. - Ця ручка встановлює тривалість обвідної. Чим більше значення, тим довше обвідна тримається на найвищому рівні. + Click here for a square-wave. + Згенерувати квадратний сигнал. - 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. - Ця ручка встановлює час зростання для поточної обвідної. Чим більше значення, тим довше характеристика (н-д, гучність) зростає до максимуму. Для інструменов нашталт піаніно характерний малий час наростання, а для струнних - великий. + 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 задавати значення обвідної - 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 потребує збільшення своєї амплітуди до максимуму. + ms/LFO: + мс/LFO: + + + Hint + Підказка + + + Drag a sample from somewhere and drop it in this window. + Перетягніть в це вікно який-небудь запис. Click here for random wave. @@ -1696,7 +1671,7 @@ Right clicking will bring up a context menu where you can change the order in wh Peak 1 BW - Пік 1 BW + Пік 1 BW Peak 2 BW @@ -1724,7 +1699,7 @@ Right clicking will bring up a context menu where you can change the order in wh Low Shelf freq - Низька ступінь част + Низька ступінь част Peak 1 freq @@ -1814,6 +1789,14 @@ Right clicking will bring up a context menu where you can change the order in wh high pass type Тип високої частоти + + Analyse IN + Аналізувати ВХІД + + + Analyse OUT + Аналізувати ВИХІД + EqControlsDialog @@ -1874,78 +1857,86 @@ Right clicking will bring up a context menu where you can change the order in wh Частота: - 12dB - + lp grp + нч grp - 24dB - + hp grp + вч grp - 48dB - + Octave + Октава - lp grp - нч grp + Frequency + Частота - hp grp - вч grp + Resonance + Резонанс - - - EqParameterWidget - Hz - Гц + Bandwidth + Ширина смуги - ExportProjectDialog + EqHandle - 2x - + Reso: + Резон: - 4x - + BW: + ШС: - 8x - + Freq: + Част: + + + ExportProjectDialog - Sinc Best (very slow!) - Синхр. краща (дуже повільно!) + Export project + Експорт проекту - Start - Почати + Output + Вивід - Bitrate: - Бітрейт: + File format: + Формат файла: Samplerate: Частота дискретизації: - 1x (None) - 1х (Ні) + 44100 Hz + 44.1 КГц - Oversampling (use with care!): - Передискретизація (використовувати обережно!): + 48000 Hz + 48 КГц - Cancel - Відміна + 88200 Hz + 88.2 КГц - Depth: - Глибина: + 96000 Hz + 96 КГц + + + 192000 Hz + 192 КГц + + + Bitrate: + Бітрейт: 64 KBit/s @@ -1955,14 +1946,14 @@ Right clicking will bring up a context menu where you can change the order in wh 128 KBit/s 128 КБіт/с - - 192 KBit/s - 192 КБіт/с - 160 KBit/s 160 КБіт/с + + 192 KBit/s + 192 КБіт/с + 256 KBit/s 256 КБіт/с @@ -1972,72 +1963,76 @@ Right clicking will bring up a context menu where you can change the order in wh 320 КБіт/с - 32 Bit Float - 32 Біт плаваюча - - - 192000 Hz - 192 КГц + Depth: + Глибина: - Zero Order Hold - Нульова затримка + 16 Bit Integer + 16 Біт ціле - Output - Вивід + 32 Bit Float + 32 Біт плаваюча Please note that not all of the parameters above apply for all file formats. Зауважте, що не всі параметри нижче будуть застосовані для всіх форматів файлів. + + Quality settings + Налаштування якості + Interpolation: Інтерполяція: - 44100 Hz - 44.1 КГц + Zero Order Hold + Нульова затримка - 16 Bit Integer - 16 Біт ціле + Sinc Fastest + Синхр. Швидка - Export project - Експорт проекту + Sinc Medium (recommended) + Синхр. Середня (рекомендовано) - Sinc Fastest - Синхр. Швидка + Sinc Best (very slow!) + Синхр. краща (дуже повільно!) - 96000 Hz - 96 КГц + Oversampling (use with care!): + Передискретизація (використовувати обережно!): - File format: - Формат файла: + 1x (None) + 1х (Ні) - 48000 Hz - 48 КГц + 2x + - 88200 Hz - 88.2 КГц + 4x + - Sinc Medium (recommended) - Синхр. Середня (рекомендовано) + 8x + - Export as loop (remove end silence) - Експортувати як петлю (прибрати тишу в кінці) + Start + Почати - Quality settings - Налаштування якості + Cancel + Відміна + + + Export as loop (remove end silence) + Експортувати як петлю (прибрати тишу в кінці) Export between loop markers @@ -2106,6 +2101,10 @@ Please make sure you have write-permission to the file and the directory contain --- Factory files --- --- Заводські файли --- + + Open in new instrument-track/Song Editor + Відкрити в новій інструментальній доріжці/Музичному редакторі + Error Помилка @@ -2118,10 +2117,6 @@ Please make sure you have write-permission to the file and the directory contain file файл - - Open in new instrument-track/Song Editor - Відкрити в новій інструментальній доріжці/Музичному редакторі - FlangerControls @@ -2166,7 +2161,7 @@ Please make sure you have write-permission to the file and the directory contain Lfo: - + Lfo: Amt @@ -2201,7 +2196,7 @@ Please make sure you have write-permission to the file and the directory contain 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. + 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. @@ -2235,40 +2230,40 @@ You can remove and move FX channels in the context menu, which is accessed by ri FxMixer - - FX %1 - Ефект %1 - Master Головний + + FX %1 + Ефект %1 + FxMixerView - Mute - Тиша + Rename FX channel + Перейменувати канал Ефекту - Mute this FX channel - Тиша на цьому каналі Ефекту + Enter the new name for this FX channel + Введіть нову назву для цього каналу Ефекту - FX Fader %1 - Повзунок Ефекту %1 + FX-Mixer + Мікшер Ефектів - Enter the new name for this FX channel - Введіть нову назву для цього каналу Ефекту + FX Fader %1 + Повзунок Ефекту %1 - Rename FX channel - Перейменувати канал Ефекту + Mute + Тиша - FX-Mixer - Мікшер Ефектів + Mute this FX channel + Тиша на цьому каналі Ефекту Solo @@ -2394,60 +2389,60 @@ You can remove and move FX channels in the context menu, which is accessed by ri InstrumentFunctionArpeggio - Up - Вгору + Arpeggio + Арпеджіо - Down - Вниз + Arpeggio type + Тип арпеджіо - Free - Вільно + Arpeggio range + Діапазон арпеджіо - Sort - Сортувати + Arpeggio time + Період арпеджіо - Sync - Синхронізувати + Arpeggio gate + Шлюз арпеджіо Arpeggio direction Напрямок арпеджіо - Up and down - Вгору та вниз + Arpeggio mode + Режим арпеджіо - Random - Випадково + Up + Вгору - Arpeggio range - Діапазон арпеджіо + Down + Вниз - Arpeggio gate - Шлюз арпеджіо + Up and down + Вгору та вниз - Arpeggio time - Період арпеджіо + Random + Випадково - Arpeggio type - Тип арпеджіо + Free + Вільно - Arpeggio mode - Режим арпеджіо + Sort + Сортувати - Arpeggio - Арпеджіо + Sync + Синхронізувати Down and up @@ -2457,24 +2452,12 @@ You can remove and move FX channels in the context menu, which is accessed by ri InstrumentFunctionArpeggioView - % - % - - - ms - мс - - - GATE - GATE - - - TIME - TIME + ARPEGGIO + ARPEGGIO - Mode: - Режим: + 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 @@ -2485,327 +2468,327 @@ You can remove and move FX channels in the context menu, which is accessed by ri Діапазон арпеджіо: - 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. - Регулювання шлюзу арпеджіо, показує процентну частку кожного тону арпеджіо, яка буде відтворена. Простий спосіб створювати стаккато-арпеджіо. + octave(s) + Октав(а/и) Use this knob for setting the arpeggio range in octaves. The selected arpeggio will be played within specified number of octaves. Використовуйте цю ручку, щоб встановити діапазон арпеджіо (в октавах). Обраний тип арпеджіо охоплюватиме вказану кількість октав. - Chord: - Акорд: - - - ARPEGGIO - ARPEGGIO - - - Arpeggio gate: - Шлюз арпеджіо: + 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. Регулювання періоду арпеджіо - час (в мілісекундах), який має звучати кожен тон арпеджіо. - 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. - Арпеджіо - різновид виконання акордів на фортепіано і струнних інструментах, який оживляє звучання. Струни таких інструментів граються перебором по акордах, як на арфі, коли звуки акорду слідують один за іншим. Типові арпеджіо - мажорні та мінорні тріади, серед яких можна вибрати й інші. + GATE + GATE - octave(s) - Октав(а/и) + 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 - Majb5 - + octave + Октава Major Мажорний - minor - мінорний - - - Chords - Акорди - - - Chord range - Діапазон акорду - - - octave - Октава + Majb5 + Majb5 - Chord type - Тип акорду + 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 @@ -2833,7 +2816,7 @@ You can remove and move FX channels in the context menu, which is accessed by ri Jap in sen - + Япон in sen Major bebop @@ -2891,6 +2874,18 @@ You can remove and move FX channels in the context menu, which is accessed by ri Locrian Локріанська + + Chords + Акорди + + + Chord type + Тип акорду + + + Chord range + Діапазон акорду + Minor Мінор @@ -2905,7 +2900,7 @@ You can remove and move FX channels in the context menu, which is accessed by ri 5 - + 5 @@ -2919,8 +2914,8 @@ You can remove and move FX channels in the context menu, which is accessed by ri Діапазон акорду: - Chord: - Акорд: + octave(s) + Октав[а/и] Use this knob for setting the chord range in octaves. The selected chord will be played within specified number of octaves. @@ -2931,43 +2926,43 @@ You can remove and move FX channels in the context menu, which is accessed by ri Стиковка - octave(s) - Октав[а/и] + Chord: + Акорд: InstrumentMidiIOView - NOTE - NOTE - - - PROGRAM - PROGRAM - - - MIDI devices to send MIDI events to - MiDi пристрої для відправки подій на них + ENABLE MIDI INPUT + УВІМК MIDI ВХІД CHANNEL CHANNEL + + VELOCITY + VELOCITY + ENABLE MIDI OUTPUT УВІМК MIDI ВИВІД + + PROGRAM + PROGRAM + MIDI devices to receive MIDI events from MiDi пристрої-джерела подій - VELOCITY - VELOCITY + MIDI devices to send MIDI events to + MiDi пристрої для відправки подій на них - ENABLE MIDI INPUT - УВІМК MIDI ВХІД + NOTE + NOTE CUSTOM BASE VELOCITY @@ -2996,101 +2991,101 @@ You can remove and move FX channels in the context menu, which is accessed by ri InstrumentSoundShaping - Moog - Муг - - - RESO - RESO + VOLUME + VOLUME - Notch - Смуго-загороджуючий + Volume + Гучність - BandPass czpg - Серед.ЧФ czpg + CUTOFF + CUTOFF - RC BandPass 24dB - RC Серед.ЧФ 24дБ + Cutoff frequency + Зріз частоти - RC BandPass 12dB - RC Серед.ЧФ 12 дБ + RESO + RESO - LowPass - Низ.ЧФ + Resonance + Резонанс - 2x LowPass - 2х Низ.ЧФ + Envelopes/LFOs + Огибание/LFO - CUTOFF - CUTOFF + Filter type + Тип фільтру - RC HighPass 24dB - RC Вис.ЧФ 24дБ + Q/Resonance + Кіл./Резонансу - RC HighPass 12dB - RC Вис.ЧФ 12дБ + LowPass + Низ.ЧФ HiPass Вис.ЧФ - VOLUME - VOLUME + BandPass csg + Серед.ЧФ csg - Volume - Гучність + BandPass czpg + Серед.ЧФ czpg - Vocal Formant Filter - Фільтр Вокальної форманти + Notch + Смуго-загороджуючий Allpass Всі проходять - Cutoff frequency - Зріз частоти - - - Envelopes/LFOs - Огибание/LFO + Moog + Муг - Q/Resonance - Кіл./Резонансу + 2x LowPass + 2х Низ.ЧФ - Resonance - Резонанс + RC LowPass 12dB + RC Низ.ЧФ 12дБ - Filter type - Тип фільтру + RC BandPass 12dB + RC Серед.ЧФ 12 дБ - BandPass csg - Серед.ЧФ csg + RC HighPass 12dB + RC Вис.ЧФ 12дБ RC LowPass 24dB RC Низ.ЧФ 24дБ - RC LowPass 12dB - RC Низ.ЧФ 12дБ - + RC BandPass 24dB + RC Серед.ЧФ 24дБ + + + RC HighPass 24dB + RC Вис.ЧФ 24дБ + + + Vocal Formant Filter + Фільтр Вокальної форманти + 2x Moog 2x Муг @@ -3123,33 +3118,33 @@ You can remove and move FX channels in the context menu, which is accessed by ri InstrumentSoundShapingView - Hz - Гц + TARGET + ЦЕЛЬ - FREQ - ЧАСТ + 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) ви в кілька кліків миші зможете створити просто неймовірні звуки! - RESO - РЕЗО + FILTER + ФИЛЬТР - 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) ви в кілька кліків миші зможете створити просто неймовірні звуки! + 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. + Здесь вы можете выбрать фильтр для дорожки этого инструмента. Фильтры могут довольно сильно менять звучание. - cutoff frequency: - Срез частот: + Hz + Гц - FILTER - ФИЛЬТР + 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... + Эта ручка устанавливает частоту среза для выбранного фильтра. К примеру, ФНЧ будет срезать сигнал на частотах выше частоты среза, полосно-пропускающий фильтр будет хорошо пропускать сигнал только на заданной частоте и так далее... - TARGET - ЦЕЛЬ + RESO + РЕЗО Resonance: @@ -3160,12 +3155,12 @@ You can remove and move FX channels in the context menu, which is accessed by ri Эта ручка задаёт количество резонанса для фильтра, этим определяется насколько нужно усилить ближайшие к отрезанным частоты. - 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... - Эта ручка устанавливает частоту среза для выбранного фильтра. К примеру, ФНЧ будет срезать сигнал на частотах выше частоты среза, полосно-пропускающий фильтр будет хорошо пропускать сигнал только на заданной частоте и так далее... + FREQ + ЧАСТ - 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. - Здесь вы можете выбрать фильтр для дорожки этого инструмента. Фильтры могут довольно сильно менять звучание. + cutoff frequency: + Срез частот: Envelopes, LFOs and filters are not supported by the current instrument. @@ -3174,42 +3169,42 @@ You can remove and move FX channels in the context menu, which is accessed by ri InstrumentTrack - - Pitch - Тональність - - - Volume - Гучність - unnamed_track безіменна_доріжка - With this knob you can set the volume of the opened channel. - Регулювання гучності поточного каналу. + Volume + Гучність Panning Стерео - Base note - Опорна нота + Pitch + Тональність FX channel Канал ЕФ - - Pitch range - Діапазон тональності - Default preset Основна предустановка + + With this knob you can set the volume of the opened channel. + Регулювання гучності поточного каналу. + + + Base note + Опорна нота + + + Pitch range + Діапазон тональності + Master Pitch Основна тональність @@ -3218,131 +3213,131 @@ You can remove and move FX channels in the context menu, which is accessed by ri InstrumentTrackView - PAN - БАЛ + Volume + Гучність - VOL - ГУЧН + Volume: + Гучність: - MIDI - MIDI + VOL + ГУЧН - Input - Вхід + Panning + Баланс - Output - Вихід + Panning: + Баланс: - Volume - Гучність + PAN + БАЛ - Panning - Баланс + MIDI + MIDI - Panning: - Баланс: + Input + Вхід - Volume: - Гучність: + Output + Вихід FX %1: %2 - Ефект %1: %2 + ЕФ %1: %2 InstrumentTrackWindow - FX - ЕФ + GENERAL SETTINGS + ОСНОВНІ НАЛАШТУВАННЯ - PAN - БАЛ + Instrument volume + Гучність інструменту - VOL - ГУЧН + Volume: + Гучність: - FUNC - ФУНКЦ + VOL + ГУЧН - MIDI - MIDI + Panning + Баланс - PITCH - ТОН + Panning: + Стереобаланс: - RANGE - ДІАПАЗОН + PAN + БАЛ Pitch Тональність - cents - відсотків + Pitch: + Тональність: - GENERAL SETTINGS - ОСНОВНІ НАЛАШТУВАННЯ + cents + відсотків - PLUGIN - ПЛАГІН + PITCH + ТОН - Pitch: - Тональність: + FX channel + Канал ЕФ - Panning - Баланс + ENV/LFO + ОБВ/LFO - Save preset - Зберегти передустановку + FUNC + ФУНКЦ - Panning: - Стереобаланс: + FX + ЕФ - FX channel - Канал ЕФ + MIDI + MIDI - ENV/LFO - ОБВ/LFO + Save preset + Зберегти передустановку XML preset file (*.xpf) XML файл налаштувань (*.xpf) - Volume: - Гучність: + PLUGIN + ПЛАГІН Pitch range (semitones) Діапазон тональності (півтону) - Instrument volume - Гучність інструменту + RANGE + ДІАПАЗОН Save current instrument track settings in a preset file @@ -3352,14 +3347,14 @@ You can remove and move FX channels in the context menu, which is accessed by ri 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. Нитисніть тут, щоб зберегти налаштування поточної інстр. доріжки в файл предустановок. Пізніше можна завантажити цю передустановку подвійним кліком в браузері предустановок. - - Use these controls to view and edit the next/previous track in the song editor. - Використовуйте ці елементи керування для перегляду і редагування наступного/попереднього треку в музичному редакторі. - MISC РІЗНЕ + + Use these controls to view and edit the next/previous track in the song editor. + Використовуйте ці елементи керування для перегляду і редагування наступного/попереднього треку в музичному редакторі. + SAVE ЗБЕРЕГТИ @@ -3405,16 +3400,16 @@ You can remove and move FX channels in the context menu, which is accessed by ri LadspaControlView - Sorry, no help available. - Вибачте, довідки немає. + Link channels + Зв'язати канали Value: Значення: - Link channels - Зв'язати канали + Sorry, no help available. + Вибачте, довідки немає. @@ -3457,8 +3452,8 @@ You can remove and move FX channels in the context menu, which is accessed by ri Контролер LFO - Oscillator phase - Фаза хвилі + Base value + Основне значення Oscillator speed @@ -3469,12 +3464,12 @@ You can remove and move FX channels in the context menu, which is accessed by ri Розмір хвилі - Oscillator waveform - Форма хвилі + Oscillator phase + Фаза хвилі - Base value - Основне значення + Oscillator waveform + Форма хвилі Frequency Multiplier @@ -3483,95 +3478,95 @@ You can remove and move FX channels in the context menu, which is accessed by ri LfoControllerDialog - - AMT - КІЛ - LFO LFO - PHS - ФАЗА - - - SPD - ШВИД + LFO Controller + Контролер LFO BASE БАЗА + + Base amount: + Кіл-ть бази: + todo доробити - LFO Controller - Контролер LFO + SPD + ШВИД - Click here for an exponential wave. - Експонента. + LFO-speed: + Швидкість LFO: - Phase offset: - Зсув фази: + Use this knob for setting speed of the LFO. The bigger this value the faster the LFO oscillates and the faster the effect. + Ця ручка встановлює швидкість LFO. Чим більше значення, тим більша частота осциллятора. - Click here for a saw-wave. - Зигзаг. + AMT + КІЛ - Click here for white-noise. - Білий шум. + Modulation amount: + Кількість модуляції: - LFO-speed: - Швидкість LFO: - - - Base 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). - Click here for a sine-wave. - Синусоїда. + PHS + ФАЗА - Use this knob for setting speed of the LFO. The bigger this value the faster the LFO oscillates and the faster the effect. - Ця ручка встановлює швидкість LFO. Чим більше значення, тим більша частота осциллятора. + Phase offset: + Зсув фази: degrees градуси - Click here for a user-defined shape. -Double click to pick a file. - Натисніть тут для визначення своєї форми. -Подвійне натискання для вибору файлу. + 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º, хвиля спочатку піде вниз, а не вгору, так само як і для квадратної хвилі. - 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). + Click here for a sine-wave. + Синусоїда. - Modulation amount: - Кількість модуляції: + Click here for a triangle-wave. + Трикутник. + + + Click here for a saw-wave. + Зигзаг. Click here for a square-wave. Квадрат. - 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 an exponential wave. + Експонента. - Click here for a triangle-wave. - Трикутник. + Click here for white-noise. + Білий шум. + + + Click here for a user-defined shape. +Double click to pick a file. + Натисніть тут для визначення своєї форми. +Подвійне натискання для вибору файлу. Click here for a moog saw-wave. @@ -3579,106 +3574,119 @@ Double click to pick a file. - MainWindow + LmmsCore - &New - &N Новий + Generating wavetables + Генерування синтезатора звукозаписів - Help - Довідка + Initializing data structures + Ініціалізація структур даних - &Edit - &E Редагування + Opening audio and midi devices + Відкриття аудіо та міді пристроїв - &Help - &H Довідка + Launching mixer threads + Запуск потоків міксера + + + MainWindow - &Quit - &Q Вийти + Could not save config-file + Не можу зберегти налаштування - &Save - &S Зберегти + 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. Можливо, ви не володієте правами на запис в нього. +Будь ласка, перевірте свої права і спробуйте знову. - About - Про програму + &New + &N Новий - Show/hide Song-Editor - Показати/сховати музичний редактор + &Open... + &O Відкрити... - Configuration file - Файл налаштувань + &Save + &S Зберегти - What's this? - Що це? + Save &As... + &A Зберегти як... - Error while parsing configuration file at line %1:%2: %3 - Помилка під час обробки файлу налаштувань в рядку %1:%2:%3 + Import... + Імпорт... - LMMS %1 - LMMS %1 + E&xport... + &X Експорт ... - Show/hide FX Mixer - Показати/сховати мікшер ЕФ + &Quit + &Q Вийти - Open existing project - Відкрити існуючий проект + &Edit + &E Редагування - Show/hide Piano-Roll - Показати/сховати нотний редактор + Settings + Параметри &Tools &T Сервіс - Save &As... - &A Зберегти як... + &Help + &H Довідка - LMMS (*.mmp *.mmpz) - LMMS (*.mmp *.mmpz) + Help + Довідка - Click here to show or hide the Piano-Roll. With the help of the Piano-Roll you can edit melodies in an easy way. - Запуск редатора нот. З його допомогою ви можете легко редагувати мелодії. + What's this? + Що це? - Show/hide project notes - Показати/сховати замітки до проекту + About + Про програму + + + Create new project + Створити новий проект Create new project from template Створити новий проект по шаблону - The current project was modified since last saving. Do you want to save it now? - Проект був змінений. Зберегти його зараз? + Open existing project + Відкрити існуючий проект - Create new project - Створити новий проект + Recently opened projects + Нещодавні проекти - Click here to show or hide the project notes window. In this window you can put down your project notes. - Ця кнопка показує / ховає вікно з нотатками. У цьому вікні ви можете поміщати будь-які коментарі до своєї композиції. + Save current project + Зберегти поточний проект - 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. - Сховати / показати мікшер ефектів. Він є потужним інструментом для управління ефектами. Ви можете вставляти ефекти в різні канали. + Export current project + Експорт проекту + + + 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. @@ -3686,92 +3694,93 @@ Double click to pick a file. Також ви можете вставляти і пересувати записи прямо у списку відтворення. - Untitled - Без назви + Beat+Bassline Editor + Редактор шаблонів - Recently opened projects - Нещодавні проекти + 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. + Показати чи сховати ритм-бас редактор. Він необхідний для установки ритму, відкриття, додавання і видалення каналів, а також вирізання, копіювання і вставки ритм-бас шаблонів і схожих речей. - &Open... - &O Відкрити... + Piano Roll + Нотний редактор - Help not available - Довідка недоступна + Click here to show or hide the Piano-Roll. With the help of the Piano-Roll you can edit melodies in an easy way. + Запуск редатора нот. З його допомогою ви можете легко редагувати мелодії. - Save current project - Зберегти поточний проект + Automation Editor + Редактор автоматизації - 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. + Показати / сховати вікно редактора автоматизації. З його допомогою ви можете легко редагувати динаміку обраних величин. - 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. + FX Mixer + Мікшер Ефектів - Import... - Імпорт... + 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. + Сховати / показати мікшер ефектів. Він є потужним інструментом для управління ефектами. Ви можете вставляти ефекти в різні канали. - E&xport... - &X Експорт ... + Project Notes + Примітки проекту - Could not save config-file - Не можу зберегти налаштування + Click here to show or hide the project notes window. In this window you can put down your project notes. + Ця кнопка показує / ховає вікно з нотатками. У цьому вікні ви можете поміщати будь-які коментарі до своєї композиції. - Export current project - Експорт проекту + Controller Rack + Стійка контролерів - 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. - Показати / сховати вікно редактора автоматизації. З його допомогою ви можете легко редагувати динаміку обраних величин. + Untitled + Без назви - Version %1 - Версія %1 + LMMS %1 + LMMS %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. - Не можу записати налаштування в файл %1. Можливо, ви не володієте правами на запис в нього. -Будь ласка, перевірте свої права і спробуйте знову. + Project not saved + Проект не збережений - Settings - Параметри + The current project was modified since last saving. Do you want to save it now? + Проект був змінений. Зберегти його зараз? - Project not saved - Проект не збережений + Help not available + Довідка недоступна - Show/hide Beat+Bassline Editor - Показати/сховати ритм-бас редактор + 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. - Root directory - Коренева тека + LMMS (*.mmp *.mmpz) + LMMS (*.mmp *.mmpz) - 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. - Показати чи сховати ритм-бас редактор. Він необхідний для установки ритму, відкриття, додавання і видалення каналів, а також вирізання, копіювання і вставки ритм-бас шаблонів і схожих речей. + Version %1 + Версія %1 - Show/hide controller rack - Показати/сховати керування контролерами + Configuration file + Файл налаштувань + + + Error while parsing configuration file at line %1:%2: %3 + Помилка під час обробки файлу налаштувань в рядку %1:%2:%3 Volumes - Щось не зовсім зрозуміло Гучності @@ -3782,14 +3791,6 @@ Please make sure you have write-access to the file and try again. Redo Повторити - - Preparing plugin browser - Підготовка браузера плагінів - - - Preparing file browsers - Підготовка переглядача файлів - My Projects Мої проекти @@ -3810,10 +3811,6 @@ Please make sure you have write-access to the file and try again. My Computer Мій комп'ютер - - Loading background artwork - Завантаження фонового зображення - &File &Файл @@ -3830,14 +3827,6 @@ Please make sure you have write-access to the file and try again. E&xport Tracks... &Експортувати треки ... - - Export &MIDI... - Експорт у &MIDI ... - - - &View - &Перегляд - Online Help Онлайн Допомога @@ -3855,52 +3844,64 @@ Please make sure you have write-access to the file and try again. Зберегти проект - LMMS Project - LMMS проект + Project recovery + Відновлення проекту - LMMS Project Template - Шаблон LMMS проекту + There is a recovery file present. It looks like the last session did not end properly or another instance of LMMS is already running. Do you want to recover the project of this session? + Присутній файл відновлення. Схоже, остання сесія не закінчилася належним чином або інший екземпляр LMMS вже запущений. Ви хочете, відновити проект цієї сесії? - Song Editor - Музичний редактор + Recover + Відновлення - Beat+Bassline Editor - Редактор шаблонів + Recover the file. Please don't run multiple instances of LMMS when you do this. + Відновлення файлу. Будь ласка, не запускайте кілька копій LMMS під час цієї операції. - Piano Roll - Нотний редактор + Ignore + Ігнорувати - Automation Editor - Редактор автоматизації + Launch LMMS as usual but with automatic backup disabled to prevent the present recover file from being overwritten. + Запуск LMMS як зазвичай, але з відключеним автоматичним резервуванням, щоб запобігти перезапису файлу відновлення. - FX Mixer - Мікшер Ефектів + Discard + Відкинути - Project Notes - Примітки проекту + Launch a default session and delete the restored files. This is not reversible. + Запуск за замовчуванням з видаленням файла відновлення. Ця дія не відворотня. - Controller Rack - Стійка контролерів + Quit + Вихід - Volume as dBV - Гучність в дБВ + Shut down LMMS with no further action. + Вимкнути LMMS без будь-яких подальших дій. - Smooth scroll - Плавне прокручування + Exit + Вийти - Enable note labels in piano roll - Включити позначення нот у музичному редакторі + Preparing plugin browser + Підготовка браузера плагінів + + + Preparing file browsers + Підготовка переглядача файлів + + + Root directory + Кореневий каталог + + + Loading background artwork + Завантаження фонового зображення New from template @@ -3910,10 +3911,70 @@ Please make sure you have write-access to the file and try again. Save as default template Зберегти як шаблон за замовчуванням + + Export &MIDI... + Експорт в &MIDI ... + + + &View + &V Перегляд + Toggle metronome Переключити метроном + + Show/hide Song-Editor + Показати/сховати музичний редактор + + + Show/hide Beat+Bassline Editor + Показати/сховати ритм-бас редактор + + + Show/hide Piano-Roll + Показати/сховати нотний редактор + + + Show/hide Automation Editor + Показати/сховати редактор автоматизації + + + Show/hide FX Mixer + Показати/сховати мікшер ЕФ + + + Show/hide project notes + Показати/сховати замітки до проекту + + + Show/hide controller rack + Показати/сховати керування контролерами + + + Recover session. Please save your work! + Відновлення сесії. Будь ласка, збережіть свою роботу! + + + Automatic backup disabled. Remember to save your work! + Автоматичне резервне копіювання відключено. Не забудьте зберегти вашу роботу! + + + Recovered project not saved + Відновлений проект не збережено + + + This project was recovered from the previous session. It is currently unsaved and will be lost if you don't save it. Do you want to save it now? + Цей проект буво відновлено з попередньої сесії. В даний час він не збережений і буде втрачений, якщо ви його не збережете. Ви хочете, зберегти його зараз? + + + LMMS Project + LMMS проект + + + LMMS Project Template + Шаблон LMMS проекту + Overwrite default template? Переписати шаблон за замовчуванням? @@ -3922,17 +3983,29 @@ Please make sure you have write-access to the file and try again. This will overwrite your current default template. Це перезапише поточний шаблон за замовчуванням. + + Volume as dBV + Відображати гучність в децибелах + + + Smooth scroll + Плавне прокручування + + + Enable note labels in piano roll + Включити позначення нот у музичному редакторі + MeterDialog - - Meter Denominator - Шкала поділів - Meter Numerator Шкала чисел + + Meter Denominator + Шкала поділів + TIME SIG ПЕРІОД @@ -3951,17 +4024,21 @@ Please make sure you have write-access to the file and try again. MidiController - - unnamed_midi_controller - нерозпізнаний міді контролер - 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 за замовчуванням в налаштуваннях (Правка-> Налаштування), тому після імпорту міді файлу звук відтворюватися не буде. @@ -3971,10 +4048,6 @@ Please make sure you have write-access to the file 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. Ви не увімкнули підтримку програвача SoundFont2 при компіляції LMMS, він використовується для додавання основного звуку в імпортовані Міді файли, тому після імпорту цього міді файлу звуку не буде. - - Setup incomplete - Установку не завершено - Track Трек @@ -3983,44 +4056,44 @@ Please make sure you have write-access to the file and try again. MidiPort - Receive MIDI-events - Приймати події MIDI - - - Output MIDI program - Програма для виведення MiDi + Input channel + Вхід Output channel Вихід - Send MIDI-events - Відправляти події MIDI + Input controller + Контролер входу Output controller Контролер виходу - Input controller - Контролер входу + Fixed input velocity + Постійна швидкість введення - Input channel - Вхід + Fixed output velocity + Постійна швидкість виведення - Fixed output note - Постійний вихід нот + Output MIDI program + Програма для виведення MiDi - Fixed input velocity - Постійна швидкість введення + Receive MIDI-events + Приймати події MIDI - Fixed output velocity - Постійна швидкість виведення + Send MIDI-events + Відправляти події MIDI + + + Fixed output note + Постійний вихід нот Base velocity @@ -4033,228 +4106,112 @@ Please make sure you have write-access to the file and try again. DEVICE ПРИСТРІЙ + + + MonstroInstrument - Apple MIDI - + Osc 1 Volume + Гучність осциллятора 1 - WinMM MIDI - + Osc 1 Panning + Баланс осциллятора 1 - OSS Raw-MIDI (Open Sound System) - OSS Raw-MIDI (Відкрита Звукова Система) + Osc 1 Coarse detune + Грубе підстроювання осциллятора 1 - ALSA-Sequencer (Advanced Linux Sound Architecture) - ALSA-Sequencer (Передова Linux Звукова Архітектура) + Osc 1 Fine detune left + Точне підстроювання лівого каналу осциллятора 1 - ALSA Raw-MIDI (Advanced Linux Sound Architecture) - ALSA Raw-MIDI (Передова Linux Звукова Архітектура) + Osc 1 Fine detune right + Точне підстроювання правого каналу осциллятора 1 - Dummy (no MIDI support) - Dummy (без підтримки MIDI) + Osc 1 Stereo phase offset + Зміщення стерео-фази осциллятора 1 - - - MonstroInstrument - Sine wave - Синусоїда + Osc 1 Pulse width + Довжина імпульсу осциллятора 1 - Bandlimited Triangle wave - Трикутна хвиля з обмеженою смугою + Osc 1 Sync send on rise + Синхронізація підйому осциллятора 1 - Bandlimited Saw wave - Зигзаг хвиля з обмеженою смугою + Osc 1 Sync send on fall + Синхронізація падіння осциллятора 1 - Bandlimited Ramp wave - Спадаюча хвиля з обмеженою смугою + Osc 2 Volume + Гучність осциллятора 2 - Bandlimited Square wave - Квадратна хвиля з обмеженою смугою + Osc 2 Panning + Баланс осциллятора 2 - Bandlimited Moog saw wave - Муг-зигзаг хвиля з обмеженою смугою + Osc 2 Coarse detune + Грубе підстроювання осциллятора 2 - Soft square wave - М'яка прямокутна хвиля + Osc 2 Fine detune left + Точне підстроювання лівого каналу осциллятора 2 - Absolute sine wave - Абсолютна синусоїдна хвиля + Osc 2 Fine detune right + Точне підстроювання правого каналу осциллятора 2 - Exponential wave - Експоненціальна хвиля + Osc 2 Stereo phase offset + Зміщення стерео-фази осциллятора 2 - White noise - Білий шум + Osc 2 Waveform + Форма сигналу осциллятора 2 - Digital Triangle wave - Цифрова трикутна хвиля + Osc 2 Sync Hard + Жорстка синхронізація осциллятора 2 - Digital Saw wave - Цифрова зигзаг хвиля + Osc 2 Sync Reverse + Верерс синхронізація осциллятора 2 - Digital Ramp wave - Цифрова спадна хвиля + Osc 3 Volume + Гучність осциллятора 3 - Digital Square wave - Цифрова квадратна хвиля + Osc 3 Panning + Баланс осциллятора 3 - Digital Moog saw wave - Цифрова Муг-зигзаг хвиля + Osc 3 Coarse detune + Грубе підстроювання осциллятора 3 - Triangle wave - Трикутна хвиля + Osc 3 Stereo phase offset + Зміщення стерео-фази осциллятора 3 - Saw wave - Зигзаг + Osc 3 Sub-oscillator mix + Змішення суб-генератора осциллятора 3 - Ramp wave - Спадна хвиля + Osc 3 Waveform 1 + Форма 1 сигналу осциллятора 3 - Square wave - Квадратна хвиля + Osc 3 Waveform 2 + Форма 2 сигналу осциллятора 3 - Moog saw wave - Муг-зигзаг хвиля - - - Abs. sine wave - Синусоїда по модулю - - - Random - Випадково - - - Random smooth - Випадкове зглажування - - - Osc 1 Volume - Гучність осциллятора 1 - - - Osc 1 Panning - Баланс осциллятора 1 - - - Osc 1 Coarse detune - Грубе підстроювання осциллятора 1 - - - Osc 1 Fine detune left - Точне підстроювання лівого каналу осциллятора 1 - - - Osc 1 Fine detune right - Точне підстроювання правого каналу осциллятора 1 - - - Osc 1 Stereo phase offset - Зміщення стерео-фази осциллятора 1 - - - Osc 1 Pulse width - Довжина імпульсу осциллятора 1 - - - Osc 1 Sync send on rise - Синхронізація підйому осциллятора 1 - - - Osc 1 Sync send on fall - Синхронізація падіння осциллятора 1 - - - Osc 2 Volume - Гучність осциллятора 2 - - - Osc 2 Panning - Баланс осциллятора 2 - - - Osc 2 Coarse detune - Грубе підстроювання осциллятора 2 - - - Osc 2 Fine detune left - Точне підстроювання лівого каналу осциллятора 2 - - - Osc 2 Fine detune right - Точне підстроювання правого каналу осциллятора 2 - - - Osc 2 Stereo phase offset - Зміщення стерео-фази осциллятора 2 - - - Osc 2 Waveform - Форма сигналу осциллятора 2 - - - Osc 2 Sync Hard - Жорстка синхронізація осциллятора 2 - - - Osc 2 Sync Reverse - Верерс синхронізація осциллятора 2 - - - Osc 3 Volume - Гучність осциллятора 3 - - - Osc 3 Panning - Баланс осциллятора 3 - - - Osc 3 Coarse detune - Грубе підстроювання осциллятора 3 - - - Osc 3 Stereo phase offset - Зміщення стерео-фази осциллятора 3 - - - Osc 3 Sub-oscillator mix - Змішення суб-генератора осциллятора 3 - - - Osc 3 Waveform 1 - Форма 1 сигналу осциллятора 3 - - - Osc 3 Waveform 2 - Форма 2 сигналу осциллятора 3 - - - Osc 3 Sync Hard - Жорстка синхронізація осциллятора 3 + Osc 3 Sync Hard + Жорстка синхронізація осциллятора 3 Osc 3 Sync Reverse @@ -4532,6 +4489,98 @@ Please make sure you have write-access to the file and try again. Sub3-LFO2 Sub3-LFO2 + + Sine wave + Синусоїда + + + Bandlimited Triangle wave + Трикутна хвиля з обмеженою смугою + + + Bandlimited Saw wave + Зигзаг хвиля з обмеженою смугою + + + Bandlimited Ramp wave + Спадаюча хвиля з обмеженою смугою + + + Bandlimited Square wave + Квадратна хвиля з обмеженою смугою + + + Bandlimited Moog saw wave + Муг-зигзаг хвиля з обмеженою смугою + + + Soft square wave + М'яка прямокутна хвиля + + + Absolute sine wave + Абсолютна синусоїдна хвиля + + + Exponential wave + Експоненціальна хвиля + + + White noise + Білий шум + + + Digital Triangle wave + Цифрова трикутна хвиля + + + Digital Saw wave + Цифрова зигзаг хвиля + + + Digital Ramp wave + Цифрова спадна хвиля + + + Digital Square wave + Цифрова квадратна хвиля + + + Digital Moog saw wave + Цифрова Муг-зигзаг хвиля + + + Triangle wave + Трикутна хвиля + + + Saw wave + Зигзаг + + + Ramp wave + Спадна хвиля + + + Square wave + Квадратна хвиля + + + Moog saw wave + Муг-зигзаг хвиля + + + Abs. sine wave + Синусоїда по модулю + + + Random + Випадково + + + Random smooth + Випадкове зглажування + MonstroView @@ -4733,7 +4782,7 @@ PM (ФМ) режим означає Фазова Модуляція: Осцил Coarse detune - Грубе предналаштування + Грубе підстроювання semitones @@ -4958,7 +5007,7 @@ PM (ФМ) режим означає Фазова Модуляція: Осцил Coarse detune - Грубе предналаштування + Грубе підстроювання Envelope length @@ -5067,45 +5116,45 @@ PM (ФМ) режим означає Фазова Модуляція: Осцил OscillatorObject - - Osc %1 fine detuning right - Підстроювання правого каналу осциллятора %1 тонка - Osc %1 volume Гучність осциллятора %1 - Osc %1 phase-offset - Зміщення фази осциллятора %1 + Osc %1 panning + Стереобаланс для осциллятора %1 Osc %1 coarse detuning Підстроювання осциллятора %1 грубе - Modulation type %1 - Тип модуляції %1 + Osc %1 fine detuning left + Точне підстроювання лівого каналу осциллятора %1 - Osc %1 stereo phase-detuning - Підстроювання стерео-фази осциллятора %1 + Osc %1 fine detuning right + Підстроювання правого каналу осциллятора %1 тонка - Osc %1 waveform - Форма сигналу осциллятора %1 + Osc %1 phase-offset + Зміщення фази осциллятора %1 - Osc %1 fine detuning left - Точне підстроювання лівого каналу осциллятора %1 + Osc %1 stereo phase-detuning + Підстроювання стерео-фази осциллятора %1 Osc %1 wave shape Гладкість сигналу осциллятора %1 - Osc %1 panning - Стереобаланс для осциллятора %1 + Modulation type %1 + Тип модуляції %1 + + + Osc %1 waveform + Форма сигналу осциллятора %1 Osc %1 harmonic @@ -5113,51 +5162,86 @@ PM (ФМ) режим означає Фазова Модуляція: Осцил - PatmanView + PatchesDialog - Loop - Повтор + Qsynth: Channel Preset + Q-Синтезатор: Канал передустановлено - Tune - Підлаштувати + Bank selector + Селектор банку - Patch-Files (*.pat) - Патч-файли (*.pat) + Bank + Банк - Open other patch - Відкрити інший патч + Program selector + Селектор програм - Tune mode - Тип підстроювання + Patch + Патч - Open patch file - Відкрити патч-файл + Name + І'мя - Loop mode - Режим повтору + OK + ОК - No file selected - Файл не вибрано + Cancel + Скасувати + + + + 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 @@ -5189,17 +5273,25 @@ PM (ФМ) режим означає Фазова Модуляція: Осцил use mouse wheel to set velocity of a step використовуйте колесо миші для встановлення кроку гучності + + double-click to open in Piano Roll + Відкрити в редакторі нот подвійним клацанням миші + + + Clone Steps + Клонувати такти + PeakController - - Peak Controller Bug - Контролер вершин з багом - 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 контролери вершин не можуть правильно підключатися. Будь-ласка переконайтеся, що контролери вершин правильно приєднані і перезбережіть цей файл, вибачте, за заподіяні незручності. @@ -5218,50 +5310,49 @@ PM (ФМ) режим означає Фазова Модуляція: Осцил PeakControllerEffectControlDialog - - AMNT - ГЛИБ - BASE БАЗА - ATCK - ВСТУП + Base amount: + Базове значення: - DCAY - ЗГАС + Modulation amount: + Глибина модуляції: - MULT - МНОЖ + Attack: + Вступ: - Amount Multiplicator: - Величина множника: + Release: + Зменшення: - Base amount: - Базове значення: + AMNT + ГЛИБ - Attack: - Вступ: + MULT + МНОЖ - Modulation amount: - Глибина модуляції: + Amount Multiplicator: + Величина множника: - Release: - Зменшення: + ATCK + ВСТУП + + + DCAY + ЗГАС TRES - Поріг? - ПОР + ПОР Treshold: @@ -5271,33 +5362,33 @@ PM (ФМ) режим означає Фазова Модуляція: Осцил PeakControllerEffectControls - Amount Multiplicator - Величина множника - - - Attack - Вступ + Base value + Опорне значення Modulation amount Глибина модуляції - - Abs Value - Абс Значення - Mute output Заглушити вивід - Base value - Опорне значення + Attack + Вступ Release Зменшення + + Abs Value + Абс Значення + + + Amount Multiplicator + Величина множника + Treshold Поріг @@ -5306,28 +5397,28 @@ PM (ФМ) режим означає Фазова Модуляція: Осцил PianoRoll - No chord - Прибрати акорди + Please open a pattern by double-clicking on it! + Відкрийте шаблон за допомогою подвійного клацання мишею! - No scale - Без підйому + Last note + По останій ноті - Note Panning - Стереофонія нот + Note lock + Фіксація нот Note Velocity Гучність нот - Mark/unmark current semitone - Відмітити/Зняти відмітку з поточного півтону + Note Panning + Стереофонія нот - Unmark all - Зняти виділення + Mark/unmark current semitone + Відмітити/Зняти відмітку з поточного півтону Mark current scale @@ -5338,16 +5429,16 @@ PM (ФМ) режим означає Фазова Модуляція: Осцил Відмітити поточний акорд - Last note - По останій ноті + Unmark all + Зняти виділення - Note lock - Фіксація нот + No scale + Без підйому - Please open a pattern by double-clicking on it! - Відкрийте шаблон за допомогою подвійного клацання мишею! + No chord + Прибрати акорди Velocity: %1% @@ -5375,7 +5466,6 @@ PM (ФМ) режим означає Фазова Модуляція: Осцил Select all notes on this key - тональності ж? Вибрати всі ноти на цій тональності @@ -5490,17 +5580,9 @@ PM (ФМ) режим означає Фазова Модуляція: Осцил 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. Дозволяє вибрати акорд, який LMMS потім зможе намалювати або підсвітити. У цьому меню можна знайти найбільш популярні акорди. Після того, як ви вибрали акорд, натисніть в будь-якому місці, щоб поставити його, а правим кліком по віртуальній клавіатурі відкривається контекстне меню і підсвічування акорду. Для повернення в режим однієї ноти потрібно вибрати "Без акорду" в цьому випадаючому меню. - - Piano-Roll - %1 - Нотний редактор - %1 - - - Piano-Roll - no pattern - Нотний редактор - без шаблону - Edit actions - Редагувати дії + Зміна Copy paste controls @@ -5514,6 +5596,18 @@ PM (ФМ) режим означає Фазова Модуляція: Осцил Zoom and note controls Управління масштабом і нотами + + Piano-Roll - %1 + Нотний редактор - %1 + + + Piano-Roll - no pattern + Нотний редактор - без шаблону + + + Quantize + Квантовать + PianoView @@ -5524,24 +5618,24 @@ PM (ФМ) режим означає Фазова Модуляція: Осцил Plugin - - Error while loading plugin - Помилка завантаження модуля - - - Failed to load plugin "%1"! - Не вдалося завантажити модуль «%1»! - Plugin not found Модуль не знайдено - The plugin "%1" wasn't found or could not be loaded! + 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»! + PluginBrowser @@ -5589,7 +5683,7 @@ Reason: "%2" %1+Z - + %1+Z &Redo @@ -5597,7 +5691,7 @@ Reason: "%2" %1+Y - + %1+Y &Copy @@ -5605,7 +5699,7 @@ Reason: "%2" %1+C - + %1+C Cu&t @@ -5613,7 +5707,7 @@ Reason: "%2" %1+X - + %1+X &Paste @@ -5621,7 +5715,7 @@ Reason: "%2" %1+V - + %1+V Format Actions @@ -5633,7 +5727,7 @@ Reason: "%2" %1+B - + %1+B &Italic @@ -5641,7 +5735,7 @@ Reason: "%2" %1+I - + %1+I &Underline @@ -5649,7 +5743,7 @@ Reason: "%2" %1+U - + %1+U &Left @@ -5657,7 +5751,7 @@ Reason: "%2" %1+L - + %1+L C&enter @@ -5665,7 +5759,7 @@ Reason: "%2" %1+E - + %1+E &Right @@ -5673,7 +5767,7 @@ Reason: "%2" %1+R - + %1+R &Justify @@ -5681,7 +5775,7 @@ Reason: "%2" %1+J - + %1+J &Color... @@ -5690,60 +5784,60 @@ Reason: "%2" ProjectRenderer - - Compressed OGG-File (*.ogg) - Стиснутий файл OGG (*.ogg) - WAV-File (*.wav) Файл WAV (*.wav) + + Compressed OGG-File (*.ogg) + Стиснутий файл OGG (*.ogg) + QWidget - No - Ні - - - Yes - Так + Name: + І'мя: Maker: Розробник: - File: - Файл: + Copyright: + Авторське право: - Name: - І'мя: + Requires Real Time: + Потрібна обробка в реальному часі: - Copyright: - Авторське право: + Yes + Так - Channels In: - Канали в: + No + Ні + + + Real Time Capable: + Робота в реальному часі: In Place Broken: Замість зламаного: - Channels Out: - Канали з: + Channels In: + Канали в: - Requires Real Time: - Потрібна обробка в реальному часі: + Channels Out: + Канали з: - Real Time Capable: - Робота в реальному часі: + File: + Файл: File: %1 @@ -5760,44 +5854,44 @@ Reason: "%2" SampleBuffer - DrumSynth-Files (*.ds) - Файли DrumSynth (*.ds) - - - AU-Files (*.au) - Файли AU (*.au) + Open audio file + Відкрити звуковий файл Wave-Files (*.wav) Файли Wave (*.wav) - Open audio file - Відкрити звуковий файл + OGG-Files (*.ogg) + Файли OGG (*.ogg) - AIFF-Files (*.aif *.aiff) - Файли AIFF (*.aif *.aiff) + DrumSynth-Files (*.ds) + Файли DrumSynth (*.ds) - RAW-Files (*.raw) - Файли RAW (*.raw) + FLAC-Files (*.flac) + Файли FLAC (*.flac) - OGG-Files (*.ogg) - Файли OGG (*.ogg) + SPEEX-Files (*.spx) + Файли SPEEX (*.spx) VOC-Files (*.voc) Файли VOC (*.voc) - FLAC-Files (*.flac) - Файли FLAC (*.flac) + AIFF-Files (*.aif *.aiff) + Файли AIFF (*.aif *.aiff) - SPEEX-Files (*.spx) - Файли SPEEX (*.spx) + AU-Files (*.au) + Файли AU (*.au) + + + RAW-Files (*.raw) + Файли RAW (*.raw) All Audio-Files (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw) @@ -5806,6 +5900,14 @@ Reason: "%2" SampleTCOView + + double-click to select sample + Виберіть запис подвійним натисненням миші + + + Delete (middle mousebutton) + Видалити (середня кнопка мишки) + Cut Вирізати @@ -5818,18 +5920,6 @@ Reason: "%2" Paste Вставити - - Delete (middle mousebutton) - Видалити (середня кнопка мишки) - - - Set/clear record - Встановити/очистити запис - - - double-click to select sample - Виберіть запис подвійним натисненням миші - Mute/unmute (<%1> + middle click) Заглушити/включити (<%1> + середня кнопка миші) @@ -5852,10 +5942,6 @@ Reason: "%2" SampleTrackView - - VOL - ГУЧН - Track volume Гучність доріжки @@ -5864,6 +5950,10 @@ Reason: "%2" Channel volume: Гучність каналу: + + VOL + ГУЧН + Panning Баланс @@ -5955,17 +6045,13 @@ Reason: "%2" Paths Шляхи - - Directories - Каталоги - LMMS working directory Робочий каталог LMMS - Themes directory - Каталог тем + VST-plugin directory + Каталог модулів VST Background artwork @@ -5975,22 +6061,6 @@ Reason: "%2" FL Studio installation directory Каталог установки FL Studio - - VST-plugin directory - Каталог модулів VST - - - GIG directory - Каталог GIG - - - SF2 directory - Каталог SF2 - - - LADSPA plugin directories - Каталог модулів LADSPA - STK rawwave directory Каталог STK rawwave @@ -6065,14 +6135,6 @@ Latency: %2 ms Choose LMMS working directory Вибір робочого каталогу LMMS - - Choose your GIG directory - Вибір каталогу GIG - - - Choose your SF2 directory - Вибір каталогу SF2 - Choose your VST-plugin directory Вибір свого каталогу для модулів VST @@ -6113,6 +6175,56 @@ Latency: %2 ms Reopen last project on start Відкривати останній проект при запуску + + Directories + Каталоги + + + Themes directory + Каталог тем + + + GIG directory + Каталог GIG + + + SF2 directory + Каталог SF2 + + + LADSPA plugin directories + Каталог модулів LADSPA + + + Auto save + Авто-збереження + + + Choose your GIG directory + Виберіть каталог GIG + + + Choose your SF2 directory + Виберіть каталог SF2 + + + minutes + хвилин + + + minute + хвилина + + + Auto save interval: %1 %2 + Інтервал автоматичного збереження: %1 %2 + + + Set the time between automatic backup to %1. +Remember to also save your project manually. + Встановіть проміжок часу автоматичного резервного копіювання в %1. +Не забудьте також зберегти проект вручну. + Song @@ -6184,86 +6296,90 @@ Latency: %2 ms Select file for project-export... Вибір файлу для експорту проекту ... + + The following errors occured while loading: + Наступні помилки виникли при завантаженні: + MIDI File (*.mid) MIDI-файл (* mid) - The following errors occured while loading: - Наступні помилки виникли при завантаженні: + LMMS Error report + Повідомлення про помилку в LMMS SongEditor - Tempo - Темп + Could not open file + Не можу відкрити файл - Master pitch - Основна тональність + Could not write file + Не можу записати файл - TEMPO/BPM - ТЕМП/BPM + 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, ймовірно, немає дозволу на його читання. +Будь-ласка переконайтеся, що є принаймні права на читання цього файлу і спробуйте ще раз. - master pitch - основна тональність + Error in file + Помилка у файлі - master volume - основна гучність + The file %1 seems to contain errors and therefore can't be loaded. + Файл %1 можливо містить помилки через які не може завантажитися. - Master volume - Основна гучність + Tempo + Темп - Error in file - Помилка у файлі + TEMPO/BPM + ТЕМП/BPM - Could not open file - Не можу відкрити файл + 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). На кожен такт приходить чотири удари, так що темп в ударах в хвилину фактично вказує, скільки чвертей такту програється за хвилину (або, що те ж, кількість тактів, що програються за чотири хвилини). - Could not write file - Не можу записати файл + High quality mode + Висока якість - Value: %1% - Значення: %1% + Master volume + Основна гучність - High quality mode - Висока якість + master volume + основна гучність - 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 для запису, можливо, немає дозволу на запис в цей файл, будь-ласка упевніться, що є доступ до цього файлу і спробуйте знову. + Master pitch + Основна тональність - 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, ймовірно, немає дозволу на його читання. -Будь-ласка переконайтеся, що є принаймні права на читання цього файлу і спробуйте ще раз. + master pitch + основна тональність - Value: %1 semitones - Значення: %1 півтон(у/ів) + Value: %1% + Значення: %1% - The file %1 seems to contain errors and therefore can't be loaded. - Файл %1 можливо містить помилки через які не може завантажитися. + Value: %1 semitones + Значення: %1 півтон(у/ів) - tempo of song - Темп музики + 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 для запису, можливо, немає дозволу на запис в цей файл, будь-ласка упевніться, що є доступ до цього файлу і спробуйте знову. Project Version Mismatch @@ -6273,6 +6389,14 @@ Latency: %2 ms This %1 was created with LMMS version %2, but version %3 is installed Цей %1 було створено в LMMS версії %2, але встановлена ​​версія %3 + + template + шаблон + + + project + проект + SongEditorWindow @@ -6326,11 +6450,11 @@ Latency: %2 ms Track actions - Відстежувати дії + Стежити Edit actions - Редагувати дії + Зміна Timeline controls @@ -6368,61 +6492,52 @@ Latency: %2 ms - TabWidget + SubWindow - Settings for %1 - Налаштування для %1 + Close + Закрити - - - TempoSyncKnob - Synced to Quarter Note - Синхро по чверті ноти + Maximize + Розгорнути - Whole note - Ціла нота + Minimize + Згорнути - Half note - Півнота + Restore + Відновити + + + TabWidget - Synced to Eight Beats - Синхро по 8 ударам + Settings for %1 + Налаштування для %1 + + + TempoSyncKnob - 32nd note - 1/32 ноти + Tempo Sync + Синхронізація темпу No Sync Синхронізації немає - - Synced to 16th Note - Синхро по 1/16 ноти - Eight beats Вісім ударів (дві ноти) - Tempo Sync - Синхронізація темпу - - - Synced to 32nd Note - Синхро по 1/32 ноти - - - Synced to Whole Note - Синхро по цілій ноті + Whole note + Ціла нота - Synced to 8th Note - Синхро по 1/8 ноти + Half note + Півнота Quarter note @@ -6436,6 +6551,10 @@ Latency: %2 ms 16th note 1/16 ноти + + 32nd note + 1/32 ноти + Custom... Своя... @@ -6444,19 +6563,67 @@ Latency: %2 ms Custom Своя + + Synced to Eight Beats + Синхро по 8 ударам + + + Synced to Whole Note + Синхро по цілій ноті + Synced to Half Note Синхро по половині ноти - - - TimeDisplayWidget - click to change time units - натисни для зміни одиниць часу + 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 + натисніть для зміни одиниць часу + + + MIN + ХВ + + + SEC + С + + + MSEC + МС + + + BAR + БАР + + + BEAT + БІТ + + + TICK + ТІК + + + TimeLineWidget Enable/disable auto-scrolling @@ -6505,45 +6672,45 @@ Latency: %2 ms TrackContainer - Couldn't open file - Не можу відкрити файл - - - Loading project... - Завантаження проекту ... - - - Importing FLP-file... - Імпортую файл FLP... - - - Cancel - Скасувати + Couldn't import file + Не можу імпортувати файл - Couldn't find a filter for importing file %1. + 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 %1 for reading. + 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 для запису. Перевірте, чи володієте ви правами на запис в обраний файл і каталог що його містить і спробуйте знову! - Couldn't import file - Не можу імпортувати файл + Loading project... + Завантаження проекту ... - Importing MIDI-file... - Імпортую файл MIDI... + Cancel + Скасувати Please wait... Зачекайте будь-ласка ... + + Importing MIDI-file... + Імпортую файл MIDI... + + + Importing FLP-file... + Імпортую файл FLP... + TrackContentObject @@ -6603,7 +6770,7 @@ Please make sure you have read-permission to the file and the directory containi TrackOperationsWidget Press <%1> while clicking on move-grip to begin a new drag'n'drop-action. - Затисніть <Сtrl> і натискайте мишку під час руху, щоб почати нову перезбірку. + Затисніть <%1> і натискайте мишку під час руху, щоб почати нову перезбірку. Actions for this track @@ -6637,10 +6804,6 @@ Please make sure you have read-permission to the file and the directory containi FX %1: %2 ЕФ %1: %2 - - Assign to new FX Channel - Призначити до нового каналу ефекту - Turn all recording on Включити все на запис @@ -6649,148 +6812,152 @@ Please make sure you have read-permission to the file and the directory containi Turn all recording off Вимкнути всі записи + + Assign to new FX Channel + Призначити до нового каналу ефекту + TripleOscillatorView - Mix output of oscillator 1 & 2 - Змішати виходи 1 і 2 осцилляторів - - - Mix output of oscillator 2 & 3 - Поєднати виходи осцилляторів 2 і 3 + Use phase modulation for modulating oscillator 1 with oscillator 2 + Модулювати фазу осциллятора 2 сигналом з 1 - cents - Відсотки + Use amplitude modulation for modulating oscillator 1 with oscillator 2 + Модулювати амплітуду осциллятора 2 сигналом з 1 - Osc %1 fine detuning left: - Точне підстроювання лівого каналу осциллятора %1: + Mix output of oscillator 1 & 2 + Змішати виходи 1 і 2 осцилляторів - Use phase modulation for modulating oscillator 2 with oscillator 3 - Модулювати фазу осциллятора 3 сигналом з 2 + Synchronize oscillator 1 with oscillator 2 + Синхронізувати 1 осциллятор по 2 - Use an exponential wave for current oscillator. - Використовувати експонентний сигнал для цього осциллятора. + Use frequency modulation for modulating oscillator 1 with oscillator 2 + Модулювати частоту осциллятора 2 сигналом з 1 - Osc %1 panning: - Баланс для осциллятора %1: + Use phase modulation for modulating oscillator 2 with oscillator 3 + Модулювати фазу осциллятора 3 сигналом з 2 - Use a square-wave for current oscillator. - Використовувати квадратний сигнал для цього осциллятора. + Use amplitude modulation for modulating oscillator 2 with oscillator 3 + Модулювати амплітуду осциллятора 3 сигналом з 2 - Osc %1 stereo phase-detuning: - Підстроювання стерео фази осциллятора %1: + Mix output of oscillator 2 & 3 + Поєднати виходи осцилляторів 2 і 3 - semitones - півтон(а,ів) + Synchronize oscillator 2 with oscillator 3 + Синхронізувати осциллятор 2 і 3 - 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 frequency modulation for modulating oscillator 2 with oscillator 3 + Модулювати частоту осциллятора 3 сигналом з 2 - Use frequency modulation for modulating oscillator 1 with oscillator 2 - Модулювати частоту осциллятора 2 сигналом з 1 + Osc %1 volume: + Гучність осциллятора %1: - Use phase modulation for modulating oscillator 1 with oscillator 2 - Модулювати фазу осциллятора 2 сигналом з 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 volume: - Гучність осциллятора %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. Величина -100 позначає, що 100% сигналу йде в лівий канал, а 100 - в правий. - 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 coarse detuning: + Грубе підстроювання осциллятора %1: - Osc %1 fine detuning right: - Точна підстройка правого канала осциллятора %1: + semitones + півтон(а,ів) - Use amplitude modulation for modulating oscillator 1 with oscillator 2 - Модулювати амплітуду осциллятора 2 сигналом з 1 + With this knob you can set the coarse detuning of oscillator %1. You can detune the oscillator 24 semitones (2 octaves) up and down. This is useful for creating sounds with a chord. + Ця ручка встановлює грубе підстроювання осцилятора %1. Ви можете пістроїти осцилятор на 24 півтони (2 октави) вгору і вниз. Це корисно для створення звуків з акорду. - Synchronize oscillator 2 with oscillator 3 - Синхронізувати осциллятор 2 і 3 + Osc %1 fine detuning left: + Точне підстроювання лівого каналу осциллятора %1: - Use a saw-wave for current oscillator. - Використовувати зигзагоподібний сигнал для цього осциллятора. + cents + Відсотки - Use white-noise for current oscillator. - Використовувати білий шум для цього осциллятора. + 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 сотих. Це корисно для створення "насичених" звуків. - Use frequency modulation for modulating oscillator 2 with oscillator 3 - Модулювати частоту осциллятора 3 сигналом з 2 + Osc %1 fine detuning right: + Точна підстройка правого канала осциллятора %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, то осциллятор вимикається, інакше буде чутно настільки голосно, настільки тут встановлено. + 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 сотих. Це корисно для створення "насичених" звуків. - Use a moog-like saw-wave for current oscillator. - Використовувати муг-зигзаг для цього осциллятора. + Osc %1 phase-offset: + Зміщення фази осциллятора %1: - Osc %1 coarse detuning: - Грубе підстроювання осциллятора %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 phase-offset: - Зміщення фази осциллятора %1: + Osc %1 stereo phase-detuning: + Підстроювання стерео фази осциллятора %1: - degrees - градуси + 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 між каналами, тобто різницю фаз між лівим і правим каналами. Це зручно для створення розширення стереоефектів. - 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 сотих. Це корисно для створення "насичених" звуків. + Use a sine-wave for current oscillator. + Використовувати гармонійний (синусоїдальний) сигнал для цього осциллятора. - Use amplitude modulation for modulating oscillator 2 with oscillator 3 - Модулювати амплітуду осциллятора 3 сигналом з 2 + Use a triangle-wave for current oscillator. + Використовувати трикутний сигнал для цього осциллятора. - Use a sine-wave for current oscillator. - Використовувати гармонійний (синусоїдальний) сигнал для цього осциллятора. + Use a saw-wave for current oscillator. + Використовувати зигзагоподібний сигнал для цього осциллятора. - Synchronize oscillator 1 with oscillator 2 - Синхронізувати 1 осциллятор по 2 + Use a square-wave for current oscillator. + Використовувати квадратний сигнал для цього осциллятора. - Use a user-defined waveform for current oscillator. - Задати форму сигналу. + Use a moog-like saw-wave for current oscillator. + Використовувати муг-зигзаг для цього осциллятора. - Use a triangle-wave for current oscillator. - Використовувати трикутний сигнал для цього осциллятора. + Use an exponential wave for current oscillator. + Використовувати експонентний сигнал для цього осциллятора. - With this knob you can set the coarse detuning of oscillator %1. You can detune the oscillator 24 semitones (2 octaves) up and down. This is useful for creating sounds with a chord. - Ця ручка встановлює грубе підстроювання осцилятора %1. Ви можете пістроїти осцилятор на 24 півтони (2 октави) вгору і вниз. Це корисно для створення звуків з акорду. + Use white-noise for current oscillator. + Використовувати білий шум для цього осциллятора. + + + Use a user-defined waveform for current oscillator. + Задати форму сигналу. @@ -6807,92 +6974,92 @@ Please make sure you have read-permission to the file and the directory containi VestigeInstrumentView - by - від - - - Open VST-plugin preset - Відкрити передустановку VST модуля - - - - VST plugin control - - Управління VST плагіном + Open other VST-plugin + Відкрити інший VST плагін - Click here, if you want to save current VST-plugin preset program. - Зберегти поточну передустановку програми 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. Після натискання на кнопку з'явиться стандартний діалог вибору файлу, де ви зможете вибрати потрібний модуль. - Click here to select presets that are currently loaded in VST. - Вибір з уже завантажених в VST передустановок. + Show/hide GUI + Показати / приховати інтерфейс - Previous (-) - Попередній <-> + Click here to show or hide the graphical user interface (GUI) of your VST-plugin. + Приховує / показує графічний користувальницький інтерфейс (GUI) обраного модуля VST. - Open other VST-plugin - Відкрити інший VST плагін + Turn off all notes + Вимкнути всі ноти - Preset - Передустановка + Open VST-plugin + Відкрити модуль VST - Click here, if you want to control VST-plugin from host. - Натисніть тут для контролю VST плагіна через хост. + DLL-files (*.dll) + Бібліотеки DLL (*.dll) EXE-files (*.exe) Програми EXE (*.exe) - DLL-files (*.dll) - Бібліотеки DLL (*.dll) + No VST-plugin loaded + Модуль VST не завантажений - Click here to show or hide the graphical user interface (GUI) of your VST-plugin. - Приховує / показує графічний користувальницький інтерфейс (GUI) обраного модуля VST. + Control VST-plugin from LMMS host + Управління VST плагіном через LMMS - Show/hide GUI - Показати / приховати інтерфейс + Click here, if you want to control VST-plugin from host. + Натисніть тут для контролю VST плагіна через хост. - Save preset - Зберегти передустановку + Open VST-plugin preset + Відкрити передустановку VST модуля - Open VST-plugin - Відкрити модуль VST + Click here, if you want to open another *.fxp, *.fxb VST-plugin preset. + Відкрити інший .fxp. fxb VST плагін передустановки. - Control VST-plugin from LMMS host - Управління VST плагіном через LMMS + Previous (-) + Попередній <-> - Next (+) - Наступний <+> + Click here, if you want to switch to another VST-plugin preset program. + Натисніть тут для перемикання на іншу передустановку програми 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. Після натискання на кнопку з'явиться стандартний діалог вибору файлу, де ви зможете вибрати потрібний модуль. + Save preset + Зберегти передустановку - Turn off all notes - Вимкнути всі ноти + Click here, if you want to save current VST-plugin preset program. + Зберегти поточну передустановку програми VST плагіна. - Click here, if you want to open another *.fxp, *.fxb VST-plugin preset. - Відкрити інший .fxp. fxb VST плагін передустановки. + Next (+) + Наступний <+> - Click here, if you want to switch to another VST-plugin preset program. - Натисніть тут для перемикання на іншу передустановку програми VST плагіна. + Click here to select presets that are currently loaded in VST. + Вибір з уже завантажених в VST передустановок. - No VST-plugin loaded - Модуль VST не завантажений + Preset + Передустановка + + + by + від + + + - VST plugin control + - Управління VST плагіном @@ -6909,60 +7076,76 @@ Please make sure you have read-permission to the file and the directory containi VstEffectControlDialog - Open VST-plugin preset - Відкрити передустановку VST плагіна + Show/hide + Показати/Сховати - Click here, if you want to save current VST-plugin preset program. - Зберегти поточну передустановку програми VST плагіна. + Control VST-plugin from LMMS host + Управління VST плагіном через LMMS хост - Click here to select presets that are currently loaded in VST. - Вибір із уже завантажених в VST предустановок. + 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 control VST-plugin from host. - Натисніть тут, для контролю VST плагіном через хост. + Click here, if you want to switch to another VST-plugin preset program. + Перемикання на іншу передустановку програми VST плагіна. - Show/hide - Показати/Сховати + 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: Ефекти по: - Control VST-plugin from LMMS host - Управління VST плагіном через LMMS хост + &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /> + &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /> + + + VstPlugin - Next (+) - Наступний <+> + Loading plugin + Завантаження модуля - &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /> - &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /> + Open Preset + Відкрити предустановку - Click here, if you want to open another *.fxp, *.fxb VST-plugin preset. - Відкрити іншу .fxp . fxb передустановку VST. + Vst Plugin Preset (*.fxp *.fxb) + Передустановка VST плагіна (*.fxp, *.fxb) - Click here, if you want to switch to another VST-plugin preset program. - Перемикання на іншу передустановку програми VST плагіна. + : default + : основні - - - VstPlugin " " @@ -6972,40 +7155,24 @@ Please make sure you have read-permission to the file and the directory containi ' - .FXB - .FXB - - - .FXP - .FXP - - - .fxb - .fxb + Save Preset + Зберегти предустановку .fxp .fxp - Loading plugin - Завантаження модуля - - - Save Preset - Зберегти предустановку - - - Open Preset - Відкрити предустановку + .FXP + .FXP - Vst Plugin Preset (*.fxp *.fxb) - Передустановка VST плагіна (*.fxp, *.fxb) + .FXB + .FXB - : default - : основні + .fxb + .fxb Please wait while loading VST plugin... @@ -7283,7 +7450,7 @@ Please make sure you have read-permission to the file and the directory containi cents - відсотків + відсотків Right detune @@ -7299,15 +7466,15 @@ Please make sure you have read-permission to the file and the directory containi Mix envelope attack - Мікс атаки обвідної + A-B Мікс вступу обвідної Mix envelope hold - Мікс утримання обвідної + A-B Мікс утримання обвідної Mix envelope decay - Мікс згасання обвідної + A-B Мікс згасання обвідної Crosstalk @@ -7317,8 +7484,12 @@ Please make sure you have read-permission to the file and the directory containi ZynAddSubFxInstrument - Resonance Center Frequency - Частоти центру резонансу + Portamento + Портаменто + + + Filter Frequency + Фільтр Частот Filter Resonance @@ -7329,8 +7500,12 @@ Please make sure you have read-permission to the file and the directory containi Ширина смуги - Filter Frequency - Фільтр Частот + FM Gain + Підсил FM + + + Resonance Center Frequency + Частоти центру резонансу Resonance Bandwidth @@ -7340,84 +7515,76 @@ Please make sure you have read-permission to the file and the directory containi Forward MIDI Control Change Events Переслати зміну подій MIDI управління - - Portamento - Портаменто - - - FM Gain - Підсил FM - ZynAddSubFxView - BW - BW + Show GUI + Показати інтерфейс - RES - RES + Click here to show or hide the graphical user interface (GUI) of ZynAddSubFX. + Натисніть сюди щоб сховати чи показати графічний інтерфейс ZynAddSubFX. - FREQ - FREQ + Portamento: + Портаменто: PORT PORT - - Click here to show or hide the graphical user interface (GUI) of ZynAddSubFX. - Натисніть сюди щоб сховати чи показати графічний інтерфейс ZynAddSubFX. - Filter Frequency: Фільтр частот: - RES CF - RES CF + FREQ + FREQ - RES BW - RES BW + Filter Resonance: + Фільтр резонансу: - Portamento: - Портаменто: + RES + RES - Resonance center frequency: - Частота центру резонансу: + Bandwidth: + Смуга пропускання: - Filter Resonance: - Фільтр резонансу: + BW + BW + + + FM Gain: + Підсилення частоти модуляції (FM): FM GAIN FM GAIN - Bandwidth: - Смуга пропускання: + Resonance center frequency: + Частота центру резонансу: - Forward MIDI Control Changes - Переслати зміну подій MiDi управління + RES CF + RES CF Resonance bandwidth: Ширина смуги резонансу: - FM Gain: - Підсилення частоти модуляції (FM): + RES BW + RES BW - Show GUI - Показати інтерфейс + Forward MIDI Control Changes + Переслати зміну подій MiDi управління @@ -7427,20 +7594,20 @@ Please make sure you have read-permission to the file and the directory containi Підсилення - Stutter - Заїкання - - - Reverse sample - Перевернути запис + Start of sample + Початок запису End of sample Кінець запису - Start of sample - Початок запису + Reverse sample + Перевернути запис + + + Stutter + Заїкання Loopback point @@ -7481,72 +7648,72 @@ Please make sure you have read-permission to the file and the directory containi bitInvaderView - Draw your own waveform here by dragging your mouse on this graph. - Тут ви можете малювати власний сигнал. + Sample Length + Тривалість запису - White noise wave - Білий шум + Sine wave + Синусоїда - Click here to smooth waveform. - Клацніть щоб згладити форму сигналу. + Triangle wave + Трикутник - Click here for a saw-wave. - Згенерувати зигзагоподібний сигнал. - + Saw wave + Зигзаг + - Sine wave - Синусоїда + Square wave + Квадрат - Click here for white-noise. - Згенерувати білий шум. + White noise wave + Білий шум - Smooth - Згладити + User defined wave + Користувацька - Interpolation - Інтерполяція + Smooth + Згладити - Square wave - Квадрат + Click here to smooth waveform. + Клацніть щоб згладити форму сигналу. - Saw wave - Зигзаг + Interpolation + Інтерполяція Normalize Нормалізувати - Click for a sine-wave. - Згенерувати гармонійний (синусоїдальний) сигнал. + Draw your own waveform here by dragging your mouse on this graph. + Тут ви можете малювати власний сигнал. - Triangle wave - Трикутник + Click for a sine-wave. + Згенерувати гармонійний (синусоїдальний) сигнал. - Click here for a square-wave. - Згенерувати квадратну хвилю. + Click here for a triangle-wave. + Згенерувати трикутний сигнал. - User defined wave - Користувацька + Click here for a saw-wave. + Згенерувати зигзагоподібний сигнал. - Click here for a triangle-wave. - Згенерувати трикутний сигнал. + Click here for a square-wave. + Згенерувати квадратну хвилю. - Sample Length - Тривалість запису + Click here for white-noise. + Згенерувати білий шум. Click here for a user-defined shape. @@ -7671,7 +7838,7 @@ Please make sure you have read-permission to the file and the directory containi fxLineLcdSpinBox Assign to: - Призначити до: + Призначити до: New FX Channel @@ -7688,16 +7855,16 @@ Please make sure you have read-permission to the file and the directory containi kickerInstrument - Gain - Підсилення + Start frequency + Початкова частота End frequency Кінцева частота - Start frequency - Початкова частота + Gain + Підсилення Length @@ -7738,10 +7905,6 @@ Please make sure you have read-permission to the file and the directory containi kickerInstrumentView - - Gain: - Підсилення: - Start frequency: Початкова частота: @@ -7750,6 +7913,10 @@ Please make sure you have read-permission to the file and the directory containi End frequency: Кінцева частота: + + Gain: + Підсилення: + Frequency Slope: Частота нахилу: @@ -7782,21 +7949,37 @@ Please make sure you have read-permission to the file and the directory containi ladspaBrowserView - Type: - Тип: + 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. +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. +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. +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. Вони розділені на п'ять категорій, залежно від назв і типів портів. @@ -7814,24 +7997,8 @@ Double clicking any of the plugins will bring up information on the ports. - Analysis Tools - Аналізатори - - - Unavailable Effects - Недоступні ефекти - - - Instruments - Інструменти - - - Available Effects - Доступні ефекти - - - Don't know - Невідомі + Type: + Тип: @@ -7848,8 +8015,8 @@ Double clicking any of the plugins will bring up information on the ports. ladspaPortDialog - Yes - Так + Ports + Порти Name @@ -7859,195 +8026,195 @@ Double clicking any of the plugins will bring up information on the ports.Rate Частота вибірки + + Direction + Напрямок + Type Тип - Audio - Аудіо + Min < Default < Max + Менше < Стандарт <Більше - Float - Дробове + Logarithmic + Логарифмічний - Input - Ввід + SR Dependent + Залежність від SR - Ports - Порти + Audio + Аудіо - Integer - Ціле + Control + Управління - SR Dependent - Залежність від SR + Input + Ввід Output Вивід - Min < Default < Max - Менше < Стандарт <Більше - - - Direction - Напрямок + Toggled + Увімкнено - Logarithmic - Логарифмічний + Integer + Ціле - Control - Управління + Float + Дробове - Toggled - Увімкнено + Yes + Так lb302Synth - Dead - Глухо + VCF Cutoff Frequency + Частота зрізу VCF - Slide - Зміщення + VCF Resonance + Посилення VCF VCF Envelope Mod Модуляція обвідної VCF - VCF Resonance - Посилення VCF + VCF Envelope Decay + Спад обвідної VCF - Accent - Акцент + Distortion + Спотворення + + + Waveform + Форма хвилі Slide Decay Зміщення згасання - VCF Envelope Decay - Спад обвідної VCF + Slide + Зміщення - Waveform - Форма хвилі + Accent + Акцент - Distortion - Спотворення + Dead + Глухо 24dB/oct Filter 24дБ/окт фільтр - - VCF Cutoff Frequency - Частота зрізу VCF - lb302SynthView - DIST: - СПОТ: + Cutoff Freq: + Частота зрізу: - Click here for a square-wave with a rounded end. - Створити квадратну хвилю закруглену в кінці. + Resonance: + Резонанс: - Slide Decay: - Зміщення згасання: + Env Mod: + Мод Обвідної: - Click here for an exponential wave. - Генерувати експонентний сигнал. + Decay: + Згасання: - White noise wave - Білий шум + 303-es-que, 24dB/octave, 3 pole filter + 303-ій, 24дБ/октаву, 3-польний фільтр - Click here for a saw-wave. - Згенерувати зигзаг. + Slide Decay: + Зміщення згасання: - Sine wave - Синусоїда + DIST: + СПОТ: - Click here for white-noise. - Згенерувати білий шум. + Saw wave + Зигзаг - Decay: - Згасання: + Click here for a saw-wave. + Згенерувати зигзаг. - Env Mod: - Мод Обвідної: + Triangle wave + Трикутна хвиля - Moog wave - Муг хвиля + Click here for a triangle-wave. + Згенерувати трикутний сигнал. - Resonance: - Резонанс: + Square wave + Квадрат + + + Click here for a square-wave. + Згенерувати квадратний сигнал. Rounded square wave Хвиля округленого квадрату - Square wave - Квадрат + Click here for a square-wave with a rounded end. + Створити квадратну хвилю закруглену в кінці. - 303-es-que, 24dB/octave, 3 pole filter - 303-ій, 24дБ/октаву, 3-польний фільтр - - - Saw wave - Зигзаг + Moog wave + Муг хвиля Click here for a moog-like wave. Згенерувати хвилю схожу на муг. - Click for a sine-wave. - Генерувати гармонійний (синусоїдальний) сигнал. + Sine wave + Синусоїда - Triangle wave - Трикутна хвиля + Click for a sine-wave. + Генерувати гармонійний (синусоїдальний) сигнал. - Click here for a square-wave. - Згенерувати квадратний сигнал. + White noise wave + Білий шум - Cutoff Freq: - Частота зрізу: + Click here for an exponential wave. + Генерувати експонентний сигнал. - Click here for a triangle-wave. - Згенерувати трикутний сигнал. + Click here for white-noise. + Згенерувати білий шум. Bandlimited saw wave @@ -8083,236 +8250,210 @@ Double clicking any of the plugins will bring up information on the ports. - lb303Synth - - Dead - Глухо - - - Slide - Зміщення - - - VCF Envelope Mod - Модуляція обвідної VCF - - - VCF Resonance - Резонанс VCF - - - Accent - Акцент - - - Slide Decay - Зміщення згасання - - - VCF Envelope Decay - Спад обвідної VCF - - - Waveform - Форма хвилі - + malletsInstrument - Distortion - Спотворення + Hardness + Жорсткість - 24dB/oct Filter - 24дБ/окт фільтр + Position + Положення - VCF Cutoff Frequency - Частота зрізу VCF + Vibrato Gain + Посилення вібрато - - - lb303SynthView - DEC - ЗГАС + Vibrato Freq + Частота вібрато - CUT - ЗРІЗ + Stick Mix + Зведення рученят - RES - РЕС + Modulator + Модулятор - DIST - СПОТ + Crossfade + Перехід - WAVE - ХВИЛЯ + LFO Speed + Швидкість LFO - DIST: - СПОТ: + LFO Depth + Глибина LFO - SLIDE - ЗРУШЕННЯ + ADSR + ADSR - WAVE: - ХВИЛЯ: + Pressure + Тиск - Slide Decay: - Зрушення згасання: + Motion + Рух - Decay: - Згасання: + Speed + Швидкість - Env Mod: - Мод Обвідної: + Bowed + Нахил - Resonance: - Резонанс: + Spread + Розкид - 303-es-que, 24dB/octave, 3 pole filter - 303-ій, 24дБ/октаву, 3-полюсний фільтр + Marimba + Марімба - ENV MOD - МОД ОБВІД + Vibraphone + Віброфон - Cutoff Freq: - Частота зрізу: + Agogo + Дискотека - - - malletsInstrument - ADSR - ADSR + Wood1 + Дерево1 Reso Ресо - Agogo - Дискотека + Wood2 + Дерево2 Beats Удари - Bowed - Нахил + Two Fixed + Два фіксованих Clump Важка хода + + Tubular Bells + Трубні дзвони + + + Uniform Bar + Рівномірні смуги + + + Tuned Bar + Підстроєні смуги + Glass Скло - Speed - Швидкість + Tibetan Bowl + Тибетські кулі + + + malletsInstrumentView - Wood1 - Дерево1 + Instrument + Інструмент - Wood2 - Дерево2 + Spread + Розкид - Vibrato Freq - Частота вібрато + Spread: + Розкид: - Vibrato Gain - Посилення вібрато + Hardness + Жорсткість - LFO Depth - Глибина LFO + Hardness: + Жорсткість: - Two Fixed - Два фіксованих + Position + Положення - LFO Speed - Швидкість LFO + Position: + Положення: - Marimba - Марімба + Vib Gain + Підс. вібрато - Tibetan Bowl - Тибетські кулі + Vib Gain: + Підс. вібрато: - Tuned Bar - Підстроєні смуги + Vib Freq + Част. віб - Motion - Рух + Vib Freq: + Вібрато: - Spread - Розкид + Stick Mix + Зведення рученят - Position - Положення + Stick Mix: + Зведення рученят: - Crossfade - Перехід + Modulator + Модулятор - Uniform Bar - Рівномірні смуги + Modulator: + Модулятор: - Vibraphone - Віброфон + Crossfade + Перехід - Hardness - Жорсткість + Crossfade: + Перехід: - Pressure - Тиск + LFO Speed + Швидкість LFO - Modulator - Модулятор + LFO Speed: + Швидкість LFO: - Stick Mix - Зведення рученят + LFO Depth + Глибина LFO - Tubular Bells - Трубні дзвони + LFO Depth: + Глибина LFO: - - - malletsInstrumentView ADSR ADSR @@ -8322,139 +8463,35 @@ Double clicking any of the plugins will bring up information on the ports.ADSR: - Bowed - Нахил + Pressure + Тиск + + + Pressure: + Тиск: Speed Швидкість - LFO Depth - Глибина LFO + Speed: + Швидкість: - LFO Speed - Швидкість LFO + Missing files + Відсутні файли - Vib Gain: - Підс. вібрато: - - - Vib Freq: - Вібрато: - - - Motion: - Рух: - - - LFO Depth: - Глибина LFO: - - - Motion - Рух - - - LFO Speed: - Швидкість LFO: - - - Speed: - Швидкість: - - - Spread - Розкид - - - Position - Положення - - - Crossfade - Перехід - - - Hardness - Жорсткість - - - Hardness: - Жорсткість: - - - Pressure - Тиск - - - Stick Mix: - Зведення рученят: - - - Position: - Положення: - - - Spread: - Розкид: - - - Crossfade: - Перехід: - - - Instrument - Інструмент - - - Modulator - Модулятор - - - Modulator: - Модулятор: - - - Pressure: - Тиск: - - - Vibrato - Вібрато - - - Vib Gain - Підс. вібрато - - - Vib Freq - Част. віб - - - Vibrato: - Вібрато: - - - Stick Mix - Зведення рученят - - - Missing files - Відсутні файли - - - Your Stk-installation seems to be incomplete. Please make sure the full Stk-package is installed! - Схоже, що встановлені не всі пакети Stk. Вам слід це перевірити! + Your Stk-installation seems to be incomplete. Please make sure the full Stk-package is installed! + Схоже, що встановлені не всі пакети Stk. Вам слід це перевірити! manageVSTEffectView - Close - Закрити + - VST parameter control + Управление VST параметрами VST Sync @@ -8473,12 +8510,12 @@ Double clicking any of the plugins will bring up information on the ports.Натисніть тут, якщо хочете бачити тільки автоматизовані параметри. - Close VST effect knob-controller window. - Закрити вікно управління регуляторами VST плагіна. + Close + Закрити - - VST parameter control - Управление VST параметрами + Close VST effect knob-controller window. + Закрити вікно управління регуляторами VST плагіна. @@ -8487,14 +8524,6 @@ Double clicking any of the plugins will bring up information on the ports. - VST plugin control Управління VST плагіном - - Close - Закрити - - - Close VST plugin knob-controller window. - Закрити вікно управління регуляторами VST плагіна. - VST Sync VST синхронізація @@ -8511,124 +8540,132 @@ Double clicking any of the plugins will bring up information on the ports.Click here if you want to display automated parameters only. Натисніть тут, якщо хочете бачити тільки автоматизовані параметри. + + Close + Закрити + + + Close VST plugin knob-controller window. + Закрити вікно управління регуляторами VST плагіна. + opl2instrument - - FM - FM - Patch Патч - Op 1 Key Scaling Rate - ОП 1 Ключова ставка множника - - - Op 2 Key Scaling Rate - ОП 2 Ключова ставка множника + Op 1 Attack + ОП 1 Вступ Op 1 Decay ОП 1 Спад - Op 1 Level - ОП 1 Рівень + Op 1 Sustain + ОП 1 Видержка - Op 2 Decay - ОП 2 Спад + Op 1 Release + ОП 1 Зменшення - Op 2 Level - ОП 2 Рівень + Op 1 Level + ОП 1 Рівень - Op 1 Attack - ОП 1 Вступ + Op 1 Level Scaling + ОП 1 Рівень збільшення - Op 2 Attack - ОП 2 Вступ + Op 1 Frequency Multiple + ОП 1 Множник частот - Op 1 Vibrato - Оп 1 Вібрато + Op 1 Feedback + ОП 1 Повернення - Op 2 Vibrato - Оп 2 Вібрато + Op 1 Key Scaling Rate + ОП 1 Ключова ставка множника - Tremolo Depth - Глибина тремоло + Op 1 Percussive Envelope + ОП 1 Ударна обвідна - Op 2 Frequency Multiple - ОП 2 Множник частот + Op 1 Tremolo + ОП 1 Тремоло - Op 1 Frequency Multiple - ОП 1 Множник частот + Op 1 Vibrato + Оп 1 Вібрато - Op 1 Feedback - ОП 1 Повернення + Op 1 Waveform + ОП 1 Хвиля - Vibrato Depth - Глибина вібрато + Op 2 Attack + ОП 2 Вступ - Op 1 Release - ОП 1 Зменшення + Op 2 Decay + ОП 2 Спад + + + Op 2 Sustain + ОП 2 Видержка Op 2 Release ОП 2 Зменшення - Op 1 Level Scaling - ОП 1 Рівень збільшення + Op 2 Level + ОП 2 Рівень Op 2 Level Scaling ОП 2 Рівень збільшення - Op 2 Percussive Envelope - ОП 2 Ударна обвідна - - - Op 1 Percussive Envelope - ОП 1 Ударна обвідна + Op 2 Frequency Multiple + ОП 2 Множник частот - Op 2 Waveform - ОП 2 Хвиля + Op 2 Key Scaling Rate + ОП 2 Ключова ставка множника - Op 1 Waveform - ОП 1 Хвиля + Op 2 Percussive Envelope + ОП 2 Ударна обвідна Op 2 Tremolo ОП 2 Тремоло - Op 1 Tremolo - ОП 1 Тремоло + Op 2 Vibrato + Оп 2 Вібрато - Op 2 Sustain - ОП 2 Видержка + Op 2 Waveform + ОП 2 Хвиля - Op 1 Sustain - ОП 1 Видержка + FM + FM + + + Vibrato Depth + Глибина вібрато + + + Tremolo Depth + Глибина тремоло @@ -8652,44 +8689,44 @@ Double clicking any of the plugins will bring up information on the ports. organicInstrument - - Volume - Гучність - Distortion Спотворення + + Volume + Гучність + organicInstrumentView - cents - соті + Distortion: + Спотворення: - Osc %1 panning: - Баланс для осциллятора %1: - + Volume: + Гучність: + Randomise Випадково - Osc %1 volume: - Гучність осциллятора %1: + Osc %1 waveform: + Форма сигналу осциллятора %1: - Distortion: - Спотворення: + Osc %1 volume: + Гучність осциллятора %1: - Volume: - Гучність: + Osc %1 panning: + Баланс для осциллятора %1: - Osc %1 waveform: - Форма сигналу осциллятора %1: + cents + соті The distortion knob adds distortion to the output of the instrument. @@ -8715,334 +8752,361 @@ Double clicking any of the plugins will bring up information on the ports. papuInstrument - Bass - Бас + Sweep time + Час поширення - Shift Register width - Зміщення ширини регістра + Sweep direction + Напрям поширення Sweep RtShift amount Кіль-ть поширення зсуву вправо + + Wave Pattern Duty + Робоча форма хвилі + Channel 1 volume Гучність першого каналу - Channel 4 volume - Гучність четвертого каналу + Volume sweep direction + Обсяг напрямку поширення - Channel 3 volume - Гучність третього каналу + Length of each step in sweep + Довжина кожного такту в поширенні Channel 2 volume Гучність другого каналу - Length of each step in sweep - Довжина кожного такту в поширенні - - - Left Output level - Вихідний рівень зліва + Channel 3 volume + Гучність третього каналу - Sweep direction - Напрям поширення + Channel 4 volume + Гучність четвертого каналу - Channel 4 to SO1 (Right) - Від четвертого каналу до SO1 (правий канал) + Right Output level + Вихідний рівень праворуч - Channel 3 to SO1 (Right) - Від третього каналу до SO1 (правий канал) + Left Output level + Вихідний рівень зліва - Channel 2 to SO1 (Right) - Від другого каналу до SO1 (правий канал) + Channel 1 to SO2 (Left) + Від першого каналу до SO2 (лівий канал) - Channel 1 to SO1 (Right) - Від першого каналу до SO1 (правий канал) + Channel 2 to SO2 (Left) + Від другого каналу до SO2 (лівий канал) - Right Output level - Вихідний рівень праворуч + Channel 3 to SO2 (Left) + Від третього каналу до SO2 (лівий канал) - Treble - Дискант + Channel 4 to SO2 (Left) + Від четвертого каналу до SO2 (лівий канал) - Sweep time - Час поширення + Channel 1 to SO1 (Right) + Від першого каналу до SO1 (правий канал) - Channel 4 to SO2 (Left) - Від четвертого каналу до SO2 (лівий канал) + Channel 2 to SO1 (Right) + Від другого каналу до SO1 (правий канал) - Channel 3 to SO2 (Left) - Від третього каналу до SO2 (лівий канал) + Channel 3 to SO1 (Right) + Від третього каналу до SO1 (правий канал) - Channel 2 to SO2 (Left) - Від другого каналу до SO2 (лівий канал) + Channel 4 to SO1 (Right) + Від четвертого каналу до SO1 (правий канал) - Channel 1 to SO2 (Left) - Від першого каналу до SO2 (лівий канал) + Treble + Дискант - Wave Pattern Duty - Робоча форма хвилі + Bass + Бас - Volume sweep direction - Обсяг напрямку поширення + Shift Register width + Зміщення ширини регістра papuInstrumentView - Bass - Бас + Sweep Time: + Час розгортки: - Wave pattern duty - Робоча форма хвилі + Sweep Time + Час розгортки - Bass: - Бас: + Sweep RtShift amount: + Кіл-ть розгортки зміщення вправо: - Shift Register Width - Зміщення ширини регістра + Sweep RtShift amount + Кіл-ть розгортки зсуву вправо - Wave Channel Volume - Гучність хвильового каналу + Wave pattern duty: + Робоча форма хвилі: - Sweep Time: - Час розгортки: + Wave Pattern Duty + Робоча форма хвилі - Draw the wave here - Малювати хвилю тут + Square Channel 1 Volume: + Гучність квадратного каналу 1: - Sweep RtShift amount - Кіл-ть розгортки зсуву вправо + Length of each step in sweep: + Довжина кожного кроку в розгортці: - Channel1 to SO2 (Left) - Канал1 в SO2 (Лівий) + Length of each step in sweep + Довжина кожного кроку в розгортці - Channel3 to SO2 (Left) - Канал3 в SO2 (Лівий) + Wave pattern duty + Робоча форма хвилі - Channel2 to SO2 (Left) - Канал2 в SO2 (Лівий) + Square Channel 2 Volume: + Гучність квадратного каналу 2: - Channel4 to SO2 (Left) - Канал4 в SO2 (Лівий) + Square Channel 2 Volume + Гучність квадратного каналу 2 - Length of each step in sweep - Довжина кожного кроку в розгортці + Wave Channel Volume: + Гучність хвильового каналу: - Wave pattern duty: - Робоча форма хвилі: + Wave Channel Volume + Гучність хвильового каналу - Wave Pattern - Малюнок хвилі + Noise Channel Volume: + Гучність каналу шуму: + + + Noise Channel Volume + Гучність каналу шуму SO1 Volume (Right): Гучність SO1 (Правий): - Sweep Direction - Напрямок розгортки + SO1 Volume (Right) + Гучність SO1 (Правий) - The amount of increase or decrease in frequency - Кіл-ть збільшення або зменшення в частоті + SO2 Volume (Left): + Гучність SO2 (Лівий): - The delay between step change - Затримка між змінами кроку + SO2 Volume (Left) + Гучність SO2 (Лівий) + + + Treble: + Дискант: Treble Дискант - Noise Channel Volume: - Гучність каналу шуму: + Bass: + Бас: - The duty cycle is the ratio of the duration (time) that a signal is ON versus the total period of the signal. - Робочий цикл це коефіцієнт тривалості (часу) включеного сигналу відносно всього періоду сигналу. + Bass + Бас - Sweep RtShift amount: - Кіл-ть розгортки зміщення вправо: + Sweep Direction + Напрямок розгортки - Channel1 to SO1 (Right) - Канал1 в SO1 (Правий) + Volume Sweep Direction + Гучність напрямки розгортки - Channel3 to SO1 (Right) - Канал3 в SO1 (Правий) + 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 (Правий) - Square Channel 1 Volume - Гучність квадратного каналу 1 + Channel1 to SO2 (Left) + Канал1 в SO2 (Лівий) - Square Channel 2 Volume - Гучність квадратного каналу 2 + Channel2 to SO2 (Left) + Канал2 в SO2 (Лівий) - Square Channel 1 Volume: - Гучність квадратного каналу 1: + Channel3 to SO2 (Left) + Канал3 в SO2 (Лівий) - Square Channel 2 Volume: - Гучність квадратного каналу 2: + Channel4 to SO2 (Left) + Канал4 в SO2 (Лівий) - Treble: - Дискант: + Wave Pattern + Малюнок хвилі - Sweep Time - Час розгортки + The amount of increase or decrease in frequency + Кіл-ть збільшення або зменшення в частоті - SO1 Volume (Right) - Гучність SO1 (Правий) + The rate at which increase or decrease in frequency occurs + Темп прояви збільшення або зниження в частоті - Length of each step in sweep: - Довжина кожного кроку в розгортці: + The duty cycle is the ratio of the duration (time) that a signal is ON versus the total period of the signal. + Робочий цикл це коефіцієнт тривалості (часу) включеного сигналу відносно всього періоду сигналу. - Noise Channel Volume - Гучність каналу шуму + Square Channel 1 Volume + Гучність квадратного каналу 1 - Wave Channel Volume: - Гучність хвильового каналу: + The delay between step change + Затримка між змінами кроку - Wave Pattern Duty - Робоча форма хвилі + Draw the wave here + Малювати хвилю тут - - SO2 Volume (Left): - Гучність SO2 (Лівий): + + + patchesDialog + + Qsynth: Channel Preset + Q-Синтезатор: Канал передустановлено - Volume Sweep Direction - Гучність напрямки розгортки + Bank selector + Селектор банку - The rate at which increase or decrease in frequency occurs - Темп прояви збільшення або зниження в частоті + Bank + Банк - SO2 Volume (Left) - Гучність SO2 (Лівий) + Program selector + Селектор програм - - - pluginBrowser - Additive Synthesizer for organ-like sounds - Синтезатор звуків нашталт органу + Patch + Патч - Customizable wavetable synthesizer - Налаштовуваний синтезатор звукозаписів (wavetable) + Name + І'мя - 2-operator FM Synth - 2-режимний синт модуляції частот (FM synth) + OK + ОК - LMMS port of sfxr - LMMS порт SFXR + Cancel + Скасувати + + + pluginBrowser - Filter for importing Hydrogen files into LMMS - Фільтр для імпорту Hydrogen файлів в LMMS + no description + опис відсутній - Tuneful things to bang on - Мелодійні ударні + Incomplete monophonic imitation tb303 + Незавершена монофонічна імітація tb303 - Player for SoundFont files - Програвач файлів SoundFont + Plugin for freely manipulating stereo output + Модуль для довільного управління стереовиходом - Filter for importing FL Studio projects into LMMS - Фільтр для імпортування файлів FL Stuio + Plugin for controlling knobs with sound peaks + Модуль для встановлення значень регуляторів на піках гучності - List installed LADSPA plugins - Показати встановлені модулі LADSPA + Plugin for enhancing stereo separation of a stereo input file + Модуль, що підсилює різницю між каналами стереозапису - Plugin for controlling knobs with sound peaks - Модуль для встановлення значень регуляторів на піках гучності + List installed LADSPA plugins + Показати встановлені модулі LADSPA - Filter for importing MIDI-files into LMMS - Фільтр для включення файлу MIDI в проект ЛММС + Filter for importing FL Studio projects into LMMS + Фільтр для імпортування файлів FL Stuio GUS-compatible patch instrument Патч-інструмент, сумісний з GUS - Vibrating string modeler - Емуляція вібруючих струн + Additive Synthesizer for organ-like sounds + Синтезатор звуків нашталт органу + + + Tuneful things to bang on + Мелодійні ударні VST-host for using VST(i)-plugins within LMMS VST - хост для підтримки модулів VST(i) в LMMS - Plugin for freely manipulating stereo output - Модуль для довільного управління стереовиходом + Vibrating string modeler + Емуляція вібруючих струн - no description - опис відсутній + plugin for using arbitrary LADSPA-effects inside LMMS. + Модуль, що дозволяє використовувати в LMMS будь які ефекти LADSPA. + + + Filter for importing MIDI-files into LMMS + Фільтр для включення файлу MIDI в проект ЛММС Emulation of the MOS6581 and MOS8580 SID. @@ -9050,107 +9114,97 @@ This chip was used in the Commodore 64 computer. Емуляція MOS6581 і MOS8580. Використовувалося на комп'ютері Commodore 64. + + Player for SoundFont files + Програвач файлів SoundFont + Emulation of GameBoy (TM) APU Емуляція GameBoy (ТМ) - Incomplete monophonic imitation tb303 - Незавершена монофонічна імітація tb303 + Customizable wavetable synthesizer + Налаштовуваний синтезатор звукозаписів (wavetable) - plugin for using arbitrary LADSPA-effects inside LMMS. - Модуль, що дозволяє використовувати в LMMS будь які ефекти LADSPA. + Embedded ZynAddSubFX + Вбудований ZynAddSubFX - Plugin for enhancing stereo separation of a stereo input file - Модуль, що підсилює різницю між каналами стереозапису + 2-operator FM Synth + 2-режимний синт модуляції частот (FM synth) - Embedded ZynAddSubFX - Вбудований ZynAddSubFX + Filter for importing Hydrogen files into LMMS + Фільтр для імпорту Hydrogen файлів в LMMS - plugin for processing dynamics in a flexible way - плагін для обробки динаміки гнучким методом + LMMS port of sfxr + LMMS порт SFXR Monstrous 3-oscillator synth with modulation matrix Монстро 3-осцилляторний синт з матрицею модуляції - plugin for using arbitrary VST effects inside LMMS. - плагін для використання довільних VST ефектів всередині LMMS. - - - Carla Rack Instrument - Carla підставочний інструмент + Three powerful oscillators you can modulate in several ways + Три потужних генераторів можна модулювати декількома способами - Simple sampler with various settings for using samples (e.g. drums) in an instrument-track - Простий семплер з різними налаштуваннями для використання записів (наприклад, ударні) в інструментальному трекі + A native amplifier plugin + Рідний плагін підсилення - A NES-like synthesizer - NES-подібний синтезатор + Carla Rack Instrument + Carla підставочний інструмент 4-oscillator modulatable wavetable synth - 4-х осцилторний модулюємий синтезатор звукозаписів - як правильно не зрозуміло - - - - Three powerful oscillators you can modulate in several ways - Три потужних генераторів можна модулювати декількома способами - - - A native delay plugin - Рідний плагін затримки + 4-генераторний модулюючий синтезатор звукозаписів plugin for waveshaping плагін формування сигналу - Versatile drum synthesizer - Універсальний барабанний синтезатор + Boost your bass the fast and simple way + Накачай свій бас швидко і просто - A native amplifier plugin - Рідний плагін підсилення + Versatile drum synthesizer + Універсальний барабанний синтезатор - Graphical spectrum analyzer plugin - Плагін графічного аналізу спектру + Simple sampler with various settings for using samples (e.g. drums) in an instrument-track + Простий семплер з різними налаштуваннями для використання записів (наприклад, ударні) в інструментальному трекі - Boost your bass the fast and simple way - Накачай свій бас швидко і просто + plugin for processing dynamics in a flexible way + плагін для обробки динаміки гнучким методом Carla Patchbay Instrument Carla Комутаційний інструмент - An oversampling bitcrusher - Упевнетись як буде правильно - Перевибірка малого дробдення + plugin for using arbitrary VST effects inside LMMS. + плагін для використання довільних VST ефектів всередині LMMS. - A 4-band Crossover Equalizer - 4-смуговий еквалайзер Кросовер + Graphical spectrum analyzer plugin + Плагін графічного аналізу спектру - Player for GIG files - Програвач GIG файлів + A NES-like synthesizer + NES-подібний синтезатор - Filter for exporting MIDI-files from LMMS - Фільтри для експорту MIDI-файлів з LMMS + A native delay plugin + Рідний плагін затримки - A Dual filter plugin - Плагін подвійного фільтру + Player for GIG files + Програвач GIG файлів A multitap echo delay plugin @@ -9161,43 +9215,24 @@ This chip was used in the Commodore 64 computer. Рідний фланжер плагін - A native eq plugin - Рідний eq плагін - - - - setupWidget - - JACK (JACK Audio Connection Kit) - JACK (JACK Комплект Аудіо Підключення) - - - ALSA (Advanced Linux Sound Architecture) - ALSA (Передова Linux Звукова Архітектура) - - - SDL (Simple DirectMedia Layer) - SDL (Простий DirectMedia Шар) - - - Dummy (no sound output) - Dummy (без вихідного звуку) + An oversampling bitcrusher + Перевибірка малого дробдення - PortAudio - АудіоПорт + A native eq plugin + Рідний eq плагін - OSS (Open Sound System) - OSS (Відкрита Звукова Система) + A 4-band Crossover Equalizer + 4-смуговий еквалайзер Кросовер - PulseAudio - + A Dual filter plugin + Плагін подвійного фільтру - soundio - + Filter for exporting MIDI-files from LMMS + Фільтри для експорту MIDI-файлів з LMMS @@ -9206,53 +9241,53 @@ This chip was used in the Commodore 64 computer. Bank Банк + + Patch + Патч + Gain Посилення - Patch - Патч + Reverb + Луна - Chorus Speed - Швидкість хору + Reverb Roomsize + Об'єм луни - Reverb Width - Довгота луни + Reverb Damping + Загасання луни - Chorus Depth - Глибина хору + Reverb Width + Довгота луни Reverb Level Рівень луни - Chorus Level - Рівень хору + Chorus + Хор (Приспів) Chorus Lines Лінії хору - Chorus - Хор (Приспів) - - - Reverb - Луна + Chorus Level + Рівень хору - Reverb Damping - Загасання луни + Chorus Speed + Швидкість хору - Reverb Roomsize - Об'єм луни + Chorus Depth + Глибина хору A soundfont %1 could not be loaded. @@ -9262,16 +9297,8 @@ This chip was used in the Commodore 64 computer. sf2InstrumentView - Gain - Підсилення - - - This button enables the reverb effect. This is useful for cool effects, but only works on files that support it. - Ця кнопка включає ефект луни. Це корисно для класних ефектів, але працює не для всіх файлів. - - - This button enables the chorus effect. This is useful for cool echo effects, but only works on files that support it. - Ця кнопка включає ефект хору. Це корисно для класних ефектів, але працює не для всіх файлів. + Open other SoundFont file + Відкрити інший файл SoundFront Click here to open another SF2 file @@ -9282,29 +9309,21 @@ This chip was used in the Commodore 64 computer. Вибрати патч - SoundFont2 Files (*.sf2) - Файли SoundFont2 (*.sf2) + Gain + Підсилення Apply reverb (if supported) Створити відлуння (якщо підтримується) - Open SoundFont file - Відкрити файл SoundFront - - - Apply chorus (if supported) - Створити ефект хору (якщо підтримується) + This button enables the reverb effect. This is useful for cool effects, but only works on files that support it. + Ця кнопка включає ефект луни. Це корисно для класних ефектів, але працює не для всіх файлів. Reverb Roomsize: Розмір приміщення: - - Chorus Speed: - Швидкість хору: - Reverb Damping: Загасання луни: @@ -9313,25 +9332,41 @@ This chip was used in the Commodore 64 computer. Reverb Width: Довгота луни: - - Chorus Depth: - Глибина хору: - Reverb Level: Рівень відлуння: - Chorus 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: Лінії хору: - Open other SoundFont file - Відкрити інший файл SoundFront + Chorus Level: + Рівень хору: + + + Chorus Speed: + Швидкість хору: + + + Chorus Depth: + Глибина хору: + + + Open SoundFont file + Відкрити файл SoundFront + + + SoundFont2 Files (*.sf2) + Файли SoundFont2 (*.sf2) @@ -9343,164 +9378,164 @@ This chip was used in the Commodore 64 computer. sidInstrument - - Chip model - Модель чіпа - Cutoff Зріз - Volume - Гучність + Resonance + Підсилення + + + Filter type + Тип фільтру Voice 3 off Голос 3 відкл - Resonance - Підсилення + Volume + Гучність - Filter type - Тип фільтру + Chip model + Модель чіпа sidInstrumentView - Test - Тест - - - Sync - Синхро - - - Filtered - Відфільтрований + Volume: + Гучність: - Ring-Mod - Круговий режим + Resonance: + Підсилення: - Noise - Шум + Cutoff frequency: + Частота зрізу: - Pulse Width: - Довжина імпульсу: + High-Pass filter + Вис.ЧФ - Decay rate determines how rapidly the output falls from the peak amplitude to the selected Sustain level. - Тривалість спаду визначає, наскільки швидко гучність падає від максимуму до залишкового рівня. + Band-Pass filter + Серед.ЧФ - Cutoff frequency: - Частота зрізу: + Low-Pass filter + Низ.ЧФ - Decay: - Згасання: + Voice3 Off + Голос 3 відкл - Output of Voice %1 will remain at the selected Sustain amplitude as long as the note is held. - Гучність %1-го голосу залишатиметься на рівні амплітуди витримки, поки триває нота. + MOS6581 SID + MOS6581 SID - Resonance: - Підсилення: + MOS8580 SID + MOS8580 SID - Ring-mod replaces the Triangle Waveform output of Oscillator %1 with a "Ring Modulated" combination of Oscillators %1 and %2. - Круговий режим замінює трикутні хвилі на виході осциллятора %1 "Круговою модуляцією" комбінацією осцилляторів %1 і %2. + Attack: + Вступ: Attack rate determines how rapidly the output of Voice %1 rises from zero to peak amplitude. Тривалість вступу визначає, наскільки швидко гучність %1-го голосу зростає від нуля до максимального значення. - Sync synchronizes the fundamental frequency of Oscillator %1 with the fundamental frequency of Oscillator %2 producing "Hard Sync" effects. - Синхро синхронізує фундаментальну частоту осцилляторів %1 фундаментальною частотою осциллятора %2, створюючи ефект "Залізної синхронізації". + Decay: + Згасання: - Voice3 Off - Голос 3 відкл + Decay rate determines how rapidly the output falls from the peak amplitude to the selected Sustain level. + Тривалість спаду визначає, наскільки швидко гучність падає від максимуму до залишкового рівня. - Test, when set, resets and locks Oscillator %1 at zero until Test is turned off. - Якщо «прапорець» встановлено, то %1-й осциллятор видає нульовий сигнал (поки прапорець не зніметься). + Sustain: + Витримка: - Attack: - Вступ: + Output of Voice %1 will remain at the selected Sustain amplitude as long as the note is held. + Гучність %1-го голосу залишатиметься на рівні амплітуди витримки, поки триває нота. - SawTooth - Зигзаг + Release: + Зменшення: - Pulse Wave - Пульсуюча хвиля + The output of of Voice %1 will fall from Sustain amplitude to zero amplitude at the selected Release rate. + Гучність %1-го голосу буде падати від залишкового рівня до нуля з вказаною тут швидкістю. - 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 буде подаватися прямо на вихід. + Pulse Width: + Довжина імпульсу: - Triangle Wave - Трикутник + 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: Грубість: - Release: - Зменшення: + The Coarse detuning allows to detune Voice %1 one octave up or down. + Грубі налаштування дозволяють підлаштувати Голос %1 на одну октаву вгору або вниз. - Sustain: - Витримка: + Pulse Wave + Пульсуюча хвиля - The Coarse detuning allows to detune Voice %1 one octave up or down. - Грубі налаштування дозволяють підлаштувати Голос %1 на одну октаву вгору або вниз. + Triangle Wave + Трикутник - 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, щоб отримати звучання. + SawTooth + Зигзаг - Volume: - Гучність: + Noise + Шум - The output of of Voice %1 will fall from Sustain amplitude to zero amplitude at the selected Release rate. - Гучність %1-го голосу буде падати від залишкового рівня до нуля з вказаною тут швидкістю. + Sync + Синхро - MOS8580 SID - + Sync synchronizes the fundamental frequency of Oscillator %1 with the fundamental frequency of Oscillator %2 producing "Hard Sync" effects. + Синхро синхронізує фундаментальну частоту осцилляторів %1 фундаментальною частотою осциллятора %2, створюючи ефект "Залізної синхронізації". - MOS6581 SID - + Ring-Mod + Круговий режим - Low-Pass filter - Низ.ЧФ + Ring-mod replaces the Triangle Waveform output of Oscillator %1 with a "Ring Modulated" combination of Oscillators %1 and %2. + Круговий режим замінює трикутні хвилі на виході осциллятора %1 "Круговою модуляцією" комбінацією осцилляторів %1 і %2. - Band-Pass filter - Серед.ЧФ + Filtered + Відфільтрований - High-Pass filter - Вис.ЧФ + 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-й осциллятор видає нульовий сигнал (поки прапорець не зніметься). @@ -9528,16 +9563,16 @@ This chip was used in the Commodore 64 computer. Від лівого на лівий: - Right to Right Vol: - Від правого на правий: + Left to Right Vol: + Від лівого на правий: Right to Left Vol: Від правого на лівий: - Left to Right Vol: - Від лівого на правий: + Right to Right Vol: + Від правого на правий: @@ -9572,22 +9607,6 @@ This chip was used in the Commodore 64 computer. vibed - - Fuzziness %1 - Нечіткість %1 - - - Pickup %1 position - Положення %1-го звукознімача - - - Length %1 - Довжина %1 - - - Pan %1 - Бал %1 - String %1 volume Гучність %1-й струни @@ -9597,107 +9616,130 @@ This chip was used in the Commodore 64 computer. Жорсткість %1-й струни - Octave %1 - Октава %1 + Pick %1 position + Лад %1 + + + Pickup %1 position + Положення %1-го звукознімача + + + Pan %1 + Бал %1 Detune %1 Підстроювання %1 - Pick %1 position - Лад %1 + Fuzziness %1 + Нечіткість %1 + + + Length %1 + Довжина %1 Impulse %1 Імпульс %1 + + Octave %1 + Октава %1 + vibedView - Pan: - Бал: + Volume: + Гучність: - 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" - на частоті, на шість октав більш високій, ніж основна. + The 'V' knob sets the volume of the selected string. + Регулятор 'V' встановлює гучність поточної струни. - Impulse Editor - Редактор сигналу + String stiffness: + Жорсткість: - Fuzziness: - Нечіткість: + 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' встановлює жорсткість поточної струни. Цей параметр відповідає за тривалість звучання струни (чим більше значення жорсткості, тим довше дзвенить струна). - 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. - Ручка довжини встановлює довжину поточної струни. Чим довша струна, тим більш чистий і довгий звук вона дає; однак це вимагає більше ресурсів ЦП. + Pick position: + Ударна позиція: - 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' встановлює жорсткість поточної струни. Цей параметр відповідає за тривалість звучання струни (чим більше значення жорсткості, тим довше дзвенить струна). + 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' встановлює місце струни, де вона буде "притиснута". Чим нижче значення, тим ближче це місце буде до кобилки. - Length: - Довжина: + Pickup position: + Положення звукознімача: - 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 містить до дев'яти незалежно звучних струн, індикатор в лівому нижньому куті показує, активна чи поточна струна (тобто чи буде вона чутна). + 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' встановлює місце струни, звідки буде зніматися звук. Чим нижче значення, тим ближче це місце буде до мосту. - White noise wave - Білий шум + Pan: + Бал: - Click here to smooth waveform. - Клацніть щоб згладити форму сигналу. + The Pan knob determines the location of the selected string in the stereo field. + Ця ручка встановлює стереобаланс для поточної струни. - Use a square-wave for current oscillator. - Генерувати квадрат. + Detune: + Підлаштувати: - The 'V' knob sets the volume of the selected string. - Регулятор 'V' встановлює гучність поточної струни. + 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. + Ручка підстроювання змінює зсув частоти для поточної струни. Від'ємні значення змусять струну звучати плоско, позитивні - гостро. - Sine wave - Синусоїда + Fuzziness: + Нечіткість: - Click here to enable/disable waveform. - Натисніть, щоб увімкнути/вимкнути сигнал. + 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'. + Ця ручка додає розмитість звуку, що найбільш помітно під час наростання, втім, це може використовуватися, щоб зробити звук більш "металевим". - Octave - Октава + Length: + Довжина: - 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' встановлює місце струни, де вона буде "притиснута". Чим нижче значення, тим ближче це місце буде до кобилки. + 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. + Ручка довжини встановлює довжину поточної струни. Чим довша струна, тим більш чистий і довгий звук вона дає; однак це вимагає більше ресурсів ЦП. - Smooth - Згладити + Impulse or initial state + Початкова швидкість/початковий стан - String - Струна + 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" встановлює режим роботи струни: якщо він включений, то зазначена форма сигналу інтерпретується як початковий імпульс, інакше - як початкова форма струни. - 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'. - Ця ручка додає розмитість звуку, що найбільш помітно під час наростання, втім, це може використовуватися, щоб зробити звук більш "металевим". + 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" - на частоті, на шість октав більш високій, ніж основна. - 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. + 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 'S' button will smooth the waveform. The 'N' button will normalize the waveform. Редактор форми дозволяє явно вказати профіль струни в початковий момент часу, або її початковий імпульс (в залежності від стану перемикача "Imp"). @@ -9710,171 +9752,162 @@ The 'N' button will normalize the waveform. Кнопка 'N' нормалізує рівень. - 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' встановлює місце струни, звідки буде зніматися звук. Чим нижче значення, тим ближче це місце буде до мосту. - - - Pick position: - Ударна позиція: - - - The Pan knob determines the location of the selected string in the stereo field. - Ця ручка встановлює стереобаланс для поточної струни. + 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' '- положення звукознімача. + +Ручка підстроювання і стереобалансу, сподіваємося не потребує пояснень. + +Ручка "Довжина" регулює довжину струни + +Індикатор-перемикач зліва внизу визначає, чи включена поточна струна. - String stiffness: - Жорсткість: + Enable waveform + Включити сигнал - Square wave - Квадратна хвиля + Click here to enable/disable waveform. + Натисніть, щоб увімкнути/вимкнути сигнал. - Saw wave - Зигзаг + String + Струна - Normalize - Нормалізувати + 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 містить до дев'яти незалежно звучних струн, індикатор в лівому нижньому куті показує, активна чи поточна струна (тобто чи буде вона чутна). - Click here to normalize waveform. - Натисніть, щоб нормалізувати сигнал. + Sine wave + Синусоїда - Use a saw-wave for current oscillator. - Генерувати зигзагоподібний сигнал. + Triangle wave + Трикутник - Use white-noise for current oscillator. - Генерувати білий шум. + Saw wave + Зигзаг - Triangle wave - Трикутник + Square wave + Квадратна хвиля - Impulse or initial state - Початкова швидкість/початковий стан + White noise wave + Білий шум - Detune: - Підлаштувати: + User defined wave + Користувацька - Use a sine-wave for current oscillator. - Генерувати гармонійний (синусоїдальний) сигнал. + Smooth + Згладити - Pickup position: - Положення звукознімача: + Click here to smooth waveform. + Клацніть щоб згладити форму сигналу. - Volume: - Гучність: + Normalize + Нормалізувати - User defined wave - Користувацька + Click here to normalize waveform. + Натисніть, щоб нормалізувати сигнал. - Use a user-defined waveform for current oscillator. - Задати форму сигналу. + Use a sine-wave for current oscillator. + Генерувати гармонійний (синусоїдальний) сигнал. Use a triangle-wave for current oscillator. Генерувати трикутний сигнал. - 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. - Ручка підстроювання змінює зсув частоти для поточної струни. Від'ємні значення змусять струну звучати плоско, позитивні - гостро. + Use a saw-wave for current oscillator. + Генерувати зигзагоподібний сигнал. - 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' '- положення звукознімача. - -Ручка підстроювання і стереобалансу, сподіваємося не потребує пояснень. - -Ручка "Довжина" регулює довжину струни - -Індикатор-перемикач зліва внизу визначає, чи включена поточна струна. + Use a square-wave for current oscillator. + Генерувати квадрат. - 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" встановлює режим роботи струни: якщо він включений, то зазначена форма сигналу інтерпретується як початковий імпульс, інакше - як початкова форма струни. + Use white-noise for current oscillator. + Генерувати білий шум. - Enable waveform - Включити сигнал + Use a user-defined waveform for current oscillator. + Задати форму сигналу. voiceObject - - Voice %1 release - Зменшення %1-го голосу - Voice %1 pulse width Голос %1 довжина сигналу - Voice %1 wave shape - Форма сигналу для %1-го голосу + Voice %1 attack + Вступ %1-го голосу - Voice %1 coarse detuning - Підналаштування %1-голосу (грубо) + Voice %1 decay + Згасання %1-го голосу Voice %1 sustain Витримка для %1-го голосу - Voice %1 ring modulate - Голос %1 кільцевий модулятор + Voice %1 release + Зменшення %1-го голосу - Voice %1 sync - Синхронізація %1-го голосу + Voice %1 coarse detuning + Підналаштування %1-голосу (грубо) - Voice %1 test - Голос %1 тест + Voice %1 wave shape + Форма сигналу для %1-го голосу - Voice %1 decay - Згасання %1-го голосу + Voice %1 sync + Синхронізація %1-го голосу - Voice %1 attack - Вступ %1-го голосу + Voice %1 ring modulate + Голос %1 кільцевий модулятор Voice %1 filtered Фільтрований %1-й голос + + Voice %1 test + Голос %1 тест + waveShaperControlDialog @@ -9946,4 +9979,4 @@ The LED in the lower right corner of the waveform editor determines whether the Вихідне підсилення - + \ No newline at end of file diff --git a/data/locale/zh_CN.ts b/data/locale/zh_CN.ts index a5e37aa3e5b..7d8ea597a82 100644 --- a/data/locale/zh_CN.ts +++ b/data/locale/zh_CN.ts @@ -1,53 +1,63 @@ - - - + AboutDialog + About LMMS 关于LMMS + LMMS LMMS + Version %1 (%2/%3, Qt %4, %5) 版本 %1 (%2/%3, Qt %4, %5) + About 关于 + LMMS - easy music production for everyone LMMS - 人人都是作曲家 + Copyright © %1 版权所有 © %1 + <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> + Authors 作者 + Involved 参与者 + Contributors ordered by number of commits: 贡献者名单(以提交次数排序): + 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! @@ -63,49 +73,50 @@ Zixing Liu <liushuyu@aosc.xyz> 若你有兴趣提高翻译质量,请联系维护团队 (https://github.com/AOSC-Dev/translations)、之前的译者或本项目维护者! + License 许可证 - - Copyright (c) 2004-2014, LMMS developers - Copyright (c) 2004-2016, LMMS 开发者 - - - <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> - <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> - AmplifierControlDialog + VOL VOL + Volume: 音量: + PAN PAN + Panning: 声相: + LEFT + Left gain: 左增益: + RIGHT + Right gain: 右增益: @@ -113,18 +124,22 @@ Zixing Liu <liushuyu@aosc.xyz> AmplifierControls + Volume 音量 + Panning 声相 + Left gain 左增益 + Right gain 右增益 @@ -132,10 +147,12 @@ Zixing Liu <liushuyu@aosc.xyz> AudioAlsaSetupWidget + DEVICE 设备 + CHANNELS 声道数 @@ -143,78 +160,98 @@ Zixing Liu <liushuyu@aosc.xyz> 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. + 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)之间来回播放。 + 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 Hz) + 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: 起始点: + With this knob you can set the point where AudioFileProcessor should begin playing your sample. 调节此旋钮,以告诉 AudioFileProcessor 在哪里开始播放。 + Endpoint: 终点: + 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. 调节此旋钮,以设置循环开始的地方。 @@ -222,6 +259,7 @@ Zixing Liu <liushuyu@aosc.xyz> AudioFileProcessorWaveView + Sample length: 采样长度: @@ -229,26 +267,32 @@ Zixing Liu <liushuyu@aosc.xyz> 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。 + CLIENT-NAME 客户端名称 + CHANNELS 声道数 @@ -256,10 +300,12 @@ Zixing Liu <liushuyu@aosc.xyz> AudioOss::setupWidget + DEVICE 设备 + CHANNELS 声道数 @@ -267,10 +313,12 @@ Zixing Liu <liushuyu@aosc.xyz> AudioPortAudio::setupWidget + BACKEND 后端 + DEVICE 设备 @@ -278,10 +326,12 @@ Zixing Liu <liushuyu@aosc.xyz> AudioPulseAudio::setupWidget + DEVICE 设备 + CHANNELS 声道数 @@ -289,6 +339,7 @@ Zixing Liu <liushuyu@aosc.xyz> AudioSdl::setupWidget + DEVICE 设备 @@ -296,10 +347,12 @@ Zixing Liu <liushuyu@aosc.xyz> AudioSoundIo::setupWidget + BACKEND 后端 + DEVICE 设备 @@ -307,46 +360,57 @@ Zixing Liu <liushuyu@aosc.xyz> 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 编辑歌曲全局自动控制 + Remove song-global automation 删除歌曲全局自动控制 + Remove all linked controls 删除所有已连接的控制器 + Connected to %1 连接到%1 + Connected to controller 连接到控制器 + Edit connection... 编辑连接... + Remove connection 删除连接 + Connect to controller... 连接到控制器... @@ -354,291 +418,261 @@ Zixing Liu <liushuyu@aosc.xyz> AutomationEditor + Please open an automation pattern with the context menu of a control! 请使用控制的上下文菜单打开一个自动控制样式! + Values copied 值已复制 + All selected values were copied to the clipboard. 所有选中的值已复制。 - - Automation Editor - %1 - 自动控制编辑器 - %1 - - - Draw mode (Shift+D) - 绘制模式 (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. - 点击这里启用绘制模式。在此模式下你可以增加或移动单个值。 大部分时间下默认使用此模式。你也可以按键盘上的 ‘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' 启用此模式。 - - - 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. - 点击这里,选择的值将会被剪切到剪切板。你可以使用粘贴按钮将它们粘贴到任意地方,存为任意片段。 - - - Erase mode (Shift+E) - 擦除模式 (Shift+E) - - - Automation Editor - no pattern - 自动控制编辑器 - 没有片段 - - - Cut selected values (Ctrl+X) - 剪切选定值 (Ctrl+X) - - - Copy selected values (Ctrl+C) - 复制选定值 (Ctrl+C) - - - 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. - 点击这里播放片段。编辑时很有用,片段会自动循环播放。 - - - Play/pause current pattern (Space) - 播放/暂停当前片段(空格) - - - Click here if you want to stop playing of the current pattern. - 点击这里停止播放片段。 - - - 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. - 点击这里,选择的值将会被复制到剪切板。你可以使用粘贴按钮将它们粘贴到任意地方,存为任意片段。 - - - Stop playing of current pattern (Space) - 停止当前片段(空格) - - - Paste values from clipboard (Ctrl+V) - 从剪贴板粘贴值 (Ctrl+V) - AutomationEditorWindow + Play/pause 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. 点击这里播放片段。编辑时很有用,片段会自动循环播放。 + Stop playing of current pattern (Space) 停止当前片段(空格) + Click here if you want to stop playing of the current pattern. 点击这里停止播放片段。 + Edit actions 编辑功能 + Draw mode (Shift+D) 绘制模式 (Shift+D) + Erase mode (Shift+E) 擦除模式 (Shift+E) + Flip vertically 垂直翻转 + Flip horizontally 水平翻转 + Click here and the pattern will be inverted.The points are flipped in the y direction. - + + Click here and the pattern will be reversed. The points are flipped in the x direction. - + + 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' 启用此模式。 + Interpolation controls 补间控制 + Discrete progression - + 离散步进 + Linear progression - + 线性步进 + Cubic Hermite progression - + 立方 Hermite 步进 + 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. - + + 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: - + 张力: + Cut selected values (%1+X) 剪切选定值 (%1+X) + Copy selected values (%1+C) 复制选定值 (%1+C) + Paste values from clipboard (%1+V) - + 从剪切板粘贴数值 (%1+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. 点击这里,选择的值将从剪贴板粘贴到第一个可见的小节。 + Timeline controls 时间线控制 + Zoom controls 缩放控制 + Quantization controls - + + Automation Editor - no pattern 自动控制编辑器 - 没有片段 + Automation Editor - %1 自动控制编辑器 - %1 + Model is already connected to this pattern. 模型已连接到此片段。 - - Cut selected values (Ctrl+X) - 剪切选定值 (Ctrl+X) - - - Copy selected values (Ctrl+C) - 复制选定值 (Ctrl+C) - - - Paste values from clipboard Ctrl+V) - 从剪切板粘贴数值 - AutomationPattern + Drag a control while pressing <%1> 按住<%1>拖动控制器 - - Model is already connected to this pattern. - 模型已连接到此片段。 - - - Drag a control while pressing <Ctrl> - 按住<Ctrl>拖动控制器 - AutomationPatternView + double-click to open this pattern in automation editor 双击在自动编辑器中打开此片段 + Open in Automation editor 在自动编辑器(Automation editor)中打开 + Clear 清除 + Reset name 重置名称 + Change name 修改名称 + Set/clear record 设置/清除录制 + Flip Vertically (Visible) 垂直翻转 (可见) + Flip Horizontally (Visible) 水平翻转 (可见) + %1 Connections %1个连接 + Disconnect "%1" 断开“%1”的连接 + Model is already connected to this pattern. 模型已连接到此片段。 @@ -646,6 +680,7 @@ Zixing Liu <liushuyu@aosc.xyz> AutomationTrack + Automation track 自动控制轨道 @@ -653,73 +688,90 @@ Zixing Liu <liushuyu@aosc.xyz> BBEditor + Beat+Bassline Editor 节拍+低音线编辑器 + Play/pause current beat/bassline (Space) 播放/暂停当前节拍/低音线(空格) + 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. 点击这里停止播发当前节拍/低音线。 + Beat selector 节拍选择器 + Track and step actions - + 音轨和音阶动作 + Add beat/bassline 添加节拍/低音线 + Add automation-track 添加自动控制轨道 + Remove steps 移除音阶 + Add steps 添加音阶 + Clone Steps - + 克隆音阶 BBTCOView + Open in Beat+Bassline-Editor 在节拍+Bassline编辑器中打开 + Reset name 重置名称 + Change name 修改名称 + Change color 改变颜色 + Reset color to default 重置颜色 @@ -727,10 +779,12 @@ Zixing Liu <liushuyu@aosc.xyz> BBTrack + Beat/Bassline %1 节拍/Bassline %1 + Clone of %1 %1 的副本 @@ -738,26 +792,32 @@ Zixing Liu <liushuyu@aosc.xyz> BassBoosterControlDialog + FREQ 频率 + Frequency: 频率: + GAIN 增益 + Gain: 增益: + RATIO 比率 + Ratio: 比率: @@ -765,14 +825,17 @@ Zixing Liu <liushuyu@aosc.xyz> BassBoosterControls + Frequency 频率 + Gain 增益 + Ratio 比率 @@ -780,82 +843,104 @@ Zixing Liu <liushuyu@aosc.xyz> BitcrushControlDialog + IN 输入 + OUT 输出 + + GAIN 增益 + Input Gain: 输入增益: + NOIS - + 噪音 + Input Noise: 输入噪音: + Output Gain: 输出增益: + CLIP 压限 + Output Clip: 输出压限: + + Rate - + + Rate Enabled - + + Enable samplerate-crushing - + 启用采样率破坏 + Depth 位深 + Depth Enabled 深度已启用 + Enable bitdepth-crushing - + 启用位深破坏 + Sample rate: 采样率: + STD STD + Stereo difference: 双声道差异: + Levels 级别 + Levels: 级别: @@ -863,10 +948,12 @@ Zixing Liu <liushuyu@aosc.xyz> CaptionMenu + &Help 帮助(&H) + Help (not available) 帮助(不可用) @@ -874,10 +961,12 @@ Zixing Liu <liushuyu@aosc.xyz> CarlaInstrumentView + Show GUI 显示图形界面 + Click here to show or hide the graphical user interface (GUI) of Carla. 点击此处可以显示或隐藏 Carla 的图形界面。 @@ -885,6 +974,7 @@ Zixing Liu <liushuyu@aosc.xyz> Controller + Controller %1 控制器%1 @@ -892,58 +982,73 @@ Zixing Liu <liushuyu@aosc.xyz> 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. 检测到环路。 @@ -951,135 +1056,156 @@ Zixing Liu <liushuyu@aosc.xyz> ControllerRackView + Controller Rack 控制器机架 + Add 增加 + Confirm Delete 删除前确认 + Confirm delete? There are existing connection(s) associated with this controller. There is no way to undo. 确定要删除吗?此控制器仍处于被连接状态。此操作不可撤销。 - - 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) - CrossoverEQControlDialog + Band 1/2 Crossover: - + + Band 2/3 Crossover: - + + Band 3/4 Crossover: - + + Band 1 Gain: - + + Band 2 Gain: - + + Band 3 Gain: - + + Band 4 Gain: - + + Band 1 Mute - + + Mute Band 1 - + + Band 2 Mute - + + Mute Band 2 - + + Band 3 Mute - + + Mute Band 3 - + + Band 4 Mute - + + Mute Band 4 - + DelayControls + Delay Samples - + 延迟采样 + Feedback - + + Lfo Frequency - + Lfo 频率 + Lfo Amount - + + Output gain 输出增益 @@ -1087,89 +1213,117 @@ Zixing Liu <liushuyu@aosc.xyz> DelayControlsDialog + Delay - 延迟 + 延迟 + Delay Time - + + Regen - + + Feedback Amount - + + Rate - + + + Lfo - + + Lfo Amt - + + Out Gain - + + Gain - 增益 + 增益 DualFilterControlDialog + + FREQ - 频率 + 频率 + + Cutoff frequency - 切除频率 + 切除频率 + + RESO - + + + Resonance - 共鸣 + 共鸣 + + GAIN - 增益 + 增益 + + Gain - 增益 + 增益 + MIX - + + Mix - 混合 + 混合 + Filter 1 enabled 已启用过滤器 1 + Filter 2 enabled 已启用过滤器 2 + Click to enable/disable Filter 1 点击启用/禁用过滤器 1 + Click to enable/disable Filter 2 点击启用/禁用过滤器 2 @@ -1177,157 +1331,217 @@ Zixing Liu <liushuyu@aosc.xyz> DualFilterControls + Filter 1 enabled 过滤器1 已启用 + Filter 1 type 过滤器 1 类型 + Cutoff 1 frequency 滤波器 1 截频 + Q/Resonance 1 滤波器 1 Q值 + Gain 1 增益 1 + Mix 混合 + Filter 2 enabled 已启用过滤器 2 + Filter 2 type 过滤器 1 类型 {2 ?} + Cutoff 2 frequency 滤波器 2 截频 + Q/Resonance 2 滤波器 2 Q值 + Gain 2 增益 2 + + LowPass 低通 + + HiPass 高通 + + BandPass csg 带通 csg + + BandPass czpg 带通 czpg + + Notch 凹口滤波器 + + Allpass 全通 + + Moog Moog + + 2x LowPass 2 个低通串联 + + RC LowPass 12dB RC 低通(12dB) + + RC BandPass 12dB RC 带通(12dB) + + RC HighPass 12dB RC 高通(12dB) + + RC LowPass 24dB RC 低通(24dB) + + RC BandPass 24dB RC 带通(24dB) + + RC HighPass 24dB RC 高通(24dB) + + Vocal Formant Filter 人声移除过滤器 + + 2x Moog - + 2x Moog + + SV LowPass - + SV 低通 + + SV BandPass - + SV 带通 + + SV HighPass - + SV 高通 + + SV Notch - + + + Fast Formant - + + + Tripole - + Editor + Transport controls - + + Play (Space) 播放(空格) + Stop (Space) 停止(空格) + Record 录音 + Record while playing 播放时录音 @@ -1335,18 +1549,22 @@ Zixing Liu <liushuyu@aosc.xyz> Effect + Effect enabled 启用效果器 + Wet/Dry mix 干/湿混合 + Gate 门限 + Decay 衰减 @@ -1354,6 +1572,7 @@ Zixing Liu <liushuyu@aosc.xyz> EffectChain + Effects enabled 启用效果器 @@ -1361,10 +1580,12 @@ Zixing Liu <liushuyu@aosc.xyz> EffectRackView + EFFECTS CHAIN 效果器链 + Add effect 增加效果器 @@ -1372,164 +1593,190 @@ Zixing Liu <liushuyu@aosc.xyz> EffectSelectDialog + Add effect 增加效果器 + Name - 名称 + 名称 + Description - 描述 + 描述 + Author - - - - Plugin description - 插件描述 + EffectView + Toggles the effect on or off. 打开或关闭效果. + On/Off 开/关 + W/D 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. 衰减旋钮控制在插件停止工作前,缓冲区中加入的静音时常。较小的数值会降低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 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 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 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. +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 频率 x 100 + Modulate Env-Amount 调制所有包络 @@ -1537,453 +1784,547 @@ Right clicking will bring up a context menu where you can change the order in wh 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: 持续: + 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对此包络的调制量,较大的值会对此包络控制的值(如音量或截频)影响更大。 + 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- attack: - + 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. - + + Click here for random wave. - + + FREQ x 100 - + 频率 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 - + 控制此 LFO 的包络数量 + ms/LFO: - + ms/LFO: + Hint 提示 + Drag a sample from somewhere and drop it in this window. - + 从别处拖动采样到此窗口。 EqControls + Input gain 输入增益 + Output gain 输出增益 + Low shelf gain - + + Peak 1 gain - + + Peak 2 gain - + + Peak 3 gain - + + Peak 4 gain - + + High Shelf gain - + + HP res - + + Low Shelf res - + + Peak 1 BW - + + Peak 2 BW - + + Peak 3 BW - + + Peak 4 BW - + + High Shelf res - + + LP res - + + HP freq - + + Low Shelf freq - + + Peak 1 freq - + + Peak 2 freq - + + Peak 3 freq - + + Peak 4 freq - + + High shelf freq - + + LP freq - + + HP active - + + Low shelf active - + + Peak 1 active - + + Peak 2 active - + + Peak 3 active - + + Peak 4 active - + + High shelf active - + + LP active - + + LP 12 - + + LP 24 - + + LP 48 - + + HP 12 - + + HP 24 - + + HP 48 - + + low pass type - + 低通类型 + high pass type - + 高通类型 Analyse IN - + Analyse OUT - + EqControlsDialog + HP - + + Low Shelf - + + Peak 1 - + + Peak 2 - + + Peak 3 - + + Peak 4 - + + High Shelf - + + LP - + + In Gain - + + + + Gain 增益 + Out Gain - + + Bandwidth: - + 带宽: Octave - + + Resonance : - + 共鸣: + Frequency: 频率: + lp grp - + + hp grp - + Frequency - + 频率 Resonance - + 共鸣 Bandwidth - - - - 12dB - - - - 24dB - - - - 48dB - + 带宽 @@ -1991,185 +2332,226 @@ Right clicking will bring up a context menu where you can change the order in wh Reso: - + BW: - + Freq: - + 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 补间 + Sinc Medium (recommended) 中等 Sinc 补间 (推荐) + Sinc Best (very slow!) 最佳 Sinc 补间 (很慢!) + Oversampling (use with care!): 过采样 (请谨慎使用!): + 1x (None) 1x (无) + 2x 2x + 4x 4x + 8x 8x + Export as loop (remove end silence) 导出为回环loop(移除结尾的静音) + Export between loop markers 只导出回环标记中间的部分 + Start 开始 + Cancel 取消 + 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 写入数据。 请确保你拥有对文件以及存储文件的目录的写权限,然后重试! + Export project to %1 导出项目到 %1 + Error 错误 + Error while determining file-encoder device. Please try to choose a different output format. 寻找文件编码设备时出错。请使用另外一种输出格式。 + Rendering: %1% 渲染中:%1% @@ -2177,6 +2559,8 @@ Please make sure you have write-permission to the file and the directory contain Fader + + Please enter a new value between %1 and %2: 请输入一个介于%1和%2之间的数值: @@ -2184,6 +2568,7 @@ Please make sure you have write-permission to the file and the directory contain FileBrowser + Browser 浏览器 @@ -2191,69 +2576,80 @@ Please make sure you have write-permission to the file and the directory contain 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... 请稍候,加载采样中... + Error 错误 + does not appear to be a valid 并不是一个有效的 + file 文件 + --- Factory files --- ---软件自带文件--- - - Open in new instrument-track/Song-Editor - 在新乐器轨道/歌曲编辑器中打开 - FlangerControls + Delay Samples - + 延迟采样 + Lfo Frequency - + Lfo 频率 + Seconds + Regen - + + Noise 噪音 + Invert 反转 @@ -2261,42 +2657,52 @@ Please make sure you have write-permission to the file and the directory contain FlangerControlsDialog + Delay 延迟 + Delay Time: 延迟时间: + Lfo Hz - + Lfo + Lfo: - + Lfo: + Amt - + + Amt: - + + Regen - + + Feedback Amount: - + + Noise 噪音 + White Noise Amount: 白噪音数量: @@ -2304,36 +2710,43 @@ Please make sure you have write-permission to the file and the directory contain 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. + 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 向左移(&L) + Move &right 向右移(&R) + Rename &channel 重命名通道(&C) + R&emove channel 删除通道(&E) + Remove &unused channels 移除所有未用通道(&U) @@ -2341,10 +2754,14 @@ You can remove and move FX channels in the context menu, which is accessed by ri FxMixer + Master 主控 + + + FX %1 FX %1 @@ -2352,34 +2769,42 @@ You can remove and move FX channels in the context menu, which is accessed by ri FxMixerView + FX-Mixer 效果混合器 + FX Fader %1 FX 衰减器 %1 + Mute 静音 + Mute this FX channel 静音此效果通道 + Solo 独奏 + Solo FX channel 独奏效果通道 + Rename FX channel 重命名效果通道 + Enter the new name for this FX channel 为此效果通道输入一个新的名称 @@ -2387,6 +2812,8 @@ You can remove and move FX channels in the context menu, which is accessed by ri FxRoute + + Amount to send from channel %1 to channel %2 从通道 %1 发送到通道 %2 的量 @@ -2394,14 +2821,17 @@ You can remove and move FX channels in the context menu, which is accessed by ri GigInstrument + Bank + Patch 音色 + Gain 增益 @@ -2409,46 +2839,58 @@ You can remove and move FX channels in the context menu, which is accessed by ri GigInstrumentView + Open other GIG file 打开另外的 GIG 文件 + Click here to open another GIG file 点击这里打开另外一个 GIG 文件 + Choose the patch 选择路径 + Click here to change which patch of the GIG file to use 点击这里选择另一种 GIG 音色 + + Change which instrument of the GIG file is being played 更换正在使用的 GIG 文件中的乐器 + Which GIG file is currently being used 哪一个 GIG 文件正在被使用 + Which patch of the GIG file is currently being used GIG 文件的哪一个音色正在被使用 + Gain 增益 + Factor to multiply samples by - + + Open GIG file 打开 GIG 文件 + GIG Files (*.gig) GIG 文件 (*.gig) @@ -2456,42 +2898,52 @@ You can remove and move FX channels in the context menu, which is accessed by ri GuiApplication + Working directory 工作目录 + The LMMS working directory %1 does not exist. Create it now? You can change the directory later via Edit -> Settings. LMMS工作目录%1不存在,现在新建一个吗?你可以稍后在 编辑 -> 设置 中更改此设置。 + Preparing UI 正在准备界面 + Preparing song editor 正在准备歌曲编辑器 + Preparing mixer 正在准备混音器 + Preparing controller rack 正在准备控制机架 + Preparing project notes 正在准备工程注释 + Preparing beat/bassline editor 正在准备节拍/低音线编辑器 + Preparing piano roll 正在准备钢琴窗 + Preparing automation editor 正在准备自动编辑器 @@ -2499,62 +2951,77 @@ You can remove and move FX channels in the context menu, which is accessed by ri InstrumentFunctionArpeggio + Arpeggio - + + Arpeggio type - + + Arpeggio range - + + Arpeggio time - + + Arpeggio gate - + + Arpeggio direction - + + Arpeggio mode - + + Up 向上 + Down 向下 + Up and down 上和下 + Random 随机 + Down and up 下和上 + Free 自由 + Sort 排序 + Sync 同步 @@ -2562,70 +3029,87 @@ You can remove and move FX channels in the context menu, which is accessed by ri 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: 模式: @@ -2633,382 +3117,478 @@ You can remove and move FX channels in the context menu, which is accessed by ri 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 + Minor Minor + Chromatic Chromatic + Half-Whole Diminished - + + 5 5 + Chords Chords + Chord type Chord type + Chord range Chord range @@ -3016,73 +3596,92 @@ You can remove and move FX channels in the context menu, which is accessed by ri InstrumentFunctionNoteStackingView + STACKING 堆叠 + Chord: 和弦: + 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. - + InstrumentMidiIOView + ENABLE MIDI INPUT 启用MIDI输入 + + CHANNEL 通道 + + VELOCITY 力度 + ENABLE MIDI OUTPUT 启用MIDI输出 + PROGRAM 乐器 + NOTE 音符 + MIDI devices to receive MIDI events from 用于接收 MIDI 事件的 MIDI 设备 + MIDI devices to send MIDI events to 用于发送 MIDI 事件的 MIDI 设备 + CUSTOM BASE VELOCITY 自定义基准力度 + Specify the velocity normalization base for MIDI-based instruments at 100% note velocity - + + BASE VELOCITY 基准力度 @@ -3090,10 +3689,12 @@ You can remove and move FX channels in the context menu, which is accessed by ri InstrumentMiscView + MASTER PITCH 主音高 + Enables the use of Master Pitch 启用主音高 @@ -3101,177 +3702,221 @@ You can remove and move FX channels in the context menu, which is accessed by ri 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 2 个低通串联 + RC LowPass 12dB RC 低通(12dB) + RC BandPass 12dB RC 带通(12dB) + RC HighPass 12dB RC 高通(12dB) + RC LowPass 24dB RC 低通(24dB) + RC BandPass 24dB RC 带通(24dB) + RC HighPass 24dB RC 高通(24dB) + Vocal Formant Filter 人声移除过滤器 + 2x Moog - + 2x Moog + SV LowPass - + SV 低通 + SV BandPass - + SV 带通 + SV HighPass - + SV 高通 + SV Notch - + + Fast Formant - + + Tripole - + 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. - + + FREQ 频率 + cutoff frequency: - + + 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. - + + Envelopes, LFOs and filters are not supported by the current instrument. 包络和低频振荡 (LFO) 不被当前乐器支持。 @@ -3279,42 +3924,54 @@ You can remove and move FX channels in the context menu, which is accessed by ri InstrumentTrack + + Default preset 预置 + With this knob you can set the volume of the opened channel. 使用此旋钮可以设置开放通道的音量。 + + unnamed_track 未命名轨道 + Base note 基本音 + Volume 音量 + Panning 声相 + Pitch 音高 + Pitch range 音域范围 + FX channel 效果通道 + Master Pitch 主音高 @@ -3322,42 +3979,52 @@ You can remove and move FX channels in the context menu, which is accessed by ri InstrumentTrackView + Volume 音量 + Volume: 音量: + VOL VOL + Panning 声相 + Panning: 声相: + PAN PAN + MIDI MIDI + Input 输入 + Output 输出 + FX %1: %2 效果 %1: %2 @@ -3365,106 +4032,133 @@ You can remove and move FX channels in the context menu, which is accessed by ri InstrumentTrackWindow + GENERAL SETTINGS 常规设置 + Use these controls to view and edit the next/previous track in the song editor. 使用这些控制选项来查看和编辑在歌曲编辑器中的上个/下个轨道。 + Instrument volume 乐器音量 + Volume: 音量: + VOL VOL + Panning 声相 + Panning: 声相: + PAN PAN + Pitch 音高 + Pitch: 音高: + cents 音分 cents + PITCH - + + Pitch range (semitones) 音域范围(半音) + RANGE 范围 + FX channel 效果通道 + + FX 效果 + 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. 如果你想保存当前乐器轨道设置到预设文件, 请点击这里。稍后你可以在预设浏览器中双击以使用它。 + SAVE 保存 + ENV/LFO 包络/低振 + FUNC 功能 + MIDI MIDI + MISC 杂项 + Save preset 保存预置 + XML preset file (*.xpf) XML 预设文件 (*.xpf) + PLUGIN 插件 @@ -3472,18 +4166,22 @@ You can remove and move FX channels in the context menu, which is accessed by ri Knob + Set linear 设置为线性 + Set logarithmic 设置为对数 + 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之间的数值: @@ -3491,6 +4189,7 @@ You can remove and move FX channels in the context menu, which is accessed by ri LadspaControl + Link channels 关联通道 @@ -3498,10 +4197,12 @@ You can remove and move FX channels in the context menu, which is accessed by ri LadspaControlDialog + Link Channels 连接通道 + Channel 通道 @@ -3509,14 +4210,17 @@ You can remove and move FX channels in the context menu, which is accessed by ri LadspaControlView + Link channels 连接通道 + Value: 值: + Sorry, no help available. 啊哦,这个没有帮助文档。 @@ -3524,17 +4228,15 @@ You can remove and move FX channels in the context menu, which is accessed by ri LadspaEffect + Unknown LADSPA plugin %1 requested. 已请求未知 LADSPA 插件 %1. - - Effect - 效果器 - LcdSpinBox + Please enter a new value between %1 and %2: 请输入一个介于%1和%2之间的数值: @@ -3542,18 +4244,26 @@ You can remove and move FX channels in the context menu, which is accessed by ri LeftRightNav + + + Previous 上个 + + + Next 下个 + Previous (%1) 上 (%1) + Next (%1) 下 (%1) @@ -3561,145 +4271,179 @@ You can remove and move FX channels in the context menu, which is accessed by ri LfoController + LFO Controller LFO 控制器 + Base value 基准值 + Oscillator speed 振动速度 + Oscillator amount - + + Oscillator phase - + + Oscillator waveform 振动波形 + Frequency Multiplier - + LfoControllerDialog + LFO - + + LFO Controller - LFO 控制器 + 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 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. - + LmmsCore + Generating wavetables 正在生成波形表 + Initializing data structures 正在初始化数据结构 + Opening audio and midi devices 正在启动音频和 MIDI 设备 + Launching mixer threads 生在启动混音器线程 @@ -3707,485 +4451,523 @@ Double click to pick a file. MainWindow + Configuration file 配置文件 + Error while parsing configuration file at line %1:%2: %3 解析配置文件发生错误(行%1:%2:%3) + Could not save config-file 不能保存配置文件 - Could not save configuration file %1. You're probably not permitted to write to this 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 recovery 工程恢复 + There is a recovery file present. It looks like the last session did not end properly or another instance of LMMS is already running. Do you want to recover the project of this session? 发现了一个恢复文件。看上去上个会话没有正常结束或者其他的 LMMS 进程已经运行。你想要恢复这个项目吗? + + Recover 恢复 + Recover the file. Please don't run multiple instances of LMMS when you do this. 恢复文件。请不要在恢复文件时运行多个 LMMS 程序。 + + Ignore 忽略 + Launch LMMS as usual but with automatic backup disabled to prevent the present recover file from being overwritten. 正常启动 LMMS 但是关闭自动备份来防止备份文件被覆盖。 + Discard 丢弃 + Launch a default session and delete the restored files. This is not reversible. 运行一个新的默认会话并且删除恢复文件。此操作无法撤销。 + Quit 退出 + Shut down LMMS with no further action. 什么也不做并关闭 LMMS。 + Exit 退出 + Version %1 版本 %1 + Preparing plugin browser 正在准备插件浏览器 + Preparing file browsers 正在准备文件浏览器 + My Projects 我的工程 + My Samples 我的采样 + My Presets 我的预设 + My Home 我的主目录 + Root directory 根目录 + Volumes 音量 + My Computer 我的电脑 + Loading background artwork 正在加载背景图案 + &File 文件(&F) + &New 新建(&N) + New from template 从模版新建工程 + &Open... 打开(&O)... + &Recently Opened Projects 最近打开的工程(&R) + &Save 保存(&S) + Save &As... 另存为(&A)... + Save as New &Version 保存为新版本(&V) + Save as default template 保存为默认模板 + Import... 导入... + E&xport... 导出(&E)... + E&xport Tracks... 导出音轨(&X)... + Export &MIDI... 导出 MIDI (&M)... + &Quit 退出(&Q) + &Edit 编辑(&E) + Undo 撤销 + Redo 重做 + Settings 设置 + &View 视图 (&V) + &Tools 工具(&T) + &Help 帮助(&H) + Online Help 在线帮助 + Help 帮助 + What's This? 这是什么? + About 关于 + Create new project 新建工程 + Create new project from template 从模版新建工程 + Open existing project 打开已有工程 + Recently opened projects 最近打开的工程 + Save current project 保存当前工程 + Export current project 导出当前工程 + What's this? 这是什么? + Toggle metronome 开启/关闭节拍器 + 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 采样)。 + 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. 点击这里显示或隐藏 FX 混音器。FX 混音器是管理你歌曲中不同音效的强大工具。你可以向不同的通道添加不同的效果。 + 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 未标题 + Recover session. Please save your work! 恢复会话。请保存你的工作! + Automatic backup disabled. Remember to save your work! 自动备份已禁用。记得保存你的作品哟! + LMMS %1 LMMS %1 + Recovered project not saved 恢复的工程没有保存 + This project was recovered from the previous session. It is currently unsaved and will be lost if you don't save it. Do you want to save it now? 这个工程已从上一个会话中恢复。它现在没有被保存, 并且如果你不保存, 它将会丢失。你现在想保存它吗? + Project not saved 工程未保存 + The current project was modified since last saving. Do you want to save it now? 此工程自上次保存后有了修改,你想保存吗? + Open Project 打开工程 + LMMS (*.mmp *.mmpz) LMMS (*.mmp *.mmpz) + Save Project 保存工程 + LMMS Project LMMS 工程 + LMMS Project Template LMMS 工程模板 + Overwrite default template? 覆盖默认的模板? + This will overwrite your current default template. 这将会覆盖你的当前默认模板。 + Help not available 帮助不可用 - Currently there's no help available in LMMS. + + 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的相关文档。 + Song Editor 显示/隐藏歌曲编辑器 + Beat+Bassline Editor 显示/隐藏节拍+旋律编辑器 + Piano Roll 显示/隐藏钢琴窗 + Automation Editor 显示/隐藏自动控制编辑器 + FX Mixer 显示/隐藏混音器 + Project Notes 显示/隐藏工程注释 + Controller Rack 显示/隐藏控制器机架 + Volume as dBV 以 dBV 显示音量 + Smooth scroll 平滑滚动 + Enable note labels in piano roll 在钢琴窗中显示音号 - - Working directory - 工作目录 - - - The LMMS working directory %1 does not exist. Create it now? You can change the directory later via Edit -> Settings. - LMMS工作目录%1不存在,现在新建一个吗?你可以稍后在 编辑 -> 设置 中更改此设置。 - - - Root Directory - 根目录 - - - E&xport tracks... - 导出音轨(&E)... - - - Save project - 保存工程 - - - Open project - 打开工程 - - - Save as new &version - 保存为新版本(&V) - - - Online help - 在线帮助 - - - My home - 我的主目录 - - - My computer - 我的电脑 - - - Recently opened project - 最近打开的工程 - - - My presets - 我的预置 - - - &Project - 工程(&P) - - - My projects - 我的工程 - - - My samples - 我的采样 - - - LMMS Project (*.mmpz *.mmp);;LMMS Project Template (*.mpt) - LMMS 工程 (*.mmpz *.mmp);;LMMS 工程模板 (*.mpt) - - - It looks like the last session did not end properly. Do you want to recover the project of this session? - 好像上次会话未能正常退出,你想要恢复上次会话未保存的工程吗? - MeterDialog + + Meter Numerator - + + + Meter Denominator - + + TIME SIG 拍子记号 @@ -4193,40 +4975,49 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS. MeterModel + Numerator - + + Denominator - + 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 文件后将会没有声音。你需要下载一个通用 MIDI (GM) 的 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. 你在编译 LMMS 时没有加入 SoundFont2 播放器支持, 此播放器默认用于添加导入的 MIDI 文件。因此在 MIDI 文件导入后, 将没有声音。 + Track 轨道 @@ -4234,46 +5025,57 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS. MidiPort + Input channel 输入通道 + Output channel 输出通道 + Input controller 输入控制器 + Output controller 输出控制器 + Fixed input velocity - + + Fixed output velocity - + + Fixed output note - + + Output MIDI program - + + Base velocity 基准力度 + Receive MIDI-events 接受 MIDI 事件 + Send MIDI-events 发送 MIDI 事件 @@ -4281,6 +5083,7 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS. MidiSetupWidget + DEVICE 设备 @@ -4288,1068 +5091,1435 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS. 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 - + + + Sine wave 正弦波 + Bandlimited Triangle wave - + + Bandlimited Saw wave - + + Bandlimited Ramp wave - + + Bandlimited Square wave - + + Bandlimited Moog saw wave - + + + Soft square wave - + + Absolute sine wave - + + + Exponential wave - + + White noise - + + Digital Triangle wave - + + Digital Saw wave - + + Digital Ramp wave - + + Digital Square wave - + + Digital Moog saw wave - + + Triangle wave 三角波 + Saw wave 锯齿波 + Ramp wave - + 斜坡波 + Square wave 方波 + Moog saw wave - + + Abs. sine wave - + 绝对值正弦波 + Random 随机 + Random smooth - + 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. - + + + + Volume 音量 + + + Panning 声相 + + + Coarse detune - + + + + semitones 半音 + + Finetune left - + + + + + cents - + + + Finetune right - + + + + Stereo phase offset - + + + + + + deg - + + Pulse width - + + Send sync on pulse rise - + + Send sync on pulse fall - + + Hard sync oscillator 2 - + + Reverse sync oscillator 2 - + + Sub-osc mix - + + Hard sync oscillator 3 - + + Reverse sync oscillator 3 - + + + + + Attack 打进声 + + Rate - + + + Phase - + + + Pre-delay - + + + Hold 保持 + + Decay 衰减 + + Sustain 持续 + + Release 释放 + + Slope - + + 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. - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Modulation amount - + MultitapEchoControlDialog + Length 长度 + Step length: 步进长度: + Dry 干声 + Dry Gain: 干声增益: + Stages - + + Lowpass stages: - + + Swap inputs - + + Swap left and right input channel for reflections - + 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 - + NesInstrumentView + + + + Volume 音量 + + + Coarse detune - + + + + Envelope length - + + Enable channel 1 - + + Enable envelope 1 - + + Enable envelope 1 loop - + + Enable sweep 1 - + + + Sweep amount - + + + Sweep rate - + + + 12.5% Duty cycle - + + + 25% Duty cycle - + + + 50% Duty cycle - + + + 75% Duty cycle - + + Enable channel 2 - + + Enable envelope 2 - + + Enable envelope 2 loop - + + Enable sweep 2 - + + Enable channel 3 - + + Noise Frequency - + + Frequency sweep - + + Enable channel 4 - + + Enable envelope 4 - + + Enable envelope 4 loop - + + Quantize noise frequency when using note frequency - + + Use note frequency for noise - + + Noise mode - + + Master Volume - + + Vibrato - + OscillatorObject + Osc %1 waveform Osc %1 波形 + Osc %1 harmonic - + Osc %1 泛音 + + Osc %1 volume Osc %1 音量 + + Osc %1 panning Osc %1 声像 + + Osc %1 fine detuning left - + + Osc %1 coarse detuning - + + Osc %1 fine detuning right - + + Osc %1 phase-offset - + + Osc %1 stereo phase-detuning - + + Osc %1 wave shape - + + Modulation type %1 - + PatchesDialog + Qsynth: Channel Preset Qsynth: 通道预设 + Bank selector 音色选择器 + Bank + Program selector - + + Patch 音色 + Name 名称 + OK 确定 + Cancel 取消 @@ -5357,46 +6527,57 @@ PM means phase modulation: Oscillator 3's phase is modulated by oscillator 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) @@ -5404,57 +6585,60 @@ PM means phase modulation: Oscillator 3's phase is modulated by oscillator PatternView + use mouse wheel to set velocity of a step - + + + + + double-click to open in Piano Roll + 双击打开钢琴窗 + Open in piano-roll 在钢琴窗中打开 + Clear all notes 清除所有音符 + Reset name 重置名称 + Change name 修改名称 + Add steps 添加音阶 + Remove steps 移除音阶 - - double-click to open this pattern in piano-roll -use mouse wheel to set velocity of a step - 双击在钢琴窗中打开此片段 -使用鼠标滑轮设置此音阶的音量 - - - double-click to open this pattern in piano-roll -use mouse wheel to set volume of a step - 双击在钢琴窗中打开此片段 -使用鼠标滑轮设置此音阶的音量 - PeakController + Peak Controller 峰值控制器 + Peak Controller Bug 峰值控制器 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 中, 峰值控制器因为有 bug 而可能没有正确连接。请确保峰值控制器正常连接后再次保存次文件。我们对给你造成的不便深表歉意。 @@ -5462,381 +6646,388 @@ use mouse wheel to set volume of a step PeakControllerDialog + PEAK - + 峰值 + LFO Controller - LFO 控制器 + LFO 控制器 PeakControllerEffectControlDialog + BASE 基准 + Base amount: 基础值: + AMNT - + + Modulation amount: 调制量: + MULT - + + Amount Multiplicator: - + + ATCK 打击 + Attack: 打击声: + DCAY - + 衰减 + Release: - + 释音: + TRES - + 阀值 + Treshold: - + 阀值: PeakControllerEffectControls + Base value 基准值 + Modulation amount 调制量 + Attack 打进声 + Release 释放 + Treshold 阀值 + Mute output 输出静音 + Abs Value - + + Amount Multiplicator - + PianoRoll + Note Velocity 音符音量 + Note Panning 音符声相偏移 + Mark/unmark current semitone 标记/取消标记当前半音 + Mark/unmark all corresponding octave semitones - + + Mark current scale - + + Mark current chord - + + Unmark all 取消标记所有 + Select all notes on this key 选中所有相同音调的音符 + Note lock 音符锁定 + Last note 上一个音符 + No scale - + + No chord - + + Velocity: %1% 音量:%1% + Panning: %1% left 声相:%1% 偏左 + Panning: %1% right 声相:%1% 偏右 + Panning: center 声相:居中 + Please open a pattern by double-clicking on it! 双击打开片段! + + Please enter a new value between %1 and %2: 请输入一个介于 %1 和 %2 的值: - - Piano-Roll - no pattern - 钢琴窗 - 没有片段 - - - Piano-Roll - %1 - 钢琴窗 - %1 - - - Note Volume - 音符音量 - - - Volume: %1% - 音量:%1% - - - Cut selected notes (Ctrl+X) - 剪切选定音符 (Ctrl+X) - - - Draw mode (Shift+D) - 绘制模式 (Shift+D) - - - Erase mode (Shift+E) - 擦除模式 (Shift+E) - - - Play/pause current pattern (Space) - 播放/暂停当前片段(空格) - - - Select mode (Shift+S) - 选择模式 (Shift+S) - - - Paste notes from clipboard (Ctrl+V) - 从剪贴板粘贴音符 (Ctrl+V) - - - Record notes from MIDI-device/channel-piano - 从 MIDI 设备/通道钢琴(channel-piano) 录制音符 - - - Copy selected notes (Ctrl+C) - 复制选定音符 (Ctrl+C) - - - Stop playing of current pattern (Space) - 停止当前片段(空格) - PianoRollWindow + Play/pause current pattern (Space) 播放/暂停当前片段(空格) + Record notes from MIDI-device/channel-piano 从 MIDI 设备/通道钢琴(channel-piano) 录制音符 + Record notes from MIDI-device/channel-piano while playing song or BB track - + + Stop playing of current pattern (Space) 停止当前片段(空格) + 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. - + + Edit actions - + 编辑功能 + Draw mode (Shift+D) 绘制模式 (Shift+D) + Erase mode (Shift+E) 擦除模式 (Shift+E) + Select mode (Shift+S) 选择模式 (Shift+S) + 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 %1 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. 点击启用擦除模式。此模式下你可以擦除音符。你可以按键盘上的 'Shift+E' 启用此模式。 + Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold %1 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. - + + Copy paste controls - + + Cut selected notes (%1+X) 剪切选定音符 (%1+X) + Copy selected notes (%1+C) 复制选定音符 (%1+C) + Paste notes from clipboard (%1+V) 从剪贴板粘贴音符 (%1+V) + 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. - + + Timeline controls - + 时间线控制 + Zoom and note controls - + 缩放和音符控制 + 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. - + + Piano-Roll - %1 钢琴窗 - %1 + Piano-Roll - no pattern 钢琴窗 - 没有片段 - - 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 以便临时切换到选择模式。 - - - Cut selected notes (Ctrl+X) - 剪切选定音符 (Ctrl+X) - - - Copy selected notes (Ctrl+C) - 复制选定音符 (Ctrl+C) - - - Paste notes from clipboard (Ctrl+V) - 从剪贴板粘贴音符 (Ctrl+V) - PianoView + Base note 基本音 @@ -5844,20 +7035,24 @@ use mouse wheel to set volume of a step Plugin + Plugin not found 未找到插件 - The plugin "%1" wasn't found or could not be loaded! + + 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”失败! @@ -5865,14 +7060,17 @@ Reason: "%2" PluginBrowser + Instrument plugins 乐器插件 + Instrument browser 乐器浏览器 + Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track. 将乐器插件拖入歌曲编辑器, 节拍低音线编辑器, 或者现有的乐器轨道。 @@ -5880,188 +7078,173 @@ Reason: "%2" PluginFactory + Plugin not found. 未找到插件。 + LMMS plugin %1 does not have a plugin descriptor named %2! - + LMMS插件 %1 没有一个插件描述符命名为 %2 ProjectNotes + Project notes 工程注释 + Put down your project notes here. 在这里写下你的工程注释。 + Edit Actions 编辑功能 + &Undo 撤销(&U) + %1+Z %1+Z + &Redo 重做(&R) + %1+Y %1+Y + &Copy 复制(&C) + %1+C %1+C + Cu&t 剪切(&T) + %1+X %1+X + &Paste 粘贴(&P) + %1+V %1+V + Format Actions 格式功能 + &Bold 加粗(&B) + %1+B %1+B + &Italic 斜体(&I) + %1+I %1+I + &Underline 下划线(&U) + %1+U %1+U + &Left 左对齐(&L) + %1+L %1+L + C&enter 居中(&E) + %1+E %1+E + &Right 右对齐(&R) + %1+R %1+R + &Justify 匀齐(&J) + %1+J %1+J + &Color... 颜色(&C)... - - Ctrl+Z - Ctrl+Z - - - Ctrl+Y - Ctrl+Y - - - Ctrl+C - Ctrl+C - - - Ctrl+X - Ctrl+X - - - Ctrl+V - Ctrl+V - - - Ctrl+B - Ctrl+B - - - Ctrl+I - Ctrl+I - - - Ctrl+U - Ctrl+U - - - Ctrl+L - Ctrl+L - - - Ctrl+E - Ctrl+E - - - Ctrl+R - Ctrl+R - - - Ctrl+J - Ctrl+J - ProjectRenderer + WAV-File (*.wav) WAV-文件 (*.wav) + Compressed OGG-File (*.ogg) 压缩的 OGG 文件(*.ogg) @@ -6069,50 +7252,81 @@ Reason: "%2" QWidget + + + Name: 名称: + + Maker: 制作者: + + Copyright: 版权: + + Requires Real Time: 要求实时: + + + + + + Yes + + + + + + No + + Real Time Capable: 是否支持实时: + + In Place Broken: - + + + Channels In: 输入通道: + + Channels Out: 输出通道: + File: %1 文件:%1 + File: 文件: @@ -6120,6 +7334,7 @@ Reason: "%2" RenameDialog + Rename... 重命名... @@ -6127,46 +7342,57 @@ Reason: "%2" SampleBuffer + Open audio file 打开音频文件 + All Audio-Files (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw) 所有音频文件 (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw) + 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) @@ -6174,49 +7400,51 @@ Reason: "%2" SampleTCOView + double-click to select sample 双击选择采样 + Delete (middle mousebutton) 删除 (鼠标中键) + Cut 剪切 + Copy 复制 + Paste 粘贴 + Mute/unmute (<%1> + middle click) 静音/取消静音 (<%1> + 鼠标中键) - - Set/clear record - 设置/清除录制 - - - Mute/unmute (<Ctrl> + middle click) - 静音/取消静音 (<Ctrl> + 鼠标中键) - SampleTrack + Volume 音量 + Panning 声相 + + Sample track 采样轨道 @@ -6224,26 +7452,32 @@ Reason: "%2" SampleTrackView + Track volume 轨道音量 + Channel volume: 通道音量: + VOL VOL + Panning 声相 + Panning: 声相: + PAN PAN @@ -6251,130 +7485,166 @@ Reason: "%2" 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 默认压缩项目文件 + One instrument track window mode 单乐器轨道窗口模式 + HQ-mode for output audio-device 对输出设备使用高质量输出 + Compact track buttons 紧凑化轨道图标 + Sync VST plugins to host playback 同步 VST 插件和主机回放 + Enable note labels in piano roll 在钢琴窗中显示音号 + Enable waveform display by default 默认启用波形图 + Keep effects running even without input 在没有输入时也运行音频效果 + Create backup file when saving a project 保存工程时建立备份 + Reopen last project on start 启动时打开最近的项目 + LANGUAGE 语言 + + Paths 路径 + Directories 目录 + LMMS working directory LMMS工作目录 + Themes directory 主题文件目录 + Background artwork 背景图片 + FL Studio installation directory FL Studio安装目录 + VST-plugin directory VST插件目录 + GIG directory GIG 目录 + SF2 directory SF2 目录 + LADSPA plugin directories LADSPA 插件目录 + STK rawwave directory STK rawwave 目录 + Default Soundfont File 默认 SoundFont 文件 + + Performance settings 性能设置 @@ -6384,100 +7654,126 @@ Reason: "%2" 自动保存 + Enable auto save feature 启用自动保存功能 + UI effects vs. performance 界面特效 vs 性能 + Smooth scroll in Song Editor 歌曲编辑器中启用平滑滚动 + Show playback cursor in AudioFileProcessor 在 AudioFileProcessor 中显示回放光标 + + 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 GIG directory 选择 GIG 目录 + Choose your SF2 directory 选择 SF2 目录 + 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 目录 + Choose default SoundFont 选择默认的 SoundFont + Choose background artwork 选择背景图片 @@ -6504,97 +7800,114 @@ Remember to also save your project manually. 不过, 请你还是记得时常手动保存你的项目哟。 + 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 接口的控制项目。 - - Artwork directory - 插图目录 - - - LADSPA plugin paths - LADSPA 插件路径 - 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 导入文件 + MIDI sequences MIDI 音序器 + FL Studio projects FL Studio 工程 + Hydrogen projects Hydrogen工程 + All file types 所有类型 + + Empty project 空工程 + + This project is empty so exporting makes no sense. Please put some items into Song Editor first! 这个工程是空的所以就算导出也没有意义,请在歌曲编辑器中加入一点声音吧! + Select directory for writing exported tracks... 选择写入导出音轨的目录... + + untitled 未标题 + + Select file for project-export... 为工程导出选择文件... + MIDI File (*.mid) MIDI 文件 (*.mid) + The following errors occured while loading: 载入时发生以下错误: @@ -6602,195 +7915,184 @@ Remember to also save your project manually. SongEditor + Could not open file 无法打开文件 + 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 。或许没有权限读此文件。 请确保您拥有对此文件的读权限,然后重试。 + Could not write file 无法写入文件 + 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 写入数据。或许没有权限修改此文件。请确保您拥有对此文件的写权限,然后重试。 + Error in file 文件错误 + The file %1 seems to contain errors and therefore can't be loaded. 文件 %1 似乎包含错误,无法被加载。 + Project Version Mismatch 版本号不匹配 + This %1 was created with LMMS version %2, but version %3 is installed 这个 %1 是由版本为 %2 的 LMMS 创建的, 但是已安装的 LMMS 版本号为 %3 + 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 半音程 - - Add beat/bassline - 添加节拍/低音线 - - - Record samples from Audio-device - 从音频设备录制样本 - - - Add automation-track - 添加自动化轨道 - - - Add sample-track - 添加采样轨道 - - - Song-Editor - 歌曲编辑器 - - - Record samples from Audio-device while playing song or BB track - 在播放歌曲或BB轨道时从音频设备录入样本 - - - Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song. - 点击这里停止播放,歌曲位置标记会跳到歌曲的开头。 - - - Draw mode - 绘制模式 - - - Stop song (Space) - 停止歌曲(空格) - - - Play song (Space) - 播放歌曲(空格) - - - 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. - 点击这里完整播放歌曲。将从绿色歌曲标记开始播放。在播放的同时可以对它进行移动。 - SongEditorWindow + Song-Editor 歌曲编辑器 + Play song (Space) 播放歌曲(空格) + Record samples from Audio-device 从音频设备录制样本 + Record samples from Audio-device while playing song or BB track 在播放歌曲或BB轨道时从音频设备录入样本 + Stop 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. 点击这里完整播放歌曲。将从绿色歌曲标记开始播放。在播放的同时可以对它进行移动。 + Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song. 点击这里停止播放,歌曲位置标记会跳到歌曲的开头。 + Track actions 轨道动作 + Add beat/bassline 添加节拍/Bassline + Add sample-track 添加采样轨道 + Add automation-track 添加自动控制轨道 + Edit actions 编辑动作 + Draw mode 绘制模式 + Edit mode (select and move) 编辑模式(选定和移动) + Timeline controls 时间线控制 + Zoom controls 缩放控制 @@ -6798,10 +8100,12 @@ Remember to also save your project manually. SpectrumAnalyzerControlDialog + Linear spectrum 线性频谱图 + Linear Y axis 线性 Y 轴 @@ -6809,14 +8113,17 @@ Remember to also save your project manually. SpectrumAnalyzerControls + Linear spectrum 线性频谱图 + Linear Y axis 线性 Y 轴 + Channel mode 通道模式 @@ -6824,6 +8131,8 @@ Remember to also save your project manually. TabWidget + + Settings for %1 %1 的设定 @@ -6831,81 +8140,101 @@ Remember to also save your project manually. TempoSyncKnob + + Tempo Sync - + 节奏同步 + No Sync 无同步 + Eight beats - + 八拍 + Whole note - + 全音符 + Half note - + 二分音符 + Quarter note - + 四分音符 + 8th note - + 八分音符 + 16th note - + 16 分音符 + 32nd note - + 32 分音符 + Custom... - + 自定义... + 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 - + 同步为16分音符 + Synced to 32nd Note - + 同步为32分音符 TimeDisplayWidget + click to change time units 点击改变时间单位 @@ -6913,53 +8242,56 @@ Remember to also save your project manually. TimeLineWidget + 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 <%1> to disable magnetic loop points. 按住 <%1> 禁用磁性吸附。 + Hold <Shift> to move the begin loop point; Press <%1> to disable magnetic loop points. 按住 <Shift> 移动起始循环点;按住 <%1> 禁用磁性吸附。 - - 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 + Mute 静音 + Solo 独奏 @@ -6967,42 +8299,55 @@ Remember to also save your project manually. TrackContainer + Importing FLP-file... 正在导入 FLP-文件... + + + Cancel 取消 + + + Please wait... 请稍等... + Importing MIDI-file... 正在导入 MIDI-文件... + Couldn't import file 无法导入文件 - Couldn't find a filter for importing file %1. + + 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. + + 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... 正在加载工程... @@ -7010,278 +8355,323 @@ Please make sure you have read-permission to the file and the directory containi TrackContentObject + Mute 静音 - - Muted - 静音 - TrackContentObjectView + Current position 当前位置 + + Hint 提示 + Press <%1> and drag to make a copy. 按住 <%1> 并拖动以创建副本。 + Current length 当前长度 + Press <%1> for free resizing. 按住 <%1> 自由调整大小。 + %1:%2 (%3:%4 to %5:%6) %1:%2 (%3:%4 到 %5:%6) + Delete (middle mousebutton) 删除 (鼠标中键) + Cut 剪切 + Copy 复制 + Paste 粘贴 + Mute/unmute (<%1> + middle click) 静音/取消静音 (<%1> + 鼠标中键) - - Press <Ctrl> and drag to make a copy. - 按住 <Ctrl> 并拖动以创建副本。 - - - Press <Ctrl> for free resizing. - 按住 <Ctrl> 自由调整大小。 - - - Mute/unmute (<Ctrl> + middle click) - 静音/取消静音 (<Ctrl> + 鼠标中键) - TrackOperationsWidget + Press <%1> while clicking on move-grip to begin a new drag'n'drop-action. - 按住 <%1> 的同时拖动移动柄复制并移动此轨道。 + 按住 <%1> 的同时拖动移动柄复制并移动此轨道。 + Actions for this track - 对此轨道可进行的操作 + 对此轨道可进行的操作 + Mute - 静音 + 静音 + + Solo - 独奏 + 独奏 + Mute this track - 静音此轨道 + 静音此轨道 + Clone this track - 克隆此轨道 + 克隆此轨道 + Remove this track - 移除此轨道 + 移除此轨道 + Clear this track - 清除此轨道 + 清除此轨道 + FX %1: %2 - + 效果 %1: %2 + Assign to new FX Channel - + + Turn all recording on - 打开所有录制 + 打开所有录制 + Turn all recording off - 关闭所有录制 - - - Press <Ctrl> while clicking on move-grip to begin a new drag'n'drop-action. - 按住 <Ctrl> 的同时拖动移动柄复制并移动此轨道。 + 关闭所有录制 TripleOscillatorView + Use phase modulation for modulating oscillator 1 with oscillator 2 - + + Use amplitude modulation for modulating oscillator 1 with oscillator 2 - + + Mix output of oscillator 1 & 2 - + + Synchronize oscillator 1 with oscillator 2 - + + Use frequency modulation for modulating oscillator 1 with oscillator 2 - + + Use phase modulation for modulating oscillator 2 with oscillator 3 - + + Use amplitude modulation for modulating oscillator 2 with oscillator 3 - + + Mix output of oscillator 2 & 3 - + + Synchronize oscillator 2 with oscillator 3 - + + Use frequency modulation for modulating oscillator 2 with oscillator 3 - + + 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 24 semitones (2 octaves) 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. - + 为当前振荡器使用用户自定波形。 VersionedSaveDialog + Increment version number 递增版本号 + Decrement version number 递减版本号 @@ -7289,90 +8679,113 @@ Please make sure you have read-permission to the file and the directory containi 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. - + + Control VST-plugin from LMMS host 从 LMMS 宿主控制 VST-插件 + Click here, if you want to control VST-plugin from host. - + + Open VST-plugin preset 打开 VST-插件预设 + 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. 点击这里, 如果你想保存当前 VST-插件预设。 + Next (+) 下一个 (+) + Click here to select presets that are currently loaded in VST. - + 点击此处选择当前所加载 VST 的预设 + Show/hide GUI 显示/隐藏界面 + Click here to show or hide the graphical user interface (GUI) of your VST-plugin. 点此显示/隐藏VST插件的界面。 + Turn off all notes 全部静音 + Open VST-plugin 打开VST插件 + DLL-files (*.dll) DLL-文件 (*.dll) + EXE-files (*.exe) EXE-文件 (*.exe) + No VST-plugin loaded 未载入VST插件 + Preset 预置 + by - + 制造商 + - VST plugin control - VST插件控制 @@ -7380,10 +8793,12 @@ Please make sure you have read-permission to the file and the directory containi VisualizationWidget + click to enable/disable visualization of master-output 点击启用/禁用视觉化主输出 + Click to enable 点击启用 @@ -7391,109 +8806,139 @@ Please make sure you have read-permission to the file and the directory containi VstEffectControlDialog + Show/hide 显示/隐藏 + Control VST-plugin from LMMS host - 从 LMMS 宿主控制 VST-插件 + 从 LMMS 宿主控制 VST-插件 + Click here, if you want to control VST-plugin from host. - + + Open VST-plugin preset - 打开 VST-插件预设 + 打开 VST-插件预设 + 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. - + 点击此处选择当前所加载 VST 的预设 + Save preset 保存预置 + Click here, if you want to save current VST-plugin preset program. - 点击这里, 如果你想保存当前 VST-插件预设。 + 点击这里, 如果你想保存当前 VST-插件预设。 + + Effect by: - + 音效制作: + &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /> - + VstPlugin + + The VST plugin %1 could not be loaded. 无法载入VST插件 %1。 + Open Preset 打开预置 + + Vst Plugin Preset (*.fxp *.fxb) VST插件预置文件(*.fxp *.fxb) + : default : 默认 + " " + ' ' + Save Preset 保存预置 + .fxp .fxp + .FXP .FXP + .FXB .FXB + .fxb .fxb + Loading plugin 载入插件 + Please wait while loading VST plugin... 正在载入VST插件,请稍候…… @@ -7501,454 +8946,590 @@ Please make sure you have read-permission to the file and the directory containi 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 + + + + Volume - 音量 + 音量 + + + + Panning - 声相 + 声相 + + + + Freq. multiplier - + + + + + Left detune - + + + + + + + + + cents - + + + + + Right detune - + + A-B Mix - + + Mix envelope amount - + + Mix envelope attack - + + Mix envelope hold - + + Mix envelope decay - + + Crosstalk - + + 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 + 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 - + + Show GUI 显示图形界面 + Click here to show or hide the graphical user interface (GUI) of ZynAddSubFX. - + audioFileProcessor + Amplify 增益 + Start of sample 采样起始 + End of sample 采样结尾 + Loopback point 循环点 + Reverse sample 反转采样 + Loop mode 循环模式 + Stutter - + + Interpolation mode 补间方式 + None + Linear 线性插补 + Sinc 辛格(Sinc)插补 + Sample not found: %1 采样未找到: %1 @@ -7956,6 +9537,7 @@ Please make sure you have read-permission to the file and the directory containi bitInvader + Samplelength 采样长度 @@ -7963,74 +9545,92 @@ Please make sure you have read-permission to the file and the directory containi 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 标准化 @@ -8038,124 +9638,153 @@ Please make sure you have read-permission to the file and the directory containi 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 - + 双声道模式 fxLineLcdSpinBox + Assign to: 分配给: + New FX Channel 新的效果通道 @@ -8163,6 +9792,7 @@ Please make sure you have read-permission to the file and the directory containi graphModel + Graph 图形 @@ -8170,50 +9800,62 @@ Please make sure you have read-permission to the file and the directory containi kickerInstrument + Start frequency 起始频率 + End frequency 结束频率 + Length 长度 + Distortion Start 起始失真度 + Distortion End 结束失真度 + Gain 增益 + Envelope Slope 包络线倾斜度 + Noise 噪音 + Click 力度 + Frequency Slope 频率倾斜度 + Start from note 从哪个音符开始 + End to note 到哪个音符结束 @@ -8221,42 +9863,52 @@ Please make sure you have read-permission to the file and the directory containi kickerInstrumentView + Start frequency: 起始频率: + End frequency: 结束频率: + Frequency Slope: 频率倾斜度: + Gain: 增益: + Envelope Length: 包络长度: + Envelope Slope: 包络线倾斜度: + Click: 力度: + Noise: 噪音: + Distortion Start: 起始失真度: + Distortion End: 结束失真度: @@ -8264,37 +9916,48 @@ Please make sure you have read-permission to the file and the directory containi 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. +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. +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. +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 插件信息。这些插件根据接口类型和名字被分为五个类别。 @@ -8312,6 +9975,7 @@ Double clicking any of the plugins will bring up information on the ports. + Type: 类型: @@ -8319,10 +9983,12 @@ Double clicking any of the plugins will bring up information on the ports. ladspaDescription + Plugins 插件 + Description 描述 @@ -8330,66 +9996,83 @@ Double clicking any of the plugins will bring up information on the ports. ladspaPortDialog + Ports - + + Name 名称 + Rate - + + Direction 方向 + Type 类型 + Min < Default < Max 最小 < 默认 < 最大 + Logarithmic 对数 + SR Dependent - + + Audio 音频 + Control 控制 + Input 输入 + Output 输出 + Toggled - + + Integer 整型 + Float 浮点 + + Yes @@ -8397,638 +10080,800 @@ Double clicking any of the plugins will bring up information on the ports. 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. - + 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 - + malletsInstrumentView + Instrument - + + Spread - + + Spread: - + + Missing files - + + Your Stk-installation seems to be incomplete. Please make sure the full Stk-package is installed! - + + 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 参数控制 + 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. - + 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. - + 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 - + opl2instrumentView + + Attack - 打进声 + 打击声 + + Decay - 衰减 + 衰减 + + Release - 释放 + 释放 + + Frequency multiplier - + organicInstrument + Distortion 失真 + Volume 音量 @@ -9036,145 +10881,186 @@ Double clicking any of the plugins will bring up information on the ports. organicInstrumentView + Distortion: 失真: + The distortion knob adds distortion to the output of the instrument. - + + Volume: 音量: + The volume knob controls the volume of the output of the instrument. It is cumulative with the instrument window's volume control. - + + Randomise 随机 + The randomize button randomizes all knobs except the harmonics,main volume and distortion knobs. - + + + Osc %1 waveform: - + + Osc %1 volume: - + + Osc %1 panning: - + + Osc %1 stereo detuning - + + cents 音分 cents + 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 低音 @@ -9182,205 +11068,271 @@ Double clicking any of the plugins will bring up information on the ports. 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 - + patchesDialog + Qsynth: Channel Preset Qsynth: 通道预设 + Bank selector 音色选择器 + Bank + Program selector - + + Patch 音色 + Name 名称 + OK 确定 + Cancel 取消 @@ -9388,251 +11340,302 @@ Double clicking any of the plugins will bring up information on the ports. pluginBrowser + A native amplifier plugin 原生增益插件 + Simple sampler with various settings for using samples (e.g. drums) in an instrument-track 简单地在乐器栏使用采样(比如鼓音源), 同时也提供多种设置 + Boost your bass the fast and simple way - + + Customizable wavetable synthesizer 可自定制的波表合成器 + An oversampling bitcrusher - + + Carla Patchbay Instrument Carla Patchbay 乐器 + Carla Rack Instrument Carla Rack 乐器 + A 4-band Crossover Equalizer - + 一种 四波段交叉均衡器 + A native delay plugin 原生的衰减插件 + A Dual filter plugin - + + plugin for processing dynamics in a flexible way - + + A native eq plugin 原生的 EQ 插件 + A native flanger plugin 一个原生的 镶边 (Flanger) 插件 + Filter for importing FL Studio projects into LMMS 将 FL Studio 工程导入 LMMS 的过滤器 + Player for GIG files 播放 GIG 文件的播放器 + Filter for importing Hydrogen files into LMMS 导入 Hydrogen 工程文件到 LMMS 的解析器 + Versatile drum synthesizer 多功能鼓合成器 + List installed LADSPA plugins 列出已安装的 LADSPA 插件 + plugin for using arbitrary LADSPA-effects inside LMMS. 在 LMMS 中使用任意 LADSPA 效果的插件。 + Incomplete monophonic imitation tb303 - + 对单音 TB303 的不完整的模拟器 + Filter for exporting MIDI-files from LMMS - + + Filter for importing MIDI-files into LMMS - + + Monstrous 3-oscillator synth with modulation matrix - + + A multitap echo delay plugin - + + A NES-like synthesizer 类似于 NES 的合成器 + 2-operator FM Synth - + + Additive Synthesizer for organ-like sounds - + + Emulation of GameBoy (TM) APU GameBoy (TM) APU 模拟器 + GUS-compatible patch instrument GUS 兼容音色的乐器 + Plugin for controlling knobs with sound peaks - + + Player for SoundFont files 在工程中使用SoundFont + LMMS port of sfxr sfxr 的 LMMS 移植版本 + Emulation of the MOS6581 and MOS8580 SID. This chip was used in the Commodore 64 computer. 模拟 MOS6581 和 MOS8580 SID 的模拟器 这些芯片曾在 Commodore 64 电脑上用过。 + Graphical spectrum analyzer plugin 图形频谱分析器插件 + Plugin for enhancing stereo separation of a stereo input file - + + Plugin for freely manipulating stereo output - + + Tuneful things to bang on - + + Three powerful oscillators you can modulate in several ways - + + VST-host for using VST(i)-plugins within LMMS LMMS的VST(i)插件宿主 + Vibrating string modeler - + + plugin for using arbitrary VST effects inside LMMS. - + + 4-oscillator modulatable wavetable synth - + 有四个振荡器的可调制波表合成器 + plugin for waveshaping - + + Embedded ZynAddSubFX 内置的 ZynAddSubFX + no description 没有描述 - - Instrument browser - 乐器浏览器 - - - Instrument plugins - 乐器插件 - sf2Instrument + Bank + Patch 音色 + Gain 增益 + Reverb 混响 + Reverb Roomsize 混响空间大小 + Reverb Damping 混响阻尼 + Reverb Width 混响宽度 + Reverb Level 混响级别 + Chorus 合唱 + Chorus Lines 合唱声部 + Chorus Level 合唱电平 + Chorus Speed 合唱速度 + Chorus Depth 合唱深度 + A soundfont %1 could not be loaded. 无法载入Soundfont %1。 @@ -9640,74 +11643,92 @@ This chip was used in the Commodore 64 computer. 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) @@ -9715,6 +11736,7 @@ This chip was used in the Commodore 64 computer. sfxrInstrument + Wave Form 波形 @@ -9722,26 +11744,32 @@ This chip was used in the Commodore 64 computer. sidInstrument + Cutoff 切除 + Resonance 共鸣 + Filter type 过滤器类型 + Voice 3 off 声音 3 关 + Volume 音量 + Chip model 芯片型号 @@ -9749,145 +11777,185 @@ This chip was used in the Commodore 64 computer. sidInstrumentView + Volume: 音量: + Resonance: 共鸣: + + Cutoff frequency: 频谱刀频率: + High-Pass filter 高通滤波器 + Band-Pass filter 带通滤波器 + Low-Pass filter 低通滤波器 + Voice3 Off 声音 3 关 + MOS6581 SID MOS6581 SID + MOS8580 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. - + stereoEnhancerControlDialog + WIDE - + + Width: 宽度: @@ -9895,6 +11963,7 @@ This chip was used in the Commodore 64 computer. stereoEnhancerControls + Width 宽度 @@ -9902,18 +11971,22 @@ This chip was used in the Commodore 64 computer. stereoMatrixControlDialog + Left to Left Vol: 从左到左音量: + Left to Right Vol: 从左到右音量: + Right to Left Vol: 从右到左音量: + Right to Right Vol: 从右到右音量: @@ -9921,18 +11994,22 @@ This chip was used in the Commodore 64 computer. stereoMatrixControls + Left to Left 从左到左 + Left to Right 从左到右 + Right to Left 从右到左 + Right to Right 从右到右 @@ -9940,63 +12017,65 @@ This chip was used in the Commodore 64 computer. vestigeInstrument + Loading plugin 载入插件 + Please wait while 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开发者! - - - Failed loading VST-plugin - 加载VST插件失败 - vibed + String %1 volume - + + String %1 stiffness - + + Pick %1 position - + + Pickup %1 position - + + Pan %1 声相 %1 + Detune %1 去谐 %1 + Fuzziness %1 模糊度 %1 + Length %1 长度 %1 + Impulse %1 - + + Octave %1 八度音 %1 @@ -10004,241 +12083,291 @@ If it runs with other VST-software under Linux, please contact an LMMS-developer 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 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 '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. + + 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. +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. +'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 '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 正弦波 + 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) - 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 - + + Voice %1 filtered - + + Voice %1 test 声音 %1 测试 @@ -10246,58 +12375,72 @@ The LED in the lower right corner of the waveform editor determines whether the 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 将输入信号限制到 0dB @@ -10305,988 +12448,14 @@ The LED in the lower right corner of the waveform editor determines whether the waveShaperControls + Input gain 输入增益 + Output gain 输出增益 - - AudioAlsa::setupWidget - - DEVICE - 设备 - - - CHANNELS - 声道数 - - - - AudioJack::setupWidget - - CLIENT-NAME - 客户端名称 - - - CHANNELS - 声道数 - - - - DummyEffect - - NOT FOUND - 未找到 - - - - EqParameterWidget - - Hz - Hz - - - - FxMixerView::FxChannelView - - Mute - 静音 - - - Mute this FX channel - 静音此效果通道 - - - FX Fader %1 - FX 衰减器 %1 - - - Solo - 独奏 - - - Solo FX channel - 独奏效果通道 - - - - MidiAlsaRaw::setupWidget - - DEVICE - 设备 - - - - MidiAlsaSeq - - DEVICE - 设备 - - - - MidiAlsaSeq::setupWidget - - DEVICE - 设备 - - - - MidiOss::setupWidget - - DEVICE - 设备 - - - - 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 - - - A - A - - - B - B - - - C - C - - - D - D - - - E - E - - - G - G - - - A# - A# - - - C# - C# - - - D# - D# - - - Ab - Ab - - - Bb - Bb - - - F# - F# - - - G# - G# - - - Db - Db - - - Eb - Eb - - - Fb - Fb - - - Gb - Gb - - - - bbEditor - - Add beat/bassline - 添加节拍/低音线 - - - Click here to stop playing of current beat/bassline. - 点击这里停止播发当前节拍/低音线。 - - - Add automation-track - 添加自动轨道 - - - Stop playback of current beat/bassline (Space) - 停止播放当前节拍/低音线(空格) - - - Remove steps - 移除音阶 - - - Beat+Bassline Editor - 节拍+低音线编辑器 - - - Add steps - 添加音阶 - - - Click here to play the current beat/bassline. The beat/bassline is automatically looped when its end is reached. - 点击这里停止播放当前节拍/低音线。当结束时节拍/低音线会自动循环播放。 - - - Play/pause current beat/bassline (Space) - 播放/暂停当前节拍/低音线(空格) - - - - bbTCOView - - Open in Beat+Bassline-Editor - 在节拍+低音线编辑器中打开 - - - Reset color to default - 重置颜色 - - - Change color - 改变颜色 - - - Reset name - 重置名称 - - - Change name - 修改名称 - - - - bbTrack - - Beat/Bassline %1 - 节拍/低音线 %1 - - - Clone of %1 - %1 的副本 - - - - exportProjectDialog - - Error - 错误 - - - 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 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 之间的值: - - - - 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之间的值: - - - - lb303Synth - - Distortion - 失真 - - - Waveform - 波形 - - - - lb303SynthView - - Resonance: - 共鸣: - - - Decay: - 衰减: - - - DEC - 衰减 - - - - projectNotes - - Cu&t - 剪切(&T) - - - &Bold - 加粗(&B) - - - &Copy - 复制(&C) - - - &Left - 左对齐(&L) - - - &Redo - 重做(&R) - - - &Undo - 撤销(&U) - - - Format Actions - 格式功能 - - - &Justify - 匀齐(&J) - - - Project notes - 工程注释 - - - &Paste - 粘贴(&P) - - - &Right - 右对齐(&R) - - - Edit Actions - 编辑功能 - - - 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. - 在这里写下你的工程注释。 - - - C&enter - 居中(&E) - - - &Color... - 颜色(&C)... - - - &Underline - 下划线(&U) - - - &Italic - 斜体(&I) - - - - renameDialog - - Rename... - 重命名... - - - - setupDialog - - OK - 确定 - - - MISC - 杂项 - - - General settings - 常规设置 - - - AUDIO INTERFACE - 音频接口 - - - Paths - 路径 - - - Performance settings - 性能设置 - - - Choose background artwork - 选择背景图片 - - - FL Studio installation directory - FL Studio安装目录 - - - Enable waveform display by default - 默认启用波形图 - - - Reset to default-value - 重置为默认值 - - - Choose LADSPA plugin directory - 选择LADSPA插件目录 - - - LMMS working directory - LMMS工作目录 - - - Choose default SoundFont - 选择默认SoundFont - - - Please note that most changes won't take effect until you restart LMMS! - 请注意很多设置需要重启LMMS才可生效! - - - Enable tooltips - 启用工具提示 - - - Show restart warning after changing settings - 在改变设置后显示重启警告 - - - Cancel - 取消 - - - Smooth scroll in Song Editor - 歌曲编辑器中启用平滑滚动 - - - Frames: %1 -Latency: %2 ms - 帧数: %1 -延迟: %2 毫秒 - - - MIDI INTERFACE - MIDI接口 - - - Background artwork - 背景图片 - - - Compact track buttons - 紧凑化轨道图标 - - - Choose FL Studio installation directory - 选择FL Studio安装目录 - - - Audio settings - 音频设置 - - - UI effects vs. performance - 界面特效 vs 性能 - - - LADSPA plugin paths - LADSPA插件目录 - - - Choose artwork-theme directory - 选择插图目录 - - - Show playback cursor in AudioFileProcessor - 在 AudioFileProcessor 中显示回放光标 - - - Enable auto save feature - 启用自动保存功能 - - - Compress project files per default - 默认压缩项目文件 - - - BUFFER SIZE - 缓冲大小 - - - Display volume as dBV - 音量显示为dBV - - - Choose STK rawwave directory - 选择 STK rawwave 文件夹 - - - Default Soundfont File - 默认SoundFont文件 - - - Sync VST plugins to host playback - 同步 VST 插件和主机回放 - - - Setup LMMS - 设置LMMS - - - Choose your VST-plugin directory - 选择VST插件目录 - - - Choose LMMS working directory - 选择LMMS工作目录 - - - Restart LMMS - 重启LMMS - - - STK rawwave directory - STK rawwave 目录 - - - VST-plugin directory - VST插件目录 - - - MIDI settings - MIDI设置 - - - Artwork directory - 插图目录 - - - Enable note labels in piano roll - 在钢琴窗中显示音号 - - - - setupWidget - - JACK (JACK Audio Connection Kit) - JACK (JACK 音频连接套件) - - - OSS Raw-MIDI (Open Sound System) - OSS 原始-MIDI (开放声音系统) - - - SDL (Simple DirectMedia Layer) - SDL (Simple DirectMedia Layer) - - - PulseAudio - PulseAudio - - - Dummy (no MIDI support) - Dummy (无 MIDI 支持) - - - ALSA Raw-MIDI (Advanced Linux Sound Architecture) - ALSA 原始-MIDI (高级 Linux 音频架构) - - - PortAudio - PortAudio - - - Dummy (no sound output) - Dummy (无声音输出) - - - ALSA (Advanced Linux Sound Architecture) - ALSA (高级Linux声音架构) - - - OSS (Open Sound System) - OSS (开放声音系统) - - - WinMM MIDI - WinMM MIDI - - - ALSA-Sequencer (Advanced Linux Sound Architecture) - ALSA-序列器 (高级 Linux 音频架构) - - - - song - - Tempo - 节奏 - - - Master pitch - 主音高 - - - Project saved - 工程已保存 - - - Master volume - 主音量 - - - This project is empty so exporting makes no sense. Please put some items into Song Editor first! - 这个工程是空的所以就算导出也没有意义,请在歌曲编辑器中加入一点声音吧! - - - MIDI sequences - MIDI音序器 - - - All file types - 所有类型 - - - untitled - 未标题 - - - Select file for project-export... - 为工程导出选择文件... - - - FL Studio projects - FL Studio工程 - - - Project NOT saved. - 工程没有保存。 - - - Import file - 导入文件 - - - The project %1 is now saved. - 工程%1已保存。 - - - Select directory for writing exported tracks... - 选择写入导出音轨的目录... - - - Empty project - 空工程 - - - The project %1 was not saved! - 工程%1未保存! - - - Hydrogen projects - Hydrogen工程 - - - - timeLine - - Hint - 提示 - - - After stopping go back to begin - 停止后前往开头 - - - Press <Ctrl> to disable magnetic loop points. - 按住 <Ctrl> 禁用磁性吸附。 - - - Enable/disable auto-scrolling - 启用/禁用自动滚动 - - - After stopping go back to position at which playing was started - 停止后前往播放开始的地方 - - - Hold <Shift> to move the begin loop point; Press <Ctrl> to disable magnetic loop points. - 按住 <Shift> 移动起始循环点;按住 <Ctrl> 禁用磁性吸附。 - - - After stopping keep position - 停止后保持位置不变 - - - Enable/disable loop-points - 启用/禁用循环点 - - - - track - - Solo - 独奏 - - - Muted - 静音 - - - - trackContentObject - - Muted - 静音 - - - - trackContentObjectView - - Cut - 剪切 - - - Copy - 复制 - - - Hint - 提示 - - - Paste - 粘贴 - - - Press <Ctrl> for free resizing. - 按住 <Ctrl> 自由调整大小。 - - - Delete (middle mousebutton) - 删除 (鼠标中键) - - - Press <Ctrl> and drag to make a copy. - 按住 <Ctrl> 并拖动以创建副本。 - - - %1:%2 (%3:%4 to %5:%6) - %1:%2 (%3:%4 到 %5:%6) - - - Current length - 当前长度 - - - Mute/unmute (<Ctrl> + middle click) - 静音/取消静音 (<Ctrl> + 鼠标中键) - - - Current position - 当前位置 - - - - trackOperationsWidget - - Mute - 静音 - - - Solo - 独奏 - - - Clone this track - 克隆此轨道 - - - Actions for this track - 对此轨道可进行的操作 - - - Turn all recording on - 打开所有录制 - - - Turn all recording off - 关闭所有录制 - - - Remove this track - 移除此轨道 - - - Clear this track - 清除此轨道 - - - Press <Ctrl> while clicking on move-grip to begin a new drag'n'drop-action. - 按住 <Ctrl> 的同时拖动移动柄复制并移动此轨道。 - - - Mute this track - 静音此轨道 - - - - visualizationWidget - - click to enable/disable visualization of master-output - 点击启用/禁用视觉化主输出 - - - Click to enable - 点击启用 - - - + \ No newline at end of file diff --git a/data/locale/zh_TW.ts b/data/locale/zh_TW.ts new file mode 100644 index 00000000000..f28132fbade --- /dev/null +++ b/data/locale/zh_TW.ts @@ -0,0 +1,12461 @@ + + + AboutDialog + + + About LMMS + 關於LMMS + + + + LMMS + LMMS + + + + Version %1 (%2/%3, Qt %4, %5) + 版本 %1 (%2/%3, Qt %4, %5) + + + + About + 關於 + + + + LMMS - easy music production for everyone + LMMS - 人人都是作曲家 + + + + Copyright © %1 + 版權所有 © %1 + + + + <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> + + + + Authors + 作者 + + + + Involved + 參與者 + + + + Contributors ordered by number of commits: + 貢獻者名單(以提交次數排序): + + + + 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! + 當前語言是中文(中國) + +翻譯人員: +TonyChyi <tonychee1989 at gmail.com> +Min Zhang <zm1990s at gmail.com> +Jeff Bai <jeffbaichina at gmail.com> +Mingye Wang <arthur2e5@aosc.xyz> +Zixing Liu <liushuyu@aosc.xyz> + +若你有興趣提高翻譯質量,請聯繫維護團隊 (https://github.com/AOSC-Dev/translations)、之前的譯者或本項目維護者! + + + + License + 許可證 + + + + AmplifierControlDialog + + + VOL + VOL + + + + Volume: + 音量: + + + + PAN + PAN + + + + Panning: + 聲相: + + + + LEFT + + + + + Left gain: + 左增益: + + + + RIGHT + + + + + Right gain: + 右增益: + + + + AmplifierControls + + + Volume + 音量 + + + + Panning + 聲相 + + + + Left gain + 左增益 + + + + Right gain + 右增益 + + + + AudioAlsaSetupWidget + + + 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. + + + + 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)之間來回播放。 + + + + 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) + + + + + 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: + 起始點: + + + + With this knob you can set the point where AudioFileProcessor should begin playing your sample. + 調節此旋鈕,以告訴 AudioFileProcessor 在哪裏開始播放。 + + + + Endpoint: + 終點: + + + + 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。 + + + + CLIENT-NAME + 客戶端名稱 + + + + CHANNELS + 聲道數 + + + + AudioOss::setupWidget + + + DEVICE + 設備 + + + + CHANNELS + 聲道數 + + + + AudioPortAudio::setupWidget + + + BACKEND + 後端 + + + + DEVICE + 設備 + + + + AudioPulseAudio::setupWidget + + + DEVICE + 設備 + + + + CHANNELS + 聲道數 + + + + AudioSdl::setupWidget + + + DEVICE + 設備 + + + + AudioSoundIo::setupWidget + + + BACKEND + 後端 + + + + 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 + 編輯歌曲全局自動控制 + + + + Remove song-global automation + 刪除歌曲全局自動控制 + + + + Remove all linked controls + 刪除所有已連接的控制器 + + + + Connected to %1 + 連接到%1 + + + + Connected to controller + 連接到控制器 + + + + Edit connection... + 編輯連接... + + + + Remove connection + 刪除連接 + + + + Connect to controller... + 連接到控制器... + + + + AutomationEditor + + + Please open an automation pattern with the context menu of a control! + 請使用控制的上下文菜單打開一個自動控制樣式! + + + + Values copied + 值已複製 + + + + All selected values were copied to the clipboard. + 所有選中的值已複製。 + + + + AutomationEditorWindow + + + Play/pause 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. + 點擊這裏播放片段。編輯時很有用,片段會自動循環播放。 + + + + Stop playing of current pattern (Space) + 停止當前片段(空格) + + + + Click here if you want to stop playing of the current pattern. + 點擊這裏停止播放片段。 + + + + Edit actions + 編輯功能 + + + + Draw mode (Shift+D) + 繪製模式 (Shift+D) + + + + Erase mode (Shift+E) + 擦除模式 (Shift+E) + + + + Flip vertically + 垂直翻轉 + + + + Flip horizontally + 水平翻轉 + + + + Click here and the pattern will be inverted.The points are flipped in the y direction. + + + + + Click here and the pattern will be reversed. The points are flipped in the x direction. + + + + + 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' 啓用此模式。 + + + + Interpolation controls + 補間控制 + + + + Discrete progression + + + + + Linear progression + + + + + Cubic Hermite progression + + + + + 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. + + + + + 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: + + + + + Cut selected values (%1+X) + 剪切選定值 (%1+X) + + + + Copy selected values (%1+C) + 複製選定值 (%1+C) + + + + Paste values from clipboard (%1+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. + 點擊這裏,選擇的值將從剪貼板粘貼到第一個可見的小節。 + + + + Timeline controls + 時間線控制 + + + + Zoom controls + 縮放控制 + + + + Quantization controls + + + + + Automation Editor - no pattern + 自動控制編輯器 - 沒有片段 + + + + Automation Editor - %1 + 自動控制編輯器 - %1 + + + + Model is already connected to this pattern. + 模型已連接到此片段。 + + + + AutomationPattern + + + Drag a control while pressing <%1> + 按住<%1>拖動控制器 + + + + AutomationPatternView + + + double-click to open this pattern in automation editor + 雙擊在自動編輯器中打開此片段 + + + + Open in Automation editor + 在自動編輯器(Automation editor)中打開 + + + + Clear + 清除 + + + + Reset name + 重置名稱 + + + + Change name + 修改名稱 + + + + Set/clear record + 設置/清除錄製 + + + + Flip Vertically (Visible) + 垂直翻轉 (可見) + + + + Flip Horizontally (Visible) + 水平翻轉 (可見) + + + + %1 Connections + %1個連接 + + + + Disconnect "%1" + 斷開“%1”的連接 + + + + Model is already connected to this pattern. + 模型已連接到此片段。 + + + + AutomationTrack + + + Automation track + 自動控制軌道 + + + + BBEditor + + + Beat+Bassline Editor + 節拍+低音線編輯器 + + + + Play/pause current beat/bassline (Space) + 播放/暫停當前節拍/低音線(空格) + + + + 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. + 點擊這裏停止播發當前節拍/低音線。 + + + + Beat selector + 節拍選擇器 + + + + Track and step actions + + + + + Add beat/bassline + 添加節拍/低音線 + + + + Add automation-track + 添加自動控制軌道 + + + + Remove steps + 移除音階 + + + + Add steps + 添加音階 + + + + Clone Steps + + + + + BBTCOView + + + Open in Beat+Bassline-Editor + 在節拍+Bassline編輯器中打開 + + + + Reset name + 重置名稱 + + + + Change name + 修改名稱 + + + + Change color + 改變顏色 + + + + Reset color to default + 重置顏色 + + + + BBTrack + + + Beat/Bassline %1 + 節拍/Bassline %1 + + + + Clone of %1 + %1 的副本 + + + + BassBoosterControlDialog + + + FREQ + 頻率 + + + + Frequency: + 頻率: + + + + GAIN + 增益 + + + + Gain: + 增益: + + + + RATIO + 比率 + + + + Ratio: + 比率: + + + + BassBoosterControls + + + Frequency + 頻率 + + + + Gain + 增益 + + + + Ratio + 比率 + + + + BitcrushControlDialog + + + IN + 輸入 + + + + OUT + 輸出 + + + + + GAIN + 增益 + + + + Input Gain: + 輸入增益: + + + + NOIS + + + + + Input Noise: + 輸入噪音: + + + + Output Gain: + 輸出增益: + + + + CLIP + 壓限 + + + + Output Clip: + 輸出壓限: + + + + + Rate + + + + + Rate Enabled + + + + + Enable samplerate-crushing + + + + + Depth + 位深 + + + + Depth Enabled + 深度已啓用 + + + + Enable bitdepth-crushing + + + + + Sample rate: + 採樣率: + + + + STD + STD + + + + Stereo difference: + 雙聲道差異: + + + + Levels + 級別 + + + + Levels: + 級別: + + + + CaptionMenu + + + &Help + 幫助(&H) + + + + Help (not available) + 幫助(不可用) + + + + 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) associated 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) + + + + CrossoverEQControlDialog + + + Band 1/2 Crossover: + + + + + Band 2/3 Crossover: + + + + + Band 3/4 Crossover: + + + + + Band 1 Gain: + + + + + Band 2 Gain: + + + + + Band 3 Gain: + + + + + Band 4 Gain: + + + + + Band 1 Mute + + + + + Mute Band 1 + + + + + Band 2 Mute + + + + + Mute Band 2 + + + + + Band 3 Mute + + + + + Mute Band 3 + + + + + Band 4 Mute + + + + + Mute Band 4 + + + + + DelayControls + + + Delay Samples + + + + + Feedback + + + + + Lfo Frequency + + + + + Lfo Amount + + + + + Output gain + 輸出增益 + + + + DelayControlsDialog + + + Delay + 延遲 + + + + Delay Time + + + + + Regen + + + + + Feedback Amount + + + + + Rate + + + + + + Lfo + + + + + Lfo Amt + + + + + Out Gain + + + + + Gain + 增益 + + + + DualFilterControlDialog + + + + FREQ + 頻率 + + + + + Cutoff frequency + 切除頻率 + + + + + RESO + + + + + + Resonance + 共鳴 + + + + + GAIN + 增益 + + + + + Gain + 增益 + + + + MIX + + + + + Mix + 混合 + + + + 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 + 濾波器 1 Q值 + + + + Gain 1 + 增益 1 + + + + Mix + 混合 + + + + Filter 2 enabled + 已啓用過濾器 2 + + + + Filter 2 type + 過濾器 1 類型 {2 ?} + + + + Cutoff 2 frequency + 濾波器 2 截頻 + + + + Q/Resonance 2 + 濾波器 2 Q值 + + + + Gain 2 + 增益 2 + + + + + LowPass + 低通 + + + + + HiPass + 高通 + + + + + BandPass csg + 帶通 csg + + + + + BandPass czpg + 帶通 czpg + + + + + Notch + 凹口濾波器 + + + + + Allpass + 全通 + + + + + Moog + Moog + + + + + 2x LowPass + 2 個低通串聯 + + + + + RC LowPass 12dB + RC 低通(12dB) + + + + + RC BandPass 12dB + RC 帶通(12dB) + + + + + RC HighPass 12dB + RC 高通(12dB) + + + + + RC LowPass 24dB + RC 低通(24dB) + + + + + RC BandPass 24dB + RC 帶通(24dB) + + + + + RC HighPass 24dB + RC 高通(24dB) + + + + + Vocal Formant Filter + 人聲移除過濾器 + + + + + 2x Moog + + + + + + SV LowPass + + + + + + SV BandPass + + + + + + SV HighPass + + + + + + SV Notch + + + + + + Fast Formant + + + + + + Tripole + + + + + Editor + + + Transport controls + + + + + Play (Space) + 播放(空格) + + + + Stop (Space) + 停止(空格) + + + + Record + 錄音 + + + + Record while playing + 播放時錄音 + + + + Effect + + + Effect enabled + 啓用效果器 + + + + Wet/Dry mix + 幹/溼混合 + + + + Gate + 門限 + + + + Decay + 衰減 + + + + EffectChain + + + Effects enabled + 啓用效果器 + + + + EffectRackView + + + EFFECTS CHAIN + 效果器鏈 + + + + Add effect + 增加效果器 + + + + EffectSelectDialog + + + Add effect + 增加效果器 + + + + Name + 名稱 + + + + Description + 描述 + + + + Author + + + + + EffectView + + + Toggles the effect on or off. + 打開或關閉效果. + + + + On/Off + 開/關 + + + + W/D + 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. + 衰減旋鈕控制在插件停止工作前,緩衝區中加入的靜音時常。較小的數值會降低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. + + + + + Move &up + 向上移(&U) + + + + Move &down + 向下移(&D) + + + + &Remove this plugin + 移除此插件(&R) + + + + 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 + 頻率 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: + 持續: + + + + 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對此包絡的調製量,較大的值會對此包絡控制的值(如音量或截頻)影響更大。 + + + + 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- 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. + + + + + Click here for random wave. + + + + + 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. + + + + + EqControls + + + Input gain + 輸入增益 + + + + Output gain + 輸出增益 + + + + Low shelf gain + + + + + Peak 1 gain + + + + + Peak 2 gain + + + + + Peak 3 gain + + + + + Peak 4 gain + + + + + High Shelf gain + + + + + HP res + + + + + Low Shelf res + + + + + Peak 1 BW + + + + + Peak 2 BW + + + + + Peak 3 BW + + + + + Peak 4 BW + + + + + High Shelf res + + + + + LP res + + + + + HP freq + + + + + Low Shelf freq + + + + + Peak 1 freq + + + + + Peak 2 freq + + + + + Peak 3 freq + + + + + Peak 4 freq + + + + + High shelf freq + + + + + LP freq + + + + + HP active + + + + + Low shelf active + + + + + Peak 1 active + + + + + Peak 2 active + + + + + Peak 3 active + + + + + Peak 4 active + + + + + High shelf active + + + + + LP active + + + + + LP 12 + + + + + LP 24 + + + + + LP 48 + + + + + HP 12 + + + + + HP 24 + + + + + HP 48 + + + + + low pass type + + + + + high pass type + + + + + Analyse IN + + + + + Analyse OUT + + + + + EqControlsDialog + + + HP + + + + + Low Shelf + + + + + Peak 1 + + + + + Peak 2 + + + + + Peak 3 + + + + + Peak 4 + + + + + High Shelf + + + + + LP + + + + + In Gain + + + + + + + Gain + 增益 + + + + Out Gain + + + + + Bandwidth: + + + + + Octave + + + + + Resonance : + + + + + Frequency: + 頻率: + + + + lp grp + + + + + hp grp + + + + + Frequency + 頻率 + + + + + Resonance + 共鳴 + + + + Bandwidth + 帶寬 + + + + EqHandle + + + Reso: + + + + + BW: + + + + + + Freq: + + + + + 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 補間 + + + + Sinc Medium (recommended) + 中等 Sinc 補間 (推薦) + + + + Sinc Best (very slow!) + 最佳 Sinc 補間 (很慢!) + + + + Oversampling (use with care!): + 過採樣 (請謹慎使用!): + + + + 1x (None) + 1x (無) + + + + 2x + 2x + + + + 4x + 4x + + + + 8x + 8x + + + + Export as loop (remove end silence) + 導出爲迴環loop(移除結尾的靜音) + + + + Export between loop markers + 只導出迴環標記中間的部分 + + + + Start + 開始 + + + + Cancel + 取消 + + + + 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 寫入數據。 +請確保你擁有對文件以及存儲文件的目錄的寫權限,然後重試! + + + + Export project to %1 + 導出項目到 %1 + + + + Error + 錯誤 + + + + Error while determining file-encoder device. Please try to choose a different output format. + 尋找文件編碼設備時出錯。請使用另外一種輸出格式。 + + + + Rendering: %1% + 渲染中:%1% + + + + Fader + + + + Please enter a new value between %1 and %2: + 請輸入一個介於%1和%2之間的數值: + + + + 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... + 請稍候,加載採樣中... + + + + Error + 錯誤 + + + + does not appear to be a valid + 並不是一個有效的 + + + + file + 文件 + + + + --- Factory files --- + ---軟件自帶文件--- + + + + FlangerControls + + + Delay Samples + + + + + Lfo Frequency + + + + + Seconds + + + + + Regen + + + + + Noise + 噪音 + + + + Invert + 反轉 + + + + FlangerControlsDialog + + + Delay + 延遲 + + + + Delay Time: + 延遲時間: + + + + Lfo Hz + + + + + Lfo: + + + + + Amt + + + + + Amt: + + + + + Regen + + + + + Feedback Amount: + + + + + Noise + 噪音 + + + + White Noise Amount: + 白噪音數量: + + + + 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 + 向左移(&L) + + + + Move &right + 向右移(&R) + + + + Rename &channel + 重命名通道(&C) + + + + R&emove channel + 刪除通道(&E) + + + + Remove &unused channels + 移除所有未用通道(&U) + + + + FxMixer + + + Master + 主控 + + + + + + FX %1 + FX %1 + + + + FxMixerView + + + FX-Mixer + 效果混合器 + + + + FX Fader %1 + FX 衰減器 %1 + + + + Mute + 靜音 + + + + Mute this FX channel + 靜音此效果通道 + + + + Solo + 獨奏 + + + + Solo FX channel + 獨奏效果通道 + + + + Rename FX channel + 重命名效果通道 + + + + Enter the new name for this FX channel + 爲此效果通道輸入一個新的名稱 + + + + FxRoute + + + + Amount to send from channel %1 to channel %2 + 從通道 %1 發送到通道 %2 的量 + + + + GigInstrument + + + Bank + + + + + Patch + 音色 + + + + Gain + 增益 + + + + GigInstrumentView + + + Open other GIG file + 打開另外的 GIG 文件 + + + + Click here to open another GIG file + 點擊這裏打開另外一個 GIG 文件 + + + + Choose the patch + 選擇路徑 + + + + Click here to change which patch of the GIG file to use + 點擊這裏選擇另一種 GIG 音色 + + + + + Change which instrument of the GIG file is being played + 更換正在使用的 GIG 文件中的樂器 + + + + Which GIG file is currently being used + 哪一個 GIG 文件正在被使用 + + + + Which patch of the GIG file is currently being used + GIG 文件的哪一個音色正在被使用 + + + + Gain + 增益 + + + + Factor to multiply samples by + + + + + Open GIG file + 打開 GIG 文件 + + + + GIG Files (*.gig) + GIG 文件 (*.gig) + + + + GuiApplication + + + Working directory + 工作目錄 + + + + The LMMS working directory %1 does not exist. Create it now? You can change the directory later via Edit -> Settings. + LMMS工作目錄%1不存在,現在新建一個嗎?你可以稍後在 編輯 -> 設置 中更改此設置。 + + + + Preparing UI + 正在準備界面 + + + + Preparing song editor + 正在準備歌曲編輯器 + + + + Preparing mixer + 正在準備混音器 + + + + Preparing controller rack + 正在準備控制機架 + + + + Preparing project notes + 正在準備工程註釋 + + + + Preparing beat/bassline editor + 正在準備節拍/低音線編輯器 + + + + Preparing piano roll + 正在準備鋼琴窗 + + + + Preparing automation editor + 正在準備自動編輯器 + + + + InstrumentFunctionArpeggio + + + Arpeggio + + + + + Arpeggio type + + + + + Arpeggio range + + + + + Arpeggio time + + + + + Arpeggio gate + + + + + Arpeggio direction + + + + + Arpeggio mode + + + + + Up + 向上 + + + + Down + 向下 + + + + Up and down + 上和下 + + + + Random + 隨機 + + + + Down and up + 下和上 + + + + Free + 自由 + + + + Sort + 排序 + + + + Sync + 同步 + + + + 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 + + + + Minor + Minor + + + + Chromatic + Chromatic + + + + Half-Whole Diminished + + + + + 5 + 5 + + + + Chords + Chords + + + + Chord type + Chord type + + + + Chord range + Chord range + + + + InstrumentFunctionNoteStackingView + + + STACKING + 堆疊 + + + + Chord: + 和絃: + + + + 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. + + + + + InstrumentMidiIOView + + + ENABLE MIDI INPUT + 啓用MIDI輸入 + + + + + CHANNEL + 通道 + + + + + VELOCITY + 力度 + + + + ENABLE MIDI OUTPUT + 啓用MIDI輸出 + + + + PROGRAM + 樂器 + + + + NOTE + 音符 + + + + MIDI devices to receive MIDI events from + 用於接收 MIDI 事件的 MIDI 設備 + + + + MIDI devices to send MIDI events to + 用於發送 MIDI 事件的 MIDI 設備 + + + + CUSTOM BASE VELOCITY + 自定義基準力度 + + + + Specify the velocity normalization base for MIDI-based instruments at 100% note velocity + + + + + BASE VELOCITY + 基準力度 + + + + InstrumentMiscView + + + MASTER PITCH + 主音高 + + + + Enables the use of Master Pitch + 啓用主音高 + + + + 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 + 2 個低通串聯 + + + + RC LowPass 12dB + RC 低通(12dB) + + + + RC BandPass 12dB + RC 帶通(12dB) + + + + RC HighPass 12dB + RC 高通(12dB) + + + + RC LowPass 24dB + RC 低通(24dB) + + + + RC BandPass 24dB + RC 帶通(24dB) + + + + RC HighPass 24dB + RC 高通(24dB) + + + + Vocal Formant Filter + 人聲移除過濾器 + + + + 2x Moog + + + + + SV LowPass + + + + + SV BandPass + + + + + SV HighPass + + + + + SV Notch + + + + + Fast Formant + + + + + Tripole + + + + + 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. + + + + + FREQ + 頻率 + + + + cutoff frequency: + + + + + 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. + + + + + Envelopes, LFOs and filters are not supported by the current instrument. + 包絡和低頻振盪 (LFO) 不被當前樂器支持。 + + + + InstrumentTrack + + + + Default preset + 預置 + + + + With this knob you can set the volume of the opened channel. + 使用此旋鈕可以設置開放通道的音量。 + + + + + unnamed_track + 未命名軌道 + + + + Base note + 基本音 + + + + Volume + 音量 + + + + Panning + 聲相 + + + + Pitch + 音高 + + + + Pitch range + 音域範圍 + + + + FX channel + 效果通道 + + + + Master Pitch + 主音高 + + + + InstrumentTrackView + + + Volume + 音量 + + + + Volume: + 音量: + + + + VOL + VOL + + + + Panning + 聲相 + + + + Panning: + 聲相: + + + + PAN + PAN + + + + MIDI + MIDI + + + + Input + 輸入 + + + + Output + 輸出 + + + + FX %1: %2 + 效果 %1: %2 + + + + InstrumentTrackWindow + + + GENERAL SETTINGS + 常規設置 + + + + Use these controls to view and edit the next/previous track in the song editor. + 使用這些控制選項來查看和編輯在歌曲編輯器中的上個/下個軌道。 + + + + Instrument volume + 樂器音量 + + + + Volume: + 音量: + + + + VOL + VOL + + + + Panning + 聲相 + + + + Panning: + 聲相: + + + + PAN + PAN + + + + Pitch + 音高 + + + + Pitch: + 音高: + + + + cents + 音分 cents + + + + PITCH + + + + + Pitch range (semitones) + 音域範圍(半音) + + + + RANGE + 範圍 + + + + FX channel + 效果通道 + + + + + FX + 效果 + + + + 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. + 如果你想保存當前樂器軌道設置到預設文件, 請點擊這裏。稍後你可以在預設瀏覽器中雙擊以使用它。 + + + + SAVE + 保存 + + + + ENV/LFO + 包絡/低振 + + + + FUNC + 功能 + + + + MIDI + MIDI + + + + MISC + 雜項 + + + + Save preset + 保存預置 + + + + XML preset file (*.xpf) + XML 預設文件 (*.xpf) + + + + PLUGIN + 插件 + + + + Knob + + + Set linear + 設置爲線性 + + + + Set logarithmic + 設置爲對數 + + + + 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之間的數值: + + + + LadspaControl + + + Link channels + 關聯通道 + + + + LadspaControlDialog + + + Link Channels + 連接通道 + + + + Channel + 通道 + + + + LadspaControlView + + + Link channels + 連接通道 + + + + Value: + 值: + + + + Sorry, no help available. + 啊哦,這個沒有幫助文檔。 + + + + LadspaEffect + + + Unknown LADSPA plugin %1 requested. + 已請求未知 LADSPA 插件 %1. + + + + LcdSpinBox + + + Please enter a new value between %1 and %2: + 請輸入一個介於%1和%2之間的數值: + + + + LeftRightNav + + + + + Previous + 上個 + + + + + + Next + 下個 + + + + Previous (%1) + 上 (%1) + + + + Next (%1) + 下 (%1) + + + + 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 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. + + + + + LmmsCore + + + Generating wavetables + 正在生成波形表 + + + + Initializing data structures + 正在初始化數據結構 + + + + Opening audio and midi devices + 正在啓動音頻和 MIDI 設備 + + + + Launching mixer threads + 生在啓動混音器線程 + + + + MainWindow + + + Configuration file + 配置文件 + + + + Error while parsing configuration file at line %1:%2: %3 + 解析配置文件發生錯誤(行%1:%2:%3) + + + + 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 recovery + 工程恢復 + + + + There is a recovery file present. It looks like the last session did not end properly or another instance of LMMS is already running. Do you want to recover the project of this session? + 發現了一個恢復文件。看上去上個會話沒有正常結束或者其他的 LMMS 進程已經運行。你想要恢復這個項目嗎? + + + + + Recover + 恢復 + + + + Recover the file. Please don't run multiple instances of LMMS when you do this. + 恢復文件。請不要在恢復文件時運行多個 LMMS 程序。 + + + + + Ignore + 忽略 + + + + Launch LMMS as usual but with automatic backup disabled to prevent the present recover file from being overwritten. + 正常啓動 LMMS 但是關閉自動備份來防止備份文件被覆蓋。 + + + + Discard + 丟棄 + + + + Launch a default session and delete the restored files. This is not reversible. + 運行一個新的默認會話並且刪除恢復文件。此操作無法撤銷。 + + + + Quit + 退出 + + + + Shut down LMMS with no further action. + 什麼也不做並關閉 LMMS。 + + + + Exit + 退出 + + + + Version %1 + 版本 %1 + + + + Preparing plugin browser + 正在準備插件瀏覽器 + + + + Preparing file browsers + 正在準備文件瀏覽器 + + + + My Projects + 我的工程 + + + + My Samples + 我的採樣 + + + + My Presets + 我的預設 + + + + My Home + 我的主目錄 + + + + Root directory + 根目錄 + + + + Volumes + 音量 + + + + My Computer + 我的電腦 + + + + Loading background artwork + 正在加載背景圖案 + + + + &File + 文件(&F) + + + + &New + 新建(&N) + + + + New from template + 從模版新建工程 + + + + &Open... + 打開(&O)... + + + + &Recently Opened Projects + 最近打開的工程(&R) + + + + &Save + 保存(&S) + + + + Save &As... + 另存爲(&A)... + + + + Save as New &Version + 保存爲新版本(&V) + + + + Save as default template + 保存爲默認模板 + + + + Import... + 導入... + + + + E&xport... + 導出(&E)... + + + + E&xport Tracks... + 導出音軌(&X)... + + + + Export &MIDI... + 導出 MIDI (&M)... + + + + &Quit + 退出(&Q) + + + + &Edit + 編輯(&E) + + + + Undo + 撤銷 + + + + Redo + 重做 + + + + Settings + 設置 + + + + &View + 視圖 (&V) + + + + &Tools + 工具(&T) + + + + &Help + 幫助(&H) + + + + Online Help + 在線幫助 + + + + Help + 幫助 + + + + What's This? + 這是什麼? + + + + About + 關於 + + + + Create new project + 新建工程 + + + + Create new project from template + 從模版新建工程 + + + + Open existing project + 打開已有工程 + + + + Recently opened projects + 最近打開的工程 + + + + Save current project + 保存當前工程 + + + + Export current project + 導出當前工程 + + + + What's this? + 這是什麼? + + + + Toggle metronome + 開啓/關閉節拍器 + + + + 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 採樣)。 + + + + 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. + 點擊這裏顯示或隱藏 FX 混音器。FX 混音器是管理你歌曲中不同音效的強大工具。你可以向不同的通道添加不同的效果。 + + + + 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 + 未標題 + + + + Recover session. Please save your work! + 恢復會話。請保存你的工作! + + + + Automatic backup disabled. Remember to save your work! + 自動備份已禁用。記得保存你的作品喲! + + + + LMMS %1 + LMMS %1 + + + + Recovered project not saved + 恢復的工程沒有保存 + + + + This project was recovered from the previous session. It is currently unsaved and will be lost if you don't save it. Do you want to save it now? + 這個工程已從上一個會話中恢復。它現在沒有被保存, 並且如果你不保存, 它將會丟失。你現在想保存它嗎? + + + + Project not saved + 工程未保存 + + + + The current project was modified since last saving. Do you want to save it now? + 此工程自上次保存後有了修改,你想保存嗎? + + + + Open Project + 打開工程 + + + + LMMS (*.mmp *.mmpz) + LMMS (*.mmp *.mmpz) + + + + Save Project + 保存工程 + + + + LMMS Project + LMMS 工程 + + + + LMMS Project Template + LMMS 工程模板 + + + + Overwrite default template? + 覆蓋默認的模板? + + + + This will overwrite your current default template. + 這將會覆蓋你的當前默認模板。 + + + + 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的相關文檔。 + + + + Song Editor + 顯示/隱藏歌曲編輯器 + + + + Beat+Bassline Editor + 顯示/隱藏節拍+旋律編輯器 + + + + Piano Roll + 顯示/隱藏鋼琴窗 + + + + Automation Editor + 顯示/隱藏自動控制編輯器 + + + + FX Mixer + 顯示/隱藏混音器 + + + + Project Notes + 顯示/隱藏工程註釋 + + + + Controller Rack + 顯示/隱藏控制器機架 + + + + Volume as dBV + 以 dBV 顯示音量 + + + + Smooth scroll + 平滑滾動 + + + + Enable note labels in piano roll + 在鋼琴窗中顯示音號 + + + + MeterDialog + + + + Meter Numerator + + + + + + Meter Denominator + + + + + TIME SIG + 拍子記號 + + + + MeterModel + + + Numerator + + + + + Denominator + + + + + 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 文件後將會沒有聲音。你需要下載一個通用 MIDI (GM) 的 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. + 你在編譯 LMMS 時沒有加入 SoundFont2 播放器支持, 此播放器默認用於添加導入的 MIDI 文件。因此在 MIDI 文件導入後, 將沒有聲音。 + + + + Track + 軌道 + + + + MidiPort + + + Input channel + 輸入通道 + + + + Output channel + 輸出通道 + + + + Input controller + 輸入控制器 + + + + Output controller + 輸出控制器 + + + + Fixed input velocity + + + + + Fixed output velocity + + + + + Fixed output note + + + + + Output MIDI program + + + + + Base velocity + 基準力度 + + + + Receive MIDI-events + 接受 MIDI 事件 + + + + Send MIDI-events + 發送 MIDI 事件 + + + + MidiSetupWidget + + + DEVICE + 設備 + + + + 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 + + + + + + Sine wave + 正弦波 + + + + Bandlimited Triangle wave + + + + + Bandlimited Saw wave + + + + + Bandlimited Ramp wave + + + + + Bandlimited Square wave + + + + + Bandlimited Moog saw wave + + + + + + Soft square wave + + + + + Absolute sine wave + + + + + + Exponential wave + + + + + White noise + + + + + Digital Triangle wave + + + + + Digital Saw wave + + + + + Digital Ramp wave + + + + + Digital Square wave + + + + + Digital Moog saw wave + + + + + Triangle wave + 三角波 + + + + Saw wave + 鋸齒波 + + + + Ramp wave + + + + + Square wave + 方波 + + + + Moog saw wave + + + + + Abs. sine wave + + + + + Random + 隨機 + + + + Random smooth + + + + + 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. + + + + + + + Volume + 音量 + + + + + + Panning + 聲相 + + + + + + Coarse detune + + + + + + + semitones + 半音 + + + + + Finetune left + + + + + + + + cents + + + + + + Finetune right + + + + + + + Stereo phase offset + + + + + + + + + deg + + + + + Pulse width + + + + + Send sync on pulse rise + + + + + Send sync on pulse fall + + + + + Hard sync oscillator 2 + + + + + Reverse sync oscillator 2 + + + + + Sub-osc mix + + + + + Hard sync oscillator 3 + + + + + Reverse sync oscillator 3 + + + + + + + + Attack + 打進聲 + + + + + Rate + + + + + + Phase + + + + + + Pre-delay + + + + + + Hold + 保持 + + + + + Decay + 衰減 + + + + + Sustain + 持續 + + + + + Release + 釋放 + + + + + Slope + + + + + 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. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Modulation amount + 調製量 + + + + MultitapEchoControlDialog + + + Length + 長度 + + + + Step length: + 步進長度: + + + + Dry + 幹聲 + + + + Dry Gain: + 幹聲增益: + + + + Stages + + + + + Lowpass stages: + + + + + Swap inputs + + + + + Swap left and right input channel for reflections + + + + + 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 + + + + + NesInstrumentView + + + + + + Volume + 音量 + + + + + + Coarse detune + + + + + + + Envelope length + + + + + Enable channel 1 + + + + + Enable envelope 1 + + + + + Enable envelope 1 loop + + + + + Enable sweep 1 + + + + + + Sweep amount + + + + + + Sweep rate + + + + + + 12.5% Duty cycle + + + + + + 25% Duty cycle + + + + + + 50% Duty cycle + + + + + + 75% Duty cycle + + + + + Enable channel 2 + + + + + Enable envelope 2 + + + + + Enable envelope 2 loop + + + + + Enable sweep 2 + + + + + Enable channel 3 + + + + + Noise Frequency + + + + + Frequency sweep + + + + + Enable channel 4 + + + + + Enable envelope 4 + + + + + Enable envelope 4 loop + + + + + Quantize noise frequency when using note frequency + + + + + Use note frequency for noise + + + + + Noise mode + + + + + Master Volume + + + + + Vibrato + + + + + OscillatorObject + + + Osc %1 waveform + Osc %1 波形 + + + + Osc %1 harmonic + + + + + + Osc %1 volume + Osc %1 音量 + + + + + Osc %1 panning + Osc %1 聲像 + + + + + Osc %1 fine detuning left + + + + + Osc %1 coarse detuning + + + + + Osc %1 fine detuning right + + + + + Osc %1 phase-offset + + + + + Osc %1 stereo phase-detuning + + + + + Osc %1 wave shape + + + + + Modulation type %1 + + + + + PatchesDialog + + + Qsynth: Channel Preset + Qsynth: 通道預設 + + + + Bank selector + 音色選擇器 + + + + Bank + + + + + Program selector + + + + + Patch + 音色 + + + + Name + 名稱 + + + + OK + 確定 + + + + Cancel + 取消 + + + + 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 + + + use mouse wheel to set velocity of a step + + + + + double-click to open in Piano Roll + + + + + Open in piano-roll + 在鋼琴窗中打開 + + + + Clear all notes + 清除所有音符 + + + + Reset name + 重置名稱 + + + + Change name + 修改名稱 + + + + Add steps + 添加音階 + + + + Remove steps + 移除音階 + + + + PeakController + + + Peak Controller + 峯值控制器 + + + + Peak Controller Bug + 峯值控制器 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 中, 峯值控制器因爲有 bug 而可能沒有正確連接。請確保峯值控制器正常連接後再次保存次文件。我們對給你造成的不便深表歉意。 + + + + PeakControllerDialog + + + PEAK + + + + + LFO Controller + LFO 控制器 + + + + PeakControllerEffectControlDialog + + + BASE + 基準 + + + + Base amount: + 基礎值: + + + + AMNT + + + + + Modulation amount: + 調製量: + + + + MULT + + + + + Amount Multiplicator: + + + + + ATCK + 打擊 + + + + Attack: + 打擊聲: + + + + DCAY + + + + + Release: + 釋音: + + + + TRES + + + + + Treshold: + + + + + PeakControllerEffectControls + + + Base value + 基準值 + + + + Modulation amount + 調製量 + + + + Attack + 打進聲 + + + + Release + 釋放 + + + + Treshold + 閥值 + + + + Mute output + 輸出靜音 + + + + Abs Value + + + + + Amount Multiplicator + + + + + PianoRoll + + + Note Velocity + 音符音量 + + + + Note Panning + 音符聲相偏移 + + + + Mark/unmark current semitone + 標記/取消標記當前半音 + + + + Mark/unmark all corresponding octave semitones + + + + + Mark current scale + + + + + Mark current chord + + + + + Unmark all + 取消標記所有 + + + + Select all notes on this key + 選中所有相同音調的音符 + + + + Note lock + 音符鎖定 + + + + Last note + 上一個音符 + + + + No scale + + + + + No chord + + + + + Velocity: %1% + 音量:%1% + + + + Panning: %1% left + 聲相:%1% 偏左 + + + + Panning: %1% right + 聲相:%1% 偏右 + + + + Panning: center + 聲相:居中 + + + + Please open a pattern by double-clicking on it! + 雙擊打開片段! + + + + + Please enter a new value between %1 and %2: + 請輸入一個介於 %1 和 %2 的值: + + + + PianoRollWindow + + + Play/pause current pattern (Space) + 播放/暫停當前片段(空格) + + + + Record notes from MIDI-device/channel-piano + 從 MIDI 設備/通道鋼琴(channel-piano) 錄製音符 + + + + Record notes from MIDI-device/channel-piano while playing song or BB track + + + + + Stop playing of current pattern (Space) + 停止當前片段(空格) + + + + 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. + + + + + Edit actions + 編輯功能 + + + + Draw mode (Shift+D) + 繪製模式 (Shift+D) + + + + Erase mode (Shift+E) + 擦除模式 (Shift+E) + + + + Select mode (Shift+S) + 選擇模式 (Shift+S) + + + + 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 %1 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. + 點擊啓用擦除模式。此模式下你可以擦除音符。你可以按鍵盤上的 'Shift+E' 啓用此模式。 + + + + Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold %1 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. + + + + + Copy paste controls + + + + + Cut selected notes (%1+X) + 剪切選定音符 (%1+X) + + + + Copy selected notes (%1+C) + 複製選定音符 (%1+C) + + + + Paste notes from clipboard (%1+V) + 從剪貼板粘貼音符 (%1+V) + + + + 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. + + + + + Timeline controls + 時間線控制 + + + + Zoom and note controls + + + + + 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. + + + + + Piano-Roll - %1 + 鋼琴窗 - %1 + + + + Piano-Roll - no pattern + 鋼琴窗 - 沒有片段 + + + + 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”失敗! + + + + PluginBrowser + + + Instrument plugins + 樂器插件 + + + + Instrument browser + 樂器瀏覽器 + + + + Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track. + 將樂器插件拖入歌曲編輯器, 節拍低音線編輯器, 或者現有的樂器軌道。 + + + + PluginFactory + + + Plugin not found. + 未找到插件。 + + + + LMMS plugin %1 does not have a plugin descriptor named %2! + + + + + ProjectNotes + + + Project notes + 工程註釋 + + + + Put down your project notes here. + 在這裏寫下你的工程註釋。 + + + + Edit Actions + 編輯功能 + + + + &Undo + 撤銷(&U) + + + + %1+Z + %1+Z + + + + &Redo + 重做(&R) + + + + %1+Y + %1+Y + + + + &Copy + 複製(&C) + + + + %1+C + %1+C + + + + Cu&t + 剪切(&T) + + + + %1+X + %1+X + + + + &Paste + 粘貼(&P) + + + + %1+V + %1+V + + + + Format Actions + 格式功能 + + + + &Bold + 加粗(&B) + + + + %1+B + %1+B + + + + &Italic + 斜體(&I) + + + + %1+I + %1+I + + + + &Underline + 下劃線(&U) + + + + %1+U + %1+U + + + + &Left + 左對齊(&L) + + + + %1+L + %1+L + + + + C&enter + 居中(&E) + + + + %1+E + %1+E + + + + &Right + 右對齊(&R) + + + + %1+R + %1+R + + + + &Justify + 勻齊(&J) + + + + %1+J + %1+J + + + + &Color... + 顏色(&C)... + + + + ProjectRenderer + + + WAV-File (*.wav) + WAV-文件 (*.wav) + + + + Compressed OGG-File (*.ogg) + 壓縮的 OGG 文件(*.ogg) + + + + QWidget + + + + + Name: + 名稱: + + + + + Maker: + 製作者: + + + + + Copyright: + 版權: + + + + + Requires Real Time: + 要求實時: + + + + + + + + + Yes + + + + + + + + + + No + + + + + + Real Time Capable: + 是否支持實時: + + + + + In Place Broken: + + + + + + Channels In: + 輸入通道: + + + + + Channels Out: + 輸出通道: + + + + File: %1 + 文件:%1 + + + + File: + 文件: + + + + RenameDialog + + + Rename... + 重命名... + + + + SampleBuffer + + + Open audio file + 打開音頻文件 + + + + All Audio-Files (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw) + 所有音頻文件 (*.wav *.ogg *.ds *.flac *.spx *.voc *.aif *.aiff *.au *.raw) + + + + 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) + + + + SampleTCOView + + + double-click to select sample + 雙擊選擇採樣 + + + + Delete (middle mousebutton) + 刪除 (鼠標中鍵) + + + + Cut + 剪切 + + + + Copy + 複製 + + + + Paste + 粘貼 + + + + Mute/unmute (<%1> + middle click) + 靜音/取消靜音 (<%1> + 鼠標中鍵) + + + + SampleTrack + + + Volume + 音量 + + + + Panning + 聲相 + + + + + Sample track + 採樣軌道 + + + + SampleTrackView + + + Track volume + 軌道音量 + + + + Channel volume: + 通道音量: + + + + VOL + VOL + + + + Panning + 聲相 + + + + Panning: + 聲相: + + + + PAN + PAN + + + + 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 + 默認壓縮項目文件 + + + + One instrument track window mode + 單樂器軌道窗口模式 + + + + HQ-mode for output audio-device + 對輸出設備使用高質量輸出 + + + + Compact track buttons + 緊湊化軌道圖標 + + + + Sync VST plugins to host playback + 同步 VST 插件和主機回放 + + + + Enable note labels in piano roll + 在鋼琴窗中顯示音號 + + + + Enable waveform display by default + 默認啓用波形圖 + + + + Keep effects running even without input + 在沒有輸入時也運行音頻效果 + + + + Create backup file when saving a project + 保存工程時建立備份 + + + + Reopen last project on start + 啓動時打開最近的項目 + + + + LANGUAGE + 語言 + + + + + Paths + 路徑 + + + + Directories + 目錄 + + + + LMMS working directory + LMMS工作目錄 + + + + Themes directory + 主題文件目錄 + + + + Background artwork + 背景圖片 + + + + FL Studio installation directory + FL Studio安裝目錄 + + + + VST-plugin directory + VST插件目錄 + + + + GIG directory + GIG 目錄 + + + + SF2 directory + SF2 目錄 + + + + LADSPA plugin directories + LADSPA 插件目錄 + + + + STK rawwave directory + STK rawwave 目錄 + + + + Default Soundfont File + 默認 SoundFont 文件 + + + + + Performance settings + 性能設置 + + + + Auto save + 自動保存 + + + + Enable auto save feature + 啓用自動保存功能 + + + + UI effects vs. performance + 界面特效 vs 性能 + + + + Smooth scroll in Song Editor + 歌曲編輯器中啓用平滑滾動 + + + + Show playback cursor in AudioFileProcessor + 在 AudioFileProcessor 中顯示回放光標 + + + + + 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 GIG directory + 選擇 GIG 目錄 + + + + Choose your SF2 directory + 選擇 SF2 目錄 + + + + 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 目錄 + + + + Choose default SoundFont + 選擇默認的 SoundFont + + + + Choose background artwork + 選擇背景圖片 + + + + minutes + 分鐘 + + + + minute + 分鐘 + + + + Auto save interval: %1 %2 + 自動保存間隔: %1 %2 + + + + Set the time between automatic backup to %1. +Remember to also save your project manually. + 設置自動備份到 %1 的保存時間間隔。 +不過, 請你還是記得時常手動保存你的項目喲。 + + + + 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 接口的控制項目。 + + + + 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 + 導入文件 + + + + MIDI sequences + MIDI 音序器 + + + + FL Studio projects + FL Studio 工程 + + + + Hydrogen projects + Hydrogen工程 + + + + All file types + 所有類型 + + + + + Empty project + 空工程 + + + + + This project is empty so exporting makes no sense. Please put some items into Song Editor first! + 這個工程是空的所以就算導出也沒有意義,請在歌曲編輯器中加入一點聲音吧! + + + + Select directory for writing exported tracks... + 選擇寫入導出音軌的目錄... + + + + + untitled + 未標題 + + + + + Select file for project-export... + 爲工程導出選擇文件... + + + + MIDI File (*.mid) + MIDI 文件 (*.mid) + + + + The following errors occured while loading: + 載入時發生以下錯誤: + + + + SongEditor + + + Could not open file + 無法打開文件 + + + + 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 。或許沒有權限讀此文件。 +請確保您擁有對此文件的讀權限,然後重試。 + + + + Could not write file + 無法寫入文件 + + + + 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 寫入數據。或許沒有權限修改此文件。請確保您擁有對此文件的寫權限,然後重試。 + + + + Error in file + 文件錯誤 + + + + The file %1 seems to contain errors and therefore can't be loaded. + 文件 %1 似乎包含錯誤,無法被加載。 + + + + Project Version Mismatch + 版本號不匹配 + + + + This %1 was created with LMMS version %2, but version %3 is installed + 這個 %1 是由版本爲 %2 的 LMMS 創建的, 但是已安裝的 LMMS 版本號爲 %3 + + + + 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 半音程 + + + + SongEditorWindow + + + Song-Editor + 歌曲編輯器 + + + + Play song (Space) + 播放歌曲(空格) + + + + Record samples from Audio-device + 從音頻設備錄製樣本 + + + + Record samples from Audio-device while playing song or BB track + 在播放歌曲或BB軌道時從音頻設備錄入樣本 + + + + Stop 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. + 點擊這裏完整播放歌曲。將從綠色歌曲標記開始播放。在播放的同時可以對它進行移動。 + + + + Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song. + 點擊這裏停止播放,歌曲位置標記會跳到歌曲的開頭。 + + + + Track actions + 軌道動作 + + + + Add beat/bassline + 添加節拍/Bassline + + + + Add sample-track + 添加採樣軌道 + + + + Add automation-track + 添加自動控制軌道 + + + + Edit actions + 編輯動作 + + + + Draw mode + 繪製模式 + + + + Edit mode (select and move) + 編輯模式(選定和移動) + + + + Timeline controls + 時間線控制 + + + + Zoom controls + 縮放控制 + + + + SpectrumAnalyzerControlDialog + + + Linear spectrum + 線性頻譜圖 + + + + Linear Y axis + 線性 Y 軸 + + + + SpectrumAnalyzerControls + + + Linear spectrum + 線性頻譜圖 + + + + Linear Y axis + 線性 Y 軸 + + + + Channel mode + 通道模式 + + + + TabWidget + + + + Settings for %1 + %1 的設定 + + + + TempoSyncKnob + + + + Tempo Sync + + + + + No Sync + 無同步 + + + + Eight beats + + + + + Whole note + + + + + Half note + + + + + Quarter note + + + + + 8th note + + + + + 16th note + + + + + 32nd note + + + + + Custom... + + + + + 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 + 點擊改變時間單位 + + + + TimeLineWidget + + + 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 <%1> to disable magnetic loop points. + 按住 <%1> 禁用磁性吸附。 + + + + Hold <Shift> to move the begin loop point; Press <%1> to disable magnetic loop points. + 按住 <Shift> 移動起始循環點;按住 <%1> 禁用磁性吸附。 + + + + Track + + + Mute + 靜音 + + + + Solo + 獨奏 + + + + TrackContainer + + + Importing FLP-file... + 正在導入 FLP-文件... + + + + + + Cancel + 取消 + + + + + + Please wait... + 請稍等... + + + + Importing MIDI-file... + 正在導入 MIDI-文件... + + + + 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... + 正在加載工程... + + + + TrackContentObject + + + Mute + 靜音 + + + + TrackContentObjectView + + + Current position + 當前位置 + + + + + Hint + 提示 + + + + Press <%1> and drag to make a copy. + 按住 <%1> 並拖動以創建副本。 + + + + Current length + 當前長度 + + + + Press <%1> for free resizing. + 按住 <%1> 自由調整大小。 + + + + %1:%2 (%3:%4 to %5:%6) + %1:%2 (%3:%4 到 %5:%6) + + + + Delete (middle mousebutton) + 刪除 (鼠標中鍵) + + + + Cut + 剪切 + + + + Copy + 複製 + + + + Paste + 粘貼 + + + + Mute/unmute (<%1> + middle click) + 靜音/取消靜音 (<%1> + 鼠標中鍵) + + + + TrackOperationsWidget + + + Press <%1> while clicking on move-grip to begin a new drag'n'drop-action. + + + + + Actions for this track + + + + + Mute + 靜音 + + + + + Solo + 獨奏 + + + + Mute this track + + + + + Clone this track + + + + + Remove this track + + + + + Clear this track + + + + + FX %1: %2 + 效果 %1: %2 + + + + Assign to new FX Channel + + + + + Turn all recording on + + + + + Turn all recording off + + + + + TripleOscillatorView + + + Use phase modulation for modulating oscillator 1 with oscillator 2 + + + + + Use amplitude modulation for modulating oscillator 1 with oscillator 2 + + + + + Mix output of oscillator 1 & 2 + + + + + Synchronize oscillator 1 with oscillator 2 + + + + + Use frequency modulation for modulating oscillator 1 with oscillator 2 + + + + + Use phase modulation for modulating oscillator 2 with oscillator 3 + + + + + Use amplitude modulation for modulating oscillator 2 with oscillator 3 + + + + + Mix output of oscillator 2 & 3 + + + + + Synchronize oscillator 2 with oscillator 3 + + + + + Use frequency modulation for modulating oscillator 2 with oscillator 3 + + + + + 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 24 semitones (2 octaves) 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. + 爲當前振盪器使用用戶自定波形。 + + + + 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. + + + + + Control VST-plugin from LMMS host + 從 LMMS 宿主控制 VST-插件 + + + + Click here, if you want to control VST-plugin from host. + + + + + Open VST-plugin preset + 打開 VST-插件預設 + + + + 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. + 點擊這裏, 如果你想保存當前 VST-插件預設。 + + + + Next (+) + 下一個 (+) + + + + Click here to select presets that are currently loaded in VST. + + + + + Show/hide GUI + 顯示/隱藏界面 + + + + Click here to show or hide the graphical user interface (GUI) of your VST-plugin. + 點此顯示/隱藏VST插件的界面。 + + + + Turn off all notes + 全部靜音 + + + + Open VST-plugin + 打開VST插件 + + + + DLL-files (*.dll) + DLL-文件 (*.dll) + + + + EXE-files (*.exe) + EXE-文件 (*.exe) + + + + No VST-plugin loaded + 未載入VST插件 + + + + Preset + 預置 + + + + by + + + + + - VST plugin control + - VST插件控制 + + + + VisualizationWidget + + + click to enable/disable visualization of master-output + 點擊啓用/禁用視覺化主輸出 + + + + Click to enable + 點擊啓用 + + + + VstEffectControlDialog + + + Show/hide + 顯示/隱藏 + + + + Control VST-plugin from LMMS host + 從 LMMS 宿主控制 VST-插件 + + + + Click here, if you want to control VST-plugin from host. + + + + + Open VST-plugin preset + 打開 VST-插件預設 + + + + 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. + 點擊這裏, 如果你想保存當前 VST-插件預設。 + + + + + Effect by: + + + + + &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /> + + + + + VstPlugin + + + + The VST plugin %1 could not be loaded. + 無法載入VST插件 %1。 + + + + Open Preset + 打開預置 + + + + + Vst Plugin Preset (*.fxp *.fxb) + VST插件預置文件(*.fxp *.fxb) + + + + : default + : 默認 + + + + " + " + + + + ' + ' + + + + Save Preset + 保存預置 + + + + .fxp + .fxp + + + + .FXP + .FXP + + + + .FXB + .FXB + + + + .fxb + .fxb + + + + Loading plugin + 載入插件 + + + + Please wait while loading VST plugin... + 正在載入VST插件,請稍候…… + + + + 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 + + + + + + Volume + 音量 + + + + + + + Panning + 聲相 + + + + + + + Freq. multiplier + + + + + + + + Left detune + + + + + + + + + + + + cents + + + + + + + + Right detune + + + + + A-B Mix + + + + + Mix envelope amount + + + + + Mix envelope attack + + + + + Mix envelope hold + + + + + Mix envelope decay + + + + + Crosstalk + + + + + 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 + + + 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 + + + + + Show GUI + 顯示圖形界面 + + + + Click here to show or hide the graphical user interface (GUI) of ZynAddSubFX. + + + + + audioFileProcessor + + + Amplify + 增益 + + + + Start of sample + 採樣起始 + + + + End of sample + 採樣結尾 + + + + Loopback point + 循環點 + + + + Reverse sample + 反轉採樣 + + + + Loop mode + 循環模式 + + + + Stutter + + + + + Interpolation mode + 補間方式 + + + + None + + + + + Linear + 線性插補 + + + + Sinc + 辛格(Sinc)插補 + + + + Sample not found: %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 + + + + + fxLineLcdSpinBox + + + Assign to: + 分配給: + + + + New FX Channel + 新的效果通道 + + + + graphModel + + + Graph + 圖形 + + + + kickerInstrument + + + Start frequency + 起始頻率 + + + + End frequency + 結束頻率 + + + + Length + 長度 + + + + Distortion Start + 起始失真度 + + + + Distortion End + 結束失真度 + + + + Gain + 增益 + + + + Envelope Slope + 包絡線傾斜度 + + + + Noise + 噪音 + + + + Click + 力度 + + + + Frequency Slope + 頻率傾斜度 + + + + Start from note + 從哪個音符開始 + + + + End to note + 到哪個音符結束 + + + + kickerInstrumentView + + + Start frequency: + 起始頻率: + + + + End frequency: + 結束頻率: + + + + Frequency Slope: + 頻率傾斜度: + + + + Gain: + 增益: + + + + Envelope Length: + 包絡長度: + + + + Envelope Slope: + 包絡線傾斜度: + + + + Click: + 力度: + + + + Noise: + 噪音: + + + + Distortion Start: + 起始失真度: + + + + Distortion End: + 結束失真度: + + + + 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 插件信息。這些插件根據接口類型和名字被分爲五個類別。 + +"可用效果" 是指可以被 LMMS 使用的插件。爲了讓 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. + + + + + 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. + + + + + 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 + + + + + malletsInstrumentView + + + Instrument + + + + + Spread + + + + + Spread: + + + + + Missing files + + + + + Your Stk-installation seems to be incomplete. Please make sure the full Stk-package is installed! + + + + + 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 參數控制 + + + + 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. + + + + + 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. + + + + + 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 + + + + + opl2instrumentView + + + + Attack + 打進聲 + + + + + Decay + 衰減 + + + + + Release + 釋放 + + + + + Frequency multiplier + + + + + organicInstrument + + + Distortion + 失真 + + + + Volume + 音量 + + + + organicInstrumentView + + + Distortion: + 失真: + + + + The distortion knob adds distortion to the output of the instrument. + + + + + Volume: + 音量: + + + + The volume knob controls the volume of the output of the instrument. It is cumulative with the instrument window's volume control. + + + + + Randomise + 隨機 + + + + The randomize button randomizes all knobs except the harmonics,main volume and distortion knobs. + + + + + + Osc %1 waveform: + + + + + Osc %1 volume: + + + + + Osc %1 panning: + + + + + Osc %1 stereo detuning + + + + + cents + 音分 cents + + + + 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 + + + + + patchesDialog + + + Qsynth: Channel Preset + Qsynth: 通道預設 + + + + Bank selector + 音色選擇器 + + + + Bank + + + + + Program selector + + + + + Patch + 音色 + + + + Name + 名稱 + + + + OK + 確定 + + + + Cancel + 取消 + + + + pluginBrowser + + + A native amplifier plugin + 原生增益插件 + + + + Simple sampler with various settings for using samples (e.g. drums) in an instrument-track + 簡單地在樂器欄使用採樣(比如鼓音源), 同時也提供多種設置 + + + + Boost your bass the fast and simple way + + + + + Customizable wavetable synthesizer + 可自定製的波表合成器 + + + + An oversampling bitcrusher + + + + + Carla Patchbay Instrument + Carla Patchbay 樂器 + + + + Carla Rack Instrument + Carla Rack 樂器 + + + + A 4-band Crossover Equalizer + + + + + A native delay plugin + 原生的衰減插件 + + + + A Dual filter plugin + + + + + plugin for processing dynamics in a flexible way + + + + + A native eq plugin + 原生的 EQ 插件 + + + + A native flanger plugin + 一個原生的 鑲邊 (Flanger) 插件 + + + + Filter for importing FL Studio projects into LMMS + 將 FL Studio 工程導入 LMMS 的過濾器 + + + + Player for GIG files + 播放 GIG 文件的播放器 + + + + Filter for importing Hydrogen files into LMMS + 導入 Hydrogen 工程文件到 LMMS 的解析器 + + + + Versatile drum synthesizer + 多功能鼓合成器 + + + + List installed LADSPA plugins + 列出已安裝的 LADSPA 插件 + + + + plugin for using arbitrary LADSPA-effects inside LMMS. + 在 LMMS 中使用任意 LADSPA 效果的插件。 + + + + Incomplete monophonic imitation tb303 + + + + + Filter for exporting MIDI-files from LMMS + + + + + Filter for importing MIDI-files into LMMS + + + + + Monstrous 3-oscillator synth with modulation matrix + + + + + A multitap echo delay plugin + + + + + A NES-like synthesizer + 類似於 NES 的合成器 + + + + 2-operator FM Synth + + + + + Additive Synthesizer for organ-like sounds + + + + + Emulation of GameBoy (TM) APU + GameBoy (TM) APU 模擬器 + + + + GUS-compatible patch instrument + GUS 兼容音色的樂器 + + + + Plugin for controlling knobs with sound peaks + + + + + Player for SoundFont files + 在工程中使用SoundFont + + + + LMMS port of sfxr + sfxr 的 LMMS 移植版本 + + + + Emulation of the MOS6581 and MOS8580 SID. +This chip was used in the Commodore 64 computer. + 模擬 MOS6581 和 MOS8580 SID 的模擬器 +這些芯片曾在 Commodore 64 電腦上用過。 + + + + Graphical spectrum analyzer plugin + 圖形頻譜分析器插件 + + + + Plugin for enhancing stereo separation of a stereo input file + + + + + Plugin for freely manipulating stereo output + + + + + Tuneful things to bang on + + + + + Three powerful oscillators you can modulate in several ways + + + + + VST-host for using VST(i)-plugins within LMMS + LMMS的VST(i)插件宿主 + + + + Vibrating string modeler + + + + + plugin for using arbitrary VST effects inside LMMS. + + + + + 4-oscillator modulatable wavetable synth + + + + + plugin for waveshaping + + + + + Embedded ZynAddSubFX + 內置的 ZynAddSubFX + + + + no description + 沒有描述 + + + + sf2Instrument + + + Bank + + + + + Patch + 音色 + + + + Gain + 增益 + + + + Reverb + 混響 + + + + Reverb Roomsize + 混響空間大小 + + + + Reverb Damping + 混響阻尼 + + + + Reverb Width + 混響寬度 + + + + Reverb Level + 混響級別 + + + + Chorus + 合唱 + + + + Chorus Lines + 合唱聲部 + + + + Chorus Level + 合唱電平 + + + + Chorus Speed + 合唱速度 + + + + Chorus Depth + 合唱深度 + + + + A soundfont %1 could not be loaded. + 無法載入Soundfont %1。 + + + + 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 + MOS6581 SID + + + + MOS8580 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. + + + + + 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 + 從右到右 + + + + vestigeInstrument + + + Loading plugin + 載入插件 + + + + Please wait while loading VST-plugin... + 請等待VST插件加載完成... + + + + vibed + + + String %1 volume + + + + + String %1 stiffness + + + + + Pick %1 position + + + + + Pickup %1 position + + + + + Pan %1 + 聲相 %1 + + + + Detune %1 + 去諧 %1 + + + + Fuzziness %1 + 模糊度 %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 + 正弦波 + + + + 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. + 點擊這裏標準化波形。 + + + + 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 + + + + + Voice %1 filtered + + + + + 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 + 將輸入信號限制到 0dB + + + + waveShaperControls + + + Input gain + 輸入增益 + + + + Output gain + 輸出增益 + + + \ No newline at end of file diff --git a/data/projects/Demos/Alf42red-Mauiwowi.mmpz b/data/projects/Demos/Alf42red-Mauiwowi.mmpz deleted file mode 100644 index 9a2afec2728..00000000000 Binary files a/data/projects/Demos/Alf42red-Mauiwowi.mmpz and /dev/null differ diff --git a/data/projects/Demos/AngryLlama-NewFangled.mmpz b/data/projects/Demos/AngryLlama-NewFangled.mmpz deleted file mode 100644 index b991c661ea7..00000000000 Binary files a/data/projects/Demos/AngryLlama-NewFangled.mmpz and /dev/null differ diff --git a/data/projects/Demos/Ashore.mmpz b/data/projects/Demos/Ashore.mmpz deleted file mode 100644 index 2e69ea07da5..00000000000 Binary files a/data/projects/Demos/Ashore.mmpz and /dev/null differ diff --git a/data/projects/Demos/CapDan/CapDan-ReggaeTry.mmpz b/data/projects/Demos/CapDan/CapDan-ReggaeTry.mmpz deleted file mode 100644 index 9f9c2993b3e..00000000000 Binary files a/data/projects/Demos/CapDan/CapDan-ReggaeTry.mmpz and /dev/null differ diff --git a/data/projects/Demos/CapDan/CapDan-ReggaetonTry.mmpz b/data/projects/Demos/CapDan/CapDan-ReggaetonTry.mmpz deleted file mode 100644 index e113538091f..00000000000 Binary files a/data/projects/Demos/CapDan/CapDan-ReggaetonTry.mmpz and /dev/null differ diff --git a/data/projects/Demos/CapDan/CapDan-TwilightArea-OriginalByAlf42red.mmpz b/data/projects/Demos/CapDan/CapDan-TwilightArea-OriginalByAlf42red.mmpz deleted file mode 100644 index ee09c620d33..00000000000 Binary files a/data/projects/Demos/CapDan/CapDan-TwilightArea-OriginalByAlf42red.mmpz and /dev/null differ diff --git a/data/projects/Demos/CapDan/CapDan-ZeroSumGame-OriginalByZakarra.mmpz b/data/projects/Demos/CapDan/CapDan-ZeroSumGame-OriginalByZakarra.mmpz deleted file mode 100644 index 4e9021de313..00000000000 Binary files a/data/projects/Demos/CapDan/CapDan-ZeroSumGame-OriginalByZakarra.mmpz and /dev/null differ diff --git a/data/projects/Demos/DnB.mmpz b/data/projects/Demos/DnB.mmpz deleted file mode 100644 index 8fe1dbb12b0..00000000000 Binary files a/data/projects/Demos/DnB.mmpz and /dev/null differ diff --git a/data/projects/Demos/EsoXLB-CPU.mmpz b/data/projects/Demos/EsoXLB-CPU.mmpz deleted file mode 100644 index d53078aa1a6..00000000000 Binary files a/data/projects/Demos/EsoXLB-CPU.mmpz and /dev/null differ diff --git a/data/projects/Demos/Farbro-Tectonic.mmpz b/data/projects/Demos/Farbro-Tectonic.mmpz deleted file mode 100644 index 3b9f23fc2e5..00000000000 Binary files a/data/projects/Demos/Farbro-Tectonic.mmpz and /dev/null differ diff --git a/data/projects/Demos/Greippi - Krem Kaakkuja (Second Flight Remix).mmpz b/data/projects/Demos/Greippi - Krem Kaakkuja (Second Flight Remix).mmpz deleted file mode 100644 index 0a2ecb2c936..00000000000 Binary files a/data/projects/Demos/Greippi - Krem Kaakkuja (Second Flight Remix).mmpz and /dev/null differ diff --git a/data/projects/Demos/Greippi-ardudar.mmpz b/data/projects/Demos/Greippi-ardudar.mmpz deleted file mode 100644 index 17ff90dfde4..00000000000 Binary files a/data/projects/Demos/Greippi-ardudar.mmpz and /dev/null differ diff --git a/data/projects/Demos/Impulslogik-Zen.mmpz b/data/projects/Demos/Impulslogik-Zen.mmpz deleted file mode 100644 index ce10f878813..00000000000 Binary files a/data/projects/Demos/Impulslogik-Zen.mmpz and /dev/null differ diff --git a/data/projects/Demos/Momo64-esp.mmpz b/data/projects/Demos/Momo64-esp.mmpz deleted file mode 100644 index 7746110a8dc..00000000000 Binary files a/data/projects/Demos/Momo64-esp.mmpz and /dev/null differ diff --git a/data/projects/Demos/Namitryus-K-Project.mmpz b/data/projects/Demos/Namitryus-K-Project.mmpz deleted file mode 100644 index 7d6a70486e5..00000000000 Binary files a/data/projects/Demos/Namitryus-K-Project.mmpz and /dev/null differ diff --git a/data/projects/Demos/Oglsdl-Dr8v2.mmpz b/data/projects/Demos/Oglsdl-Dr8v2.mmpz deleted file mode 100644 index 2d54f176682..00000000000 Binary files a/data/projects/Demos/Oglsdl-Dr8v2.mmpz and /dev/null differ diff --git a/data/projects/Demos/Oglsdl-PpTrip.mmpz b/data/projects/Demos/Oglsdl-PpTrip.mmpz deleted file mode 100644 index 355817ffbba..00000000000 Binary files a/data/projects/Demos/Oglsdl-PpTrip.mmpz and /dev/null differ diff --git a/data/projects/Demos/Popsip-Electric Dancer.mmpz b/data/projects/Demos/Popsip-Electric Dancer.mmpz deleted file mode 100644 index 4db5d0d9a10..00000000000 Binary files a/data/projects/Demos/Popsip-Electric Dancer.mmpz and /dev/null differ diff --git a/data/projects/Demos/Root84-Initialize.mmpz b/data/projects/Demos/Root84-Initialize.mmpz deleted file mode 100644 index bbc0af50143..00000000000 Binary files a/data/projects/Demos/Root84-Initialize.mmpz and /dev/null differ diff --git a/data/projects/Demos/Saber-FinalStep.mmpz b/data/projects/Demos/Saber-FinalStep.mmpz deleted file mode 100644 index e94bbb3d81d..00000000000 Binary files a/data/projects/Demos/Saber-FinalStep.mmpz and /dev/null differ diff --git a/data/projects/Demos/Settel-InnerRecreation.mmpz b/data/projects/Demos/Settel-InnerRecreation.mmpz deleted file mode 100644 index 6b85f15e5ee..00000000000 Binary files a/data/projects/Demos/Settel-InnerRecreation.mmpz and /dev/null differ diff --git a/data/projects/Demos/Shovon-ProgressiveHousePluckDemo.mmpz b/data/projects/Demos/Shovon-ProgressiveHousePluckDemo.mmpz deleted file mode 100644 index 1781abdcc15..00000000000 Binary files a/data/projects/Demos/Shovon-ProgressiveHousePluckDemo.mmpz and /dev/null differ diff --git a/data/projects/Demos/Skiessi/Skiessi-C64.mmpz b/data/projects/Demos/Skiessi/Skiessi-C64.mmpz deleted file mode 100644 index 601d52d5aa0..00000000000 Binary files a/data/projects/Demos/Skiessi/Skiessi-C64.mmpz and /dev/null differ diff --git a/data/projects/Demos/Skiessi/Skiessi-Onion.mmpz b/data/projects/Demos/Skiessi/Skiessi-Onion.mmpz deleted file mode 100644 index 3d26b6ff4d7..00000000000 Binary files a/data/projects/Demos/Skiessi/Skiessi-Onion.mmpz and /dev/null differ diff --git a/data/projects/Demos/Skiessi/Skiessi-RandomProjectNumber14253.mmpz b/data/projects/Demos/Skiessi/Skiessi-RandomProjectNumber14253.mmpz deleted file mode 100644 index 26985a53e4a..00000000000 Binary files a/data/projects/Demos/Skiessi/Skiessi-RandomProjectNumber14253.mmpz and /dev/null differ diff --git a/data/projects/Demos/Skiessi/Skiessi-TurningPoint.mmpz b/data/projects/Demos/Skiessi/Skiessi-TurningPoint.mmpz deleted file mode 100644 index d4151f04bdc..00000000000 Binary files a/data/projects/Demos/Skiessi/Skiessi-TurningPoint.mmpz and /dev/null differ diff --git a/data/projects/Demos/Socceroos-Progress.mmpz b/data/projects/Demos/Socceroos-Progress.mmpz deleted file mode 100644 index 5d65bd801ed..00000000000 Binary files a/data/projects/Demos/Socceroos-Progress.mmpz and /dev/null differ diff --git a/data/projects/Demos/StrictProduction-DearJonDoe.mmp b/data/projects/Demos/StrictProduction-DearJonDoe.mmp deleted file mode 100644 index 8d790a2e7b2..00000000000 --- a/data/projects/Demos/StrictProduction-DearJonDoe.mmp +++ /dev/null @@ -1,871 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Put down your project notes here.

]]>
- - -
-
diff --git a/data/projects/Demos/TameAnderson-MakeMe.mmpz b/data/projects/Demos/TameAnderson-MakeMe.mmpz deleted file mode 100644 index 12a4d222c12..00000000000 Binary files a/data/projects/Demos/TameAnderson-MakeMe.mmpz and /dev/null differ diff --git a/data/projects/Demos/Thaledric-Armageddon.mmpz b/data/projects/Demos/Thaledric-Armageddon.mmpz deleted file mode 100644 index 91e073b9071..00000000000 Binary files a/data/projects/Demos/Thaledric-Armageddon.mmpz and /dev/null differ diff --git a/data/projects/Demos/Thomasso-AxeFromThe80s.mmpz b/data/projects/Demos/Thomasso-AxeFromThe80s.mmpz deleted file mode 100644 index 2829f537863..00000000000 Binary files a/data/projects/Demos/Thomasso-AxeFromThe80s.mmpz and /dev/null differ diff --git a/data/projects/Demos/TobyDox-Psycho.mmpz b/data/projects/Demos/TobyDox-Psycho.mmpz deleted file mode 100644 index a3ab6fb79b0..00000000000 Binary files a/data/projects/Demos/TobyDox-Psycho.mmpz and /dev/null differ diff --git a/data/projects/Demos/Zakarra/Zakarra-59_Degrees.mmpz b/data/projects/Demos/Zakarra/Zakarra-59_Degrees.mmpz deleted file mode 100644 index 752cab3d2cb..00000000000 Binary files a/data/projects/Demos/Zakarra/Zakarra-59_Degrees.mmpz and /dev/null differ diff --git a/data/projects/Demos/Zakarra/Zakarra-MainstreamMemory.mmpz b/data/projects/Demos/Zakarra/Zakarra-MainstreamMemory.mmpz deleted file mode 100644 index 83014cabb0d..00000000000 Binary files a/data/projects/Demos/Zakarra/Zakarra-MainstreamMemory.mmpz and /dev/null differ diff --git a/data/projects/Demos/Zakarra/Zakarra-OneDay.mmpz b/data/projects/Demos/Zakarra/Zakarra-OneDay.mmpz deleted file mode 100644 index ce11e2751f1..00000000000 Binary files a/data/projects/Demos/Zakarra/Zakarra-OneDay.mmpz and /dev/null differ diff --git a/data/projects/Demos/unfa-Spoken.mmpz b/data/projects/Demos/unfa-Spoken.mmpz deleted file mode 100644 index ca6c6b9957b..00000000000 Binary files a/data/projects/Demos/unfa-Spoken.mmpz and /dev/null differ diff --git a/data/projects/Shorties/Crunk(Demo).mmp b/data/projects/Shorties/Crunk(Demo).mmp deleted file mode 100644 index 5afb9b5df69..00000000000 --- a/data/projects/Shorties/Crunk(Demo).mmp +++ /dev/null @@ -1,388 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Put down your project notes here.

]]>
- - -
-
diff --git a/data/projects/Shorties/Root84-TrancyLoop.mmpz b/data/projects/Shorties/Root84-TrancyLoop.mmpz deleted file mode 100644 index ae7d6653f14..00000000000 Binary files a/data/projects/Shorties/Root84-TrancyLoop.mmpz and /dev/null differ diff --git a/data/projects/Shorties/Skiessi-222.mmpz b/data/projects/Shorties/Skiessi-222.mmpz deleted file mode 100644 index 01d3ad4dbaf..00000000000 Binary files a/data/projects/Shorties/Skiessi-222.mmpz and /dev/null differ diff --git a/data/projects/Shorties/Surrender-Main.mmpz b/data/projects/Shorties/Surrender-Main.mmpz deleted file mode 100644 index 1d9efd13cd7..00000000000 Binary files a/data/projects/Shorties/Surrender-Main.mmpz and /dev/null differ diff --git a/data/projects/Shorties/sv-DnB-Startup.mmpz b/data/projects/Shorties/sv-DnB-Startup.mmpz deleted file mode 100644 index 1ce685c8d16..00000000000 Binary files a/data/projects/Shorties/sv-DnB-Startup.mmpz and /dev/null differ diff --git a/data/projects/Shorties/sv-Trance-Startup.mmpz b/data/projects/Shorties/sv-Trance-Startup.mmpz deleted file mode 100644 index e5c6f3738af..00000000000 Binary files a/data/projects/Shorties/sv-Trance-Startup.mmpz and /dev/null differ diff --git a/data/projects/Templates/AcousticDrumset.mpt b/data/projects/Templates/AcousticDrumset.mpt deleted file mode 100644 index d43031c23b3..00000000000 --- a/data/projects/Templates/AcousticDrumset.mpt +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

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

- -]]>
-
-
diff --git a/data/projects/Templates/CR8000.mpt b/data/projects/Templates/CR8000.mpt deleted file mode 100644 index 060bcd54794..00000000000 --- a/data/projects/Templates/CR8000.mpt +++ /dev/null @@ -1,399 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Put down your project notes here.

]]>
- - -
-
diff --git a/data/projects/Templates/ClubMix.mpt b/data/projects/Templates/ClubMix.mpt deleted file mode 100644 index e1d583715a5..00000000000 --- a/data/projects/Templates/ClubMix.mpt +++ /dev/null @@ -1,101 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Some drums for making music rocking the club!

- -]]>
-
-
diff --git a/data/projects/Templates/Empty.mpt b/data/projects/Templates/Empty.mpt deleted file mode 100644 index 14d1342de2f..00000000000 --- a/data/projects/Templates/Empty.mpt +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Put down your project notes here.

]]>
- - - - diff --git a/data/projects/Templates/TR808.mpt b/data/projects/Templates/TR808.mpt deleted file mode 100644 index d7ed8c1ebc3..00000000000 --- a/data/projects/Templates/TR808.mpt +++ /dev/null @@ -1,459 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Put down your project notes here.

]]>
- - -
-
diff --git a/data/projects/Tutorials/editing_note_volumes.mmp b/data/projects/Tutorials/editing_note_volumes.mmp deleted file mode 100644 index 51cc0a42a4d..00000000000 --- a/data/projects/Tutorials/editing_note_volumes.mmp +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

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!!)

- -]]>
-
-
diff --git a/data/projects/demos/Alf42red-Mauiwowi.mmpz b/data/projects/demos/Alf42red-Mauiwowi.mmpz new file mode 100644 index 00000000000..ec390ad3a32 Binary files /dev/null and b/data/projects/demos/Alf42red-Mauiwowi.mmpz differ diff --git a/data/projects/demos/AngryLlama-NewFangled.mmpz b/data/projects/demos/AngryLlama-NewFangled.mmpz new file mode 100644 index 00000000000..0fd38d54c61 Binary files /dev/null and b/data/projects/demos/AngryLlama-NewFangled.mmpz differ diff --git a/data/projects/demos/Ashore.mmpz b/data/projects/demos/Ashore.mmpz new file mode 100644 index 00000000000..6b6988a6d36 Binary files /dev/null and b/data/projects/demos/Ashore.mmpz differ diff --git a/data/projects/demos/CapDan/CapDan-ReggaeTry.mmpz b/data/projects/demos/CapDan/CapDan-ReggaeTry.mmpz new file mode 100644 index 00000000000..5562c22fc2a Binary files /dev/null and b/data/projects/demos/CapDan/CapDan-ReggaeTry.mmpz differ diff --git a/data/projects/demos/CapDan/CapDan-ReggaetonTry.mmpz b/data/projects/demos/CapDan/CapDan-ReggaetonTry.mmpz new file mode 100644 index 00000000000..25b07eacd1a Binary files /dev/null and b/data/projects/demos/CapDan/CapDan-ReggaetonTry.mmpz differ diff --git a/data/projects/demos/CapDan/CapDan-TwilightArea-OriginalByAlf42red.mmpz b/data/projects/demos/CapDan/CapDan-TwilightArea-OriginalByAlf42red.mmpz new file mode 100644 index 00000000000..1687e8c3433 Binary files /dev/null and b/data/projects/demos/CapDan/CapDan-TwilightArea-OriginalByAlf42red.mmpz differ diff --git a/data/projects/demos/CapDan/CapDan-ZeroSumGame-OriginalByZakarra.mmpz b/data/projects/demos/CapDan/CapDan-ZeroSumGame-OriginalByZakarra.mmpz new file mode 100644 index 00000000000..95a29daff1d Binary files /dev/null and b/data/projects/demos/CapDan/CapDan-ZeroSumGame-OriginalByZakarra.mmpz differ diff --git a/data/projects/demos/DnB.mmpz b/data/projects/demos/DnB.mmpz new file mode 100644 index 00000000000..c84f3ebd252 Binary files /dev/null and b/data/projects/demos/DnB.mmpz differ diff --git a/data/projects/demos/EsoXLB-CPU.mmpz b/data/projects/demos/EsoXLB-CPU.mmpz new file mode 100644 index 00000000000..1c2549027e4 Binary files /dev/null and b/data/projects/demos/EsoXLB-CPU.mmpz differ diff --git a/data/projects/demos/Farbro-Tectonic.mmpz b/data/projects/demos/Farbro-Tectonic.mmpz new file mode 100644 index 00000000000..c639401e308 Binary files /dev/null and b/data/projects/demos/Farbro-Tectonic.mmpz differ diff --git a/data/projects/demos/Greippi - Krem Kaakkuja (Second Flight Remix).mmpz b/data/projects/demos/Greippi - Krem Kaakkuja (Second Flight Remix).mmpz new file mode 100644 index 00000000000..2f862dd5113 Binary files /dev/null and b/data/projects/demos/Greippi - Krem Kaakkuja (Second Flight Remix).mmpz differ diff --git a/data/projects/demos/Impulslogik-Zen.mmpz b/data/projects/demos/Impulslogik-Zen.mmpz new file mode 100644 index 00000000000..05fa375c49f Binary files /dev/null and b/data/projects/demos/Impulslogik-Zen.mmpz differ diff --git a/data/projects/Demos/LICENSES.TXT b/data/projects/demos/LICENSES.TXT similarity index 84% rename from data/projects/Demos/LICENSES.TXT rename to data/projects/demos/LICENSES.TXT index db68441cdf6..7408d82b507 100644 --- a/data/projects/Demos/LICENSES.TXT +++ b/data/projects/demos/LICENSES.TXT @@ -30,10 +30,6 @@ - CC (by) - http://lmms.io/lsp/index.php?action=show&file=6337 -* Greippi-ardudar.mmpz - - CC (by-sa) - - http://lmms.io/lsp/index.php?action=show&file=4916 - * Impulslogik-Zen.mmpz - Artistic 2.0 - http://lmms.io/lsp/index.php?action=show&file=581 @@ -90,15 +86,3 @@ - CC (by-nc) - http://lmms.io/lsp/index.php?action=show&file=4929 -* Zakarra-MainstreamMemory.mmpz - - Artistic 2.0 - - http://lmms.io/lsp/index.php?action=show&file=1201 - -* Zakarra-OneDay.mmpz - - Artistic 2.0 - - http://lmms.io/lsp/index.php?action=show&file=1501 - -* Zakarra-59_Degrees.mmpz - - Artistic 2.0 - - http://lmms.io/lsp/index.php?action=show&file=1059 - diff --git a/data/projects/demos/Momo64-esp.mmpz b/data/projects/demos/Momo64-esp.mmpz new file mode 100644 index 00000000000..68ae6822c4d Binary files /dev/null and b/data/projects/demos/Momo64-esp.mmpz differ diff --git a/data/projects/demos/Namitryus-K-Project.mmpz b/data/projects/demos/Namitryus-K-Project.mmpz new file mode 100644 index 00000000000..6d463cbb954 Binary files /dev/null and b/data/projects/demos/Namitryus-K-Project.mmpz differ diff --git a/data/projects/demos/Oglsdl-Dr8v2.mmpz b/data/projects/demos/Oglsdl-Dr8v2.mmpz new file mode 100644 index 00000000000..eb9d7559a21 Binary files /dev/null and b/data/projects/demos/Oglsdl-Dr8v2.mmpz differ diff --git a/data/projects/demos/Oglsdl-PpTrip.mmpz b/data/projects/demos/Oglsdl-PpTrip.mmpz new file mode 100644 index 00000000000..d1baceeba51 Binary files /dev/null and b/data/projects/demos/Oglsdl-PpTrip.mmpz differ diff --git a/data/projects/demos/Popsip-Electric Dancer.mmpz b/data/projects/demos/Popsip-Electric Dancer.mmpz new file mode 100644 index 00000000000..fc93dd64a23 Binary files /dev/null and b/data/projects/demos/Popsip-Electric Dancer.mmpz differ diff --git a/data/projects/demos/Root84-Initialize.mmpz b/data/projects/demos/Root84-Initialize.mmpz new file mode 100644 index 00000000000..349fcb88f4b Binary files /dev/null and b/data/projects/demos/Root84-Initialize.mmpz differ diff --git a/data/projects/demos/Saber-FinalStep.mmpz b/data/projects/demos/Saber-FinalStep.mmpz new file mode 100644 index 00000000000..5e3d1d1ffc6 Binary files /dev/null and b/data/projects/demos/Saber-FinalStep.mmpz differ diff --git a/data/projects/demos/Settel-InnerRecreation.mmpz b/data/projects/demos/Settel-InnerRecreation.mmpz new file mode 100644 index 00000000000..aaa01e0bcfe Binary files /dev/null and b/data/projects/demos/Settel-InnerRecreation.mmpz differ diff --git a/data/projects/demos/Shovon-ProgressiveHousePluckDemo.mmpz b/data/projects/demos/Shovon-ProgressiveHousePluckDemo.mmpz new file mode 100644 index 00000000000..2d31bd7bdc2 Binary files /dev/null and b/data/projects/demos/Shovon-ProgressiveHousePluckDemo.mmpz differ diff --git a/data/projects/demos/Skiessi/Skiessi-C64.mmpz b/data/projects/demos/Skiessi/Skiessi-C64.mmpz new file mode 100644 index 00000000000..f0b3f5cdb4d Binary files /dev/null and b/data/projects/demos/Skiessi/Skiessi-C64.mmpz differ diff --git a/data/projects/demos/Skiessi/Skiessi-Onion.mmpz b/data/projects/demos/Skiessi/Skiessi-Onion.mmpz new file mode 100644 index 00000000000..0c40fb60a45 Binary files /dev/null and b/data/projects/demos/Skiessi/Skiessi-Onion.mmpz differ diff --git a/data/projects/demos/Skiessi/Skiessi-RandomProjectNumber14253.mmpz b/data/projects/demos/Skiessi/Skiessi-RandomProjectNumber14253.mmpz new file mode 100644 index 00000000000..d3c6e0f8d0e Binary files /dev/null and b/data/projects/demos/Skiessi/Skiessi-RandomProjectNumber14253.mmpz differ diff --git a/data/projects/demos/Skiessi/Skiessi-TurningPoint.mmpz b/data/projects/demos/Skiessi/Skiessi-TurningPoint.mmpz new file mode 100644 index 00000000000..ee5be4b553e Binary files /dev/null and b/data/projects/demos/Skiessi/Skiessi-TurningPoint.mmpz differ diff --git a/data/projects/demos/Socceroos-Progress.mmpz b/data/projects/demos/Socceroos-Progress.mmpz new file mode 100644 index 00000000000..74ff5774c94 Binary files /dev/null and b/data/projects/demos/Socceroos-Progress.mmpz differ diff --git a/data/projects/demos/StrictProduction-DearJonDoe.mmp b/data/projects/demos/StrictProduction-DearJonDoe.mmp new file mode 100644 index 00000000000..7c114fb1194 --- /dev/null +++ b/data/projects/demos/StrictProduction-DearJonDoe.mmp @@ -0,0 +1,697 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Put down your project notes here.

]]>
+ + +
+
diff --git a/data/projects/demos/TameAnderson-MakeMe.mmpz b/data/projects/demos/TameAnderson-MakeMe.mmpz new file mode 100644 index 00000000000..de015281881 Binary files /dev/null and b/data/projects/demos/TameAnderson-MakeMe.mmpz differ diff --git a/data/projects/demos/Thaledric-Armageddon.mmpz b/data/projects/demos/Thaledric-Armageddon.mmpz new file mode 100644 index 00000000000..0e9d5f83fa9 Binary files /dev/null and b/data/projects/demos/Thaledric-Armageddon.mmpz differ diff --git a/data/projects/demos/Thomasso-AxeFromThe80s.mmpz b/data/projects/demos/Thomasso-AxeFromThe80s.mmpz new file mode 100644 index 00000000000..af68b8b8b11 Binary files /dev/null and b/data/projects/demos/Thomasso-AxeFromThe80s.mmpz differ diff --git a/data/projects/demos/TobyDox-Psycho.mmpz b/data/projects/demos/TobyDox-Psycho.mmpz new file mode 100644 index 00000000000..09ec6b6a6b4 Binary files /dev/null and b/data/projects/demos/TobyDox-Psycho.mmpz differ diff --git a/data/projects/demos/unfa-Spoken.mmpz b/data/projects/demos/unfa-Spoken.mmpz new file mode 100644 index 00000000000..659afa03a0f Binary files /dev/null and b/data/projects/demos/unfa-Spoken.mmpz differ diff --git a/data/projects/shorties/Crunk(Demo).mmp b/data/projects/shorties/Crunk(Demo).mmp new file mode 100644 index 00000000000..86113c46292 --- /dev/null +++ b/data/projects/shorties/Crunk(Demo).mmp @@ -0,0 +1,223 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Put down your project notes here.

]]>
+ + +
+
diff --git a/data/projects/shorties/DirtyLove.mmpz b/data/projects/shorties/DirtyLove.mmpz new file mode 100644 index 00000000000..177c05ce516 Binary files /dev/null and b/data/projects/shorties/DirtyLove.mmpz differ diff --git a/data/projects/Shorties/Greshz-CoolSnip.mmpz b/data/projects/shorties/Greshz-CoolSnip.mmpz similarity index 100% rename from data/projects/Shorties/Greshz-CoolSnip.mmpz rename to data/projects/shorties/Greshz-CoolSnip.mmpz diff --git a/data/projects/Shorties/LICENSES.TXT b/data/projects/shorties/LICENSES.TXT similarity index 100% rename from data/projects/Shorties/LICENSES.TXT rename to data/projects/shorties/LICENSES.TXT diff --git a/data/projects/shorties/Root84-TrancyLoop.mmpz b/data/projects/shorties/Root84-TrancyLoop.mmpz new file mode 100644 index 00000000000..22bd5f2fad7 Binary files /dev/null and b/data/projects/shorties/Root84-TrancyLoop.mmpz differ diff --git a/data/projects/shorties/Skiessi-222.mmpz b/data/projects/shorties/Skiessi-222.mmpz new file mode 100644 index 00000000000..a5683364580 Binary files /dev/null and b/data/projects/shorties/Skiessi-222.mmpz differ diff --git a/data/projects/shorties/Surrender-Main.mmpz b/data/projects/shorties/Surrender-Main.mmpz new file mode 100644 index 00000000000..a94df2497ef Binary files /dev/null and b/data/projects/shorties/Surrender-Main.mmpz differ diff --git a/data/projects/shorties/sv-DnB-Startup.mmpz b/data/projects/shorties/sv-DnB-Startup.mmpz new file mode 100644 index 00000000000..c9d8d597055 Binary files /dev/null and b/data/projects/shorties/sv-DnB-Startup.mmpz differ diff --git a/data/projects/shorties/sv-Trance-Startup.mmpz b/data/projects/shorties/sv-Trance-Startup.mmpz new file mode 100644 index 00000000000..c508b1500c2 Binary files /dev/null and b/data/projects/shorties/sv-Trance-Startup.mmpz differ diff --git a/data/projects/templates/AcousticDrumset.mpt b/data/projects/templates/AcousticDrumset.mpt new file mode 100644 index 00000000000..7386ec94b2b --- /dev/null +++ b/data/projects/templates/AcousticDrumset.mpt @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

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

]]>
+ + +
+
diff --git a/data/projects/templates/CR8000.mpt b/data/projects/templates/CR8000.mpt new file mode 100644 index 00000000000..c47a3ef2e51 --- /dev/null +++ b/data/projects/templates/CR8000.mpt @@ -0,0 +1,260 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Put down your project notes here.

]]>
+ + +
+
diff --git a/data/projects/templates/ClubMix.mpt b/data/projects/templates/ClubMix.mpt new file mode 100644 index 00000000000..744492e5ac4 --- /dev/null +++ b/data/projects/templates/ClubMix.mpt @@ -0,0 +1,155 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Some drums for making music rocking the club!

]]>
+ + +
+
diff --git a/data/projects/templates/Empty.mpt b/data/projects/templates/Empty.mpt new file mode 100644 index 00000000000..cf5bfa150ac --- /dev/null +++ b/data/projects/templates/Empty.mpt @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Put down your project notes here.

]]>
+ + +
+
diff --git a/data/projects/templates/TR808.mpt b/data/projects/templates/TR808.mpt new file mode 100644 index 00000000000..fe2a47f7079 --- /dev/null +++ b/data/projects/templates/TR808.mpt @@ -0,0 +1,328 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Put down your project notes here.

]]>
+ + +
+
diff --git a/data/projects/tutorials/editing_note_volumes.mmp b/data/projects/tutorials/editing_note_volumes.mmp new file mode 100644 index 00000000000..365dbf5a1ec --- /dev/null +++ b/data/projects/tutorials/editing_note_volumes.mmp @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

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!!)

]]>
+ + +
+
diff --git a/data/samples/bassloopes/briff01.ogg b/data/samples/bassloops/briff01.ogg similarity index 100% rename from data/samples/bassloopes/briff01.ogg rename to data/samples/bassloops/briff01.ogg diff --git a/data/samples/bassloopes/rave_bass01.ogg b/data/samples/bassloops/rave_bass01.ogg similarity index 100% rename from data/samples/bassloopes/rave_bass01.ogg rename to data/samples/bassloops/rave_bass01.ogg diff --git a/data/samples/bassloopes/rave_bass02.ogg b/data/samples/bassloops/rave_bass02.ogg similarity index 100% rename from data/samples/bassloopes/rave_bass02.ogg rename to data/samples/bassloops/rave_bass02.ogg diff --git a/data/samples/bassloopes/tb303_01.ogg b/data/samples/bassloops/tb303_01.ogg similarity index 100% rename from data/samples/bassloopes/tb303_01.ogg rename to data/samples/bassloops/tb303_01.ogg diff --git a/data/samples/bassloopes/techno_bass01.ogg b/data/samples/bassloops/techno_bass01.ogg similarity index 100% rename from data/samples/bassloopes/techno_bass01.ogg rename to data/samples/bassloops/techno_bass01.ogg diff --git a/data/samples/bassloopes/techno_bass02.ogg b/data/samples/bassloops/techno_bass02.ogg similarity index 100% rename from data/samples/bassloopes/techno_bass02.ogg rename to data/samples/bassloops/techno_bass02.ogg diff --git a/data/samples/bassloopes/techno_synth01.ogg b/data/samples/bassloops/techno_synth01.ogg similarity index 100% rename from data/samples/bassloopes/techno_synth01.ogg rename to data/samples/bassloops/techno_synth01.ogg diff --git a/data/samples/bassloopes/techno_synth02.ogg b/data/samples/bassloops/techno_synth02.ogg similarity index 100% rename from data/samples/bassloopes/techno_synth02.ogg rename to data/samples/bassloops/techno_synth02.ogg diff --git a/data/samples/bassloopes/techno_synth03.ogg b/data/samples/bassloops/techno_synth03.ogg similarity index 100% rename from data/samples/bassloopes/techno_synth03.ogg rename to data/samples/bassloops/techno_synth03.ogg diff --git a/data/samples/bassloopes/techno_synth04.ogg b/data/samples/bassloops/techno_synth04.ogg similarity index 100% rename from data/samples/bassloopes/techno_synth04.ogg rename to data/samples/bassloops/techno_synth04.ogg diff --git a/data/samples/misc/metalish_dong01.ogg b/data/samples/misc/metalish_dong01.ogg index d019e75cd4e..2baeeb5a275 100644 Binary files a/data/samples/misc/metalish_dong01.ogg and b/data/samples/misc/metalish_dong01.ogg differ diff --git a/data/themes/classic/add.png b/data/themes/classic/add.png new file mode 100644 index 00000000000..3e8ae42fbdf Binary files /dev/null and b/data/themes/classic/add.png differ diff --git a/data/themes/classic/add_automation.png b/data/themes/classic/add_automation.png new file mode 100644 index 00000000000..58f13909b49 Binary files /dev/null and b/data/themes/classic/add_automation.png differ diff --git a/data/themes/classic/add_bb_track.png b/data/themes/classic/add_bb_track.png new file mode 100644 index 00000000000..3379a094b3a Binary files /dev/null and b/data/themes/classic/add_bb_track.png differ diff --git a/data/themes/classic/add_folder.png b/data/themes/classic/add_folder.png new file mode 100644 index 00000000000..710c7e80ea2 Binary files /dev/null and b/data/themes/classic/add_folder.png differ diff --git a/data/themes/classic/add_sample_track.png b/data/themes/classic/add_sample_track.png new file mode 100644 index 00000000000..0c094b36902 Binary files /dev/null and b/data/themes/classic/add_sample_track.png differ diff --git a/data/themes/classic/analysis.png b/data/themes/classic/analysis.png new file mode 100644 index 00000000000..dd6f48476b1 Binary files /dev/null and b/data/themes/classic/analysis.png differ diff --git a/data/themes/classic/apply-selected.png b/data/themes/classic/apply-selected.png new file mode 100644 index 00000000000..f4e79fb4d61 Binary files /dev/null and b/data/themes/classic/apply-selected.png differ diff --git a/data/themes/classic/apply.png b/data/themes/classic/apply.png new file mode 100644 index 00000000000..1ae48682ea8 Binary files /dev/null and b/data/themes/classic/apply.png differ diff --git a/data/themes/classic/arp_down.png b/data/themes/classic/arp_down.png new file mode 100644 index 00000000000..85586f7dae1 Binary files /dev/null and b/data/themes/classic/arp_down.png differ diff --git a/data/themes/classic/arp_free.png b/data/themes/classic/arp_free.png new file mode 100644 index 00000000000..19ebc3a53fe Binary files /dev/null and b/data/themes/classic/arp_free.png differ diff --git a/data/themes/classic/arp_random.png b/data/themes/classic/arp_random.png new file mode 100644 index 00000000000..608fc6df77c Binary files /dev/null and b/data/themes/classic/arp_random.png differ diff --git a/data/themes/classic/arp_sort.png b/data/themes/classic/arp_sort.png new file mode 100644 index 00000000000..a89bf913b99 Binary files /dev/null and b/data/themes/classic/arp_sort.png differ diff --git a/data/themes/classic/arp_sync.png b/data/themes/classic/arp_sync.png new file mode 100644 index 00000000000..c9c44a9ba9c Binary files /dev/null and b/data/themes/classic/arp_sync.png differ diff --git a/data/themes/classic/arp_up.png b/data/themes/classic/arp_up.png new file mode 100644 index 00000000000..07a4ecc7e4a Binary files /dev/null and b/data/themes/classic/arp_up.png differ diff --git a/data/themes/classic/arp_up_and_down.png b/data/themes/classic/arp_up_and_down.png new file mode 100644 index 00000000000..513331df7b0 Binary files /dev/null and b/data/themes/classic/arp_up_and_down.png differ diff --git a/data/themes/classic/automation.png b/data/themes/classic/automation.png new file mode 100644 index 00000000000..d6193e4f6b6 Binary files /dev/null and b/data/themes/classic/automation.png differ diff --git a/data/themes/classic/automation_track.png b/data/themes/classic/automation_track.png new file mode 100644 index 00000000000..a7480fd70fd Binary files /dev/null and b/data/themes/classic/automation_track.png differ diff --git a/data/themes/classic/autoscroll_off.png b/data/themes/classic/autoscroll_off.png new file mode 100644 index 00000000000..526e20bf873 Binary files /dev/null and b/data/themes/classic/autoscroll_off.png differ diff --git a/data/themes/classic/autoscroll_on.png b/data/themes/classic/autoscroll_on.png new file mode 100644 index 00000000000..d2567f25388 Binary files /dev/null and b/data/themes/classic/autoscroll_on.png differ diff --git a/data/themes/classic/back_to_start.png b/data/themes/classic/back_to_start.png new file mode 100644 index 00000000000..d8b8b73fed3 Binary files /dev/null and b/data/themes/classic/back_to_start.png differ diff --git a/data/themes/classic/back_to_zero.png b/data/themes/classic/back_to_zero.png new file mode 100644 index 00000000000..dfde88b4e58 Binary files /dev/null and b/data/themes/classic/back_to_zero.png differ diff --git a/data/themes/default/background_artwork.png b/data/themes/classic/background_artwork.png similarity index 100% rename from data/themes/default/background_artwork.png rename to data/themes/classic/background_artwork.png diff --git a/data/themes/classic/bb_track.png b/data/themes/classic/bb_track.png new file mode 100644 index 00000000000..1c72caa39bb Binary files /dev/null and b/data/themes/classic/bb_track.png differ diff --git a/data/themes/classic/bb_track_btn.png b/data/themes/classic/bb_track_btn.png new file mode 100644 index 00000000000..f67714607da Binary files /dev/null and b/data/themes/classic/bb_track_btn.png differ diff --git a/data/themes/classic/black_key.png b/data/themes/classic/black_key.png new file mode 100644 index 00000000000..93ea71bf72d Binary files /dev/null and b/data/themes/classic/black_key.png differ diff --git a/data/themes/classic/black_key_pressed.png b/data/themes/classic/black_key_pressed.png new file mode 100644 index 00000000000..a730bc9f759 Binary files /dev/null and b/data/themes/classic/black_key_pressed.png differ diff --git a/data/themes/classic/cancel.png b/data/themes/classic/cancel.png new file mode 100644 index 00000000000..f4b6e78f60a Binary files /dev/null and b/data/themes/classic/cancel.png differ diff --git a/data/themes/classic/chord.png b/data/themes/classic/chord.png new file mode 100644 index 00000000000..6dec8a971b6 Binary files /dev/null and b/data/themes/classic/chord.png differ diff --git a/data/themes/classic/clock.png b/data/themes/classic/clock.png new file mode 100644 index 00000000000..4cd3f082a85 Binary files /dev/null and b/data/themes/classic/clock.png differ diff --git a/data/themes/classic/close.png b/data/themes/classic/close.png new file mode 100644 index 00000000000..0dc87670dbb Binary files /dev/null and b/data/themes/classic/close.png differ diff --git a/data/themes/classic/colorize.png b/data/themes/classic/colorize.png new file mode 100644 index 00000000000..e31f00e9ff3 Binary files /dev/null and b/data/themes/classic/colorize.png differ diff --git a/data/themes/classic/combobox_arrow.png b/data/themes/classic/combobox_arrow.png new file mode 100644 index 00000000000..be9db40bc2f Binary files /dev/null and b/data/themes/classic/combobox_arrow.png differ diff --git a/data/themes/classic/combobox_arrow_selected.png b/data/themes/classic/combobox_arrow_selected.png new file mode 100644 index 00000000000..d1345bd74ae Binary files /dev/null and b/data/themes/classic/combobox_arrow_selected.png differ diff --git a/data/themes/classic/combobox_bg.png b/data/themes/classic/combobox_bg.png new file mode 100644 index 00000000000..83bdb41406d Binary files /dev/null and b/data/themes/classic/combobox_bg.png differ diff --git a/data/themes/classic/computer.png b/data/themes/classic/computer.png new file mode 100644 index 00000000000..f449ecb6b50 Binary files /dev/null and b/data/themes/classic/computer.png differ diff --git a/data/themes/classic/controller.png b/data/themes/classic/controller.png new file mode 100644 index 00000000000..6bd108d2262 Binary files /dev/null and b/data/themes/classic/controller.png differ diff --git a/data/themes/classic/cpuload_bg.png b/data/themes/classic/cpuload_bg.png new file mode 100644 index 00000000000..f05db1a0696 Binary files /dev/null and b/data/themes/classic/cpuload_bg.png differ diff --git a/data/themes/classic/cpuload_leds.png b/data/themes/classic/cpuload_leds.png new file mode 100644 index 00000000000..900cd5b4609 Binary files /dev/null and b/data/themes/classic/cpuload_leds.png differ diff --git a/data/themes/classic/dont_know.png b/data/themes/classic/dont_know.png new file mode 100644 index 00000000000..db2126d93ac Binary files /dev/null and b/data/themes/classic/dont_know.png differ diff --git a/data/themes/default/drum.png b/data/themes/classic/drum.png similarity index 100% rename from data/themes/default/drum.png rename to data/themes/classic/drum.png diff --git a/data/themes/classic/edit_copy.png b/data/themes/classic/edit_copy.png new file mode 100644 index 00000000000..bf4b3669d81 Binary files /dev/null and b/data/themes/classic/edit_copy.png differ diff --git a/data/themes/classic/edit_cut.png b/data/themes/classic/edit_cut.png new file mode 100644 index 00000000000..fbc333368f4 Binary files /dev/null and b/data/themes/classic/edit_cut.png differ diff --git a/data/themes/classic/edit_draw.png b/data/themes/classic/edit_draw.png new file mode 100644 index 00000000000..a0bb1db93be Binary files /dev/null and b/data/themes/classic/edit_draw.png differ diff --git a/data/themes/classic/edit_erase.png b/data/themes/classic/edit_erase.png new file mode 100644 index 00000000000..143400a9b49 Binary files /dev/null and b/data/themes/classic/edit_erase.png differ diff --git a/data/themes/classic/edit_move.png b/data/themes/classic/edit_move.png new file mode 100644 index 00000000000..28a63417131 Binary files /dev/null and b/data/themes/classic/edit_move.png differ diff --git a/data/themes/classic/edit_paste.png b/data/themes/classic/edit_paste.png new file mode 100644 index 00000000000..766e8632581 Binary files /dev/null and b/data/themes/classic/edit_paste.png differ diff --git a/data/themes/classic/edit_redo.png b/data/themes/classic/edit_redo.png new file mode 100644 index 00000000000..45f0450282c Binary files /dev/null and b/data/themes/classic/edit_redo.png differ diff --git a/data/themes/classic/edit_rename.png b/data/themes/classic/edit_rename.png new file mode 100644 index 00000000000..ea8872fea61 Binary files /dev/null and b/data/themes/classic/edit_rename.png differ diff --git a/data/themes/classic/edit_select.png b/data/themes/classic/edit_select.png new file mode 100644 index 00000000000..842d690f1d7 Binary files /dev/null and b/data/themes/classic/edit_select.png differ diff --git a/data/themes/classic/edit_undo.png b/data/themes/classic/edit_undo.png new file mode 100644 index 00000000000..57abbe17da3 Binary files /dev/null and b/data/themes/classic/edit_undo.png differ diff --git a/data/themes/classic/effect_plugin.png b/data/themes/classic/effect_plugin.png new file mode 100644 index 00000000000..567bc31ae52 Binary files /dev/null and b/data/themes/classic/effect_plugin.png differ diff --git a/data/themes/classic/envelope_graph.png b/data/themes/classic/envelope_graph.png new file mode 100644 index 00000000000..c6f904103e8 Binary files /dev/null and b/data/themes/classic/envelope_graph.png differ diff --git a/data/themes/classic/error.png b/data/themes/classic/error.png new file mode 100644 index 00000000000..5492295e76c Binary files /dev/null and b/data/themes/classic/error.png differ diff --git a/data/themes/classic/exit.png b/data/themes/classic/exit.png new file mode 100644 index 00000000000..ed5f8b2515e Binary files /dev/null and b/data/themes/classic/exit.png differ diff --git a/data/themes/classic/exp_wave_active.png b/data/themes/classic/exp_wave_active.png new file mode 100644 index 00000000000..22682a150a8 Binary files /dev/null and b/data/themes/classic/exp_wave_active.png differ diff --git a/data/themes/classic/exp_wave_inactive.png b/data/themes/classic/exp_wave_inactive.png new file mode 100644 index 00000000000..132e6f7db96 Binary files /dev/null and b/data/themes/classic/exp_wave_inactive.png differ diff --git a/data/themes/classic/factory_files.png b/data/themes/classic/factory_files.png new file mode 100644 index 00000000000..995bb19d508 Binary files /dev/null and b/data/themes/classic/factory_files.png differ diff --git a/data/themes/classic/fader_background.png b/data/themes/classic/fader_background.png new file mode 100644 index 00000000000..682ff4c9281 Binary files /dev/null and b/data/themes/classic/fader_background.png differ diff --git a/data/themes/classic/fader_knob.png b/data/themes/classic/fader_knob.png new file mode 100644 index 00000000000..93daf87fcc2 Binary files /dev/null and b/data/themes/classic/fader_knob.png differ diff --git a/data/themes/classic/fader_leds.png b/data/themes/classic/fader_leds.png new file mode 100644 index 00000000000..6c673cf36d1 Binary files /dev/null and b/data/themes/classic/fader_leds.png differ diff --git a/data/themes/classic/filter_2lp.png b/data/themes/classic/filter_2lp.png new file mode 100644 index 00000000000..3e98a3c3712 Binary files /dev/null and b/data/themes/classic/filter_2lp.png differ diff --git a/data/themes/classic/filter_ap.png b/data/themes/classic/filter_ap.png new file mode 100644 index 00000000000..b7c5230d5c7 Binary files /dev/null and b/data/themes/classic/filter_ap.png differ diff --git a/data/themes/classic/filter_bp.png b/data/themes/classic/filter_bp.png new file mode 100644 index 00000000000..f16c7d92465 Binary files /dev/null and b/data/themes/classic/filter_bp.png differ diff --git a/data/themes/classic/filter_hp.png b/data/themes/classic/filter_hp.png new file mode 100644 index 00000000000..845573b308e Binary files /dev/null and b/data/themes/classic/filter_hp.png differ diff --git a/data/themes/classic/filter_lp.png b/data/themes/classic/filter_lp.png new file mode 100644 index 00000000000..4f657ac53ee Binary files /dev/null and b/data/themes/classic/filter_lp.png differ diff --git a/data/themes/classic/filter_notch.png b/data/themes/classic/filter_notch.png new file mode 100644 index 00000000000..44e1d718b65 Binary files /dev/null and b/data/themes/classic/filter_notch.png differ diff --git a/data/themes/classic/flip_x.png b/data/themes/classic/flip_x.png new file mode 100644 index 00000000000..1f21ad5bbea Binary files /dev/null and b/data/themes/classic/flip_x.png differ diff --git a/data/themes/classic/flip_y.png b/data/themes/classic/flip_y.png new file mode 100644 index 00000000000..dbc57a70fb2 Binary files /dev/null and b/data/themes/classic/flip_y.png differ diff --git a/data/themes/classic/folder.png b/data/themes/classic/folder.png new file mode 100644 index 00000000000..ec0cecdaec6 Binary files /dev/null and b/data/themes/classic/folder.png differ diff --git a/data/themes/classic/folder_locked.png b/data/themes/classic/folder_locked.png new file mode 100644 index 00000000000..d3e18e50bd3 Binary files /dev/null and b/data/themes/classic/folder_locked.png differ diff --git a/data/themes/classic/folder_opened.png b/data/themes/classic/folder_opened.png new file mode 100644 index 00000000000..b7b03bb3cd8 Binary files /dev/null and b/data/themes/classic/folder_opened.png differ diff --git a/data/themes/default/freeze.png b/data/themes/classic/freeze.png similarity index 100% rename from data/themes/default/freeze.png rename to data/themes/classic/freeze.png diff --git a/data/themes/default/frozen.png b/data/themes/classic/frozen.png similarity index 100% rename from data/themes/default/frozen.png rename to data/themes/classic/frozen.png diff --git a/data/themes/classic/fx_mixer.png b/data/themes/classic/fx_mixer.png new file mode 100644 index 00000000000..f26d53bd97d Binary files /dev/null and b/data/themes/classic/fx_mixer.png differ diff --git a/data/themes/classic/hand.png b/data/themes/classic/hand.png new file mode 100644 index 00000000000..5fad2852def Binary files /dev/null and b/data/themes/classic/hand.png differ diff --git a/data/themes/classic/help.png b/data/themes/classic/help.png new file mode 100644 index 00000000000..f38f9a76bc2 Binary files /dev/null and b/data/themes/classic/help.png differ diff --git a/data/themes/classic/hint.png b/data/themes/classic/hint.png new file mode 100644 index 00000000000..b9a171b7089 Binary files /dev/null and b/data/themes/classic/hint.png differ diff --git a/data/themes/classic/home.png b/data/themes/classic/home.png new file mode 100644 index 00000000000..84051dbb6e8 Binary files /dev/null and b/data/themes/classic/home.png differ diff --git a/data/themes/classic/hq_mode.png b/data/themes/classic/hq_mode.png new file mode 100644 index 00000000000..ced82b2ba2b Binary files /dev/null and b/data/themes/classic/hq_mode.png differ diff --git a/data/themes/classic/icon.png b/data/themes/classic/icon.png new file mode 100644 index 00000000000..ae9fe6a2a9f Binary files /dev/null and b/data/themes/classic/icon.png differ diff --git a/data/themes/classic/instrument_track.png b/data/themes/classic/instrument_track.png new file mode 100644 index 00000000000..39dcf115bc7 Binary files /dev/null and b/data/themes/classic/instrument_track.png differ diff --git a/data/themes/classic/keep_stop_position.png b/data/themes/classic/keep_stop_position.png new file mode 100644 index 00000000000..561fead2505 Binary files /dev/null and b/data/themes/classic/keep_stop_position.png differ diff --git a/data/themes/classic/knob01.png b/data/themes/classic/knob01.png new file mode 100644 index 00000000000..b19b2529c3c Binary files /dev/null and b/data/themes/classic/knob01.png differ diff --git a/data/themes/classic/knob02.png b/data/themes/classic/knob02.png new file mode 100644 index 00000000000..c4e84a31412 Binary files /dev/null and b/data/themes/classic/knob02.png differ diff --git a/data/themes/classic/knob03.png b/data/themes/classic/knob03.png new file mode 100644 index 00000000000..d620272bf7c Binary files /dev/null and b/data/themes/classic/knob03.png differ diff --git a/data/themes/classic/knob05.png b/data/themes/classic/knob05.png new file mode 100644 index 00000000000..7b98f097d93 Binary files /dev/null and b/data/themes/classic/knob05.png differ diff --git a/data/themes/classic/lcd_19green.png b/data/themes/classic/lcd_19green.png new file mode 100644 index 00000000000..a154f40e9f9 Binary files /dev/null and b/data/themes/classic/lcd_19green.png differ diff --git a/data/themes/classic/lcd_19red.png b/data/themes/classic/lcd_19red.png new file mode 100644 index 00000000000..3238cc3eb60 Binary files /dev/null and b/data/themes/classic/lcd_19red.png differ diff --git a/data/themes/classic/lcd_21pink.png b/data/themes/classic/lcd_21pink.png new file mode 100644 index 00000000000..2f4c360daae Binary files /dev/null and b/data/themes/classic/lcd_21pink.png differ diff --git a/data/themes/classic/led_green.png b/data/themes/classic/led_green.png new file mode 100644 index 00000000000..a326b292859 Binary files /dev/null and b/data/themes/classic/led_green.png differ diff --git a/data/themes/classic/led_off.png b/data/themes/classic/led_off.png new file mode 100644 index 00000000000..1b564c85260 Binary files /dev/null and b/data/themes/classic/led_off.png differ diff --git a/data/themes/classic/led_red.png b/data/themes/classic/led_red.png new file mode 100644 index 00000000000..f48ac485081 Binary files /dev/null and b/data/themes/classic/led_red.png differ diff --git a/data/themes/classic/led_yellow.png b/data/themes/classic/led_yellow.png new file mode 100644 index 00000000000..7fe385b423f Binary files /dev/null and b/data/themes/classic/led_yellow.png differ diff --git a/data/themes/classic/lfo_controller_artwork.png b/data/themes/classic/lfo_controller_artwork.png new file mode 100644 index 00000000000..f1ddacec078 Binary files /dev/null and b/data/themes/classic/lfo_controller_artwork.png differ diff --git a/data/themes/classic/lfo_d100_active.png b/data/themes/classic/lfo_d100_active.png new file mode 100644 index 00000000000..bb966c57997 Binary files /dev/null and b/data/themes/classic/lfo_d100_active.png differ diff --git a/data/themes/classic/lfo_d100_inactive.png b/data/themes/classic/lfo_d100_inactive.png new file mode 100644 index 00000000000..239be1e0068 Binary files /dev/null and b/data/themes/classic/lfo_d100_inactive.png differ diff --git a/data/themes/classic/lfo_graph.png b/data/themes/classic/lfo_graph.png new file mode 100644 index 00000000000..aa8faf5a0b2 Binary files /dev/null and b/data/themes/classic/lfo_graph.png differ diff --git a/data/themes/classic/lfo_x100_active.png b/data/themes/classic/lfo_x100_active.png new file mode 100644 index 00000000000..cb563f432ed Binary files /dev/null and b/data/themes/classic/lfo_x100_active.png differ diff --git a/data/themes/classic/lfo_x100_inactive.png b/data/themes/classic/lfo_x100_inactive.png new file mode 100644 index 00000000000..e0058926e1b Binary files /dev/null and b/data/themes/classic/lfo_x100_inactive.png differ diff --git a/data/themes/classic/lfo_x1_active.png b/data/themes/classic/lfo_x1_active.png new file mode 100644 index 00000000000..2c54a6ab1d7 Binary files /dev/null and b/data/themes/classic/lfo_x1_active.png differ diff --git a/data/themes/classic/lfo_x1_inactive.png b/data/themes/classic/lfo_x1_inactive.png new file mode 100644 index 00000000000..1947a4c932c Binary files /dev/null and b/data/themes/classic/lfo_x1_inactive.png differ diff --git a/data/themes/classic/loop_points_off.png b/data/themes/classic/loop_points_off.png new file mode 100644 index 00000000000..924c487e879 Binary files /dev/null and b/data/themes/classic/loop_points_off.png differ diff --git a/data/themes/classic/loop_points_on.png b/data/themes/classic/loop_points_on.png new file mode 100644 index 00000000000..1bbacf26078 Binary files /dev/null and b/data/themes/classic/loop_points_on.png differ diff --git a/data/themes/classic/main_slider.png b/data/themes/classic/main_slider.png new file mode 100644 index 00000000000..6f7b990a411 Binary files /dev/null and b/data/themes/classic/main_slider.png differ diff --git a/data/themes/classic/master_pitch.png b/data/themes/classic/master_pitch.png new file mode 100644 index 00000000000..45e7ae1077d Binary files /dev/null and b/data/themes/classic/master_pitch.png differ diff --git a/data/themes/classic/master_volume.png b/data/themes/classic/master_volume.png new file mode 100644 index 00000000000..9b486b2906f Binary files /dev/null and b/data/themes/classic/master_volume.png differ diff --git a/data/themes/classic/maximize.png b/data/themes/classic/maximize.png new file mode 100644 index 00000000000..1cb4186241a Binary files /dev/null and b/data/themes/classic/maximize.png differ diff --git a/data/themes/classic/metronome.png b/data/themes/classic/metronome.png new file mode 100644 index 00000000000..e20815a213d Binary files /dev/null and b/data/themes/classic/metronome.png differ diff --git a/data/themes/classic/midi_file.png b/data/themes/classic/midi_file.png new file mode 100644 index 00000000000..910bdc7505f Binary files /dev/null and b/data/themes/classic/midi_file.png differ diff --git a/data/themes/classic/minimize.png b/data/themes/classic/minimize.png new file mode 100644 index 00000000000..33bb26378ea Binary files /dev/null and b/data/themes/classic/minimize.png differ diff --git a/data/themes/classic/mixer_send_off.png b/data/themes/classic/mixer_send_off.png new file mode 100644 index 00000000000..3033c4962ac Binary files /dev/null and b/data/themes/classic/mixer_send_off.png differ diff --git a/data/themes/classic/mixer_send_on.png b/data/themes/classic/mixer_send_on.png new file mode 100644 index 00000000000..776398e9fc3 Binary files /dev/null and b/data/themes/classic/mixer_send_on.png differ diff --git a/data/themes/classic/moog_saw_wave_active.png b/data/themes/classic/moog_saw_wave_active.png new file mode 100644 index 00000000000..f6230f6d40b Binary files /dev/null and b/data/themes/classic/moog_saw_wave_active.png differ diff --git a/data/themes/classic/moog_saw_wave_inactive.png b/data/themes/classic/moog_saw_wave_inactive.png new file mode 100644 index 00000000000..c77d73a0e15 Binary files /dev/null and b/data/themes/classic/moog_saw_wave_inactive.png differ diff --git a/data/themes/classic/muted.png b/data/themes/classic/muted.png new file mode 100644 index 00000000000..cedddf7032c Binary files /dev/null and b/data/themes/classic/muted.png differ diff --git a/data/themes/classic/new_channel.png b/data/themes/classic/new_channel.png new file mode 100644 index 00000000000..8a27695df8e Binary files /dev/null and b/data/themes/classic/new_channel.png differ diff --git a/data/themes/classic/note.png b/data/themes/classic/note.png new file mode 100644 index 00000000000..a2f7a026211 Binary files /dev/null and b/data/themes/classic/note.png differ diff --git a/data/themes/classic/note_double_whole.png b/data/themes/classic/note_double_whole.png new file mode 100644 index 00000000000..f55150f462c Binary files /dev/null and b/data/themes/classic/note_double_whole.png differ diff --git a/data/themes/classic/note_eighth.png b/data/themes/classic/note_eighth.png new file mode 100644 index 00000000000..7d7b772bb94 Binary files /dev/null and b/data/themes/classic/note_eighth.png differ diff --git a/data/themes/classic/note_half.png b/data/themes/classic/note_half.png new file mode 100644 index 00000000000..46e9d461c67 Binary files /dev/null and b/data/themes/classic/note_half.png differ diff --git a/data/themes/classic/note_none.png b/data/themes/classic/note_none.png new file mode 100644 index 00000000000..8a82a4ae627 Binary files /dev/null and b/data/themes/classic/note_none.png differ diff --git a/data/themes/classic/note_quarter.png b/data/themes/classic/note_quarter.png new file mode 100644 index 00000000000..44fb49e6ca4 Binary files /dev/null and b/data/themes/classic/note_quarter.png differ diff --git a/data/themes/classic/note_sixteenth.png b/data/themes/classic/note_sixteenth.png new file mode 100644 index 00000000000..a41d39a18d0 Binary files /dev/null and b/data/themes/classic/note_sixteenth.png differ diff --git a/data/themes/classic/note_thirtysecond.png b/data/themes/classic/note_thirtysecond.png new file mode 100644 index 00000000000..4b3e2e956ed Binary files /dev/null and b/data/themes/classic/note_thirtysecond.png differ diff --git a/data/themes/classic/note_tripleteighth.png b/data/themes/classic/note_tripleteighth.png new file mode 100644 index 00000000000..35ed0f61631 Binary files /dev/null and b/data/themes/classic/note_tripleteighth.png differ diff --git a/data/themes/classic/note_triplethalf.png b/data/themes/classic/note_triplethalf.png new file mode 100644 index 00000000000..73aa6e24ba7 Binary files /dev/null and b/data/themes/classic/note_triplethalf.png differ diff --git a/data/themes/classic/note_tripletquarter.png b/data/themes/classic/note_tripletquarter.png new file mode 100644 index 00000000000..7ddc3e2926e Binary files /dev/null and b/data/themes/classic/note_tripletquarter.png differ diff --git a/data/themes/classic/note_tripletsixteenth.png b/data/themes/classic/note_tripletsixteenth.png new file mode 100644 index 00000000000..074805fc50a Binary files /dev/null and b/data/themes/classic/note_tripletsixteenth.png differ diff --git a/data/themes/classic/note_tripletthirtysecond.png b/data/themes/classic/note_tripletthirtysecond.png new file mode 100644 index 00000000000..aa89e6f7b83 Binary files /dev/null and b/data/themes/classic/note_tripletthirtysecond.png differ diff --git a/data/themes/classic/note_whole.png b/data/themes/classic/note_whole.png new file mode 100644 index 00000000000..a9b8af4a08c Binary files /dev/null and b/data/themes/classic/note_whole.png differ diff --git a/data/themes/classic/output_graph.png b/data/themes/classic/output_graph.png new file mode 100644 index 00000000000..46ec86d4478 Binary files /dev/null and b/data/themes/classic/output_graph.png differ diff --git a/data/themes/classic/pat_rec.png b/data/themes/classic/pat_rec.png new file mode 100644 index 00000000000..5c0ed94555f Binary files /dev/null and b/data/themes/classic/pat_rec.png differ diff --git a/data/themes/classic/pause.png b/data/themes/classic/pause.png new file mode 100644 index 00000000000..719f67675b3 Binary files /dev/null and b/data/themes/classic/pause.png differ diff --git a/data/themes/classic/piano.png b/data/themes/classic/piano.png new file mode 100644 index 00000000000..22523893e25 Binary files /dev/null and b/data/themes/classic/piano.png differ diff --git a/data/themes/classic/play.png b/data/themes/classic/play.png new file mode 100644 index 00000000000..81d25ba4a92 Binary files /dev/null and b/data/themes/classic/play.png differ diff --git a/data/themes/classic/playpos_marker.png b/data/themes/classic/playpos_marker.png new file mode 100644 index 00000000000..fb4befbb07b Binary files /dev/null and b/data/themes/classic/playpos_marker.png differ diff --git a/data/themes/classic/plugins.png b/data/themes/classic/plugins.png new file mode 100644 index 00000000000..5ba9bc3c90e Binary files /dev/null and b/data/themes/classic/plugins.png differ diff --git a/data/themes/classic/ports.png b/data/themes/classic/ports.png new file mode 100644 index 00000000000..de903626210 Binary files /dev/null and b/data/themes/classic/ports.png differ diff --git a/data/themes/classic/pr_black_key.png b/data/themes/classic/pr_black_key.png new file mode 100644 index 00000000000..7d9c6ea9d02 Binary files /dev/null and b/data/themes/classic/pr_black_key.png differ diff --git a/data/themes/classic/pr_black_key_pressed.png b/data/themes/classic/pr_black_key_pressed.png new file mode 100644 index 00000000000..afbf3c4d97a Binary files /dev/null and b/data/themes/classic/pr_black_key_pressed.png differ diff --git a/data/themes/classic/pr_white_key_big.png b/data/themes/classic/pr_white_key_big.png new file mode 100644 index 00000000000..724e82b263d Binary files /dev/null and b/data/themes/classic/pr_white_key_big.png differ diff --git a/data/themes/classic/pr_white_key_big_pressed.png b/data/themes/classic/pr_white_key_big_pressed.png new file mode 100644 index 00000000000..37d62e5fb55 Binary files /dev/null and b/data/themes/classic/pr_white_key_big_pressed.png differ diff --git a/data/themes/classic/pr_white_key_small.png b/data/themes/classic/pr_white_key_small.png new file mode 100644 index 00000000000..fa07d6a9d00 Binary files /dev/null and b/data/themes/classic/pr_white_key_small.png differ diff --git a/data/themes/classic/pr_white_key_small_pressed.png b/data/themes/classic/pr_white_key_small_pressed.png new file mode 100644 index 00000000000..93fe7ceb4b7 Binary files /dev/null and b/data/themes/classic/pr_white_key_small_pressed.png differ diff --git a/data/themes/classic/preset_file.png b/data/themes/classic/preset_file.png new file mode 100644 index 00000000000..53a0d1159ec Binary files /dev/null and b/data/themes/classic/preset_file.png differ diff --git a/data/themes/classic/progression_cubic_hermite.png b/data/themes/classic/progression_cubic_hermite.png new file mode 100644 index 00000000000..1010f873524 Binary files /dev/null and b/data/themes/classic/progression_cubic_hermite.png differ diff --git a/data/themes/classic/progression_discrete.png b/data/themes/classic/progression_discrete.png new file mode 100644 index 00000000000..5faf0e4aa5f Binary files /dev/null and b/data/themes/classic/progression_discrete.png differ diff --git a/data/themes/classic/progression_linear.png b/data/themes/classic/progression_linear.png new file mode 100644 index 00000000000..d6193e4f6b6 Binary files /dev/null and b/data/themes/classic/progression_linear.png differ diff --git a/data/themes/classic/project_export.png b/data/themes/classic/project_export.png new file mode 100644 index 00000000000..13c0b9d08ae Binary files /dev/null and b/data/themes/classic/project_export.png differ diff --git a/data/themes/classic/project_file.png b/data/themes/classic/project_file.png new file mode 100644 index 00000000000..724ab5cfb23 Binary files /dev/null and b/data/themes/classic/project_file.png differ diff --git a/data/themes/classic/project_import.png b/data/themes/classic/project_import.png new file mode 100644 index 00000000000..6680f2416ae Binary files /dev/null and b/data/themes/classic/project_import.png differ diff --git a/data/themes/classic/project_new.png b/data/themes/classic/project_new.png new file mode 100644 index 00000000000..489548b6bc1 Binary files /dev/null and b/data/themes/classic/project_new.png differ diff --git a/data/themes/classic/project_new_from_template.png b/data/themes/classic/project_new_from_template.png new file mode 100644 index 00000000000..1353505b9b4 Binary files /dev/null and b/data/themes/classic/project_new_from_template.png differ diff --git a/data/themes/classic/project_notes.png b/data/themes/classic/project_notes.png new file mode 100644 index 00000000000..6991b3a7ea4 Binary files /dev/null and b/data/themes/classic/project_notes.png differ diff --git a/data/themes/classic/project_open.png b/data/themes/classic/project_open.png new file mode 100644 index 00000000000..7188b389496 Binary files /dev/null and b/data/themes/classic/project_open.png differ diff --git a/data/themes/default/project_open_down.png b/data/themes/classic/project_open_down.png similarity index 100% rename from data/themes/default/project_open_down.png rename to data/themes/classic/project_open_down.png diff --git a/data/themes/classic/project_open_recent.png b/data/themes/classic/project_open_recent.png new file mode 100644 index 00000000000..4e57b3b827f Binary files /dev/null and b/data/themes/classic/project_open_recent.png differ diff --git a/data/themes/classic/project_save.png b/data/themes/classic/project_save.png new file mode 100644 index 00000000000..83c7fd7bd45 Binary files /dev/null and b/data/themes/classic/project_save.png differ diff --git a/data/themes/classic/project_saveas.png b/data/themes/classic/project_saveas.png new file mode 100644 index 00000000000..83c7fd7bd45 Binary files /dev/null and b/data/themes/classic/project_saveas.png differ diff --git a/data/themes/classic/quantize.png b/data/themes/classic/quantize.png new file mode 100644 index 00000000000..aae2654ac43 Binary files /dev/null and b/data/themes/classic/quantize.png differ diff --git a/data/themes/classic/random_wave_active.png b/data/themes/classic/random_wave_active.png new file mode 100644 index 00000000000..b65a9a0c3aa Binary files /dev/null and b/data/themes/classic/random_wave_active.png differ diff --git a/data/themes/classic/random_wave_inactive.png b/data/themes/classic/random_wave_inactive.png new file mode 100644 index 00000000000..47184549a45 Binary files /dev/null and b/data/themes/classic/random_wave_inactive.png differ diff --git a/data/themes/classic/receive_bg_arrow.png b/data/themes/classic/receive_bg_arrow.png new file mode 100644 index 00000000000..f456176e0f1 Binary files /dev/null and b/data/themes/classic/receive_bg_arrow.png differ diff --git a/data/themes/classic/record.png b/data/themes/classic/record.png new file mode 100644 index 00000000000..9c478745bf8 Binary files /dev/null and b/data/themes/classic/record.png differ diff --git a/data/themes/classic/record_accompany.png b/data/themes/classic/record_accompany.png new file mode 100644 index 00000000000..005a1c18c82 Binary files /dev/null and b/data/themes/classic/record_accompany.png differ diff --git a/data/themes/classic/reload.png b/data/themes/classic/reload.png new file mode 100644 index 00000000000..c92882ecdc5 Binary files /dev/null and b/data/themes/classic/reload.png differ diff --git a/data/themes/classic/restore.png b/data/themes/classic/restore.png new file mode 100644 index 00000000000..4492e17a643 Binary files /dev/null and b/data/themes/classic/restore.png differ diff --git a/data/themes/classic/round_square_wave_active.png b/data/themes/classic/round_square_wave_active.png new file mode 100644 index 00000000000..0dfe2093ad2 Binary files /dev/null and b/data/themes/classic/round_square_wave_active.png differ diff --git a/data/themes/classic/round_square_wave_inactive.png b/data/themes/classic/round_square_wave_inactive.png new file mode 100644 index 00000000000..3e1f9c0b0e8 Binary files /dev/null and b/data/themes/classic/round_square_wave_inactive.png differ diff --git a/data/themes/classic/sample_file.png b/data/themes/classic/sample_file.png new file mode 100644 index 00000000000..f2ed8d46e02 Binary files /dev/null and b/data/themes/classic/sample_file.png differ diff --git a/data/themes/classic/sample_track.png b/data/themes/classic/sample_track.png new file mode 100644 index 00000000000..d459e7fa518 Binary files /dev/null and b/data/themes/classic/sample_track.png differ diff --git a/data/themes/classic/saw_wave_active.png b/data/themes/classic/saw_wave_active.png new file mode 100644 index 00000000000..62bffcc336f Binary files /dev/null and b/data/themes/classic/saw_wave_active.png differ diff --git a/data/themes/classic/saw_wave_inactive.png b/data/themes/classic/saw_wave_inactive.png new file mode 100644 index 00000000000..6fc3a816b55 Binary files /dev/null and b/data/themes/classic/saw_wave_inactive.png differ diff --git a/data/themes/classic/sbarrow_down.png b/data/themes/classic/sbarrow_down.png new file mode 100644 index 00000000000..56fa504c143 Binary files /dev/null and b/data/themes/classic/sbarrow_down.png differ diff --git a/data/themes/classic/sbarrow_down_d.png b/data/themes/classic/sbarrow_down_d.png new file mode 100644 index 00000000000..f8c54f32f50 Binary files /dev/null and b/data/themes/classic/sbarrow_down_d.png differ diff --git a/data/themes/classic/sbarrow_left.png b/data/themes/classic/sbarrow_left.png new file mode 100644 index 00000000000..d50031e30b0 Binary files /dev/null and b/data/themes/classic/sbarrow_left.png differ diff --git a/data/themes/classic/sbarrow_left_d.png b/data/themes/classic/sbarrow_left_d.png new file mode 100644 index 00000000000..fe246df0523 Binary files /dev/null and b/data/themes/classic/sbarrow_left_d.png differ diff --git a/data/themes/classic/sbarrow_right.png b/data/themes/classic/sbarrow_right.png new file mode 100644 index 00000000000..2112ec1da82 Binary files /dev/null and b/data/themes/classic/sbarrow_right.png differ diff --git a/data/themes/classic/sbarrow_right_d.png b/data/themes/classic/sbarrow_right_d.png new file mode 100644 index 00000000000..39b0220cc00 Binary files /dev/null and b/data/themes/classic/sbarrow_right_d.png differ diff --git a/data/themes/classic/sbarrow_up.png b/data/themes/classic/sbarrow_up.png new file mode 100644 index 00000000000..2b61c257ca5 Binary files /dev/null and b/data/themes/classic/sbarrow_up.png differ diff --git a/data/themes/classic/sbarrow_up_d.png b/data/themes/classic/sbarrow_up_d.png new file mode 100644 index 00000000000..f80d6b39bae Binary files /dev/null and b/data/themes/classic/sbarrow_up_d.png differ diff --git a/data/themes/classic/scale.png b/data/themes/classic/scale.png new file mode 100644 index 00000000000..cde26a70153 Binary files /dev/null and b/data/themes/classic/scale.png differ diff --git a/data/themes/classic/send_bg_arrow.png b/data/themes/classic/send_bg_arrow.png new file mode 100644 index 00000000000..8c4bfcf93f3 Binary files /dev/null and b/data/themes/classic/send_bg_arrow.png differ diff --git a/data/themes/classic/setup_audio.png b/data/themes/classic/setup_audio.png new file mode 100644 index 00000000000..c928c72ef7c Binary files /dev/null and b/data/themes/classic/setup_audio.png differ diff --git a/data/themes/classic/setup_directories.png b/data/themes/classic/setup_directories.png new file mode 100644 index 00000000000..82a467fbd2e Binary files /dev/null and b/data/themes/classic/setup_directories.png differ diff --git a/data/themes/classic/setup_general.png b/data/themes/classic/setup_general.png new file mode 100644 index 00000000000..43ae1b19732 Binary files /dev/null and b/data/themes/classic/setup_general.png differ diff --git a/data/themes/classic/setup_midi.png b/data/themes/classic/setup_midi.png new file mode 100644 index 00000000000..80cb45e01db Binary files /dev/null and b/data/themes/classic/setup_midi.png differ diff --git a/data/themes/classic/setup_performance.png b/data/themes/classic/setup_performance.png new file mode 100644 index 00000000000..6233e742e4a Binary files /dev/null and b/data/themes/classic/setup_performance.png differ diff --git a/data/themes/classic/sin_wave_active.png b/data/themes/classic/sin_wave_active.png new file mode 100644 index 00000000000..ec7bf0a7d01 Binary files /dev/null and b/data/themes/classic/sin_wave_active.png differ diff --git a/data/themes/classic/sin_wave_inactive.png b/data/themes/classic/sin_wave_inactive.png new file mode 100644 index 00000000000..6d6e4fa80e7 Binary files /dev/null and b/data/themes/classic/sin_wave_inactive.png differ diff --git a/data/themes/classic/songeditor.png b/data/themes/classic/songeditor.png new file mode 100644 index 00000000000..ecfb65b24ca Binary files /dev/null and b/data/themes/classic/songeditor.png differ diff --git a/data/themes/classic/soundfont_file.png b/data/themes/classic/soundfont_file.png new file mode 100644 index 00000000000..774c82498d8 Binary files /dev/null and b/data/themes/classic/soundfont_file.png differ diff --git a/data/themes/classic/splash.png b/data/themes/classic/splash.png new file mode 100644 index 00000000000..a3b58d5f2cb Binary files /dev/null and b/data/themes/classic/splash.png differ diff --git a/data/themes/classic/square_wave_active.png b/data/themes/classic/square_wave_active.png new file mode 100644 index 00000000000..487b5aff74f Binary files /dev/null and b/data/themes/classic/square_wave_active.png differ diff --git a/data/themes/classic/square_wave_inactive.png b/data/themes/classic/square_wave_inactive.png new file mode 100644 index 00000000000..435b33c6e9b Binary files /dev/null and b/data/themes/classic/square_wave_inactive.png differ diff --git a/data/themes/classic/step_btn_add.png b/data/themes/classic/step_btn_add.png new file mode 100644 index 00000000000..60fbf994416 Binary files /dev/null and b/data/themes/classic/step_btn_add.png differ diff --git a/data/themes/classic/step_btn_duplicate.png b/data/themes/classic/step_btn_duplicate.png new file mode 100644 index 00000000000..af9521fad20 Binary files /dev/null and b/data/themes/classic/step_btn_duplicate.png differ diff --git a/data/themes/classic/step_btn_off.png b/data/themes/classic/step_btn_off.png new file mode 100644 index 00000000000..5e40d3e5a2f Binary files /dev/null and b/data/themes/classic/step_btn_off.png differ diff --git a/data/themes/classic/step_btn_off_light.png b/data/themes/classic/step_btn_off_light.png new file mode 100644 index 00000000000..f8f64bea851 Binary files /dev/null and b/data/themes/classic/step_btn_off_light.png differ diff --git a/data/themes/default/step_btn_on.png b/data/themes/classic/step_btn_on.png similarity index 100% rename from data/themes/default/step_btn_on.png rename to data/themes/classic/step_btn_on.png diff --git a/data/themes/classic/step_btn_on_100.png b/data/themes/classic/step_btn_on_100.png new file mode 100644 index 00000000000..faa9b462f63 Binary files /dev/null and b/data/themes/classic/step_btn_on_100.png differ diff --git a/data/themes/classic/step_btn_on_yellow.png b/data/themes/classic/step_btn_on_yellow.png new file mode 100644 index 00000000000..b69defeb97f Binary files /dev/null and b/data/themes/classic/step_btn_on_yellow.png differ diff --git a/data/themes/classic/step_btn_remove.png b/data/themes/classic/step_btn_remove.png new file mode 100644 index 00000000000..69383af18c5 Binary files /dev/null and b/data/themes/classic/step_btn_remove.png differ diff --git a/data/themes/classic/stepper-down-press.png b/data/themes/classic/stepper-down-press.png new file mode 100644 index 00000000000..c1cec54a3a7 Binary files /dev/null and b/data/themes/classic/stepper-down-press.png differ diff --git a/data/themes/classic/stepper-down.png b/data/themes/classic/stepper-down.png new file mode 100644 index 00000000000..b7b8e2f1a3b Binary files /dev/null and b/data/themes/classic/stepper-down.png differ diff --git a/data/themes/classic/stepper-left-press.png b/data/themes/classic/stepper-left-press.png new file mode 100644 index 00000000000..4de798f7c59 Binary files /dev/null and b/data/themes/classic/stepper-left-press.png differ diff --git a/data/themes/classic/stepper-left.png b/data/themes/classic/stepper-left.png new file mode 100644 index 00000000000..7f2278056f3 Binary files /dev/null and b/data/themes/classic/stepper-left.png differ diff --git a/data/themes/classic/stepper-right-press.png b/data/themes/classic/stepper-right-press.png new file mode 100644 index 00000000000..ad634e175be Binary files /dev/null and b/data/themes/classic/stepper-right-press.png differ diff --git a/data/themes/classic/stepper-right.png b/data/themes/classic/stepper-right.png new file mode 100644 index 00000000000..215e88f6c94 Binary files /dev/null and b/data/themes/classic/stepper-right.png differ diff --git a/data/themes/classic/stepper-up-press.png b/data/themes/classic/stepper-up-press.png new file mode 100644 index 00000000000..99f47711fdc Binary files /dev/null and b/data/themes/classic/stepper-up-press.png differ diff --git a/data/themes/classic/stepper-up.png b/data/themes/classic/stepper-up.png new file mode 100644 index 00000000000..13329133d23 Binary files /dev/null and b/data/themes/classic/stepper-up.png differ diff --git a/data/themes/classic/stop.png b/data/themes/classic/stop.png new file mode 100644 index 00000000000..b589f617842 Binary files /dev/null and b/data/themes/classic/stop.png differ diff --git a/data/themes/classic/style.css b/data/themes/classic/style.css new file mode 100644 index 00000000000..7c62a852a1c --- /dev/null +++ b/data/themes/classic/style.css @@ -0,0 +1,858 @@ +/******************** + * LMMS style sheet * + ********************/ + +/* most foreground text items */ +QLabel, QTreeWidget, QListWidget, QGroupBox, QMenuBar { + color: #e0e0e0; +} + +QMdiArea { + background-image: url(resources:background_artwork.png); +} + +AutomationEditor { + background-color: rgb(0, 0, 0); + color: #e0e0e0; + qproperty-vertexColor: #ff77af; + qproperty-gridColor: #808080; + qproperty-crossColor: rgb( 255, 51, 51 ); + + qproperty-graphColor: qlineargradient(spread:reflect, + x1:0, y1:0, x2:0, y2:1, + stop:0 rgba(153, 175, 255, 250), stop:1 rgba(153, 175, 255, 100)); + qproperty-scaleColor: qlineargradient(spread:reflect, + x1:0, y1:0.5, x2:1, y2:0.5, + stop:0 #333, stop:1 #202020); +} + +/* text box */ + +QLineEdit { + border-radius: 4px; + border: 2px inset rgba(91,101,113,128); + background: #49515b; + color: #e0e0e0; +} + + +QLineEdit:read-only { + border-style: none; + background: transparent; +} + +/* text box when it wants text */ + +QLineEdit:focus { + border: 1px solid rgba(0,0,0, 128); +} + + +QToolTip { + border-radius: 4px; + background: qlineargradient(spread:reflect, x1:0.5, y1:0.5, x2:0.5, y2:0, stop:0 rgba(0, 0, 0, 255), stop:1 rgba(50, 50, 50, 220)); + opacity: 175; + border: 1.0px solid rgba(0,0,0,255); + color: #4afd85; +} + +TextFloat { + border-radius: 4px; + background: qlineargradient(spread:reflect, x1:0.5, y1:0.5, x2:0.5, y2:0, stop:0 rgba(0, 0, 0, 255), stop:1 rgba(50, 50, 50, 220)); + opacity: 175; + border: 1.0px solid rgba(0,0,0,255); + color: #4afd85; +} + + +QMenu { + border:1px solid #747474; + background-color: #c9c9c9; + font-size:11px; +} + +QMenu::separator { + height: 1px; + background: #8d8d8d; +} + +QMenu::item { + color: black; + padding: 2px 35px 2px 23px; + margin: 3px 0px 3px 0px; +} + +QMenu::item:selected { + color: white; + font-weight:bold; + background-color: #747474; +} + +QMenu::item:disabled { + color: #747474; + background-color: #c9c9c9; + font-size:12px; + font-weight: normal; + padding: 4px 32px 4px 20px; +} + +QMenu::icon { + margin: 3px; +} + +QMenu::indicator { + width: 16; + height: 16; + opacity: 0; + background-color: #c9c9c9; +} + +QMenu::indicator:checked { + image: url("resources:apply.png"); +} + +QMenu::indicator:selected { + image: url("resources:apply-selected.png"); + background-color: #747474; +} + +PianoRoll { + background-color: rgb(0, 0, 0); + qproperty-gridColor: rgb( 128, 128, 128 ); + qproperty-noteModeColor: rgb( 255, 255, 255 ); + qproperty-noteColor: rgb( 119, 199, 216 ); + qproperty-noteOpacity: 128; + qproperty-noteBorders: true; /* boolean property, set false to have borderless notes */ + qproperty-selectedNoteColor: rgb( 0, 125, 255 ); + qproperty-barColor: #4afd85; + qproperty-markedSemitoneColor: rgba( 40, 40, 40, 200 ); + /* Text on the white piano keys */ + qproperty-textColor: rgb( 0, 0, 0 ); + qproperty-textColorLight: rgb( 128, 128, 128); + qproperty-textShadow: rgb( 240, 240, 240 ); +} + +/* main toolbar oscilloscope - can have transparent bg now */ + +VisualizationWidget { + background: none; + border: none; +} + +/* main toolbar cpu load widget - this can have transparent bg now */ + +CPULoadWidget { + border: none; + background: url(resources:cpuload_bg.png); +} + +/* scrollbar: trough */ + +QScrollBar:horizontal { + border: 1px solid #131313; + background: rgb( 50,50,50 ); + height: 14px; + margin: 0px 13px; +} +QScrollBar:vertical { + border: 1px solid #131313; + background: rgb( 50,50,50 ); + width: 14px; + margin: 13px 0px; +} + +/* scrollbar: trough clicky things */ + +QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal, +QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical { + background: none; +} + +QScrollBar::add-page:horizontal:pressed, QScrollBar::sub-page:horizontal:pressed, +QScrollBar::add-page:vertical:pressed, QScrollBar::sub-page:vertical:pressed { + background: rgba(0,0,0,50); +} + +/* scrollbar: handles (sliders) */ + +QScrollBar::handle:horizontal { + background: qlineargradient(spread:reflect, + x1:0.5, y1:0, x2:0.5, y2:1, + stop:0 #969696, stop:0.5 #c9c9c9, stop:1 #aaa); + border: 1px outset #888; + border-radius: 2px; + min-width: 24px; +} + +QScrollBar::handle:horizontal:hover { + background: qlineargradient(spread:reflect, + x1:0.5, y1:0, x2:0.5, y2:1, + stop:0 #969696, stop:0.5 #f0f0f0, stop:1 #aaa); +} + +QScrollBar::handle:horizontal:pressed { + background: qlineargradient(spread:reflect, + x1:0.5, y1:0, x2:0.5, y2:1, + stop:0 #747474, stop:1 #c9c9c9); +} + +QScrollBar::handle:vertical { + background: qlineargradient(spread:reflect, + x1:0, y1:0.5, x2:1, y2:0.5, + stop:0 #969696, stop:0.5 #c9c9c9, stop:1 #aaa); + border: 1px outset #888; + border-radius: 2px; + min-height: 24px; +} + +QScrollBar::handle:vertical:hover { + background: qlineargradient(spread:reflect, + x1:0, y1:0.5, x2:1, y2:0.5, + stop:0 #969696, stop:0.5 #f0f0f0, stop:1 #aaa); +} + +QScrollBar::handle:vertical:pressed { + background: qlineargradient(spread:reflect, + x1:0, y1:0.5, x2:1, y2:0.5, + stop:0 #747474, stop:1 #c9c9c9); +} + +QScrollBar::handle:horizontal:disabled, QScrollBar::handle:vertical:disabled { + background: #747474; + border-radius: 1px; + border: 1px solid rgba(0,0,0,32); +} + +/* arrow buttons */ + +QScrollBar::add-line, QScrollBar::sub-line { + background: qradialgradient(cx:0.3, cy:0.3, radius:0.8, fx:0.3, fy:0.3, stop:0 #c9c9c9, stop:1 #969696 ); + border-radius: 1px; + border: 1px solid #131313; + subcontrol-origin: margin; +} + +QScrollBar::add-line:horizontal { subcontrol-position: right; width: 12px;} +QScrollBar::sub-line:horizontal { subcontrol-position: left; width: 12px;} +QScrollBar::add-line:vertical { subcontrol-position: bottom; height: 12px;} +QScrollBar::sub-line:vertical { subcontrol-position: top; height: 12px;} + +QScrollBar::add-line:hover, QScrollBar::sub-line: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 ); +} + +QScrollBar::add-line:pressed, QScrollBar::sub-line:pressed { + background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #969696, stop:0.5 #c9c9c9, stop:1 #969696 ); +} + +QScrollBar::add-line:disabled, QScrollBar::sub-line:disabled { + background: #747474; +} + +/* arrow button arrows */ + +QScrollBar::left-arrow:horizontal, QScrollBar::right-arrow:horizontal, +QScrollBar::up-arrow:vertical, QScrollBar::down-arrow:vertical { + border: none; + background-color: none; + width: 5px; + height: 5px; +} + +QScrollBar::left-arrow:horizontal { background-image: url(resources:sbarrow_left.png);} +QScrollBar::right-arrow:horizontal { background-image: url(resources:sbarrow_right.png);} +QScrollBar::up-arrow:vertical { background-image: url(resources:sbarrow_up.png);} +QScrollBar::down-arrow:vertical { background-image: url(resources:sbarrow_down.png);} +QScrollBar::left-arrow:horizontal:disabled { background-image: url(resources:sbarrow_left_d.png);} +QScrollBar::right-arrow:horizontal:disabled { background-image: url(resources:sbarrow_right_d.png);} +QScrollBar::up-arrow:vertical:disabled { background-image: url(resources:sbarrow_up_d.png);} +QScrollBar::down-arrow:vertical:disabled { background-image: url(resources:sbarrow_down_d.png);} + +/* background for song editor and bb-editor */ + +TrackContainerView QFrame{ + background-color: #49515b; +} + +/* autoscroll, loop, stop behaviour toggle buttons */ + +/* track background colors */ +TrackContentWidget { + qproperty-darkerColor: qlineargradient(x1:0, y1:0, x2:0, y2:1, + stop:0 rgb( 50, 50, 50 ), stop:0.33 rgb( 20, 20, 20 ), stop:1 rgb( 15, 15, 15 ) ); + qproperty-lighterColor: qlineargradient(x1:0, y1:0, x2:0, y2:1, + stop:0 rgb( 50, 50, 50 ), stop:0.33 rgb( 40, 40, 40 ), stop:1 rgb( 30, 30, 30 ) ); + qproperty-gridColor: rgba( 0, 0, 0, 160 ); + qproperty-embossColor: rgba( 140, 140, 140, 64 ); +} + + +/* gear button in tracks */ + +TrackOperationsWidget > 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; +} + +/* about dialog */ +QTabWidget, QTabWidget QWidget { + background: #5b6571; +} + +/* 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:0, y2:1, stop:0 #98a2a7, stop:1 #5b646f); + border: none; + padding: 2px; + spacing: 0; +} + +QToolBar::separator { + border: none; + width: 5px; +} + +/* separate corner rounding for play and stop buttons! */ + +QToolButton#playButton { + border-top-left-radius: 10px 10px; + border-bottom-left-radius: 10px 10px; +} + +QToolButton#stopButton { + border-top-right-radius: 10px 10px; + border-bottom-right-radius: 10px 10px; +} + +/* record and record-accompany can be styled with #recordButton and #recordAccompanyButton respectively */ + +/* all tool buttons */ + +QToolButton { + padding: 1px 1px 1px 1px; + border-radius: 5px; + border: 1px solid rgba(63, 63, 63, 128); + background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #98a2a7, stop:1 #5b646f); + font-size:10px; + color: black; +} + +QToolButton:hover { + background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #c0cdd3, stop:1 #71797d); + color: white; +} + +QToolButton: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; + color: white; +} + +QToolButton: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 ); + padding: 2px 1px 0px 1px; + 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; +} + +/* Instrument plugin list */ + +PluginDescList { + background-color: #5b6571; +} + +PluginDescWidget { + background-color: #e0e0e0; + color: #404040; + border: 1px solid rgb(64, 64, 64); + margin: 0px; +} + +PluginDescWidget:hover { + background-color: #e0e0e0; +} + +/* 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 ); + qproperty-strokeOuterActive: rgb( 0, 0, 0 ); + qproperty-strokeOuterInactive: rgba( 0, 0, 0, 50 ); + qproperty-strokeInnerActive: rgba( 255, 255, 255, 100 ); + qproperty-strokeInnerInactive: rgba( 255, 255, 255, 50 ); +} + +/* persistent peak markers for fx peak meters */ +Fader { + qproperty-peakGreen: rgb( 74, 253, 133); + qproperty-peakRed: rgb( 255, 100, 100); +} + +TimeLineWidget { + /* font-size only supports px and pt. */ + font-size: 7pt; + /* lengths also support em. This will make sure that the height + will always change in the same proportion as the font size + defined above. + If you want a fixed size set min and max to the same value. */ + min-height: 1.5em; + max-height: 1.5em; + + background-color: qlineargradient( x1: 0, y1: 0, x2: 0, y2: 1, + stop: 0 #8796a7, stop: 1.0 #3e454e ); + + qproperty-inactiveLoopColor: rgba( 52, 63, 53, 64 ); + qproperty-inactiveLoopBrush: rgba( 255, 255, 255, 32 ); + qproperty-inactiveLoopInnerColor: rgba( 255, 255, 255, 32 ); + qproperty-activeLoopColor: rgba( 52, 63, 53, 255 ); + qproperty-activeLoopBrush: qlineargradient( x1: 0, y1: 0, x2: 0, y2: 1, + stop: 0 #378d59, stop: 1.0 #297e36 ); + qproperty-activeLoopInnerColor: rgba( 74, 155, 100, 255 ); + qproperty-barLineColor: rgb( 192, 192, 192 ); + qproperty-barNumberColor: rgb( 192, 192, 192 ); +} + +QTreeView { + alternate-background-color: #747474; +} + +TrackContainerView QLabel +{ + background: none; +} + +/* Patterns */ + +/* common pattern colors */ +TrackContentObjectView { + qproperty-mutedColor: rgb( 128, 128, 128 ); + qproperty-mutedBackgroundColor: rgb( 80, 80, 80 ); + qproperty-selectedColor: rgb( 0, 125, 255 ); + qproperty-BBPatternBackground: rgb( 80, 80, 80 ); + qproperty-textColor: rgb( 255, 255, 255 ); + qproperty-textShadowColor: rgb( 0, 0, 0 ); + qproperty-gradient: true; /* boolean property, set true to have a gradient */ +} + +/* instrument pattern */ +PatternView { + background-color: rgb( 119, 199, 216 ); + color: rgb( 187, 227, 236 ); +} + +/* sample track pattern */ +SampleTCOView { + background-color: rgb( 74, 253, 133 ); + color: rgb( 187, 227, 236 ); +} + +/* automation pattern */ +AutomationPatternView { + background-color: #99afff; + color: rgb( 204, 215, 255 ); +} + +/* bb-pattern */ +BBTCOView { + background-color: rgb( 128, 182, 175 ); /* default colour for bb-tracks */ +} + +/* Subwindows in MDI-Area */ +SubWindow { + color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, + stop: 0 #4b525c, stop: 1.0 #31363d); + qproperty-activeColor: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, + stop: 0 #33383e, stop: 1.0 #1a1c20); + qproperty-textShadowColor: rgb( 0, 0, 0 ); + qproperty-borderColor: rgb( 0, 0, 0 ); +} + +/* Subwindow title text */ +SubWindow > QLabel { + color: rgb( 255, 255, 255 ); + font-size: 12px; + font-style: normal; +} + +/* SubWindow titlebar button */ +SubWindow > QPushButton { + background-color: rgba( 255, 255, 255, 0% ); + border-width: 0px; + border-color: none; + border-style: none; +} + +SubWindow > QPushButton:hover{ + background-color: rgba( 255, 255, 255, 15% ); + border-width: 1px; + border-color: rgba( 0, 0, 0, 20% ); + border-style: solid; + border-radius: 2px; +} + + +/* Plugins */ + +TripleOscillatorView Knob { + color: rgb(255, 255, 255); + qproperty-outerColor: rgb(255, 255, 255); + 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; +} + diff --git a/data/themes/classic/tempo_sync.png b/data/themes/classic/tempo_sync.png new file mode 100644 index 00000000000..4cd3f082a85 Binary files /dev/null and b/data/themes/classic/tempo_sync.png differ diff --git a/data/themes/classic/text_block.png b/data/themes/classic/text_block.png new file mode 100644 index 00000000000..e69a9f24688 Binary files /dev/null and b/data/themes/classic/text_block.png differ diff --git a/data/themes/classic/text_bold.png b/data/themes/classic/text_bold.png new file mode 100644 index 00000000000..9abb008bc46 Binary files /dev/null and b/data/themes/classic/text_bold.png differ diff --git a/data/themes/classic/text_center.png b/data/themes/classic/text_center.png new file mode 100644 index 00000000000..eb8428fd37f Binary files /dev/null and b/data/themes/classic/text_center.png differ diff --git a/data/themes/classic/text_italic.png b/data/themes/classic/text_italic.png new file mode 100644 index 00000000000..f2d5823682f Binary files /dev/null and b/data/themes/classic/text_italic.png differ diff --git a/data/themes/classic/text_left.png b/data/themes/classic/text_left.png new file mode 100644 index 00000000000..ae817ca8878 Binary files /dev/null and b/data/themes/classic/text_left.png differ diff --git a/data/themes/classic/text_right.png b/data/themes/classic/text_right.png new file mode 100644 index 00000000000..38129a211be Binary files /dev/null and b/data/themes/classic/text_right.png differ diff --git a/data/themes/classic/text_under.png b/data/themes/classic/text_under.png new file mode 100644 index 00000000000..4504d7c0036 Binary files /dev/null and b/data/themes/classic/text_under.png differ diff --git a/data/themes/classic/track_op_grip.png b/data/themes/classic/track_op_grip.png new file mode 100644 index 00000000000..d1dec24b853 Binary files /dev/null and b/data/themes/classic/track_op_grip.png differ diff --git a/data/themes/classic/track_op_menu.png b/data/themes/classic/track_op_menu.png new file mode 100644 index 00000000000..4e03eb35112 Binary files /dev/null and b/data/themes/classic/track_op_menu.png differ diff --git a/data/themes/classic/track_op_menu_active.png b/data/themes/classic/track_op_menu_active.png new file mode 100644 index 00000000000..5759cd7bbb4 Binary files /dev/null and b/data/themes/classic/track_op_menu_active.png differ diff --git a/data/themes/classic/trackop.png b/data/themes/classic/trackop.png new file mode 100644 index 00000000000..bc089652ecd Binary files /dev/null and b/data/themes/classic/trackop.png differ diff --git a/data/themes/classic/trackop_c.png b/data/themes/classic/trackop_c.png new file mode 100644 index 00000000000..418e4f8eb48 Binary files /dev/null and b/data/themes/classic/trackop_c.png differ diff --git a/data/themes/classic/trackop_h.png b/data/themes/classic/trackop_h.png new file mode 100644 index 00000000000..b88839a0d34 Binary files /dev/null and b/data/themes/classic/trackop_h.png differ diff --git a/data/themes/classic/triangle_wave_active.png b/data/themes/classic/triangle_wave_active.png new file mode 100644 index 00000000000..f3ef94abc01 Binary files /dev/null and b/data/themes/classic/triangle_wave_active.png differ diff --git a/data/themes/classic/triangle_wave_inactive.png b/data/themes/classic/triangle_wave_inactive.png new file mode 100644 index 00000000000..08d04971644 Binary files /dev/null and b/data/themes/classic/triangle_wave_inactive.png differ diff --git a/data/themes/classic/uhoh.png b/data/themes/classic/uhoh.png new file mode 100644 index 00000000000..09dc577df6e Binary files /dev/null and b/data/themes/classic/uhoh.png differ diff --git a/data/themes/classic/unavailable_sound.png b/data/themes/classic/unavailable_sound.png new file mode 100644 index 00000000000..7a3106541bf Binary files /dev/null and b/data/themes/classic/unavailable_sound.png differ diff --git a/data/themes/default/unfreeze.png b/data/themes/classic/unfreeze.png similarity index 100% rename from data/themes/default/unfreeze.png rename to data/themes/classic/unfreeze.png diff --git a/data/themes/classic/unknown_file.png b/data/themes/classic/unknown_file.png new file mode 100644 index 00000000000..94f96d730f5 Binary files /dev/null and b/data/themes/classic/unknown_file.png differ diff --git a/data/themes/classic/usr_wave_active.png b/data/themes/classic/usr_wave_active.png new file mode 100644 index 00000000000..2309967d5d4 Binary files /dev/null and b/data/themes/classic/usr_wave_active.png differ diff --git a/data/themes/classic/usr_wave_inactive.png b/data/themes/classic/usr_wave_inactive.png new file mode 100644 index 00000000000..a10a3e4544d Binary files /dev/null and b/data/themes/classic/usr_wave_inactive.png differ diff --git a/data/themes/classic/vst_plugin_file.png b/data/themes/classic/vst_plugin_file.png new file mode 100644 index 00000000000..caca1e4c573 Binary files /dev/null and b/data/themes/classic/vst_plugin_file.png differ diff --git a/data/themes/classic/whatsthis.png b/data/themes/classic/whatsthis.png new file mode 100644 index 00000000000..cad033f4dfd Binary files /dev/null and b/data/themes/classic/whatsthis.png differ diff --git a/data/themes/classic/white_key.png b/data/themes/classic/white_key.png new file mode 100644 index 00000000000..7fee692ae6a Binary files /dev/null and b/data/themes/classic/white_key.png differ diff --git a/data/themes/classic/white_key_pressed.png b/data/themes/classic/white_key_pressed.png new file mode 100644 index 00000000000..dffb43dedaa Binary files /dev/null and b/data/themes/classic/white_key_pressed.png differ diff --git a/data/themes/classic/white_noise_wave_active.png b/data/themes/classic/white_noise_wave_active.png new file mode 100644 index 00000000000..38b089c63d7 Binary files /dev/null and b/data/themes/classic/white_noise_wave_active.png differ diff --git a/data/themes/classic/white_noise_wave_inactive.png b/data/themes/classic/white_noise_wave_inactive.png new file mode 100644 index 00000000000..9a35c9d1667 Binary files /dev/null and b/data/themes/classic/white_noise_wave_inactive.png differ diff --git a/data/themes/classic/zoom.png b/data/themes/classic/zoom.png new file mode 100644 index 00000000000..cfb50f5436a Binary files /dev/null and b/data/themes/classic/zoom.png differ diff --git a/data/themes/classic/zoom_x.png b/data/themes/classic/zoom_x.png new file mode 100644 index 00000000000..435cc440c58 Binary files /dev/null and b/data/themes/classic/zoom_x.png differ diff --git a/data/themes/classic/zoom_y.png b/data/themes/classic/zoom_y.png new file mode 100644 index 00000000000..906d070e962 Binary files /dev/null and b/data/themes/classic/zoom_y.png differ diff --git a/data/themes/default/add.png b/data/themes/default/add.png old mode 100644 new mode 100755 index 3e8ae42fbdf..49ef817276d Binary files a/data/themes/default/add.png and b/data/themes/default/add.png differ diff --git a/data/themes/default/add_automation.png b/data/themes/default/add_automation.png old mode 100644 new mode 100755 index 58f13909b49..af5ffa7c110 Binary files a/data/themes/default/add_automation.png and b/data/themes/default/add_automation.png differ diff --git a/data/themes/default/add_bb_track.png b/data/themes/default/add_bb_track.png old mode 100644 new mode 100755 index 3379a094b3a..7d32cecc40e Binary files a/data/themes/default/add_bb_track.png and b/data/themes/default/add_bb_track.png differ diff --git a/data/themes/default/add_folder.png b/data/themes/default/add_folder.png old mode 100644 new mode 100755 index 710c7e80ea2..b9afe40a283 Binary files a/data/themes/default/add_folder.png and b/data/themes/default/add_folder.png differ diff --git a/data/themes/default/add_sample_track.png b/data/themes/default/add_sample_track.png old mode 100644 new mode 100755 index 0c094b36902..3c8e70efca2 Binary files a/data/themes/default/add_sample_track.png and b/data/themes/default/add_sample_track.png differ diff --git a/data/themes/default/analysis.png b/data/themes/default/analysis.png old mode 100644 new mode 100755 index dd6f48476b1..fcb43c8f7a5 Binary files a/data/themes/default/analysis.png and b/data/themes/default/analysis.png differ diff --git a/data/themes/default/apply-selected.png b/data/themes/default/apply-selected.png old mode 100644 new mode 100755 index f4e79fb4d61..7afb0f94e51 Binary files a/data/themes/default/apply-selected.png and b/data/themes/default/apply-selected.png differ diff --git a/data/themes/default/apply.png b/data/themes/default/apply.png old mode 100644 new mode 100755 index 1ae48682ea8..42d8be333af Binary files a/data/themes/default/apply.png and b/data/themes/default/apply.png differ diff --git a/data/themes/default/arp_down.png b/data/themes/default/arp_down.png old mode 100644 new mode 100755 index 85586f7dae1..63089788b3d Binary files a/data/themes/default/arp_down.png and b/data/themes/default/arp_down.png differ diff --git a/data/themes/default/arp_free.png b/data/themes/default/arp_free.png old mode 100644 new mode 100755 index 19ebc3a53fe..2fdd45c55cb Binary files a/data/themes/default/arp_free.png and b/data/themes/default/arp_free.png differ diff --git a/data/themes/default/arp_random.png b/data/themes/default/arp_random.png old mode 100644 new mode 100755 index 608fc6df77c..21c628f6753 Binary files a/data/themes/default/arp_random.png and b/data/themes/default/arp_random.png differ diff --git a/data/themes/default/arp_sort.png b/data/themes/default/arp_sort.png old mode 100644 new mode 100755 index a89bf913b99..17bba599733 Binary files a/data/themes/default/arp_sort.png and b/data/themes/default/arp_sort.png differ diff --git a/data/themes/default/arp_sync.png b/data/themes/default/arp_sync.png old mode 100644 new mode 100755 index c9c44a9ba9c..1097cf839b8 Binary files a/data/themes/default/arp_sync.png and b/data/themes/default/arp_sync.png differ diff --git a/data/themes/default/arp_up.png b/data/themes/default/arp_up.png old mode 100644 new mode 100755 index 07a4ecc7e4a..0a0974c46aa Binary files a/data/themes/default/arp_up.png and b/data/themes/default/arp_up.png differ diff --git a/data/themes/default/arp_up_and_down.png b/data/themes/default/arp_up_and_down.png old mode 100644 new mode 100755 index 513331df7b0..5943c07aedd Binary files a/data/themes/default/arp_up_and_down.png and b/data/themes/default/arp_up_and_down.png differ diff --git a/data/themes/default/automation.png b/data/themes/default/automation.png old mode 100644 new mode 100755 index d6193e4f6b6..23e17d0381c Binary files a/data/themes/default/automation.png and b/data/themes/default/automation.png differ diff --git a/data/themes/default/automation_track.png b/data/themes/default/automation_track.png old mode 100644 new mode 100755 index a7480fd70fd..23e17d0381c Binary files a/data/themes/default/automation_track.png and b/data/themes/default/automation_track.png differ diff --git a/data/themes/default/autoscroll_off.png b/data/themes/default/autoscroll_off.png old mode 100644 new mode 100755 index 526e20bf873..b3a1436cd0f Binary files a/data/themes/default/autoscroll_off.png and b/data/themes/default/autoscroll_off.png differ diff --git a/data/themes/default/autoscroll_on.png b/data/themes/default/autoscroll_on.png old mode 100644 new mode 100755 index d2567f25388..06cc8ed9193 Binary files a/data/themes/default/autoscroll_on.png and b/data/themes/default/autoscroll_on.png differ diff --git a/data/themes/default/back_to_start.png b/data/themes/default/back_to_start.png old mode 100644 new mode 100755 index d8b8b73fed3..85d8bf8952d Binary files a/data/themes/default/back_to_start.png and b/data/themes/default/back_to_start.png differ diff --git a/data/themes/default/back_to_zero.png b/data/themes/default/back_to_zero.png old mode 100644 new mode 100755 index dfde88b4e58..639f2e95543 Binary files a/data/themes/default/back_to_zero.png and b/data/themes/default/back_to_zero.png differ diff --git a/data/themes/default/bb_track.png b/data/themes/default/bb_track.png old mode 100644 new mode 100755 index 1c72caa39bb..78cb1cc3212 Binary files a/data/themes/default/bb_track.png and b/data/themes/default/bb_track.png differ diff --git a/data/themes/default/bb_track_btn.png b/data/themes/default/bb_track_btn.png old mode 100644 new mode 100755 index f67714607da..85d5dcd4ae2 Binary files a/data/themes/default/bb_track_btn.png and b/data/themes/default/bb_track_btn.png differ diff --git a/data/themes/default/black_key.png b/data/themes/default/black_key.png old mode 100644 new mode 100755 index 93ea71bf72d..321241e2b99 Binary files a/data/themes/default/black_key.png and b/data/themes/default/black_key.png differ diff --git a/data/themes/default/black_key_pressed.png b/data/themes/default/black_key_pressed.png old mode 100644 new mode 100755 index a730bc9f759..067268db981 Binary files a/data/themes/default/black_key_pressed.png and b/data/themes/default/black_key_pressed.png differ diff --git a/data/themes/default/cancel.png b/data/themes/default/cancel.png old mode 100644 new mode 100755 index f4b6e78f60a..eca10860e2b Binary files a/data/themes/default/cancel.png and b/data/themes/default/cancel.png differ diff --git a/data/themes/default/chord.png b/data/themes/default/chord.png old mode 100644 new mode 100755 index 6dec8a971b6..0450090d5f9 Binary files a/data/themes/default/chord.png and b/data/themes/default/chord.png differ diff --git a/data/themes/default/clock.png b/data/themes/default/clock.png old mode 100644 new mode 100755 index 4cd3f082a85..a4a7efd678b Binary files a/data/themes/default/clock.png and b/data/themes/default/clock.png differ diff --git a/data/themes/default/close.png b/data/themes/default/close.png new file mode 100644 index 00000000000..0dc87670dbb Binary files /dev/null and b/data/themes/default/close.png differ diff --git a/data/themes/default/colorize.png b/data/themes/default/colorize.png old mode 100644 new mode 100755 index e31f00e9ff3..0c797a813c4 Binary files a/data/themes/default/colorize.png and b/data/themes/default/colorize.png differ diff --git a/data/themes/default/combobox_arrow.png b/data/themes/default/combobox_arrow.png old mode 100644 new mode 100755 index be9db40bc2f..ffda8a9a99b Binary files a/data/themes/default/combobox_arrow.png and b/data/themes/default/combobox_arrow.png differ diff --git a/data/themes/default/combobox_arrow_selected.png b/data/themes/default/combobox_arrow_selected.png old mode 100644 new mode 100755 index d1345bd74ae..6075aa9aebc Binary files a/data/themes/default/combobox_arrow_selected.png and b/data/themes/default/combobox_arrow_selected.png differ diff --git a/data/themes/default/combobox_bg.png b/data/themes/default/combobox_bg.png old mode 100644 new mode 100755 index 83bdb41406d..851446eee43 Binary files a/data/themes/default/combobox_bg.png and b/data/themes/default/combobox_bg.png differ diff --git a/data/themes/default/computer.png b/data/themes/default/computer.png old mode 100644 new mode 100755 index f449ecb6b50..ae1bda99188 Binary files a/data/themes/default/computer.png and b/data/themes/default/computer.png differ diff --git a/data/themes/default/controller.png b/data/themes/default/controller.png old mode 100644 new mode 100755 index 6bd108d2262..0f368493863 Binary files a/data/themes/default/controller.png and b/data/themes/default/controller.png differ diff --git a/data/themes/default/controller_bg.png b/data/themes/default/controller_bg.png new file mode 100755 index 00000000000..d6d642a8b6e Binary files /dev/null and b/data/themes/default/controller_bg.png differ diff --git a/data/themes/default/cpuload_bg.png b/data/themes/default/cpuload_bg.png old mode 100644 new mode 100755 index f05db1a0696..113970c812a Binary files a/data/themes/default/cpuload_bg.png and b/data/themes/default/cpuload_bg.png differ diff --git a/data/themes/default/cpuload_leds.png b/data/themes/default/cpuload_leds.png old mode 100644 new mode 100755 index 900cd5b4609..aca401837e6 Binary files a/data/themes/default/cpuload_leds.png and b/data/themes/default/cpuload_leds.png differ diff --git a/data/themes/default/discard.png b/data/themes/default/discard.png new file mode 100644 index 00000000000..6dec18588c0 Binary files /dev/null and b/data/themes/default/discard.png differ diff --git a/data/themes/default/dont_know.png b/data/themes/default/dont_know.png old mode 100644 new mode 100755 index db2126d93ac..710be6fba19 Binary files a/data/themes/default/dont_know.png and b/data/themes/default/dont_know.png differ diff --git a/data/themes/default/edit_copy.png b/data/themes/default/edit_copy.png old mode 100644 new mode 100755 index bf4b3669d81..ed7d40fa191 Binary files a/data/themes/default/edit_copy.png and b/data/themes/default/edit_copy.png differ diff --git a/data/themes/default/edit_cut.png b/data/themes/default/edit_cut.png old mode 100644 new mode 100755 index fbc333368f4..40e3ba6a2d5 Binary files a/data/themes/default/edit_cut.png and b/data/themes/default/edit_cut.png differ diff --git a/data/themes/default/edit_draw.png b/data/themes/default/edit_draw.png old mode 100644 new mode 100755 index a0bb1db93be..2ac896b4d34 Binary files a/data/themes/default/edit_draw.png and b/data/themes/default/edit_draw.png differ diff --git a/data/themes/default/edit_erase.png b/data/themes/default/edit_erase.png old mode 100644 new mode 100755 index 143400a9b49..6695dcf91a8 Binary files a/data/themes/default/edit_erase.png and b/data/themes/default/edit_erase.png differ diff --git a/data/themes/default/edit_move.png b/data/themes/default/edit_move.png old mode 100644 new mode 100755 index 28a63417131..abfa3a719cd Binary files a/data/themes/default/edit_move.png and b/data/themes/default/edit_move.png differ diff --git a/data/themes/default/edit_paste.png b/data/themes/default/edit_paste.png old mode 100644 new mode 100755 index 766e8632581..e3fa22de886 Binary files a/data/themes/default/edit_paste.png and b/data/themes/default/edit_paste.png differ diff --git a/data/themes/default/edit_redo.png b/data/themes/default/edit_redo.png old mode 100644 new mode 100755 index 45f0450282c..254c21f3c7c Binary files a/data/themes/default/edit_redo.png and b/data/themes/default/edit_redo.png differ diff --git a/data/themes/default/edit_rename.png b/data/themes/default/edit_rename.png old mode 100644 new mode 100755 index ea8872fea61..aabde713b74 Binary files a/data/themes/default/edit_rename.png and b/data/themes/default/edit_rename.png differ diff --git a/data/themes/default/edit_select.png b/data/themes/default/edit_select.png old mode 100644 new mode 100755 index 842d690f1d7..5b957da666b Binary files a/data/themes/default/edit_select.png and b/data/themes/default/edit_select.png differ diff --git a/data/themes/default/edit_undo.png b/data/themes/default/edit_undo.png old mode 100644 new mode 100755 index 57abbe17da3..63cf12a3c2a Binary files a/data/themes/default/edit_undo.png and b/data/themes/default/edit_undo.png differ diff --git a/data/themes/default/effect_plugin.png b/data/themes/default/effect_plugin.png old mode 100644 new mode 100755 index 567bc31ae52..b805415c314 Binary files a/data/themes/default/effect_plugin.png and b/data/themes/default/effect_plugin.png differ diff --git a/data/themes/default/envelope_graph.png b/data/themes/default/envelope_graph.png index c6f904103e8..fcc3ae97c1b 100644 Binary files a/data/themes/default/envelope_graph.png and b/data/themes/default/envelope_graph.png differ diff --git a/data/themes/default/error.png b/data/themes/default/error.png old mode 100644 new mode 100755 index 5492295e76c..e46baed7c96 Binary files a/data/themes/default/error.png and b/data/themes/default/error.png differ diff --git a/data/themes/default/exit.png b/data/themes/default/exit.png old mode 100644 new mode 100755 index ed5f8b2515e..f7b81c7f7a3 Binary files a/data/themes/default/exit.png and b/data/themes/default/exit.png differ diff --git a/data/themes/default/exp_wave_active.png b/data/themes/default/exp_wave_active.png old mode 100644 new mode 100755 index 22682a150a8..c07523cb505 Binary files a/data/themes/default/exp_wave_active.png and b/data/themes/default/exp_wave_active.png differ diff --git a/data/themes/default/exp_wave_inactive.png b/data/themes/default/exp_wave_inactive.png old mode 100644 new mode 100755 index 132e6f7db96..f67b31f2deb Binary files a/data/themes/default/exp_wave_inactive.png and b/data/themes/default/exp_wave_inactive.png differ diff --git a/data/themes/default/factory_files.png b/data/themes/default/factory_files.png old mode 100644 new mode 100755 index 995bb19d508..249a32eea04 Binary files a/data/themes/default/factory_files.png and b/data/themes/default/factory_files.png differ diff --git a/data/themes/default/fader_background.png b/data/themes/default/fader_background.png old mode 100644 new mode 100755 index 682ff4c9281..831668f2be8 Binary files a/data/themes/default/fader_background.png and b/data/themes/default/fader_background.png differ diff --git a/data/themes/default/fader_knob.png b/data/themes/default/fader_knob.png old mode 100644 new mode 100755 index 93daf87fcc2..866cd863492 Binary files a/data/themes/default/fader_knob.png and b/data/themes/default/fader_knob.png differ diff --git a/data/themes/default/fader_leds.png b/data/themes/default/fader_leds.png old mode 100644 new mode 100755 index 6c673cf36d1..45a0d81d603 Binary files a/data/themes/default/fader_leds.png and b/data/themes/default/fader_leds.png differ diff --git a/data/themes/default/file.png b/data/themes/default/file.png new file mode 100755 index 00000000000..15a0478ddaf Binary files /dev/null and b/data/themes/default/file.png differ diff --git a/data/themes/default/filter_2lp.png b/data/themes/default/filter_2lp.png old mode 100644 new mode 100755 index 3e98a3c3712..1e326456157 Binary files a/data/themes/default/filter_2lp.png and b/data/themes/default/filter_2lp.png differ diff --git a/data/themes/default/filter_ap.png b/data/themes/default/filter_ap.png old mode 100644 new mode 100755 index b7c5230d5c7..389e84704bf Binary files a/data/themes/default/filter_ap.png and b/data/themes/default/filter_ap.png differ diff --git a/data/themes/default/filter_bp.png b/data/themes/default/filter_bp.png old mode 100644 new mode 100755 index f16c7d92465..127e34327f9 Binary files a/data/themes/default/filter_bp.png and b/data/themes/default/filter_bp.png differ diff --git a/data/themes/default/filter_hp.png b/data/themes/default/filter_hp.png old mode 100644 new mode 100755 index 845573b308e..268f77d2c28 Binary files a/data/themes/default/filter_hp.png and b/data/themes/default/filter_hp.png differ diff --git a/data/themes/default/filter_lp.png b/data/themes/default/filter_lp.png old mode 100644 new mode 100755 index 4f657ac53ee..46aa4b7e3d9 Binary files a/data/themes/default/filter_lp.png and b/data/themes/default/filter_lp.png differ diff --git a/data/themes/default/filter_notch.png b/data/themes/default/filter_notch.png old mode 100644 new mode 100755 index 44e1d718b65..84852e0ce89 Binary files a/data/themes/default/filter_notch.png and b/data/themes/default/filter_notch.png differ diff --git a/data/themes/default/flip_x.png b/data/themes/default/flip_x.png old mode 100644 new mode 100755 index 1f21ad5bbea..3cf1516ad91 Binary files a/data/themes/default/flip_x.png and b/data/themes/default/flip_x.png differ diff --git a/data/themes/default/flip_y.png b/data/themes/default/flip_y.png old mode 100644 new mode 100755 index dbc57a70fb2..b7a01f0109b Binary files a/data/themes/default/flip_y.png and b/data/themes/default/flip_y.png differ diff --git a/data/themes/default/folder.png b/data/themes/default/folder.png old mode 100644 new mode 100755 index ec0cecdaec6..a721c7f366a Binary files a/data/themes/default/folder.png and b/data/themes/default/folder.png differ diff --git a/data/themes/default/folder_locked.png b/data/themes/default/folder_locked.png old mode 100644 new mode 100755 index d3e18e50bd3..34b3ddebe9d Binary files a/data/themes/default/folder_locked.png and b/data/themes/default/folder_locked.png differ diff --git a/data/themes/default/folder_opened.png b/data/themes/default/folder_opened.png old mode 100644 new mode 100755 index b7b03bb3cd8..dd88948dae9 Binary files a/data/themes/default/folder_opened.png and b/data/themes/default/folder_opened.png differ diff --git a/data/themes/default/fx_mixer.png b/data/themes/default/fx_mixer.png old mode 100644 new mode 100755 index f26d53bd97d..1aae5fbaed6 Binary files a/data/themes/default/fx_mixer.png and b/data/themes/default/fx_mixer.png differ diff --git a/data/themes/default/hand.png b/data/themes/default/hand.png old mode 100644 new mode 100755 index 5fad2852def..26fefab3189 Binary files a/data/themes/default/hand.png and b/data/themes/default/hand.png differ diff --git a/data/themes/default/help.png b/data/themes/default/help.png old mode 100644 new mode 100755 index f38f9a76bc2..0547c68d00e Binary files a/data/themes/default/help.png and b/data/themes/default/help.png differ diff --git a/data/themes/default/hint.png b/data/themes/default/hint.png old mode 100644 new mode 100755 index b9a171b7089..70edba0e7a8 Binary files a/data/themes/default/hint.png and b/data/themes/default/hint.png differ diff --git a/data/themes/default/home.png b/data/themes/default/home.png old mode 100644 new mode 100755 index 84051dbb6e8..09e84555e67 Binary files a/data/themes/default/home.png and b/data/themes/default/home.png differ diff --git a/data/themes/default/hq_mode.png b/data/themes/default/hq_mode.png old mode 100644 new mode 100755 index ced82b2ba2b..48cb5f8225d Binary files a/data/themes/default/hq_mode.png and b/data/themes/default/hq_mode.png differ diff --git a/data/themes/default/ignore.png b/data/themes/default/ignore.png new file mode 100644 index 00000000000..9e0e3f876b1 Binary files /dev/null and b/data/themes/default/ignore.png differ diff --git a/data/themes/default/instrument_track.png b/data/themes/default/instrument_track.png old mode 100644 new mode 100755 index 39dcf115bc7..4ee97700add Binary files a/data/themes/default/instrument_track.png and b/data/themes/default/instrument_track.png differ diff --git a/data/themes/default/keep_stop_position.png b/data/themes/default/keep_stop_position.png old mode 100644 new mode 100755 index 561fead2505..7811e104b3e Binary files a/data/themes/default/keep_stop_position.png and b/data/themes/default/keep_stop_position.png differ diff --git a/data/themes/default/knob01.png b/data/themes/default/knob01.png old mode 100644 new mode 100755 index b19b2529c3c..144afce6d36 Binary files a/data/themes/default/knob01.png and b/data/themes/default/knob01.png differ diff --git a/data/themes/default/knob02.png b/data/themes/default/knob02.png old mode 100644 new mode 100755 index c4e84a31412..eda24ef41a5 Binary files a/data/themes/default/knob02.png and b/data/themes/default/knob02.png differ diff --git a/data/themes/default/knob03.png b/data/themes/default/knob03.png old mode 100644 new mode 100755 index d620272bf7c..015319486db Binary files a/data/themes/default/knob03.png and b/data/themes/default/knob03.png differ diff --git a/data/themes/default/knob05.png b/data/themes/default/knob05.png old mode 100644 new mode 100755 index 7b98f097d93..e0b688ac467 Binary files a/data/themes/default/knob05.png and b/data/themes/default/knob05.png differ diff --git a/data/themes/default/lcd_19green.png b/data/themes/default/lcd_19green.png old mode 100644 new mode 100755 index a154f40e9f9..437ac8baf58 Binary files a/data/themes/default/lcd_19green.png and b/data/themes/default/lcd_19green.png differ diff --git a/data/themes/default/lcd_19red.png b/data/themes/default/lcd_19red.png old mode 100644 new mode 100755 index 3238cc3eb60..0bd8817de92 Binary files a/data/themes/default/lcd_19red.png and b/data/themes/default/lcd_19red.png differ diff --git a/data/themes/default/lcd_21pink.png b/data/themes/default/lcd_21pink.png old mode 100644 new mode 100755 index 2f4c360daae..64ec75e33d9 Binary files a/data/themes/default/lcd_21pink.png and b/data/themes/default/lcd_21pink.png differ diff --git a/data/themes/default/led_blue.png b/data/themes/default/led_blue.png new file mode 100755 index 00000000000..9a703acfc3b Binary files /dev/null and b/data/themes/default/led_blue.png differ diff --git a/data/themes/default/led_green.png b/data/themes/default/led_green.png old mode 100644 new mode 100755 index a326b292859..8db24546b25 Binary files a/data/themes/default/led_green.png and b/data/themes/default/led_green.png differ diff --git a/data/themes/default/led_off.png b/data/themes/default/led_off.png old mode 100644 new mode 100755 index 1b564c85260..1b0acef6e61 Binary files a/data/themes/default/led_off.png and b/data/themes/default/led_off.png differ diff --git a/data/themes/default/led_red.png b/data/themes/default/led_red.png old mode 100644 new mode 100755 index f48ac485081..0ab892827ad Binary files a/data/themes/default/led_red.png and b/data/themes/default/led_red.png differ diff --git a/data/themes/default/led_yellow.png b/data/themes/default/led_yellow.png old mode 100644 new mode 100755 index 7fe385b423f..9a703acfc3b Binary files a/data/themes/default/led_yellow.png and b/data/themes/default/led_yellow.png differ diff --git a/data/themes/default/lfo_controller_artwork.png b/data/themes/default/lfo_controller_artwork.png index f1ddacec078..3928db24c07 100644 Binary files a/data/themes/default/lfo_controller_artwork.png and b/data/themes/default/lfo_controller_artwork.png differ diff --git a/data/themes/default/lfo_d100_active.png b/data/themes/default/lfo_d100_active.png old mode 100644 new mode 100755 index bb966c57997..575d4ac0d51 Binary files a/data/themes/default/lfo_d100_active.png and b/data/themes/default/lfo_d100_active.png differ diff --git a/data/themes/default/lfo_d100_inactive.png b/data/themes/default/lfo_d100_inactive.png old mode 100644 new mode 100755 index 239be1e0068..6dea0cb72f1 Binary files a/data/themes/default/lfo_d100_inactive.png and b/data/themes/default/lfo_d100_inactive.png differ diff --git a/data/themes/default/lfo_graph.png b/data/themes/default/lfo_graph.png index aa8faf5a0b2..5889edf1cd4 100644 Binary files a/data/themes/default/lfo_graph.png and b/data/themes/default/lfo_graph.png differ diff --git a/data/themes/default/lfo_x100_active.png b/data/themes/default/lfo_x100_active.png old mode 100644 new mode 100755 index cb563f432ed..42ecf6ce6c3 Binary files a/data/themes/default/lfo_x100_active.png and b/data/themes/default/lfo_x100_active.png differ diff --git a/data/themes/default/lfo_x100_inactive.png b/data/themes/default/lfo_x100_inactive.png old mode 100644 new mode 100755 index e0058926e1b..e34366804a7 Binary files a/data/themes/default/lfo_x100_inactive.png and b/data/themes/default/lfo_x100_inactive.png differ diff --git a/data/themes/default/lfo_x1_active.png b/data/themes/default/lfo_x1_active.png old mode 100644 new mode 100755 index 2c54a6ab1d7..2c9922bd2d9 Binary files a/data/themes/default/lfo_x1_active.png and b/data/themes/default/lfo_x1_active.png differ diff --git a/data/themes/default/lfo_x1_inactive.png b/data/themes/default/lfo_x1_inactive.png old mode 100644 new mode 100755 index 1947a4c932c..b728cf8fa76 Binary files a/data/themes/default/lfo_x1_inactive.png and b/data/themes/default/lfo_x1_inactive.png differ diff --git a/data/themes/default/loop_point.png b/data/themes/default/loop_point.png new file mode 100755 index 00000000000..a965f50bfa4 Binary files /dev/null and b/data/themes/default/loop_point.png differ diff --git a/data/themes/default/loop_point_b.png b/data/themes/default/loop_point_b.png deleted file mode 100644 index bcd65ad0866..00000000000 Binary files a/data/themes/default/loop_point_b.png and /dev/null differ diff --git a/data/themes/default/loop_point_e.png b/data/themes/default/loop_point_e.png deleted file mode 100644 index 40fdad94a54..00000000000 Binary files a/data/themes/default/loop_point_e.png and /dev/null differ diff --git a/data/themes/default/loop_points_off.png b/data/themes/default/loop_points_off.png old mode 100644 new mode 100755 index 924c487e879..23ba7c6babb Binary files a/data/themes/default/loop_points_off.png and b/data/themes/default/loop_points_off.png differ diff --git a/data/themes/default/loop_points_on.png b/data/themes/default/loop_points_on.png old mode 100644 new mode 100755 index 1bbacf26078..ee6cf0d20f0 Binary files a/data/themes/default/loop_points_on.png and b/data/themes/default/loop_points_on.png differ diff --git a/data/themes/default/main_slider.png b/data/themes/default/main_slider.png old mode 100644 new mode 100755 index 6f7b990a411..4942109ee46 Binary files a/data/themes/default/main_slider.png and b/data/themes/default/main_slider.png differ diff --git a/data/themes/default/master_pitch.png b/data/themes/default/master_pitch.png old mode 100644 new mode 100755 index 45e7ae1077d..d71c1316ff1 Binary files a/data/themes/default/master_pitch.png and b/data/themes/default/master_pitch.png differ diff --git a/data/themes/default/master_volume.png b/data/themes/default/master_volume.png old mode 100644 new mode 100755 index 9b486b2906f..127c4526fbd Binary files a/data/themes/default/master_volume.png and b/data/themes/default/master_volume.png differ diff --git a/data/themes/default/maximize.png b/data/themes/default/maximize.png new file mode 100644 index 00000000000..1cb4186241a Binary files /dev/null and b/data/themes/default/maximize.png differ diff --git a/data/themes/default/metronome.png b/data/themes/default/metronome.png old mode 100644 new mode 100755 index e20815a213d..67e6a350346 Binary files a/data/themes/default/metronome.png and b/data/themes/default/metronome.png differ diff --git a/data/themes/default/midi_file.png b/data/themes/default/midi_file.png old mode 100644 new mode 100755 index 910bdc7505f..4fa4f647e1f Binary files a/data/themes/default/midi_file.png and b/data/themes/default/midi_file.png differ diff --git a/data/themes/default/minimize.png b/data/themes/default/minimize.png new file mode 100644 index 00000000000..33bb26378ea Binary files /dev/null and b/data/themes/default/minimize.png differ diff --git a/data/themes/default/mixer_send_off.png b/data/themes/default/mixer_send_off.png old mode 100644 new mode 100755 index 3033c4962ac..f4fd4cc85a9 Binary files a/data/themes/default/mixer_send_off.png and b/data/themes/default/mixer_send_off.png differ diff --git a/data/themes/default/mixer_send_on.png b/data/themes/default/mixer_send_on.png old mode 100644 new mode 100755 index 776398e9fc3..476678e3ee6 Binary files a/data/themes/default/mixer_send_on.png and b/data/themes/default/mixer_send_on.png differ diff --git a/data/themes/default/moog_saw_wave_active.png b/data/themes/default/moog_saw_wave_active.png old mode 100644 new mode 100755 index f6230f6d40b..3e5143471d5 Binary files a/data/themes/default/moog_saw_wave_active.png and b/data/themes/default/moog_saw_wave_active.png differ diff --git a/data/themes/default/moog_saw_wave_inactive.png b/data/themes/default/moog_saw_wave_inactive.png old mode 100644 new mode 100755 index c77d73a0e15..4706d53e8e6 Binary files a/data/themes/default/moog_saw_wave_inactive.png and b/data/themes/default/moog_saw_wave_inactive.png differ diff --git a/data/themes/default/muted.png b/data/themes/default/muted.png old mode 100644 new mode 100755 index cedddf7032c..db16d8c8495 Binary files a/data/themes/default/muted.png and b/data/themes/default/muted.png differ diff --git a/data/themes/default/new_channel.png b/data/themes/default/new_channel.png old mode 100644 new mode 100755 index 8a27695df8e..ccaa70d4e70 Binary files a/data/themes/default/new_channel.png and b/data/themes/default/new_channel.png differ diff --git a/data/themes/default/note.png b/data/themes/default/note.png old mode 100644 new mode 100755 index a2f7a026211..0f25ccd6b69 Binary files a/data/themes/default/note.png and b/data/themes/default/note.png differ diff --git a/data/themes/default/note_double_whole.png b/data/themes/default/note_double_whole.png old mode 100644 new mode 100755 index f55150f462c..de80db29fc5 Binary files a/data/themes/default/note_double_whole.png and b/data/themes/default/note_double_whole.png differ diff --git a/data/themes/default/note_eight.png b/data/themes/default/note_eight.png new file mode 100755 index 00000000000..60721851663 Binary files /dev/null and b/data/themes/default/note_eight.png differ diff --git a/data/themes/default/note_eighth.png b/data/themes/default/note_eighth.png old mode 100644 new mode 100755 index 7d7b772bb94..fda9bcfb661 Binary files a/data/themes/default/note_eighth.png and b/data/themes/default/note_eighth.png differ diff --git a/data/themes/default/note_half.png b/data/themes/default/note_half.png old mode 100644 new mode 100755 index 46e9d461c67..51c7ff6ab50 Binary files a/data/themes/default/note_half.png and b/data/themes/default/note_half.png differ diff --git a/data/themes/default/note_none.png b/data/themes/default/note_none.png old mode 100644 new mode 100755 index 8a82a4ae627..ff31e3364ef Binary files a/data/themes/default/note_none.png and b/data/themes/default/note_none.png differ diff --git a/data/themes/default/note_quarter.png b/data/themes/default/note_quarter.png old mode 100644 new mode 100755 index 44fb49e6ca4..3e2ecbbc0be Binary files a/data/themes/default/note_quarter.png and b/data/themes/default/note_quarter.png differ diff --git a/data/themes/default/note_sixteenth.png b/data/themes/default/note_sixteenth.png old mode 100644 new mode 100755 index a41d39a18d0..99045dda2b4 Binary files a/data/themes/default/note_sixteenth.png and b/data/themes/default/note_sixteenth.png differ diff --git a/data/themes/default/note_thirtysecond.png b/data/themes/default/note_thirtysecond.png old mode 100644 new mode 100755 index 4b3e2e956ed..15bf2ce347b Binary files a/data/themes/default/note_thirtysecond.png and b/data/themes/default/note_thirtysecond.png differ diff --git a/data/themes/default/note_tripleteighth.png b/data/themes/default/note_tripleteighth.png old mode 100644 new mode 100755 index 35ed0f61631..41f832ca3d6 Binary files a/data/themes/default/note_tripleteighth.png and b/data/themes/default/note_tripleteighth.png differ diff --git a/data/themes/default/note_triplethalf.png b/data/themes/default/note_triplethalf.png old mode 100644 new mode 100755 index 73aa6e24ba7..ce37f6e53d1 Binary files a/data/themes/default/note_triplethalf.png and b/data/themes/default/note_triplethalf.png differ diff --git a/data/themes/default/note_tripletquarter.png b/data/themes/default/note_tripletquarter.png old mode 100644 new mode 100755 index 7ddc3e2926e..6b4bc5179f6 Binary files a/data/themes/default/note_tripletquarter.png and b/data/themes/default/note_tripletquarter.png differ diff --git a/data/themes/default/note_tripletsixteenth.png b/data/themes/default/note_tripletsixteenth.png old mode 100644 new mode 100755 index 074805fc50a..8126660b0f6 Binary files a/data/themes/default/note_tripletsixteenth.png and b/data/themes/default/note_tripletsixteenth.png differ diff --git a/data/themes/default/note_tripletthirtysecond.png b/data/themes/default/note_tripletthirtysecond.png old mode 100644 new mode 100755 index aa89e6f7b83..a3a131a39ea Binary files a/data/themes/default/note_tripletthirtysecond.png and b/data/themes/default/note_tripletthirtysecond.png differ diff --git a/data/themes/default/note_whole.png b/data/themes/default/note_whole.png old mode 100644 new mode 100755 index a9b8af4a08c..49874feb9fe Binary files a/data/themes/default/note_whole.png and b/data/themes/default/note_whole.png differ diff --git a/data/themes/default/output_graph.png b/data/themes/default/output_graph.png old mode 100644 new mode 100755 index 46ec86d4478..28995d67273 Binary files a/data/themes/default/output_graph.png and b/data/themes/default/output_graph.png differ diff --git a/data/themes/default/pat_rec.png b/data/themes/default/pat_rec.png old mode 100644 new mode 100755 index 5c0ed94555f..9bf241fdd57 Binary files a/data/themes/default/pat_rec.png and b/data/themes/default/pat_rec.png differ diff --git a/data/themes/default/pause.png b/data/themes/default/pause.png old mode 100644 new mode 100755 index 719f67675b3..f785273f1d8 Binary files a/data/themes/default/pause.png and b/data/themes/default/pause.png differ diff --git a/data/themes/default/piano.png b/data/themes/default/piano.png old mode 100644 new mode 100755 index 22523893e25..4ee97700add Binary files a/data/themes/default/piano.png and b/data/themes/default/piano.png differ diff --git a/data/themes/default/play.png b/data/themes/default/play.png old mode 100644 new mode 100755 index 81d25ba4a92..7f4ead575d6 Binary files a/data/themes/default/play.png and b/data/themes/default/play.png differ diff --git a/data/themes/default/playpos_marker.png b/data/themes/default/playpos_marker.png old mode 100644 new mode 100755 diff --git a/data/themes/default/plugins.png b/data/themes/default/plugins.png old mode 100644 new mode 100755 index 5ba9bc3c90e..b9c6c93e163 Binary files a/data/themes/default/plugins.png and b/data/themes/default/plugins.png differ diff --git a/data/themes/default/ports.png b/data/themes/default/ports.png old mode 100644 new mode 100755 index de903626210..6537a4fe215 Binary files a/data/themes/default/ports.png and b/data/themes/default/ports.png differ diff --git a/data/themes/default/pr_black_key.png b/data/themes/default/pr_black_key.png old mode 100644 new mode 100755 index 7d9c6ea9d02..cae90d7c475 Binary files a/data/themes/default/pr_black_key.png and b/data/themes/default/pr_black_key.png differ diff --git a/data/themes/default/pr_black_key_pressed.png b/data/themes/default/pr_black_key_pressed.png old mode 100644 new mode 100755 index afbf3c4d97a..a203048778f Binary files a/data/themes/default/pr_black_key_pressed.png and b/data/themes/default/pr_black_key_pressed.png differ diff --git a/data/themes/default/pr_white_key_big.png b/data/themes/default/pr_white_key_big.png old mode 100644 new mode 100755 index 724e82b263d..53ab00274eb Binary files a/data/themes/default/pr_white_key_big.png and b/data/themes/default/pr_white_key_big.png differ diff --git a/data/themes/default/pr_white_key_big_pressed.png b/data/themes/default/pr_white_key_big_pressed.png old mode 100644 new mode 100755 index 37d62e5fb55..40bb7129dbb Binary files a/data/themes/default/pr_white_key_big_pressed.png and b/data/themes/default/pr_white_key_big_pressed.png differ diff --git a/data/themes/default/pr_white_key_small.png b/data/themes/default/pr_white_key_small.png old mode 100644 new mode 100755 index fa07d6a9d00..10c0ab07145 Binary files a/data/themes/default/pr_white_key_small.png and b/data/themes/default/pr_white_key_small.png differ diff --git a/data/themes/default/pr_white_key_small_pressed.png b/data/themes/default/pr_white_key_small_pressed.png old mode 100644 new mode 100755 index 93fe7ceb4b7..166f00c5788 Binary files a/data/themes/default/pr_white_key_small_pressed.png and b/data/themes/default/pr_white_key_small_pressed.png differ diff --git a/data/themes/default/preset_file.png b/data/themes/default/preset_file.png old mode 100644 new mode 100755 index 53a0d1159ec..8dbacf7aaee Binary files a/data/themes/default/preset_file.png and b/data/themes/default/preset_file.png differ diff --git a/data/themes/default/progression_cubic_hermite.png b/data/themes/default/progression_cubic_hermite.png old mode 100644 new mode 100755 index 1010f873524..70850a7935b Binary files a/data/themes/default/progression_cubic_hermite.png and b/data/themes/default/progression_cubic_hermite.png differ diff --git a/data/themes/default/progression_discrete.png b/data/themes/default/progression_discrete.png old mode 100644 new mode 100755 index 5faf0e4aa5f..d92a9c8b65a Binary files a/data/themes/default/progression_discrete.png and b/data/themes/default/progression_discrete.png differ diff --git a/data/themes/default/progression_linear.png b/data/themes/default/progression_linear.png old mode 100644 new mode 100755 index d6193e4f6b6..23e17d0381c Binary files a/data/themes/default/progression_linear.png and b/data/themes/default/progression_linear.png differ diff --git a/data/themes/default/project_export.png b/data/themes/default/project_export.png old mode 100644 new mode 100755 index 13c0b9d08ae..01da11576b2 Binary files a/data/themes/default/project_export.png and b/data/themes/default/project_export.png differ diff --git a/data/themes/default/project_file.png b/data/themes/default/project_file.png old mode 100644 new mode 100755 index 724ab5cfb23..144cbc6261c Binary files a/data/themes/default/project_file.png and b/data/themes/default/project_file.png differ diff --git a/data/themes/default/project_import.png b/data/themes/default/project_import.png old mode 100644 new mode 100755 index 6680f2416ae..37cca5f593b Binary files a/data/themes/default/project_import.png and b/data/themes/default/project_import.png differ diff --git a/data/themes/default/project_new.png b/data/themes/default/project_new.png old mode 100644 new mode 100755 index 489548b6bc1..a3639affcc8 Binary files a/data/themes/default/project_new.png and b/data/themes/default/project_new.png differ diff --git a/data/themes/default/project_new_from_template.png b/data/themes/default/project_new_from_template.png old mode 100644 new mode 100755 index 1353505b9b4..ecbc4ea7ff1 Binary files a/data/themes/default/project_new_from_template.png and b/data/themes/default/project_new_from_template.png differ diff --git a/data/themes/default/project_notes.png b/data/themes/default/project_notes.png old mode 100644 new mode 100755 index 6991b3a7ea4..5e2262392c7 Binary files a/data/themes/default/project_notes.png and b/data/themes/default/project_notes.png differ diff --git a/data/themes/default/project_open.png b/data/themes/default/project_open.png old mode 100644 new mode 100755 index 7188b389496..b8b5838df7c Binary files a/data/themes/default/project_open.png and b/data/themes/default/project_open.png differ diff --git a/data/themes/default/project_open_recent.png b/data/themes/default/project_open_recent.png old mode 100644 new mode 100755 index 4e57b3b827f..dcce6456bdc Binary files a/data/themes/default/project_open_recent.png and b/data/themes/default/project_open_recent.png differ diff --git a/data/themes/default/project_save.png b/data/themes/default/project_save.png old mode 100644 new mode 100755 index 83c7fd7bd45..2546ad753b6 Binary files a/data/themes/default/project_save.png and b/data/themes/default/project_save.png differ diff --git a/data/themes/default/project_saveas.png b/data/themes/default/project_saveas.png old mode 100644 new mode 100755 index 83c7fd7bd45..2546ad753b6 Binary files a/data/themes/default/project_saveas.png and b/data/themes/default/project_saveas.png differ diff --git a/data/themes/default/quantize.png b/data/themes/default/quantize.png old mode 100644 new mode 100755 index aae2654ac43..3a2a0a861c7 Binary files a/data/themes/default/quantize.png and b/data/themes/default/quantize.png differ diff --git a/data/themes/default/random_wave_active.png b/data/themes/default/random_wave_active.png old mode 100644 new mode 100755 index b65a9a0c3aa..62e5aac073e Binary files a/data/themes/default/random_wave_active.png and b/data/themes/default/random_wave_active.png differ diff --git a/data/themes/default/random_wave_inactive.png b/data/themes/default/random_wave_inactive.png old mode 100644 new mode 100755 index 47184549a45..871174f06f3 Binary files a/data/themes/default/random_wave_inactive.png and b/data/themes/default/random_wave_inactive.png differ diff --git a/data/themes/default/receive_bg_arrow.png b/data/themes/default/receive_bg_arrow.png old mode 100644 new mode 100755 index f456176e0f1..d4961540ad0 Binary files a/data/themes/default/receive_bg_arrow.png and b/data/themes/default/receive_bg_arrow.png differ diff --git a/data/themes/default/record.png b/data/themes/default/record.png old mode 100644 new mode 100755 index 9c478745bf8..2e067293ddf Binary files a/data/themes/default/record.png and b/data/themes/default/record.png differ diff --git a/data/themes/default/record_accompany.png b/data/themes/default/record_accompany.png old mode 100644 new mode 100755 index 005a1c18c82..f56a83d379d Binary files a/data/themes/default/record_accompany.png and b/data/themes/default/record_accompany.png differ diff --git a/data/themes/default/recover.png b/data/themes/default/recover.png new file mode 100755 index 00000000000..42d8be333af Binary files /dev/null and b/data/themes/default/recover.png differ diff --git a/data/themes/default/reload.png b/data/themes/default/reload.png old mode 100644 new mode 100755 index c92882ecdc5..15de6cdc18f Binary files a/data/themes/default/reload.png and b/data/themes/default/reload.png differ diff --git a/data/themes/default/restore.png b/data/themes/default/restore.png new file mode 100644 index 00000000000..4492e17a643 Binary files /dev/null and b/data/themes/default/restore.png differ diff --git a/data/themes/default/round_square_wave_active.png b/data/themes/default/round_square_wave_active.png old mode 100644 new mode 100755 index 0dfe2093ad2..bd513adcf0c Binary files a/data/themes/default/round_square_wave_active.png and b/data/themes/default/round_square_wave_active.png differ diff --git a/data/themes/default/round_square_wave_inactive.png b/data/themes/default/round_square_wave_inactive.png old mode 100644 new mode 100755 index 3e1f9c0b0e8..e0eb6403fed Binary files a/data/themes/default/round_square_wave_inactive.png and b/data/themes/default/round_square_wave_inactive.png differ diff --git a/data/themes/default/sample_file.png b/data/themes/default/sample_file.png old mode 100644 new mode 100755 index f2ed8d46e02..1e2a95582de Binary files a/data/themes/default/sample_file.png and b/data/themes/default/sample_file.png differ diff --git a/data/themes/default/sample_track.png b/data/themes/default/sample_track.png old mode 100644 new mode 100755 index d459e7fa518..468424f9a84 Binary files a/data/themes/default/sample_track.png and b/data/themes/default/sample_track.png differ diff --git a/data/themes/default/saw_wave_active.png b/data/themes/default/saw_wave_active.png old mode 100644 new mode 100755 index 62bffcc336f..81d043541dc Binary files a/data/themes/default/saw_wave_active.png and b/data/themes/default/saw_wave_active.png differ diff --git a/data/themes/default/saw_wave_inactive.png b/data/themes/default/saw_wave_inactive.png old mode 100644 new mode 100755 index 6fc3a816b55..3d548fe8182 Binary files a/data/themes/default/saw_wave_inactive.png and b/data/themes/default/saw_wave_inactive.png differ diff --git a/data/themes/default/sbarrow_down.png b/data/themes/default/sbarrow_down.png old mode 100644 new mode 100755 index 56fa504c143..a53757fb917 Binary files a/data/themes/default/sbarrow_down.png and b/data/themes/default/sbarrow_down.png differ diff --git a/data/themes/default/sbarrow_down_d.png b/data/themes/default/sbarrow_down_d.png old mode 100644 new mode 100755 index f8c54f32f50..9dd44490ecf Binary files a/data/themes/default/sbarrow_down_d.png and b/data/themes/default/sbarrow_down_d.png differ diff --git a/data/themes/default/sbarrow_left.png b/data/themes/default/sbarrow_left.png old mode 100644 new mode 100755 index d50031e30b0..3d16a73f363 Binary files a/data/themes/default/sbarrow_left.png and b/data/themes/default/sbarrow_left.png differ diff --git a/data/themes/default/sbarrow_left_d.png b/data/themes/default/sbarrow_left_d.png old mode 100644 new mode 100755 index fe246df0523..8dd5a1639e8 Binary files a/data/themes/default/sbarrow_left_d.png and b/data/themes/default/sbarrow_left_d.png differ diff --git a/data/themes/default/sbarrow_right.png b/data/themes/default/sbarrow_right.png old mode 100644 new mode 100755 index 2112ec1da82..ce4236e992a Binary files a/data/themes/default/sbarrow_right.png and b/data/themes/default/sbarrow_right.png differ diff --git a/data/themes/default/sbarrow_right_d.png b/data/themes/default/sbarrow_right_d.png old mode 100644 new mode 100755 index 39b0220cc00..ad1f00200e1 Binary files a/data/themes/default/sbarrow_right_d.png and b/data/themes/default/sbarrow_right_d.png differ diff --git a/data/themes/default/sbarrow_up.png b/data/themes/default/sbarrow_up.png old mode 100644 new mode 100755 index 2b61c257ca5..1d7579e1022 Binary files a/data/themes/default/sbarrow_up.png and b/data/themes/default/sbarrow_up.png differ diff --git a/data/themes/default/sbarrow_up_d.png b/data/themes/default/sbarrow_up_d.png old mode 100644 new mode 100755 index f80d6b39bae..7d752210ef7 Binary files a/data/themes/default/sbarrow_up_d.png and b/data/themes/default/sbarrow_up_d.png differ diff --git a/data/themes/default/scale.png b/data/themes/default/scale.png old mode 100644 new mode 100755 index cde26a70153..1610b2eba99 Binary files a/data/themes/default/scale.png and b/data/themes/default/scale.png differ diff --git a/data/themes/default/send_bg_arrow.png b/data/themes/default/send_bg_arrow.png old mode 100644 new mode 100755 index 8c4bfcf93f3..05a8c7366b4 Binary files a/data/themes/default/send_bg_arrow.png and b/data/themes/default/send_bg_arrow.png differ diff --git a/data/themes/default/setup_audio.png b/data/themes/default/setup_audio.png old mode 100644 new mode 100755 index c928c72ef7c..5085c8754bc Binary files a/data/themes/default/setup_audio.png and b/data/themes/default/setup_audio.png differ diff --git a/data/themes/default/setup_directories.png b/data/themes/default/setup_directories.png old mode 100644 new mode 100755 index 82a467fbd2e..895fde883d6 Binary files a/data/themes/default/setup_directories.png and b/data/themes/default/setup_directories.png differ diff --git a/data/themes/default/setup_general.png b/data/themes/default/setup_general.png old mode 100644 new mode 100755 index 43ae1b19732..834639973ba Binary files a/data/themes/default/setup_general.png and b/data/themes/default/setup_general.png differ diff --git a/data/themes/default/setup_midi.png b/data/themes/default/setup_midi.png old mode 100644 new mode 100755 index 80cb45e01db..47f57a8b065 Binary files a/data/themes/default/setup_midi.png and b/data/themes/default/setup_midi.png differ diff --git a/data/themes/default/setup_performance.png b/data/themes/default/setup_performance.png old mode 100644 new mode 100755 index 6233e742e4a..74efd2f6271 Binary files a/data/themes/default/setup_performance.png and b/data/themes/default/setup_performance.png differ diff --git a/data/themes/default/shadow_c.png b/data/themes/default/shadow_c.png new file mode 100755 index 00000000000..49c844f3915 Binary files /dev/null and b/data/themes/default/shadow_c.png differ diff --git a/data/themes/default/shadow_p.png b/data/themes/default/shadow_p.png new file mode 100644 index 00000000000..38b2c58ccd7 Binary files /dev/null and b/data/themes/default/shadow_p.png differ diff --git a/data/themes/default/sin_wave_active.png b/data/themes/default/sin_wave_active.png old mode 100644 new mode 100755 index ec7bf0a7d01..f7b75fe004d Binary files a/data/themes/default/sin_wave_active.png and b/data/themes/default/sin_wave_active.png differ diff --git a/data/themes/default/sin_wave_inactive.png b/data/themes/default/sin_wave_inactive.png old mode 100644 new mode 100755 index 6d6e4fa80e7..e99b4022ccd Binary files a/data/themes/default/sin_wave_inactive.png and b/data/themes/default/sin_wave_inactive.png differ diff --git a/data/themes/default/songeditor.png b/data/themes/default/songeditor.png old mode 100644 new mode 100755 index ecfb65b24ca..42ea784a4d3 Binary files a/data/themes/default/songeditor.png and b/data/themes/default/songeditor.png differ diff --git a/data/themes/default/soundfont_file.png b/data/themes/default/soundfont_file.png old mode 100644 new mode 100755 index 774c82498d8..d0e6b1d47f8 Binary files a/data/themes/default/soundfont_file.png and b/data/themes/default/soundfont_file.png differ diff --git a/data/themes/default/splash.png b/data/themes/default/splash.png old mode 100644 new mode 100755 index a3b58d5f2cb..c5e3b6cd55f Binary files a/data/themes/default/splash.png and b/data/themes/default/splash.png differ diff --git a/data/themes/default/square_wave_active.png b/data/themes/default/square_wave_active.png old mode 100644 new mode 100755 index 487b5aff74f..4c438023976 Binary files a/data/themes/default/square_wave_active.png and b/data/themes/default/square_wave_active.png differ diff --git a/data/themes/default/square_wave_inactive.png b/data/themes/default/square_wave_inactive.png old mode 100644 new mode 100755 index 435b33c6e9b..601bd1acbd1 Binary files a/data/themes/default/square_wave_inactive.png and b/data/themes/default/square_wave_inactive.png differ diff --git a/data/themes/default/step_btn_add.png b/data/themes/default/step_btn_add.png old mode 100644 new mode 100755 index 60fbf994416..ad1380403c5 Binary files a/data/themes/default/step_btn_add.png and b/data/themes/default/step_btn_add.png differ diff --git a/data/themes/default/step_btn_duplicate.png b/data/themes/default/step_btn_duplicate.png old mode 100644 new mode 100755 index af9521fad20..3ca1ca7c6f5 Binary files a/data/themes/default/step_btn_duplicate.png and b/data/themes/default/step_btn_duplicate.png differ diff --git a/data/themes/default/step_btn_off.png b/data/themes/default/step_btn_off.png old mode 100644 new mode 100755 index 5e40d3e5a2f..646124a851e Binary files a/data/themes/default/step_btn_off.png and b/data/themes/default/step_btn_off.png differ diff --git a/data/themes/default/step_btn_off_light.png b/data/themes/default/step_btn_off_light.png old mode 100644 new mode 100755 index f8f64bea851..17a158eb49b Binary files a/data/themes/default/step_btn_off_light.png and b/data/themes/default/step_btn_off_light.png differ diff --git a/data/themes/default/step_btn_on_100.png b/data/themes/default/step_btn_on_100.png old mode 100644 new mode 100755 index faa9b462f63..fb0149ea1b1 Binary files a/data/themes/default/step_btn_on_100.png and b/data/themes/default/step_btn_on_100.png differ diff --git a/data/themes/default/step_btn_on_yellow.png b/data/themes/default/step_btn_on_yellow.png old mode 100644 new mode 100755 index b69defeb97f..40c269aee33 Binary files a/data/themes/default/step_btn_on_yellow.png and b/data/themes/default/step_btn_on_yellow.png differ diff --git a/data/themes/default/step_btn_remove.png b/data/themes/default/step_btn_remove.png old mode 100644 new mode 100755 index 69383af18c5..20ff2d49f33 Binary files a/data/themes/default/step_btn_remove.png and b/data/themes/default/step_btn_remove.png differ diff --git a/data/themes/default/stepper-down-press.png b/data/themes/default/stepper-down-press.png old mode 100644 new mode 100755 index c1cec54a3a7..efdf11ceee6 Binary files a/data/themes/default/stepper-down-press.png and b/data/themes/default/stepper-down-press.png differ diff --git a/data/themes/default/stepper-down.png b/data/themes/default/stepper-down.png old mode 100644 new mode 100755 index b7b8e2f1a3b..a2f80e429ac Binary files a/data/themes/default/stepper-down.png and b/data/themes/default/stepper-down.png differ diff --git a/data/themes/default/stepper-left-press.png b/data/themes/default/stepper-left-press.png old mode 100644 new mode 100755 index 4de798f7c59..c3bb14127ac Binary files a/data/themes/default/stepper-left-press.png and b/data/themes/default/stepper-left-press.png differ diff --git a/data/themes/default/stepper-left.png b/data/themes/default/stepper-left.png old mode 100644 new mode 100755 index 7f2278056f3..56530d0797c Binary files a/data/themes/default/stepper-left.png and b/data/themes/default/stepper-left.png differ diff --git a/data/themes/default/stepper-right-press.png b/data/themes/default/stepper-right-press.png old mode 100644 new mode 100755 index ad634e175be..033eb01d4e4 Binary files a/data/themes/default/stepper-right-press.png and b/data/themes/default/stepper-right-press.png differ diff --git a/data/themes/default/stepper-right.png b/data/themes/default/stepper-right.png old mode 100644 new mode 100755 index 215e88f6c94..905dbbecec5 Binary files a/data/themes/default/stepper-right.png and b/data/themes/default/stepper-right.png differ diff --git a/data/themes/default/stepper-up-press.png b/data/themes/default/stepper-up-press.png old mode 100644 new mode 100755 index 99f47711fdc..d46560f5851 Binary files a/data/themes/default/stepper-up-press.png and b/data/themes/default/stepper-up-press.png differ diff --git a/data/themes/default/stepper-up.png b/data/themes/default/stepper-up.png old mode 100644 new mode 100755 index 13329133d23..49887088824 Binary files a/data/themes/default/stepper-up.png and b/data/themes/default/stepper-up.png differ diff --git a/data/themes/default/stop.png b/data/themes/default/stop.png old mode 100644 new mode 100755 index b589f617842..07a44fe42fb Binary files a/data/themes/default/stop.png and b/data/themes/default/stop.png differ diff --git a/data/themes/default/style.css b/data/themes/default/style.css old mode 100644 new mode 100755 index 81f2ac4d8cd..85c47984c96 --- a/data/themes/default/style.css +++ b/data/themes/default/style.css @@ -4,88 +4,87 @@ /* most foreground text items */ QLabel, QTreeWidget, QListWidget, QGroupBox, QMenuBar { - color: #e0e0e0; + color: #d1d8e4; } QMdiArea { - background-image: url(resources:background_artwork.png); + background-color: #111314; } AutomationEditor { - background-color: rgb(0, 0, 0); - color: #e0e0e0; - qproperty-vertexColor: #ff77af; - qproperty-gridColor: #808080; - qproperty-crossColor: rgb( 255, 51, 51 ); + background-color: #040506; + color: #ffffff; + qproperty-vertexColor: #7f0a1d; + qproperty-gridColor: #2d3339; + qproperty-crossColor: #FE143A; - qproperty-graphColor: qlineargradient(spread:reflect, - x1:0, y1:0, x2:0, y2:1, - stop:0 rgba(153, 175, 255, 250), stop:1 rgba(153, 175, 255, 100)); - qproperty-scaleColor: qlineargradient(spread:reflect, - x1:0, y1:0.5, x2:1, y2:0.5, - stop:0 #333, stop:1 #202020); + qproperty-graphColor: qlineargradient(spread:reflect, x1:0, y1:0, x2:0, y2:1, + stop:0 rgba(83,7,19,255), stop:1 rgba(127,10,29,50)); + qproperty-scaleColor: #262b30; } /* text box */ QLineEdit { border-radius: 4px; - border: 2px inset rgba(91,101,113,128); - background: #49515b; - color: #e0e0e0; + border: 1px; + background: #101213; + color: #d1d8e4; +} + +QLineEdit:read-only { + border-style: none; + background: transparent; } /* text box when it wants text */ QLineEdit:focus { - border: 1px solid rgba(0,0,0, 128); + border: 1px solid #0bd556; } QToolTip { border-radius: 4px; - background: qlineargradient(spread:reflect, x1:0.5, y1:0.5, x2:0.5, y2:0, stop:0 rgba(0, 0, 0, 255), stop:1 rgba(50, 50, 50, 220)); - opacity: 175; - border: 1.0px solid rgba(0,0,0,255); - color: #4afd85; + background: #040506; + color: #d1d8e4; } TextFloat { - border-radius: 4px; - background: qlineargradient(spread:reflect, x1:0.5, y1:0.5, x2:0.5, y2:0, stop:0 rgba(0, 0, 0, 255), stop:1 rgba(50, 50, 50, 220)); - opacity: 175; - border: 1.0px solid rgba(0,0,0,255); - color: #4afd85; + background: #040506; + color: #d1d8e4; } QMenu { - border:1px solid #747474; - background-color: #c9c9c9; - font-size:11px; + border-top: 2px solid #08993E; + background-color: #15191c; + font-size: 11px; } QMenu::separator { - height: 1px; - background: #8d8d8d; + height: 1.0px; + background: #323940; + margin-left: 0x; + margin-right: 0px; } QMenu::item { - color: black; + color: #d1d8e4; padding: 2px 35px 2px 23px; margin: 3px 0px 3px 0px; } QMenu::item:selected { - color: white; - font-weight:bold; - background-color: #747474; + color: #d1d8e4; + font-weight: normal; + background-color: #21272b; } QMenu::item:disabled { - color: #747474; - background-color: #c9c9c9; - font-size:12px; + color: #515459; + background-color: #262b30; + font-size: 12px; font-weight: normal; padding: 4px 32px 4px 20px; } @@ -98,7 +97,9 @@ QMenu::indicator { width: 16; height: 16; opacity: 0; - background-color: #c9c9c9; + border: 1px solid #101213; + border-radius: 2px; + background-color: #101213; } QMenu::indicator:checked { @@ -107,23 +108,24 @@ QMenu::indicator:checked { QMenu::indicator:selected { image: url("resources:apply-selected.png"); - background-color: #747474; + border: 1px solid #101213; + background-color: #101213; } PianoRoll { - background-color: rgb(0, 0, 0); - qproperty-gridColor: rgb( 128, 128, 128 ); - qproperty-noteModeColor: rgb( 255, 255, 255 ); - qproperty-noteColor: rgb( 119, 199, 216 ); - qproperty-noteBorderRadiusX: 5; - qproperty-noteBorderRadiusY: 2; - qproperty-selectedNoteColor: rgb( 0, 125, 255 ); - qproperty-barColor: #4afd85; - qproperty-markedSemitoneColor: rgba( 40, 40, 40, 200 ); + background-color: #040506; + qproperty-gridColor: #2d3339; + qproperty-noteModeColor: #0bd556; + qproperty-noteColor: #0bd556; + qproperty-noteOpacity: 165; + qproperty-noteBorders: false; /* boolean property, set false to have borderless notes */ + qproperty-selectedNoteColor: #006b65; + qproperty-barColor: #078f3a; + qproperty-markedSemitoneColor: #06170E; /* Text on the white piano keys */ - qproperty-textColor: rgb( 0, 0, 0 ); - qproperty-textColorLight: rgb( 128, 128, 128); - qproperty-textShadow: rgb( 240, 240, 240 ); + qproperty-textColor: #000; + qproperty-textColorLight: #0bd556; + qproperty-textShadow: #fff; } /* main toolbar oscilloscope - can have transparent bg now */ @@ -143,16 +145,16 @@ CPULoadWidget { /* scrollbar: trough */ QScrollBar:horizontal { - border: 1px solid #131313; - background: rgb( 50,50,50 ); - height: 14px; - margin: 0px 13px; + border-top: 3px solid #262b30; + background: #262b30; + height: 12px; + margin: 0px 12px; } QScrollBar:vertical { - border: 1px solid #131313; - background: rgb( 50,50,50 ); - width: 14px; - margin: 13px 0px; + border-left: 3px solid #262b30; + background: #262b30; + width: 12px; + margin: 12px 0px; } /* scrollbar: trough clicky things */ @@ -170,59 +172,47 @@ QScrollBar::add-page:vertical:pressed, QScrollBar::sub-page:vertical:pressed { /* scrollbar: handles (sliders) */ QScrollBar::handle:horizontal { - background: qlineargradient(spread:reflect, - x1:0.5, y1:0, x2:0.5, y2:1, - stop:0 #969696, stop:0.5 #c9c9c9, stop:1 #aaa); - border: 1px outset #888; - border-radius: 2px; + background: #3f4750; + border: none; + border-radius: 4px; min-width: 24px; } QScrollBar::handle:horizontal:hover { - background: qlineargradient(spread:reflect, - x1:0.5, y1:0, x2:0.5, y2:1, - stop:0 #969696, stop:0.5 #f0f0f0, stop:1 #aaa); + background: #525e69; } QScrollBar::handle:horizontal:pressed { - background: qlineargradient(spread:reflect, - x1:0.5, y1:0, x2:0.5, y2:1, - stop:0 #747474, stop:1 #c9c9c9); + background: rgba(11,213,86,100); } QScrollBar::handle:vertical { - background: qlineargradient(spread:reflect, - x1:0, y1:0.5, x2:1, y2:0.5, - stop:0 #969696, stop:0.5 #c9c9c9, stop:1 #aaa); - border: 1px outset #888; - border-radius: 2px; + background: #3f4750; + border: none; + border-radius: 4px; min-height: 24px; } QScrollBar::handle:vertical:hover { - background: qlineargradient(spread:reflect, - x1:0, y1:0.5, x2:1, y2:0.5, - stop:0 #969696, stop:0.5 #f0f0f0, stop:1 #aaa); + background: #525e69; } QScrollBar::handle:vertical:pressed { - background: qlineargradient(spread:reflect, - x1:0, y1:0.5, x2:1, y2:0.5, - stop:0 #747474, stop:1 #c9c9c9); + background: rgba(11,213,86,100); } QScrollBar::handle:horizontal:disabled, QScrollBar::handle:vertical:disabled { - background: #747474; + background: #262b30; border-radius: 1px; - border: 1px solid rgba(0,0,0,32); + border: none; } /* arrow buttons */ QScrollBar::add-line, QScrollBar::sub-line { - background: qradialgradient(cx:0.3, cy:0.3, radius:0.8, fx:0.3, fy:0.3, stop:0 #c9c9c9, stop:1 #969696 ); - border-radius: 1px; - border: 1px solid #131313; + background: #262b30; + border-radius: 0px; + border: none; subcontrol-origin: margin; } @@ -232,15 +222,15 @@ QScrollBar::add-line:vertical { subcontrol-position: bottom; height: 12px;} QScrollBar::sub-line:vertical { subcontrol-position: top; height: 12px;} QScrollBar::add-line:hover, QScrollBar::sub-line: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 ); + background: #262b30; } QScrollBar::add-line:pressed, QScrollBar::sub-line:pressed { - background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #969696, stop:0.5 #c9c9c9, stop:1 #969696 ); + background: #262b30; } QScrollBar::add-line:disabled, QScrollBar::sub-line:disabled { - background: #747474; + background: #262b30; } /* arrow button arrows */ @@ -253,6 +243,14 @@ QScrollBar::up-arrow:vertical, QScrollBar::down-arrow:vertical { height: 5px; } +QScrollBar::left-arrow:horizontal, QScrollBar::right-arrow:horizontal { + margin-top: 3px; +} + +QScrollBar::up-arrow:vertical, QScrollBar::down-arrow:vertical { + margin-left: 3px; +} + QScrollBar::left-arrow:horizontal { background-image: url(resources:sbarrow_left.png);} QScrollBar::right-arrow:horizontal { background-image: url(resources:sbarrow_right.png);} QScrollBar::up-arrow:vertical { background-image: url(resources:sbarrow_up.png);} @@ -265,19 +263,23 @@ QScrollBar::down-arrow:vertical:disabled { background-image: url(resources:sbarr /* background for song editor and bb-editor */ TrackContainerView QFrame{ - background-color: #49515b; + background-color: #262b30; +} + +/* background for track controls */ +TrackView > QWidget{ + background-color: #3B424A; } + /* autoscroll, loop, stop behaviour toggle buttons */ /* track background colors */ TrackContentWidget { - qproperty-darkerColor: qlineargradient(x1:0, y1:0, x2:0, y2:1, - stop:0 rgb( 50, 50, 50 ), stop:0.33 rgb( 20, 20, 20 ), stop:1 rgb( 15, 15, 15 ) ); - qproperty-lighterColor: qlineargradient(x1:0, y1:0, x2:0, y2:1, - stop:0 rgb( 50, 50, 50 ), stop:0.33 rgb( 40, 40, 40 ), stop:1 rgb( 30, 30, 30 ) ); - qproperty-gridColor: rgba( 0, 0, 0, 160 ); - qproperty-embossColor: rgba( 140, 140, 140, 64 ); + qproperty-darkerColor: #0C0E0F; + qproperty-lighterColor: #14151A; + qproperty-gridColor: #262B30; + qproperty-embossColor: rgba( 0, 0, 0, 0 ); } @@ -289,7 +291,7 @@ TrackOperationsWidget > QPushButton { min-height: 26px; min-width: 26px; background: none; - border:none; + border: none; } TrackOperationsWidget > QPushButton::menu-indicator { @@ -313,12 +315,6 @@ TrackOperationsWidget > QPushButton::menu-indicator:checked 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 { @@ -328,8 +324,8 @@ nameLabel, effectLabel, sf2InstrumentView > QLabel { /* main toolbar sliders (master vol, master pitch) */ AutomatableSlider::groove:vertical { - background: rgba(0,0,0, 128); - border: 1px inset rgba(100,100,100, 64); + background: #040506; + border: none; border-radius: 2px; width: 2px; margin: 2px 2px; @@ -347,41 +343,41 @@ AutomatableSlider::handle:vertical { /* window that shows up when you add effects */ EffectSelectDialog QScrollArea { - background: #5b6571; + background: #262b30; } /* the inner boxes in LADSPA effect windows */ EffectControlDialog QGroupBox { - background: #49515b; + background: #262b30; margin-top: 1ex; padding: 10px 2px 1px; border-radius: 4px; - border: 1px solid rgba(0,0,0, 64); + border: none; } /* the inner box titles when present (channel 1, channel 2...) */ EffectControlDialog QGroupBox::title { subcontrol-origin: margin; - subcontrol-position: top left; - background: #7b838d; - color: white; + subcontrol-position: top center; + background: #262b30; + color: #d1d8e4; border-radius: 2px; - border: 1px solid rgba(0,0,0, 64); + border: none; padding: 2px 1px; } /* main toolbar */ QWidget#mainToolbar { - background: qlineargradient(x1:0, y1:0, x2:1, y2:1, stop:0 #98a2a7, stop:1 #5b646f); + background: qlineargradient(spread:reflect, x1:0, y1:0, x2:0, y2:1, stop:0 #373f47, stop:1 #1d2122); } /* smaller toolbars */ QToolBar { - background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #98a2a7, stop:1 #5b646f); + background: qlineargradient(spread:reflect, x1:0, y1:0, x2:0, y2:1, stop:0 #434b57, stop:1 #22252c); border: none; padding: 2px; spacing: 0; @@ -392,117 +388,142 @@ QToolBar::separator { width: 5px; } +/* all tool buttons */ + QToolButton { - padding: 1px 1px 1px 1px; - border-radius: 5px; - border: 1px solid rgba(63, 63, 63, 128); - background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #98a2a7, stop:1 #5b646f); + margin: 1px; + padding: 2px 2px 2px 2px; + border-top: 1px solid #778394; + border-bottom: 1px solid #1e2226; + border-radius: 2px; + background: qlineargradient(spread:reflect, x1:0, y1:0, x2:0, y2:1 stop:0 #636c7a, stop:1 #343840); font-size:10px; - color: black; -} - -/* separate corner rounding for play and stop buttons! */ - -QToolButton#playButton { - border-top-left-radius: 10px 10px; - border-bottom-left-radius: 10px 10px; -} - -QToolButton#stopButton { - border-top-right-radius: 10px 10px; - border-bottom-right-radius: 10px 10px; + color: #fff; } -/* record and record-accompany can be styled with #recordButton and #recordAccompanyButton respectively */ - -/* all tool buttons */ - QToolButton:hover { - background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #c0cdd3, stop:1 #71797d); - color: white; + border-top: 1px solid #909eb3; + border-bottom: 1px solid #1e2226; + border-radius: 2px; + background: qlineargradient(spread:reflect, x1:0, y1:0, x2:0, y2:1, stop:0 #7c8799, stop:1 #343840) } QToolButton: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; - color: white; + border-top: 1px solid #778394; + border-bottom: 1px solid #1e2226; + border-radius: 2px; + background: qlineargradient(spread:reflect, x1:0, y1:0, x2:0, y2:1, stop:0 #636c7a, stop:1 #262b30); } QToolButton: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 ); - padding: 2px 1px 0px 1px; - color: black; + border-top: 1px solid #1b1f22; + border-bottom: 1px solid #4a515e; + background: qlineargradient(spread:reflect, x1:0, y1:0, x2:0, y2:1, stop:0 #1b1f22, stop:1 #13161a); + background-image: url(resources:shadow_p.png); } /* track label buttons - the part that contains the icon and track title */ TrackLabelButton { - background-color: #5b6571; - color: #c9c9c9; + background-color: #3B424A; + border: 1px solid #3B424A; 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; + background: #3B424A; + border: 1px solid #515B66; + border-radius: none; + font-size: 11px; + font-weight: normal; + padding: 2px 1px; } 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; + background: #262B30; + border-radius: none; + font-size: 11px; + font-weight: normal; + padding: 2px 1px; } 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 ); + border: 1px solid #485059; + background: #1C1F24; + background-image: url(resources:track_shadow_p.png); + border-radius: none; + font-size: 11px; + font-weight: normal; + padding: 2px 1px; } 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 ); + border: 1px solid #2f353b; + background: #0e1012; + background-image: url(resources:track_shadow_p.png); + font-size: 11px; + padding: 2px 1px; + font-weight: solid; } /* sidebar, sidebar buttons */ SideBar { - background: qlineargradient(x1:0, y1:0, x2:1, y2:0, stop: 0 #98a2a7, stop: 1.0 #5b646f); + subcontrol-position: center; + background: qlineargradient(spread:reflect, x1:0, y1:0, x2:0, y2:1, stop:0 #1D2122, stop:1 #262B30); } SideBar QToolButton { + background: none; + border: none; + font-size: 12px; +} + +SideBar QToolButton:hover { + background: none; + border: none; + font-size: 12px; +} + +SideBar QToolButton:pressed { + background: none; + border: none; + font-size: 12px; +} + +SideBar QToolButton:checked { + background: none; + border: none; font-size: 12px; } /* Instrument plugin list */ PluginDescList { - background-color: #5b6571; + background-color: #131517; } PluginDescWidget { - background-color: #e0e0e0; - color: #404040; - border: 1px solid rgb(64, 64, 64); + border-top: 1px solid #3E474F; + border-bottom: 1px solid #101314; + border-radius: 2px; + background-color: qlineargradient(spread:reflect, x1:0, y1:0, x2:0, y2:1, stop:0 #2E343B, stop:1 #1E2326); + color: #d1d8e4; + font-weight: bold; margin: 0px; } PluginDescWidget:hover { - background-color: #e0e0e0; + background-color: qlineargradient(spread:reflect, x1:0, y1:0, x2:0, y2:1, stop:0 #2E343B, stop:1 #1E2326); + color: #d1d8e4; +} + +/* piano widget */ + +PianoView { + background-color: #14171a; } /* font sizes for text buttons */ @@ -512,28 +533,55 @@ FxMixerView QPushButton, EffectRackView QPushButton, ControllerRackView QPushBut } FxLine { - background: #5b6571; - color: #e0e0e0; - qproperty-backgroundActive: qlineargradient(spread:reflect, x1:0, y1:0, x2:1, y2:0, - stop:0 #7b838d, stop:1 #6b7581 ); - qproperty-strokeOuterActive: rgb( 0, 0, 0 ); - qproperty-strokeOuterInactive: rgba( 0, 0, 0, 50 ); - qproperty-strokeInnerActive: rgba( 255, 255, 255, 100 ); - qproperty-strokeInnerInactive: rgba( 255, 255, 255, 50 ); + background: #14161A; + color: #d1d8e4; + qproperty-backgroundActive: #3B424A; + qproperty-strokeOuterActive: #262B30; + qproperty-strokeOuterInactive: #262B30; + qproperty-strokeInnerActive: #0C0D0F; + qproperty-strokeInnerInactive: #0C0D0F; } /* persistent peak markers for fx peak meters */ Fader { - qproperty-peakGreen: rgb( 74, 253, 133); - qproperty-peakRed: rgb( 255, 100, 100); -} - -TimeLine { - font-size: 8px; + qproperty-peakGreen: #0BD556; + qproperty-peakRed: #660505; +} + +TimeLineWidget { + /* font-size only supports px and pt. */ + font-size: 7pt; + /* lengths also support em. This will make sure that the height + will always change in the same proportion as the font size + defined above. + If you want a fixed size set min and max to the same value. */ + min-height: 1.5em; + max-height: 1.5em; + + /* Properties for the loop indicator rectangle in inactive state: + - LoopColor: Color of the outermost border + - LoopBrush: Brush to paint the main portion of the rectangle + - LoopInnerColor: Color used to paint the inlayed border */ + qproperty-inactiveLoopColor: #3B424A; + qproperty-inactiveLoopBrush: #3B424A; + qproperty-inactiveLoopInnerColor: #3B424A; + + /* Properties for the loop indicator rectangle in active state. + See above for detailed description. */ + qproperty-activeLoopColor: #21A14F; + qproperty-activeLoopBrush: #21A14F; + qproperty-activeLoopInnerColor: #21A14F; + + /* Vertical padding for the loop indicator rectangle. + A value of zero draws the rectangle at the full height of the widget. */ + qproperty-loopRectangleVerticalPadding: 1; + + qproperty-barLineColor: rgb( 192, 192, 192 ); + qproperty-barNumberColor: rgb( 192, 192, 192 ); } QTreeView { - alternate-background-color: #747474; + alternate-background-color: #111314; } TrackContainerView QLabel @@ -545,42 +593,75 @@ TrackContainerView QLabel /* common pattern colors */ TrackContentObjectView { - qproperty-mutedColor: rgb( 128, 128, 128 ); - qproperty-mutedBackgroundColor: rgb( 80, 80, 80 ); - qproperty-selectedColor: rgb( 0, 125, 255 ); - qproperty-textColor: rgb( 255, 255, 255 ); - qproperty-textShadowColor: rgb( 0, 0, 0 ); - qproperty-gradient: true; + qproperty-mutedColor: rgb(255,255,255,100); + qproperty-mutedBackgroundColor: #373d48; + qproperty-selectedColor: #006B65; + qproperty-BBPatternBackground: #373d48; + qproperty-textColor: #fff; + qproperty-textShadowColor: rgb(0,0,0,200); + qproperty-gradient: false; /* boolean property, set true to have a gradient */ } /* instrument pattern */ PatternView { - background-color: rgb( 119, 199, 216 ); - color: rgb( 187, 227, 236 ); + background-color: #21A14F; + color: rgba(255,255,255,220); } /* sample track pattern */ SampleTCOView { - background-color: rgb( 74, 253, 133 ); - color: rgb( 187, 227, 236 ); + background-color: #261657; + color: #100A26; } /* automation pattern */ AutomationPatternView { - background-color: #99afff; - color: rgb( 204, 215, 255 ); + background-color: #4D0818; + color: rgba(0,0,0,130); } /* bb-pattern */ BBTCOView { - background-color: rgb( 128, 182, 175 ); /* default colour for bb-tracks */ + background-color: #20BDB2; /* default colour for bb-tracks */ +} + +/* Subwindows in MDI-Area */ +SubWindow { + color: qlineargradient(spread:reflect, x1:0, y1:0, x2:0, y2:1, stop:0 #090909, stop:0.05 #3D454F, stop:1 #262B30); + qproperty-activeColor: qlineargradient(spread:reflect, x1:0, y1:0, x2:0, y2:1 stop:0 #090909, stop:0.05 #636c7a, stop:1 #343840); + qproperty-textShadowColor: #000; + qproperty-borderColor: #5c6b7a; } +/* Subwindow title text */ +SubWindow > QLabel { + color: #d1d8e4; + font-size: 12px; + font-style: normal; +} + +/* SubWindow titlebar button */ +SubWindow > QPushButton { + background-color: rgba( 255, 255, 255, 0% ); + border-width: 0px; + border-color: none; + border-style: none; +} + +SubWindow > QPushButton:hover{ + background-color: rgba( 255, 255, 255, 15% ); + border-width: 1px; + border-color: rgba( 0, 0, 0, 20% ); + border-style: solid; + border-radius: 2px; +} + + /* Plugins */ TripleOscillatorView Knob { - color: rgb(255, 255, 255); - qproperty-outerColor: rgb(255, 255, 255); + color: rgb(255,255,255); + qproperty-outerColor: rgb(255,255,255); qproperty-innerRadius: 2; qproperty-outerRadius: 7; qproperty-centerPointX: 13.0; @@ -775,18 +856,17 @@ NesInstrumentView Knob { /* 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; + qproperty-background: #262b30; + qproperty-windowText: #1de276; + qproperty-base: #101213; + qproperty-text: #d1d8e4; + qproperty-button: #3f4750; + qproperty-shadow: rgb(0,0,0); + qproperty-buttonText: #d1d8e4; + qproperty-brightText: #d1d8e4; + qproperty-highlight: #262b30; + qproperty-highlightedText: #d1d8e4; /* the next two are used for whatsthis dialogs */ - qproperty-toolTipText: #000; - qproperty-toolTipBase: #c9c9c9; + qproperty-toolTipText: #d1d8e4; + qproperty-toolTipBase: #101213; } - diff --git a/data/themes/default/tempo_sync.png b/data/themes/default/tempo_sync.png old mode 100644 new mode 100755 index 4cd3f082a85..a4a7efd678b Binary files a/data/themes/default/tempo_sync.png and b/data/themes/default/tempo_sync.png differ diff --git a/data/themes/default/text_block.png b/data/themes/default/text_block.png old mode 100644 new mode 100755 index e69a9f24688..7f140ba16b1 Binary files a/data/themes/default/text_block.png and b/data/themes/default/text_block.png differ diff --git a/data/themes/default/text_bold.png b/data/themes/default/text_bold.png old mode 100644 new mode 100755 index 9abb008bc46..ae81c6f603a Binary files a/data/themes/default/text_bold.png and b/data/themes/default/text_bold.png differ diff --git a/data/themes/default/text_center.png b/data/themes/default/text_center.png old mode 100644 new mode 100755 index eb8428fd37f..f6527462425 Binary files a/data/themes/default/text_center.png and b/data/themes/default/text_center.png differ diff --git a/data/themes/default/text_italic.png b/data/themes/default/text_italic.png old mode 100644 new mode 100755 index f2d5823682f..b3b72f11789 Binary files a/data/themes/default/text_italic.png and b/data/themes/default/text_italic.png differ diff --git a/data/themes/default/text_left.png b/data/themes/default/text_left.png old mode 100644 new mode 100755 index ae817ca8878..fdaa4a7fceb Binary files a/data/themes/default/text_left.png and b/data/themes/default/text_left.png differ diff --git a/data/themes/default/text_right.png b/data/themes/default/text_right.png old mode 100644 new mode 100755 index 38129a211be..dc7310a7109 Binary files a/data/themes/default/text_right.png and b/data/themes/default/text_right.png differ diff --git a/data/themes/default/text_under.png b/data/themes/default/text_under.png old mode 100644 new mode 100755 index 4504d7c0036..b1275366aab Binary files a/data/themes/default/text_under.png and b/data/themes/default/text_under.png differ diff --git a/data/themes/default/toolbar_bg.png b/data/themes/default/toolbar_bg.png new file mode 100755 index 00000000000..51c3ae91c3f Binary files /dev/null and b/data/themes/default/toolbar_bg.png differ diff --git a/data/themes/default/track_op_grip.png b/data/themes/default/track_op_grip.png old mode 100644 new mode 100755 index d1dec24b853..415a5713c48 Binary files a/data/themes/default/track_op_grip.png and b/data/themes/default/track_op_grip.png differ diff --git a/data/themes/default/track_op_menu.png b/data/themes/default/track_op_menu.png old mode 100644 new mode 100755 index 4e03eb35112..50c2b478cfe Binary files a/data/themes/default/track_op_menu.png and b/data/themes/default/track_op_menu.png differ diff --git a/data/themes/default/track_op_menu_active.png b/data/themes/default/track_op_menu_active.png old mode 100644 new mode 100755 index 5759cd7bbb4..b26dd6ef26a Binary files a/data/themes/default/track_op_menu_active.png and b/data/themes/default/track_op_menu_active.png differ diff --git a/data/themes/default/track_shadow_c.png b/data/themes/default/track_shadow_c.png new file mode 100755 index 00000000000..c2b909be60f Binary files /dev/null and b/data/themes/default/track_shadow_c.png differ diff --git a/data/themes/default/track_shadow_p.png b/data/themes/default/track_shadow_p.png new file mode 100644 index 00000000000..e85b49e46e5 Binary files /dev/null and b/data/themes/default/track_shadow_p.png differ diff --git a/data/themes/default/trackop.png b/data/themes/default/trackop.png old mode 100644 new mode 100755 index bc089652ecd..b26dd6ef26a Binary files a/data/themes/default/trackop.png and b/data/themes/default/trackop.png differ diff --git a/data/themes/default/trackop_c.png b/data/themes/default/trackop_c.png old mode 100644 new mode 100755 index 418e4f8eb48..b26dd6ef26a Binary files a/data/themes/default/trackop_c.png and b/data/themes/default/trackop_c.png differ diff --git a/data/themes/default/trackop_h.png b/data/themes/default/trackop_h.png old mode 100644 new mode 100755 index b88839a0d34..b26dd6ef26a Binary files a/data/themes/default/trackop_h.png and b/data/themes/default/trackop_h.png differ diff --git a/data/themes/default/triangle_wave_active.png b/data/themes/default/triangle_wave_active.png old mode 100644 new mode 100755 index f3ef94abc01..798c1fb2590 Binary files a/data/themes/default/triangle_wave_active.png and b/data/themes/default/triangle_wave_active.png differ diff --git a/data/themes/default/triangle_wave_inactive.png b/data/themes/default/triangle_wave_inactive.png old mode 100644 new mode 100755 index 08d04971644..a7bc8d6a292 Binary files a/data/themes/default/triangle_wave_inactive.png and b/data/themes/default/triangle_wave_inactive.png differ diff --git a/data/themes/default/uhoh.png b/data/themes/default/uhoh.png old mode 100644 new mode 100755 index 09dc577df6e..d739e359d3f Binary files a/data/themes/default/uhoh.png and b/data/themes/default/uhoh.png differ diff --git a/data/themes/default/unavailable_sound.png b/data/themes/default/unavailable_sound.png old mode 100644 new mode 100755 index 7a3106541bf..bd8e629f1e3 Binary files a/data/themes/default/unavailable_sound.png and b/data/themes/default/unavailable_sound.png differ diff --git a/data/themes/default/unknown_file.png b/data/themes/default/unknown_file.png old mode 100644 new mode 100755 index 94f96d730f5..0d01ebdf276 Binary files a/data/themes/default/unknown_file.png and b/data/themes/default/unknown_file.png differ diff --git a/data/themes/default/usr_wave_active.png b/data/themes/default/usr_wave_active.png old mode 100644 new mode 100755 index 2309967d5d4..01ddbfddcd8 Binary files a/data/themes/default/usr_wave_active.png and b/data/themes/default/usr_wave_active.png differ diff --git a/data/themes/default/usr_wave_inactive.png b/data/themes/default/usr_wave_inactive.png old mode 100644 new mode 100755 index a10a3e4544d..610d7605584 Binary files a/data/themes/default/usr_wave_inactive.png and b/data/themes/default/usr_wave_inactive.png differ diff --git a/data/themes/default/vst_plugin_file.png b/data/themes/default/vst_plugin_file.png old mode 100644 new mode 100755 index caca1e4c573..6f5135a5fb4 Binary files a/data/themes/default/vst_plugin_file.png and b/data/themes/default/vst_plugin_file.png differ diff --git a/data/themes/default/whatsthis.png b/data/themes/default/whatsthis.png old mode 100644 new mode 100755 index cad033f4dfd..5761d22ed55 Binary files a/data/themes/default/whatsthis.png and b/data/themes/default/whatsthis.png differ diff --git a/data/themes/default/white_key.png b/data/themes/default/white_key.png old mode 100644 new mode 100755 index 7fee692ae6a..622a3a2fb4d Binary files a/data/themes/default/white_key.png and b/data/themes/default/white_key.png differ diff --git a/data/themes/default/white_key_pressed.png b/data/themes/default/white_key_pressed.png old mode 100644 new mode 100755 index dffb43dedaa..46cc1465a36 Binary files a/data/themes/default/white_key_pressed.png and b/data/themes/default/white_key_pressed.png differ diff --git a/data/themes/default/white_noise_wave_active.png b/data/themes/default/white_noise_wave_active.png old mode 100644 new mode 100755 index 38b089c63d7..c41d1922c41 Binary files a/data/themes/default/white_noise_wave_active.png and b/data/themes/default/white_noise_wave_active.png differ diff --git a/data/themes/default/white_noise_wave_inactive.png b/data/themes/default/white_noise_wave_inactive.png old mode 100644 new mode 100755 index 9a35c9d1667..f4fb1a5e8d0 Binary files a/data/themes/default/white_noise_wave_inactive.png and b/data/themes/default/white_noise_wave_inactive.png differ diff --git a/data/themes/default/zoom.png b/data/themes/default/zoom.png old mode 100644 new mode 100755 index cfb50f5436a..0fea3dfda43 Binary files a/data/themes/default/zoom.png and b/data/themes/default/zoom.png differ diff --git a/data/themes/default/zoom_x.png b/data/themes/default/zoom_x.png old mode 100644 new mode 100755 index 435cc440c58..49bd6c0c06d Binary files a/data/themes/default/zoom_x.png and b/data/themes/default/zoom_x.png differ diff --git a/data/themes/default/zoom_y.png b/data/themes/default/zoom_y.png old mode 100644 new mode 100755 index 906d070e962..f1107e0ec63 Binary files a/data/themes/default/zoom_y.png and b/data/themes/default/zoom_y.png differ diff --git a/data/wavetables/CMakeLists.txt b/data/wavetables/CMakeLists.txt index 9089171cc2b..9491c45c53d 100644 --- a/data/wavetables/CMakeLists.txt +++ b/data/wavetables/CMakeLists.txt @@ -1,2 +1,3 @@ FILE(GLOB WAVETABLES *.bin) +LIST(SORT WAVETABLES) INSTALL(FILES ${WAVETABLES} DESTINATION "${LMMS_DATA_DIR}/wavetables") diff --git a/doc/lmms.1 b/doc/lmms.1 index bed99fd1d6d..b9c297caf63 100644 --- a/doc/lmms.1 +++ b/doc/lmms.1 @@ -2,7 +2,7 @@ .\" 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 "June 23, 2015" +.TH LMMS 1 "February 17, 2016" .\" Please adjust this date whenever revising the manpage. .\" .\" Some roff macros, for reference: @@ -19,13 +19,58 @@ lmms \- software for easy music production .SH SYNOPSIS .B lmms +.RB "[ \--\fBallowroot\fP ]" +.br +.B lmms +.RB "[ \--\fBbitrate\fP \fIbitrate\fP ]" +.br +.B lmms +.RB "[ \--\fBconfig\fP \fIconfigfile\fP ]" +.br +.B lmms +.RB "[ \--\fBdump\fP \fIin\fP ]" +.br +.B lmms +.RB "[ \--\fBfloat\fP ]" +.br +.B lmms +.RB "[ \--\fBformat\fP \fIformat\fP ]" +.br +.B lmms +.RB "[ \--\fBgeometry\fP \fIgeometry\fP ]" +.br +.B lmms +.RB "[ \--\fBhelp\fP ]" +.br +.B lmms +.RB "[ \--\interpolation\fP \fImethod\fP ]" +.br +.B lmms +.RB "[ \--\fBimport\fP \fIin\fP [ \-e ] ]" +.br +.B lmms +.RB "[ \--\fBloop\fP ]" +.br +.B lmms +.RB "[ \--\fBoutput\fP \fIpath\fP ]" +.br +.B lmms +.RB "[ \--\fBoversampling\fP \fIvalue\fP ]" +.br +.B lmms +.RB "[ \--\fBprofile\fP \fIout\fP ]" +.br +.B lmms .RB "[ \--\fBrender\fP \fIfile\fP ] [options]" .br .B lmms +.RB "[ \--\fBsamplerate\fP \fIsamplerate\fP ]" +.br +.B lmms .RB "[ \--\fBupgrade\fP \fIin\fP \fIout\fP ]" .br .B lmms -.RB "[ \--\fBdump\fP \fIin\fP ]" +.RB "[ \--\fBversion\fP ]" .br .B lmms .RI "[ file ]" @@ -40,38 +85,54 @@ LMMS is a free cross-platform alternative to commercial programs like FL Studio 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\-r, --rendertracks\fP \fIproject-file\fP -Render each track into a separate wav\- or ogg\-file. See \fB\-f\fP for details +.IP "\fB\-a, --float\fP +32bit float bit depth +.IP "\fB\-b, --bitrate\fP \fIbitrate\fP +Specify output bitrate in KBit/s (for OGG encoding only), default is 160 +.IP "\fB\-c, --config\fP \fIconfigfile\fP +Get the configuration from \fIconfigfile\fP instead of ~/.lmmsrc.xml (default) +.IP "\fB\-d, --dump\fP \fIin\fP +Dump XML of compressed file \fIin\fP (i.e. MMPZ-file) +.IP "\fB\-f, --format\fP \fIformat\fP +Specify format of render-output where \fIformat\fP is either 'wav' or 'ogg' +.IP "\fB\ --geometry\fP \fIgeometry\fP +Specify the prefered size and position of the main window +.br +\fIgeometry\fP syntax is <\fIxsize\fPx\fIysize\fP+\fIxoffset\fP+\fIyoffset\fP>. +.br +Default: full screen +.IP "\fB\-h, --help\fP +Show usage information and exit. +.IP "\fB\-i, --interpolation\fP \fImethod\fP +Specify interpolation method - possible values are \fIlinear\fP, \fIsincfastest\fP (default), \fIsincmedium\fP, \fIsincbest\fP +.IP "\fB\ --import\fP \fIin\fP \fB\-e\fP +Import MIDI file \fIin\fP +.br +If -e is specified lmms exits after importing the file. +.IP "\fB\-l, --loop +Render the given file as a loop, i.e. stop rendering at exactly the end of the song. Additional silence or reverb tails at the end of the song are not rendered. .IP "\fB\-o, --output\fP \fIpath\fP Render into \fIpath\fP .br For --render, this is interpreted as a file path. .br For --render-tracks, this is interpreted as a path to an existing directory. -.IP "\fB\-f, --format\fP \fIformat\fP -Specify format of render-output where \fIformat\fP is either 'wav' or 'ogg' +IP "\fB\-p, --profile\fP \fIout\fP +Dump profiling information to file \fIout\fP +.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\-r, --rendertracks\fP \fIproject-file\fP +Render each track into a separate wav\- or ogg\-file. See \fB\-f\fP for details .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 KBit/s (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\-l, --loop -Render the given file as a loop, i.e. stop rendering at exactly the end of the song. Additional silence or reverb tails at the end of the song are not rendered. .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\-x, --oversampling\fP \fIvalue\fP +Specify oversampling, possible values: 1, 2 (default), 4, 8 .IP "\fB\ --allowroot Bypass root user startup check (use with caution). -.IP "\fB\-h, --help -Show usage information and exit. .SH SEE ALSO .BR https://lmms.io/ .BR https://lmms.io/documentation/ diff --git a/include/AtomicInt.h b/include/AtomicInt.h index 46da8ab5f3d..3fd564d73f4 100644 --- a/include/AtomicInt.h +++ b/include/AtomicInt.h @@ -6,20 +6,40 @@ #include -#if QT_VERSION >= 0x050000 && QT_VERSION <= 0x050300 +#if QT_VERSION < 0x050300 class AtomicInt : public QAtomicInt { public: - AtomicInt(int value=0) : QAtomicInt(value) {}; + AtomicInt( int value = 0 ) : + QAtomicInt( value ) + { + } + + int fetchAndAndOrdered( int valueToAnd ) + { + int value; + do + { + value = (int)*this; + } + while( !testAndSetOrdered( value, value & valueToAnd ) ); + return value; + } + +#if QT_VERSION >= 0x050000 && QT_VERSION < 0x050300 + operator int() const + { + return loadAcquire(); + } +#endif - operator int() const {return loadAcquire();} }; #else typedef QAtomicInt AtomicInt; -#endif // QT_VERSION >= 0x050000 && QT_VERSION <= 0x050300 +#endif // QT_VERSION < 0x050300 #endif diff --git a/include/AudioAlsa.h b/include/AudioAlsa.h index 570b8600575..3e6c2417d8d 100644 --- a/include/AudioAlsa.h +++ b/include/AudioAlsa.h @@ -33,6 +33,7 @@ #define ALSA_PCM_NEW_HW_PARAMS_API #include +#include #include "AudioDevice.h" diff --git a/include/AudioDevice.h b/include/AudioDevice.h index 0782035b7dd..cb635f10a08 100644 --- a/include/AudioDevice.h +++ b/include/AudioDevice.h @@ -25,15 +25,15 @@ #ifndef AUDIO_DEVICE_H #define AUDIO_DEVICE_H -#include #include -#include +#include -#include "Mixer.h" -#include "TabWidget.h" +#include "lmms_basics.h" class AudioPort; +class Mixer; +class QThread; class AudioDevice @@ -133,6 +133,8 @@ class AudioDevice bool hqAudio() const; + static void stopProcessingThread( QThread * thread ); + protected: bool m_supportsCapture; diff --git a/include/AudioDeviceSetupWidget.h b/include/AudioDeviceSetupWidget.h index 6e23b315342..023217bdb84 100644 --- a/include/AudioDeviceSetupWidget.h +++ b/include/AudioDeviceSetupWidget.h @@ -30,6 +30,7 @@ class AudioDeviceSetupWidget : public TabWidget { + Q_OBJECT public: AudioDeviceSetupWidget( const QString & _caption, QWidget * _parent ); diff --git a/include/AudioDummy.h b/include/AudioDummy.h index 993dbccae99..b026a6e2067 100644 --- a/include/AudioDummy.h +++ b/include/AudioDummy.h @@ -28,6 +28,7 @@ #include "AudioDevice.h" #include "AudioDeviceSetupWidget.h" #include "MicroTimer.h" +#include "Mixer.h" class AudioDummy : public AudioDevice, public QThread @@ -83,11 +84,7 @@ class AudioDummy : public AudioDevice, public QThread virtual void stopProcessing() { - if( isRunning() ) - { - wait( 1000 ); - terminate(); - } + stopProcessingThread( this ); } virtual void run() @@ -101,7 +98,10 @@ class AudioDummy : public AudioDevice, public QThread { break; } - delete[] b; + if( mixer()->hasFifoWriter() ) + { + delete[] b; + } const int microseconds = static_cast( mixer()->framesPerPeriod() * 1000000.0f / mixer()->processingSampleRate() - timer.elapsed() ); if( microseconds > 0 ) diff --git a/include/AudioOss.h b/include/AudioOss.h index 76dbeecb8c9..8c6295d675c 100644 --- a/include/AudioOss.h +++ b/include/AudioOss.h @@ -29,6 +29,8 @@ #ifdef LMMS_HAVE_OSS +#include + #include "AudioDevice.h" #include "AudioDeviceSetupWidget.h" diff --git a/include/AudioPort.h b/include/AudioPort.h index 7412d5eb591..52d3b8ad048 100644 --- a/include/AudioPort.h +++ b/include/AudioPort.h @@ -29,7 +29,6 @@ #include #include -#include "Mixer.h" #include "MemoryManager.h" #include "PlayHandle.h" diff --git a/include/AudioPortAudio.h b/include/AudioPortAudio.h index cbc26b8c9ca..74bb07ab1ac 100644 --- a/include/AudioPortAudio.h +++ b/include/AudioPortAudio.h @@ -47,6 +47,8 @@ public slots: #include +#include + #include "AudioDevice.h" #include "AudioDeviceSetupWidget.h" diff --git a/include/AudioPulseAudio.h b/include/AudioPulseAudio.h index fc2f77bd432..11a05fbf6e0 100644 --- a/include/AudioPulseAudio.h +++ b/include/AudioPulseAudio.h @@ -30,6 +30,8 @@ #ifdef LMMS_HAVE_PULSEAUDIO #include +#include +#include #include "AudioDevice.h" #include "AudioDeviceSetupWidget.h" @@ -70,6 +72,8 @@ class AudioPulseAudio : public AudioDevice, public QThread void streamWriteCallback( pa_stream * s, size_t length ); + void signalConnected( bool connected ); + pa_stream * m_s; pa_sample_spec m_sampleSpec; @@ -84,6 +88,9 @@ class AudioPulseAudio : public AudioDevice, public QThread bool m_convertEndian; + bool m_connected; + QSemaphore m_connectedSemaphore; + } ; #endif diff --git a/include/AudioSndio.h b/include/AudioSndio.h new file mode 100644 index 00000000000..b956c99b8d2 --- /dev/null +++ b/include/AudioSndio.h @@ -0,0 +1,55 @@ +#ifndef _AUDIO_SNDIO_H +#define _AUDIO_SNDIO_H + +#include "lmmsconfig.h" + +#ifdef LMMS_HAVE_SNDIO + +#include +#include + +#include "AudioDevice.h" +#include "AudioDeviceSetupWidget.h" + +class LcdSpinBox; +class QLineEdit; + + +class AudioSndio : public AudioDevice, public QThread +{ +public: + AudioSndio( bool & _success_ful, Mixer * _mixer ); + virtual ~AudioSndio(); + + inline static QString name( void ) + { + return QT_TRANSLATE_NOOP( "setupWidget", "sndio" ); + } + + class setupWidget : public AudioDeviceSetupWidget + { + public: + setupWidget( QWidget * _parent ); + virtual ~setupWidget(); + + virtual void saveSettings( void ); + + private: + QLineEdit * m_device; + LcdSpinBox * m_channels; + } ; + +private: + virtual void startProcessing( void ); + virtual void stopProcessing( void ); + virtual void applyQualitySettings( void ); + virtual void run( void ); + + struct sio_hdl *m_hdl; + struct sio_par m_par; +} ; + + +#endif /* LMMS_HAVE_SNDIO */ + +#endif /* _AUDIO_SNDIO_H */ diff --git a/include/AudioSoundIo.h b/include/AudioSoundIo.h index 5816bc52bb4..4912e685015 100644 --- a/include/AudioSoundIo.h +++ b/include/AudioSoundIo.h @@ -45,6 +45,8 @@ class AudioSoundIoSetupUtil : public QObject { Q_OBJECT public: + virtual ~AudioSoundIoSetupUtil(); + void *m_setupWidget; public slots: void updateDevices(); diff --git a/include/AutomatableModel.h b/include/AutomatableModel.h index 9f53c9451a3..acefc95c34f 100644 --- a/include/AutomatableModel.h +++ b/include/AutomatableModel.h @@ -297,7 +297,7 @@ public slots: //! max() and aligned according to the step size (step size 0.05 -> value //! 0.12345 becomes 0.10 etc.). You should always call it at the end after //! doing your own calculations. - float fittedValue( float value, bool forceStep = false ) const; + float fittedValue( float value ) const; private: diff --git a/include/AutomationEditor.h b/include/AutomationEditor.h index 23ec6e47ec7..c85ca55befc 100644 --- a/include/AutomationEditor.h +++ b/include/AutomationEditor.h @@ -27,6 +27,7 @@ #define AUTOMATION_EDITOR_H #include +#include #include #include "Editor.h" @@ -162,7 +163,7 @@ protected slots: } ; // some constants... - static const int SCROLLBAR_SIZE = 14; + static const int SCROLLBAR_SIZE = 12; static const int TOP_MARGIN = 16; static const int DEFAULT_Y_DELTA = 6; @@ -186,6 +187,8 @@ protected slots: ComboBoxModel m_zoomingYModel; ComboBoxModel m_quantizeModel; + static const QVector m_zoomXLevels; + FloatModel * m_tensionModel; QMutex m_patternMutex; @@ -252,6 +255,7 @@ protected slots: + class AutomationEditorWindow : public Editor { Q_OBJECT diff --git a/include/AutomationPattern.h b/include/AutomationPattern.h index 58127d02c9c..1ac6dced15a 100644 --- a/include/AutomationPattern.h +++ b/include/AutomationPattern.h @@ -73,7 +73,8 @@ class EXPORT AutomationPattern : public TrackContentObject } void setTension( QString _new_tension ); - virtual MidiTime length() const; + MidiTime timeMapLength() const; + void updateLength(); MidiTime putValue( const MidiTime & _time, const float _value, const bool _quant_pos = true ); diff --git a/include/AutomationPatternView.h b/include/AutomationPatternView.h index dfa94461daf..dfe86d31a98 100644 --- a/include/AutomationPatternView.h +++ b/include/AutomationPatternView.h @@ -44,7 +44,6 @@ class AutomationPatternView : public TrackContentObjectView public slots: /// Opens this view's pattern in the global automation editor void openInAutomationEditor(); - virtual void update(); protected slots: diff --git a/include/BBEditor.h b/include/BBEditor.h index 17ab510ab32..a41533189a5 100644 --- a/include/BBEditor.h +++ b/include/BBEditor.h @@ -84,6 +84,7 @@ public slots: void addSteps(); void cloneSteps(); void removeSteps(); + void addSampleTrack(); void addAutomationTrack(); protected slots: diff --git a/include/BasicFilters.h b/include/BasicFilters.h index 58c811c6fca..4acb551292c 100644 --- a/include/BasicFilters.h +++ b/include/BasicFilters.h @@ -39,7 +39,6 @@ #include #include "lmms_basics.h" -#include "Mixer.h" #include "templates.h" #include "lmms_constants.h" #include "interpolation.h" diff --git a/include/ConfigManager.h b/include/ConfigManager.h index 08224e9902c..39c2e6d4cf5 100644 --- a/include/ConfigManager.h +++ b/include/ConfigManager.h @@ -175,11 +175,6 @@ class EXPORT ConfigManager return m_vstDir; } - const QString & flDir() const - { - return m_flDir; - } - const QString & ladspaDir() const { return m_ladDir; @@ -230,14 +225,13 @@ class EXPORT ConfigManager const QString & value ); void deleteValue( const QString & cls, const QString & attribute); - void loadConfigFile(); + void loadConfigFile( const QString & configFile = "" ); 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 setVersion( const QString & _cv ); void setSTKDir( const QString & _fd ); @@ -260,12 +254,11 @@ class EXPORT ConfigManager void upgrade_1_1_90(); void upgrade(); - const QString m_lmmsRcFile; + QString m_lmmsRcFile; QString m_workingDir; QString m_dataDir; QString m_artworkDir; QString m_vstDir; - QString m_flDir; QString m_ladDir; QString m_gigDir; QString m_sf2Dir; diff --git a/include/Controller.h b/include/Controller.h index e1d2f98621e..554dffbf631 100644 --- a/include/Controller.h +++ b/include/Controller.h @@ -28,9 +28,9 @@ #define CONTROLLER_H #include "Engine.h" -#include "Mixer.h" #include "Model.h" #include "JournallingObject.h" +#include "templates.h" #include "ValueBuffer.h" class ControllerDialog; diff --git a/include/ControllerView.h b/include/ControllerView.h index 8903c0e3c85..df8b6d31025 100644 --- a/include/ControllerView.h +++ b/include/ControllerView.h @@ -62,7 +62,7 @@ public slots: void deleteController(); void displayHelp(); void closeControls(); - + void renameController(); signals: void deleteController( ControllerView * _view ); diff --git a/include/DataFile.h b/include/DataFile.h index 0bc06be8d8d..57882bc0e37 100644 --- a/include/DataFile.h +++ b/include/DataFile.h @@ -122,6 +122,9 @@ class EXPORT DataFile : public QDomDocument void upgrade_0_4_0_20080622(); void upgrade_0_4_0_beta1(); void upgrade_0_4_0_rc2(); + void upgrade_1_0_99(); + void upgrade_1_1_0(); + void upgrade_1_1_91(); void upgrade(); diff --git a/include/DummyInstrument.h b/include/DummyInstrument.h index c369924b754..cd49aaa5703 100644 --- a/include/DummyInstrument.h +++ b/include/DummyInstrument.h @@ -32,6 +32,8 @@ #include +#include "Mixer.h" + class DummyInstrument : public Instrument { diff --git a/include/EffectChain.h b/include/EffectChain.h index 858938b0219..32150393cd0 100644 --- a/include/EffectChain.h +++ b/include/EffectChain.h @@ -28,7 +28,6 @@ #include "Model.h" #include "SerializingObject.h" -#include "Mixer.h" #include "AutomatableModel.h" class Effect; diff --git a/include/EffectSelectDialog.h b/include/EffectSelectDialog.h index 995f14fb159..e034002d724 100644 --- a/include/EffectSelectDialog.h +++ b/include/EffectSelectDialog.h @@ -49,6 +49,7 @@ class EffectSelectDialog : public QDialog protected slots: void acceptSelection(); void rowChanged( const QModelIndex &, const QModelIndex & ); + void sortAgain(); void updateSelection(); diff --git a/include/EnvelopeAndLfoParameters.h b/include/EnvelopeAndLfoParameters.h index 01a31251b20..765bdbfb79e 100644 --- a/include/EnvelopeAndLfoParameters.h +++ b/include/EnvelopeAndLfoParameters.h @@ -179,7 +179,6 @@ public slots: friend class EnvelopeAndLfoView; - friend class FlpImport; } ; diff --git a/include/Fader.h b/include/Fader.h index d21b7fa3138..35f9709541e 100644 --- a/include/Fader.h +++ b/include/Fader.h @@ -63,25 +63,40 @@ class EXPORT Fader : public QWidget, public FloatModelView public: Q_PROPERTY( QColor peakGreen READ peakGreen WRITE setPeakGreen ) Q_PROPERTY( QColor peakRed READ peakRed WRITE setPeakRed ) + Q_PROPERTY( bool levelsDisplayedInDBFS READ getLevelsDisplayedInDBFS WRITE setLevelsDisplayedInDBFS ) + Fader( FloatModel * _model, const QString & _name, QWidget * _parent ); Fader( FloatModel * _model, const QString & _name, QWidget * _parent, QPixmap * back, QPixmap * leds, QPixmap * knob ); virtual ~Fader(); + void init(FloatModel * model, QString const & name); + 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; + inline float getMinPeak() const { return m_fMinPeak; } + inline void setMinPeak(float minPeak) { m_fMinPeak = minPeak; } + + inline float getMaxPeak() const { return m_fMaxPeak; } + inline void setMaxPeak(float maxPeak) { m_fMaxPeak = maxPeak; } + + QColor const & peakGreen() const; void setPeakGreen( const QColor & c ); + + QColor const & peakRed() const; void setPeakRed( const QColor & c ); + + inline bool getLevelsDisplayedInDBFS() const { return m_levelsDisplayedInDBFS; } + inline void setLevelsDisplayedInDBFS(bool value = true) { m_levelsDisplayedInDBFS = value; } void setDisplayConversion( bool b ) { m_displayConversion = b; } + inline void setHintText( const QString & _txt_before, const QString & _txt_after ) { @@ -98,6 +113,11 @@ class EXPORT Fader : public QWidget, public FloatModelView virtual void wheelEvent( QWheelEvent *ev ); virtual void paintEvent( QPaintEvent *ev ); + inline bool clips(float const & value) const { return value > 1.0f; } + + void paintDBFSLevels(QPaintEvent *ev, QPainter & painter); + void paintLinearLevels(QPaintEvent *ev, QPainter & painter); + int knobPosY() const { float fRange = model()->maxValue() - model()->minValue(); @@ -109,12 +129,16 @@ class EXPORT Fader : public QWidget, public FloatModelView void setPeak( float fPeak, float &targetPeak, float &persistentPeak, QTime &lastPeakTime ); int calculateDisplayPeak( float fPeak ); + void updateTextFloat(); + + // Private members +private: float m_fPeakValue_L; float m_fPeakValue_R; float m_persistentPeak_L; float m_persistentPeak_R; - const float m_fMinPeak; - const float m_fMaxPeak; + float m_fMinPeak; + float m_fMaxPeak; QTime m_lastPeakTime_L; QTime m_lastPeakTime_R; @@ -128,12 +152,12 @@ class EXPORT Fader : public QWidget, public FloatModelView QPixmap * m_knob; bool m_displayConversion; + bool m_levelsDisplayedInDBFS; int m_moveStartPoint; float m_startValue; static TextFloat * s_textFloat; - void updateTextFloat(); QColor m_peakGreen; QColor m_peakRed; diff --git a/include/FileBrowser.h b/include/FileBrowser.h index a73a00801b9..3239dcdc9e4 100644 --- a/include/FileBrowser.h +++ b/include/FileBrowser.h @@ -179,7 +179,6 @@ class FileItem : public QTreeWidgetItem SoundFontFile, PatchFile, MidiFile, - FlpFile, VstPluginFile, UnknownFile, NumFileTypes @@ -228,7 +227,6 @@ class FileItem : public QTreeWidgetItem static QPixmap * s_soundfontFilePixmap; static QPixmap * s_vstPluginFilePixmap; static QPixmap * s_midiFilePixmap; - static QPixmap * s_flpFilePixmap; static QPixmap * s_unknownFilePixmap; QString m_path; diff --git a/include/FxLine.h b/include/FxLine.h index c485eceb709..6badedd6518 100644 --- a/include/FxLine.h +++ b/include/FxLine.h @@ -26,14 +26,16 @@ #ifndef FX_LINE_H #define FX_LINE_H +#include +#include #include -#include -#include #include "Knob.h" #include "LcdWidget.h" #include "SendButtonIndicator.h" + + class FxMixerView; class SendButtonIndicator; @@ -75,11 +77,11 @@ class FxLine : public QWidget QColor strokeInnerInactive() const; void setStrokeInnerInactive( const QColor & c ); - static const int FxLineHeight; private: - void drawFxLine( QPainter* p, const FxLine *fxLine, const QString& name, bool isActive, bool sendToThis, bool receiveFromThis ); + void drawFxLine( QPainter* p, const FxLine *fxLine, bool isActive, bool sendToThis, bool receiveFromThis ); + QString elideName( const QString & name ); FxMixerView * m_mv; LcdWidget* m_lcd; @@ -91,17 +93,18 @@ class FxLine : public QWidget QColor m_strokeInnerInactive; static QPixmap * s_sendBgArrow; static QPixmap * s_receiveBgArrow; - - QStaticText m_staticTextName; + bool m_inRename; + QLineEdit * m_renameLineEdit; + QGraphicsView * m_view; private slots: void renameChannel(); + void renameFinished(); void removeChannel(); void removeUnusedChannels(); void moveChannelLeft(); void moveChannelRight(); void displayHelp(); - }; diff --git a/include/FxMixer.h b/include/FxMixer.h index 0c2ac02a5b5..dcff82f31ce 100644 --- a/include/FxMixer.h +++ b/include/FxMixer.h @@ -26,7 +26,6 @@ #define FX_MIXER_H #include "Model.h" -#include "Mixer.h" #include "EffectChain.h" #include "JournallingObject.h" #include "ThreadableJob.h" @@ -202,7 +201,6 @@ class EXPORT FxMixer : public Model, public JournallingObject // make sure we have at least num channels void allocateChannelsTo(int num); - QMutex m_sendsMutex; int m_lastSoloed; diff --git a/include/FxMixerView.h b/include/FxMixerView.h index 08d24fd09b4..6127ebd1be8 100644 --- a/include/FxMixerView.h +++ b/include/FxMixerView.h @@ -30,8 +30,6 @@ #include #include -#include "FxLine.h" -#include "FxMixer.h" #include "ModelView.h" #include "Engine.h" #include "Fader.h" diff --git a/include/InstrumentFunctionViews.h b/include/InstrumentFunctionViews.h index c8c91f302a1..d989c21fb70 100644 --- a/include/InstrumentFunctionViews.h +++ b/include/InstrumentFunctionViews.h @@ -78,6 +78,8 @@ class InstrumentFunctionArpeggioView : public QWidget, public ModelView GroupBox * m_arpGroupBox; ComboBox * m_arpComboBox; Knob * m_arpRangeKnob; + Knob * m_arpSkipKnob; + Knob * m_arpMissKnob; TempoSyncKnob * m_arpTimeKnob; Knob * m_arpGateKnob; diff --git a/include/InstrumentFunctions.h b/include/InstrumentFunctions.h index d6abef16a40..e39580ddec2 100644 --- a/include/InstrumentFunctions.h +++ b/include/InstrumentFunctions.h @@ -196,13 +196,14 @@ class InstrumentFunctionArpeggio : public Model, public JournallingObject BoolModel m_arpEnabledModel; ComboBoxModel m_arpModel; FloatModel m_arpRangeModel; + FloatModel m_arpSkipModel; + FloatModel m_arpMissModel; TempoSyncKnobModel m_arpTimeModel; FloatModel m_arpGateModel; ComboBoxModel m_arpDirectionModel; ComboBoxModel m_arpModeModel; - friend class FlpImport; friend class InstrumentTrack; friend class InstrumentFunctionArpeggioView; diff --git a/include/InstrumentSoundShaping.h b/include/InstrumentSoundShaping.h index 31e8cc75ef9..42176573443 100644 --- a/include/InstrumentSoundShaping.h +++ b/include/InstrumentSoundShaping.h @@ -25,7 +25,6 @@ #ifndef INSTRUMENT_SOUND_SHAPING_H #define INSTRUMENT_SOUND_SHAPING_H -#include "Mixer.h" #include "ComboBoxModel.h" @@ -79,7 +78,6 @@ class InstrumentSoundShaping : public Model, public JournallingObject friend class InstrumentSoundShapingView; - friend class FlpImport; } ; diff --git a/include/InstrumentTrack.h b/include/InstrumentTrack.h index 4067d2d370f..ade3ac400e7 100644 --- a/include/InstrumentTrack.h +++ b/include/InstrumentTrack.h @@ -227,13 +227,13 @@ protected slots: void updateBaseNote(); void updatePitch(); void updatePitchRange(); + void updateEffectChannel(); private: MidiPort m_midiPort; NotePlayHandle* m_notes[NumKeys]; - QMutex m_notesMutex; int m_runningMidiNotes[NumKeys]; QMutex m_midiNotesMutex; @@ -268,7 +268,6 @@ protected slots: friend class InstrumentTrackView; friend class InstrumentTrackWindow; friend class NotePlayHandle; - friend class FlpImport; friend class InstrumentMiscView; } ; diff --git a/include/Knob.h b/include/Knob.h index 0d031ba4fca..723de03185f 100644 --- a/include/Knob.h +++ b/include/Knob.h @@ -65,6 +65,8 @@ class EXPORT Knob : public QWidget, public FloatModelView mapPropertyFromModel(float,volumeRatio,setVolumeRatio,m_volumeRatio); Q_PROPERTY(knobTypes knobNum READ knobNum WRITE setknobNum) + + Q_PROPERTY(QColor textColor READ textColor WRITE setTextColor) void initUi( const QString & _name ); //!< to be called by ctors void onKnobNumUpdated(); //!< to be called when you updated @a m_knobNum @@ -81,35 +83,38 @@ class EXPORT Knob : public QWidget, public FloatModelView setDescription( _txt_before ); setUnit( _txt_after ); } - void setLabel( const QString & _txt ); + void setLabel( const QString & txt ); - void setTotalAngle( float _angle ); + void setTotalAngle( float angle ); // Begin styled knob accessors float innerRadius() const; - void setInnerRadius( float _r ); + void setInnerRadius( float r ); float outerRadius() const; - void setOuterRadius( float _r ); + void setOuterRadius( float r ); knobTypes knobNum() const; - void setknobNum( knobTypes _k ); + void setknobNum( knobTypes k ); QPointF centerPoint() const; float centerPointX() const; - void setCenterPointX( float _c ); + void setCenterPointX( float c ); float centerPointY() const; - void setCenterPointY( float _c ); + void setCenterPointY( float c ); float lineWidth() const; - void setLineWidth( float _w ); + void setLineWidth( float w ); QColor outerColor() const; - void setOuterColor( const QColor & _c ); + void setOuterColor( const QColor & c ); QColor lineColor() const; - void setlineColor( const QColor & _c ); + void setlineColor( const QColor & c ); QColor arcColor() const; - void setarcColor( const QColor & _c ); + void setarcColor( const QColor & c ); + + QColor textColor() const; + void setTextColor( const QColor & c ); signals: @@ -186,6 +191,8 @@ private slots: QColor m_outerColor; QColor m_lineColor; //!< unused yet QColor m_arcColor; //!< unused yet + + QColor m_textColor; knobTypes m_knobNum; diff --git a/include/LcdWidget.h b/include/LcdWidget.h index d0105047ce6..2817d7fd9cd 100644 --- a/include/LcdWidget.h +++ b/include/LcdWidget.h @@ -34,6 +34,11 @@ class EXPORT LcdWidget : public QWidget { Q_OBJECT + + // theming qproperties + Q_PROPERTY( QColor textColor READ textColor WRITE setTextColor ) + Q_PROPERTY( QColor textShadowColor READ textShadowColor WRITE setTextShadowColor ) + public: LcdWidget( QWidget* parent, const QString& name = QString::null ); LcdWidget( int numDigits, QWidget* parent, const QString& name = QString::null ); @@ -54,13 +59,19 @@ class EXPORT LcdWidget : public QWidget inline int numDigits() const { return m_numDigits; } inline void setNumDigits( int n ) { m_numDigits = n; updateSize(); } + + QColor textColor() const; + void setTextColor( const QColor & c ); + + QColor textShadowColor() const; + void setTextShadowColor( const QColor & c ); public slots: - virtual void setMarginWidth( int _width ); + virtual void setMarginWidth( int width ); protected: - virtual void paintEvent( QPaintEvent * _me ); + virtual void paintEvent( QPaintEvent * pe ); virtual void updateSize(); @@ -81,6 +92,9 @@ public slots: QString m_label; QPixmap* m_lcdPixmap; + QColor m_textColor; + QColor m_textShadowColor; + int m_cellWidth; int m_cellHeight; int m_numDigits; diff --git a/include/LocklessAllocator.h b/include/LocklessAllocator.h new file mode 100644 index 00000000000..fb5298e1c30 --- /dev/null +++ b/include/LocklessAllocator.h @@ -0,0 +1,83 @@ +/* + * LocklessAllocator.h - allocator with lockless alloc and free + * + * Copyright (c) 2016 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 LOCKLESS_ALLOCATOR_H +#define LOCKLESS_ALLOCATOR_H + +#include + +#include "AtomicInt.h" + +class LocklessAllocator +{ +public: + LocklessAllocator( size_t nmemb, size_t size ); + virtual ~LocklessAllocator(); + void * alloc(); + void free( void * ptr ); + + +private: + char * m_pool; + size_t m_capacity; + size_t m_elementSize; + + AtomicInt * m_freeState; + size_t m_freeStateSets; + + AtomicInt m_available; + AtomicInt m_startIndex; + +} ; + + + + +template +class LocklessAllocatorT : private LocklessAllocator +{ +public: + LocklessAllocatorT( size_t nmemb ) : + LocklessAllocator( nmemb, sizeof( T ) ) + { + } + + virtual ~LocklessAllocatorT() + { + } + + T * alloc() + { + return (T *)LocklessAllocator::alloc(); + } + + void free( T * ptr ) + { + LocklessAllocator::free( ptr ); + } + +} ; + + +#endif diff --git a/include/LocklessList.h b/include/LocklessList.h new file mode 100644 index 00000000000..467db59b7bc --- /dev/null +++ b/include/LocklessList.h @@ -0,0 +1,104 @@ +/* + * LocklessList.h - list with lockless push and pop + * + * Copyright (c) 2016 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 LOCKLESS_LIST_H +#define LOCKLESS_LIST_H + +#include + +#include "LocklessAllocator.h" + +template +class LocklessList +{ +public: + struct Element + { + T value; + Element * next; + } ; + + LocklessList( size_t size ) + { + m_allocator = new LocklessAllocatorT( size ); + } + + ~LocklessList() + { + delete m_allocator; + } + + void push( T value ) + { + Element * e = m_allocator->alloc(); + e->value = value; + + do + { +#if QT_VERSION >= 0x050000 + e->next = m_first.loadAcquire(); +#else + e->next = m_first; +#endif + } + while( !m_first.testAndSetOrdered( e->next, e ) ); + } + + Element * popList() + { + return m_first.fetchAndStoreOrdered( NULL ); + } + + Element * first() + { +#if QT_VERSION >= 0x050000 + return m_first.loadAcquire(); +#else + return m_first; +#endif + } + + void setFirst( Element * e ) + { +#if QT_VERSION >= 0x050000 + m_first.storeRelease( e ); +#else + m_first = e; +#endif + } + + void free( Element * e ) + { + m_allocator->free( e ); + } + + +private: + QAtomicPointer m_first; + LocklessAllocatorT * m_allocator; + +} ; + + +#endif diff --git a/include/MidiSetupWidget.h b/include/MidiSetupWidget.h index 5957333f4b1..a77a2160ec4 100644 --- a/include/MidiSetupWidget.h +++ b/include/MidiSetupWidget.h @@ -33,6 +33,7 @@ class QLineEdit; class MidiSetupWidget : public TabWidget { + Q_OBJECT MidiSetupWidget( const QString & caption, const QString & configSection, const QString & devName, QWidget * parent ); public: diff --git a/include/MidiSndio.h b/include/MidiSndio.h new file mode 100644 index 00000000000..2b62938a6c7 --- /dev/null +++ b/include/MidiSndio.h @@ -0,0 +1,48 @@ +#ifndef _MIDI_SNDIO_H +#define _MIDI_SNDIO_H + +#include "lmmsconfig.h" + +#ifdef LMMS_HAVE_SNDIO + +#include +#include + +#include + +#include "MidiClient.h" + +class QLineEdit; + + +class MidiSndio : public MidiClientRaw, public QThread +{ +public: + MidiSndio( void ); + virtual ~MidiSndio(); + + static QString probeDevice(void); + + inline static QString name(void) + { + return QT_TRANSLATE_NOOP("MidiSetupWidget", "sndio MIDI"); + } + + inline static QString configSection() + { + return "MidiSndio"; + } + + +protected: + virtual void sendByte(const unsigned char c); + virtual void run(void); + +private: + struct mio_hdl *m_hdl; + volatile bool m_quit; +} ; + +#endif /* LMMS_HAVE_SNDIO */ + +#endif /* _MIDI_SNDIO_H */ diff --git a/include/MidiTime.h b/include/MidiTime.h index ce5ead739cd..afec55e42b7 100644 --- a/include/MidiTime.h +++ b/include/MidiTime.h @@ -97,6 +97,7 @@ class EXPORT MidiTime static tick_t ticksPerTact( const TimeSig &sig ); static int stepsPerTact(); static void setTicksPerTact( tick_t tpt ); + static MidiTime stepPosition( int step ); private: tick_t m_ticks; diff --git a/include/Mixer.h b/include/Mixer.h index b57dc13d87f..d0e1052ebf6 100644 --- a/include/Mixer.h +++ b/include/Mixer.h @@ -29,24 +29,15 @@ #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 #include "lmms_basics.h" +#include "LocklessList.h" #include "Note.h" #include "fifo_buffer.h" #include "MixerProfiler.h" @@ -194,9 +185,9 @@ class EXPORT Mixer : public QObject // audio-port-stuff inline void addAudioPort( AudioPort * _port ) { - lock(); + requestChangeInModel(); m_audioPorts.push_back( _port ); - unlock(); + doneChangeInModel(); } void removeAudioPort( AudioPort * _port ); @@ -226,8 +217,6 @@ class EXPORT Mixer : public QObject void removePlayHandlesOfTypes( Track * _track, const quint8 types ); - bool hasNotePlayHandles(); - // methods providing information for other classes inline fpp_t framesPerPeriod() const @@ -283,37 +272,6 @@ class EXPORT Mixer : public QObject } - // 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(); - } - - void lockPlayHandleRemoval() - { - m_playHandleRemovalMutex.lock(); - } - - void unlockPlayHandleRemoval() - { - m_playHandleRemovalMutex.unlock(); - } - void getPeakValues( sampleFrame * _ab, const f_cnt_t _frames, float & peakLeft, float & peakRight ) const; @@ -346,6 +304,9 @@ class EXPORT Mixer : public QObject inline bool isMetronomeActive() const { return m_metronomeActive; } inline void setMetronomeActive(bool value = true) { m_metronomeActive = value; } + void requestChangeInModel(); + void doneChangeInModel(); + signals: void qualitySettingsChanged(); @@ -371,6 +332,8 @@ class EXPORT Mixer : public QObject virtual void run(); + void write( surroundSampleFrame * buffer ); + } ; @@ -387,6 +350,10 @@ class EXPORT Mixer : public QObject const surroundSampleFrame * renderNextBuffer(); + void clearInternal(); + + void runChangesInModel(); + QVector m_audioPorts; @@ -413,13 +380,16 @@ class EXPORT Mixer : public QObject // playhandle stuff PlayHandleList m_playHandles; - PlayHandleList m_newPlayHandles; // place where new playhandles are added temporarily + // place where new playhandles are added temporarily + LocklessList m_newPlayHandles; ConstPlayHandleList m_playHandlesToRemove; struct qualitySettings m_qualitySettings; float m_masterGain; + bool m_isProcessing; + // audio device stuff AudioDevice * m_audioDev; AudioDevice * m_oldAudioDev; @@ -430,12 +400,6 @@ class EXPORT Mixer : public QObject MidiClient * m_midiClient; QString m_midiClientName; - // mutexes - QMutex m_globalMutex; - QMutex m_inputFramesMutex; - QMutex m_playHandleMutex; // mutex used only for adding playhandles - QMutex m_playHandleRemovalMutex; - // FIFO stuff fifo * m_fifo; fifoWriter * m_fifoWriter; @@ -444,6 +408,18 @@ class EXPORT Mixer : public QObject bool m_metronomeActive; + bool m_clearSignal; + + bool m_changesSignal; + unsigned int m_changes; + QMutex m_changesMutex; + QMutex m_doChangesMutex; + QMutex m_waitChangesMutex; + QWaitCondition m_changesMixerCondition; + QWaitCondition m_changesRequestCondition; + + bool m_waitingForWrite; + friend class LmmsCore; friend class MixerWorkerThread; diff --git a/include/NotePlayHandle.h b/include/NotePlayHandle.h index 130799b0709..6cbf0a74a99 100644 --- a/include/NotePlayHandle.h +++ b/include/NotePlayHandle.h @@ -196,6 +196,12 @@ class EXPORT NotePlayHandle : public PlayHandle, public Note return m_subNotes.size() > 0 || m_hadChildren; } + void setMasterNote() + { + m_hadChildren = true; + setUsesBuffer( false ); + } + /*! Returns whether note is muted */ bool isMuted() const { diff --git a/include/Pattern.h b/include/Pattern.h index 505aff63e80..cb5464539da 100644 --- a/include/Pattern.h +++ b/include/Pattern.h @@ -63,19 +63,15 @@ class EXPORT Pattern : public TrackContentObject void init(); - - virtual MidiTime length() const; - MidiTime beatPatternLength() const; + void updateLength(); // note management Note * addNote( const Note & _new_note, const bool _quant_pos = true ); - void removeNote( const Note * _note_to_del ); + void removeNote( Note * _note_to_del ); Note * noteAtStep( int _step ); - Note * rearrangeNote( const Note * _note_to_proc, - const bool _quant_pos = true ); void rearrangeAllNotes(); void clearNotes(); @@ -84,15 +80,14 @@ class EXPORT Pattern : public TrackContentObject return m_notes; } - void setStep( int _step, bool _enabled ); + Note * addStepNote( int step ); + void setStep( int step, bool enabled ); // pattern-type stuff inline PatternTypes type() const { return m_patternType; } - void setType( PatternTypes _new_pattern_type ); - void checkType(); // next/previous track based on position in the containing track @@ -122,7 +117,6 @@ class EXPORT Pattern : public TrackContentObject protected: - void ensureBeatNotes(); void updateBBTrack(); @@ -135,6 +129,13 @@ protected slots: private: + MidiTime beatPatternLength() const; + + void setType( PatternTypes _new_pattern_type ); + void checkType(); + + void resizeToFirstTrack(); + InstrumentTrack * m_instrumentTrack; PatternTypes m_patternType; diff --git a/include/PianoRoll.h b/include/PianoRoll.h index e874c802e0b..bed5a08e3f4 100644 --- a/include/PianoRoll.h +++ b/include/PianoRoll.h @@ -27,6 +27,7 @@ #ifndef PIANO_ROLL_H #define PIANO_ROLL_H +#include #include #include @@ -57,13 +58,13 @@ class PianoRoll : public QWidget Q_PROPERTY( QColor noteModeColor READ noteModeColor WRITE setNoteModeColor ) Q_PROPERTY( QColor noteColor READ noteColor WRITE setNoteColor ) Q_PROPERTY( QColor barColor READ barColor WRITE setBarColor ) - Q_PROPERTY( float noteBorderRadiusX READ noteBorderRadiusX WRITE setNoteBorderRadiusX ) - Q_PROPERTY( float noteBorderRadiusY READ noteBorderRadiusY WRITE setNoteBorderRadiusY ) Q_PROPERTY( QColor selectedNoteColor READ selectedNoteColor WRITE setSelectedNoteColor ) Q_PROPERTY( QColor textColor READ textColor WRITE setTextColor ) Q_PROPERTY( QColor textColorLight READ textColorLight WRITE setTextColorLight ) Q_PROPERTY( QColor textShadow READ textShadow WRITE setTextShadow ) Q_PROPERTY( QColor markedSemitoneColor READ markedSemitoneColor WRITE setMarkedSemitoneColor ) + Q_PROPERTY( int noteOpacity READ noteOpacity WRITE setNoteOpacity ) + Q_PROPERTY( bool noteBorders READ noteBorders WRITE setNoteBorders ) public: enum EditModes { @@ -116,10 +117,6 @@ class PianoRoll : public QWidget void setNoteColor( const QColor & c ); QColor barColor() const; void setBarColor( const QColor & c ); - float noteBorderRadiusX() const; - void setNoteBorderRadiusX( float b ); - float noteBorderRadiusY() const; - void setNoteBorderRadiusY( float b ); QColor selectedNoteColor() const; void setSelectedNoteColor( const QColor & c ); QColor textColor() const; @@ -130,6 +127,10 @@ class PianoRoll : public QWidget void setTextShadow( const QColor & c ); QColor markedSemitoneColor() const; void setMarkedSemitoneColor( const QColor & c ); + int noteOpacity() const; + void setNoteOpacity( const int i ); + bool noteBorders() const; + void setNoteBorders( const bool b ); protected: @@ -148,7 +149,7 @@ class PianoRoll : public QWidget int getKey( int y ) const; static void drawNoteRect( QPainter & p, int x, int y, int width, const Note * n, const QColor & noteCol, - float radiusX, float radiusY, const QColor & selCol ); + const QColor & selCol, const int noteOpc, const bool borderless ); void removeSelection(); void selectAll(); NoteVector getSelectedNotes(); @@ -181,6 +182,7 @@ protected slots: void zoomingChanged(); void quantizeChanged(); + void quantizeNotes(); void updateSemiToneMarkerMenu(); @@ -291,6 +293,7 @@ protected slots: ComboBoxModel m_scaleModel; ComboBoxModel m_chordModel; + static const QVector m_zoomLevels; Pattern* m_pattern; QScrollBar * m_leftRightScroll; @@ -371,13 +374,13 @@ protected slots: QColor m_noteModeColor; QColor m_noteColor; QColor m_barColor; - float m_noteBorderRadiusX; - float m_noteBorderRadiusY; QColor m_selectedNoteColor; QColor m_textColor; QColor m_textColorLight; QColor m_textShadow; QColor m_markedSemitoneColor; + int m_noteOpacity; + bool m_noteBorders; signals: void positionChanged( const MidiTime & ); @@ -385,6 +388,8 @@ protected slots: } ; + + class PianoRollWindow : public Editor, SerializingObject { Q_OBJECT diff --git a/include/PlayHandle.h b/include/PlayHandle.h index 73eda3ae50b..f4e39a3be35 100644 --- a/include/PlayHandle.h +++ b/include/PlayHandle.h @@ -47,6 +47,11 @@ class PlayHandle : public ThreadableJob } ; typedef Types Type; + enum + { + MaxNumber = 1024 + } ; + PlayHandle( const Type type, f_cnt_t offset = 0 ); PlayHandle & operator = ( PlayHandle & p ) diff --git a/include/ProjectJournal.h b/include/ProjectJournal.h index 28beaa82ff7..93b5867eafe 100644 --- a/include/ProjectJournal.h +++ b/include/ProjectJournal.h @@ -76,6 +76,8 @@ class ProjectJournal reallocID( _id, NULL ); } + static jo_id_t idToSave( jo_id_t id ); + void clearJournal(); void stopAllJournalling(); JournallingObject * journallingObject( const jo_id_t _id ) diff --git a/include/ProjectNotes.h b/include/ProjectNotes.h index 998f47d996a..62446eb2258 100644 --- a/include/ProjectNotes.h +++ b/include/ProjectNotes.h @@ -29,7 +29,7 @@ #include #include -#include "JournallingObject.h" +#include "SerializingObject.h" class QAction; class QComboBox; diff --git a/include/ProjectRenderer.h b/include/ProjectRenderer.h index 9c68d578d0e..dfb6c6d176c 100644 --- a/include/ProjectRenderer.h +++ b/include/ProjectRenderer.h @@ -27,6 +27,7 @@ #include "AudioFileDevice.h" #include "lmmsconfig.h" +#include "Mixer.h" class ProjectRenderer : public QThread diff --git a/include/ProjectVersion.h b/include/ProjectVersion.h index 545b916687f..37d8201c769 100644 --- a/include/ProjectVersion.h +++ b/include/ProjectVersion.h @@ -29,9 +29,6 @@ #include -enum CompareType { Major, Minor, Release, Build }; - - /*! \brief Version number parsing and comparison * * Parses and compares version information. i.e. "1.0.3" < "1.0.10" @@ -39,13 +36,16 @@ enum CompareType { Major, Minor, Release, Build }; class ProjectVersion { public: - ProjectVersion(QString version, CompareType c = CompareType::Build); - ProjectVersion(const char * version, CompareType c = CompareType::Build); + enum CompareType { Major, Minor, Release, Stage, Build }; + + ProjectVersion(QString version, CompareType c = Build); + ProjectVersion(const char * version, CompareType c = Build); int getMajor() const { return m_major; } int getMinor() const { return m_minor; } int getRelease() const { return m_release; } - QString getBuild() const { return m_build; } + QString getStage() const { return m_stage; } + int getBuild() const { return m_build; } CompareType getCompareType() const { return m_compareType; } ProjectVersion setCompareType(CompareType compareType) { m_compareType = compareType; return * this; } @@ -57,7 +57,8 @@ class ProjectVersion int m_major; int m_minor; int m_release; - QString m_build; + QString m_stage; + int m_build; CompareType m_compareType; } ; diff --git a/include/RemotePlugin.h b/include/RemotePlugin.h index 5d067768ff5..e3beef80c99 100644 --- a/include/RemotePlugin.h +++ b/include/RemotePlugin.h @@ -37,10 +37,8 @@ #include -#if defined(LMMS_HAVE_SYS_IPC_H) && defined(LMMS_HAVE_SEMAPHORE_H) -#include -#include -#else +#if !(defined(LMMS_HAVE_SYS_IPC_H) && defined(LMMS_HAVE_SEMAPHORE_H)) +#define SYNC_WITH_SHM_FIFO #define USE_QT_SEMAPHORES #ifdef LMMS_HAVE_PROCESS_H @@ -74,17 +72,33 @@ typedef int32_t key_t; #include #endif +#ifdef LMMS_HAVE_PTHREAD_H +#include +#endif + #ifdef BUILD_REMOTE_PLUGIN_CLIENT #undef EXPORT #define EXPORT #define COMPILE_REMOTE_PLUGIN_BASE + +#ifndef SYNC_WITH_SHM_FIFO +#include +#include +#endif + #else #include #include #include + +#ifndef SYNC_WITH_SHM_FIFO +#include +#endif + #endif +#ifdef SYNC_WITH_SHM_FIFO // 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; @@ -97,9 +111,6 @@ class shmFifo // and 64 bit platforms union sem32_t { -#ifndef USE_QT_SEMAPHORES - sem_t sem; -#endif int semKey; char fill[32]; } ; @@ -125,13 +136,8 @@ class shmFifo 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 @@ -151,7 +157,6 @@ class shmFifo #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; @@ -160,20 +165,6 @@ class shmFifo 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 @@ -188,13 +179,8 @@ class shmFifo 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 @@ -209,14 +195,9 @@ class shmFifo } #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() @@ -226,10 +207,6 @@ class shmFifo { #ifndef USE_QT_SHMEM shmctl( m_shmID, IPC_RMID, NULL ); -#endif -#ifndef USE_QT_SEMAPHORES - sem_destroy( m_dataSem ); - sem_destroy( m_messageSem ); #endif } #ifndef USE_QT_SHMEM @@ -258,11 +235,7 @@ class shmFifo { if( !isInvalid() && __sync_add_and_fetch( &m_lockDepth, 1 ) == 1 ) { -#ifdef USE_QT_SEMAPHORES m_dataSem.acquire(); -#else - sem_wait( m_dataSem ); -#endif } } @@ -271,11 +244,7 @@ class shmFifo { if( __sync_sub_and_fetch( &m_lockDepth, 1) <= 0 ) { -#ifdef USE_QT_SEMAPHORES m_dataSem.release(); -#else - sem_post( m_dataSem ); -#endif } } @@ -284,22 +253,14 @@ class shmFifo { 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 } @@ -345,16 +306,10 @@ class shmFifo { 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 } @@ -446,16 +401,12 @@ class shmFifo 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; } ; +#endif @@ -567,9 +518,14 @@ class EXPORT RemotePluginBase } ; +#ifdef SYNC_WITH_SHM_FIFO RemotePluginBase( shmFifo * _in, shmFifo * _out ); +#else + RemotePluginBase(); +#endif virtual ~RemotePluginBase(); +#ifdef SYNC_WITH_SHM_FIFO void reset( shmFifo *in, shmFifo *out ) { delete m_in; @@ -577,21 +533,20 @@ class EXPORT RemotePluginBase m_in = in; m_out = out; } +#endif int sendMessage( const message & _m ); message receiveMessage(); inline bool isInvalid() const { +#ifdef SYNC_WITH_SHM_FIFO return m_in->isInvalid() || m_out->isInvalid(); +#else + return m_invalid; +#endif } - inline bool messagesLeft() - { - return m_in->messagesLeft(); - } - - message waitForMessage( const message & _m, bool _busy_waiting = false ); @@ -602,6 +557,61 @@ class EXPORT RemotePluginBase return m; } +#ifndef SYNC_WITH_SHM_FIFO + 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 ); + } +#endif + +#ifndef BUILD_REMOTE_PLUGIN_CLIENT + inline bool messagesLeft() + { +#ifdef SYNC_WITH_SHM_FIFO + return m_in->messagesLeft(); +#else + struct pollfd pollin; + pollin.fd = m_socket; + pollin.events = POLLIN; + + if ( poll( &pollin, 1, 0 ) == -1 ) + { + qWarning( "Unexpected poll error." ); + } + return pollin.revents & POLLIN; +#endif + } + inline void fetchAndProcessAllMessages() { while( messagesLeft() ) @@ -609,11 +619,13 @@ class EXPORT RemotePluginBase fetchAndProcessNextMessage(); } } +#endif virtual bool processMessage( const message & _m ) = 0; protected: +#ifdef SYNC_WITH_SHM_FIFO inline const shmFifo * in() const { return m_in; @@ -623,18 +635,88 @@ class EXPORT RemotePluginBase { return m_out; } +#endif inline void invalidate() { +#ifdef SYNC_WITH_SHM_FIFO m_in->invalidate(); m_out->invalidate(); m_in->messageSent(); +#else + m_invalid = true; +#endif } +#ifndef SYNC_WITH_SHM_FIFO + int m_socket; +#endif + + private: +#ifdef SYNC_WITH_SHM_FIFO shmFifo * m_in; shmFifo * m_out; +#else + void read( void * _buf, int _len ) + { + if( isInvalid() ) + { + memset( _buf, 0, _len ); + return; + } + char * buf = (char *) _buf; + int remaining = _len; + while ( remaining ) + { + ssize_t nread = ::read( m_socket, buf, remaining ); + switch ( nread ) + { + case -1: + fprintf( stderr, + "Error while reading.\n" ); + case 0: + invalidate(); + memset( _buf, 0, _len ); + return; + } + buf += nread; + remaining -= nread; + } + } + + void write( const void * _buf, int _len ) + { + if( isInvalid() ) + { + return; + } + const char * buf = (const char *) _buf; + int remaining = _len; + while ( remaining ) + { + ssize_t nwritten = ::write( m_socket, buf, remaining ); + switch ( nwritten ) + { + case -1: + fprintf( stderr, + "Error while writing.\n" ); + case 0: + invalidate(); + return; + } + buf += nwritten; + remaining -= nwritten; + } + } + + + bool m_invalid; + + pthread_mutex_t m_receiveMutex; + pthread_mutex_t m_sendMutex; +#endif } ; @@ -668,8 +750,9 @@ class ProcessWatcher : public QThread } ; -class EXPORT RemotePlugin : public RemotePluginBase +class EXPORT RemotePlugin : public QObject, public RemotePluginBase { + Q_OBJECT public: RemotePlugin(); virtual ~RemotePlugin(); @@ -724,18 +807,12 @@ class EXPORT RemotePlugin : public RemotePluginBase inline void lock() { - if( !isInvalid() ) - { - m_commMutex.lock(); - } + m_commMutex.lock(); } inline void unlock() { - if( !isInvalid() ) - { - m_commMutex.unlock(); - } + m_commMutex.unlock(); } @@ -768,7 +845,16 @@ class EXPORT RemotePlugin : public RemotePluginBase int m_inputCount; int m_outputCount; +#ifndef SYNC_WITH_SHM_FIFO + int m_server; + QString m_socketFile; +#endif + friend class ProcessWatcher; + + +private slots: + void processFinished( int exitCode, QProcess::ExitStatus exitStatus ); } ; #endif @@ -779,7 +865,11 @@ class EXPORT RemotePlugin : public RemotePluginBase class RemotePluginClient : public RemotePluginBase { public: +#ifdef SYNC_WITH_SHM_FIFO RemotePluginClient( key_t _shm_in, key_t _shm_out ); +#else + RemotePluginClient( const char * socketPath ); +#endif virtual ~RemotePluginClient(); #ifdef USE_QT_SHMEM VstSyncData * getQtVSTshm(); @@ -876,15 +966,25 @@ class RemotePluginClient : public RemotePluginBase #endif +#ifdef SYNC_WITH_SHM_FIFO RemotePluginBase::RemotePluginBase( shmFifo * _in, shmFifo * _out ) : m_in( _in ), m_out( _out ) +#else +RemotePluginBase::RemotePluginBase() : + m_socket( -1 ), + m_invalid( false ) +#endif { #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 +#ifndef SYNC_WITH_SHM_FIFO + pthread_mutex_init( &m_receiveMutex, NULL ); + pthread_mutex_init( &m_sendMutex, NULL ); +#endif } @@ -892,8 +992,13 @@ RemotePluginBase::RemotePluginBase( shmFifo * _in, shmFifo * _out ) : RemotePluginBase::~RemotePluginBase() { +#ifdef SYNC_WITH_SHM_FIFO delete m_in; delete m_out; +#else + pthread_mutex_destroy( &m_receiveMutex ); + pthread_mutex_destroy( &m_sendMutex ); +#endif } @@ -901,6 +1006,7 @@ RemotePluginBase::~RemotePluginBase() int RemotePluginBase::sendMessage( const message & _m ) { +#ifdef SYNC_WITH_SHM_FIFO m_out->lock(); m_out->writeInt( _m.id ); m_out->writeInt( _m.data.size() ); @@ -912,6 +1018,18 @@ int RemotePluginBase::sendMessage( const message & _m ) } m_out->unlock(); m_out->messageSent(); +#else + pthread_mutex_lock( &m_sendMutex ); + writeInt( _m.id ); + writeInt( _m.data.size() ); + int j = 8; + for( unsigned int i = 0; i < _m.data.size(); ++i ) + { + writeString( _m.data[i] ); + j += 4 + _m.data[i].size(); + } + pthread_mutex_unlock( &m_sendMutex ); +#endif return j; } @@ -921,6 +1039,7 @@ int RemotePluginBase::sendMessage( const message & _m ) RemotePluginBase::message RemotePluginBase::receiveMessage() { +#ifdef SYNC_WITH_SHM_FIFO m_in->waitForMessage(); m_in->lock(); message m; @@ -931,6 +1050,17 @@ RemotePluginBase::message RemotePluginBase::receiveMessage() m.data.push_back( m_in->readString() ); } m_in->unlock(); +#else + pthread_mutex_lock( &m_receiveMutex ); + message m; + m.id = readInt(); + const int s = readInt(); + for( int i = 0; i < s; ++i ) + { + m.data.push_back( readString() ); + } + pthread_mutex_unlock( &m_receiveMutex ); +#endif return m; } @@ -976,8 +1106,13 @@ RemotePluginBase::message RemotePluginBase::waitForMessage( #ifdef BUILD_REMOTE_PLUGIN_CLIENT +#ifdef SYNC_WITH_SHM_FIFO RemotePluginClient::RemotePluginClient( key_t _shm_in, key_t _shm_out ) : RemotePluginBase( new shmFifo( _shm_in ), new shmFifo( _shm_out ) ), +#else +RemotePluginClient::RemotePluginClient( const char * socketPath ) : + RemotePluginBase(), +#endif #ifdef USE_QT_SHMEM m_shmObj(), m_shmQtID( "/usr/bin/lmms" ), @@ -989,6 +1124,30 @@ RemotePluginClient::RemotePluginClient( key_t _shm_in, key_t _shm_out ) : m_sampleRate( 44100 ), m_bufferSize( 0 ) { +#ifndef SYNC_WITH_SHM_FIFO + struct sockaddr_un sa; + sa.sun_family = AF_LOCAL; + + size_t length = strlen( socketPath ); + if ( length >= sizeof sa.sun_path ) + { + length = sizeof sa.sun_path - 1; + fprintf( stderr, "Socket path too long.\n" ); + } + memcpy( sa.sun_path, socketPath, length ); + sa.sun_path[length] = '\0'; + + m_socket = socket( PF_LOCAL, SOCK_STREAM, 0 ); + if ( m_socket == -1 ) + { + fprintf( stderr, "Could not connect to local server.\n" ); + } + if ( ::connect( m_socket, (struct sockaddr *) &sa, sizeof sa ) == -1 ) + { + fprintf( stderr, "Could not connect to local server.\n" ); + } +#endif + #ifdef USE_QT_SHMEM if( m_shmQtID.attach( QSharedMemory::ReadOnly ) ) { @@ -1033,6 +1192,7 @@ RemotePluginClient::RemotePluginClient( key_t _shm_in, key_t _shm_out ) : } } #endif + // if attaching shared memory fails sendMessage( IdSampleRateInformation ); sendMessage( IdBufferSizeInformation ); @@ -1051,6 +1211,13 @@ RemotePluginClient::~RemotePluginClient() #ifndef USE_QT_SHMEM shmdt( m_shm ); #endif + +#ifndef SYNC_WITH_SHM_FIFO + if ( close( m_socket ) == -1) + { + fprintf( stderr, "Error freeing resources.\n" ); + } +#endif } diff --git a/plugins/flp_import/unrtf.cpp b/include/RowTableView.h similarity index 50% rename from plugins/flp_import/unrtf.cpp rename to include/RowTableView.h index 1c7a633414d..b4e8d61e5b7 100644 --- a/plugins/flp_import/unrtf.cpp +++ b/include/RowTableView.h @@ -1,10 +1,10 @@ /* - * unrtf.cpp - integration of UnRTF + * RowTableView.h - table with rows that act like single cells * - * Copyright (c) 2008 Tobias Doerffel + * Copyright (c) 2016 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 @@ -22,50 +22,34 @@ * */ +#ifndef ROW_TABLE_VIEW_H +#define ROW_TABLE_VIEW_H + +#include -#include "lmmsconfig.h" -#include -#include +class RowDelegate; -#include -extern "C" +class RowTableView : public QTableView { + Q_OBJECT +public: + RowTableView( QWidget * parent = 0 ); + virtual ~RowTableView(); + + virtual void setModel( QAbstractItemModel * model ); + -// unrtf-stuff -#include "defs.h" -#include "main.h" -#include "html.h" -#include "word.h" -#include "hash.h" -#include "convert.h" -#include "attr.h" +protected: + virtual void keyPressEvent( QKeyEvent * event ); -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 +private: + RowDelegate * m_rowDelegate; -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" -} +#endif diff --git a/include/SampleBuffer.h b/include/SampleBuffer.h index dbb2f71ace6..1bae6f8ecb4 100644 --- a/include/SampleBuffer.h +++ b/include/SampleBuffer.h @@ -38,7 +38,6 @@ #include "lmms_basics.h" #include "lmms_math.h" #include "shared_object.h" -#include "Mixer.h" #include "MemoryManager.h" @@ -152,19 +151,16 @@ class EXPORT SampleBuffer : public QObject, public sharedObject void setLoopStartFrame( f_cnt_t _start ) { - QWriteLocker writeLocker(&m_varLock); m_loopStartFrame = _start; } void setLoopEndFrame( f_cnt_t _end ) { - QWriteLocker writeLocker(&m_varLock); m_loopEndFrame = _end; } void setAllPointFrames( f_cnt_t _start, f_cnt_t _end, f_cnt_t _loopstart, f_cnt_t _loopend ) { - QWriteLocker writeLocker(&m_varLock); m_startFrame = _start; m_endFrame = _end; m_loopStartFrame = _loopstart; @@ -203,13 +199,11 @@ class EXPORT SampleBuffer : public QObject, public sharedObject inline void setFrequency( float _freq ) { - QWriteLocker writeLocker(&m_varLock); m_frequency = _freq; } inline void setSampleRate( sample_rate_t _rate ) { - QWriteLocker writeLocker(&m_varLock); m_sampleRate = _rate; } @@ -225,31 +219,37 @@ class EXPORT SampleBuffer : public QObject, public sharedObject QString & toBase64( QString & _dst ) const; - static SampleBuffer * resample( sampleFrame * _data, - const f_cnt_t _frames, - const sample_rate_t _src_sr, + // protect calls from the GUI to this function with dataReadLock() and + // dataUnlock() + SampleBuffer * resample( 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 ); + // protect calls from the GUI to this function with dataReadLock() and + // dataUnlock(), out of loops for efficiency inline sample_t userWaveSample( const float _sample ) const { - const float frame = _sample * m_frames; - f_cnt_t f1 = static_cast( frame ) % m_frames; + f_cnt_t frames = m_frames; + sampleFrame * data = m_data; + const float frame = _sample * frames; + f_cnt_t f1 = static_cast( frame ) % frames; if( f1 < 0 ) { - f1 += m_frames; + f1 += frames; } - return linearInterpolate( m_data[f1][0], m_data[ (f1 + 1) % m_frames ][0], fraction( frame ) ); + return linearInterpolate( data[f1][0], data[ (f1 + 1) % frames ][0], fraction( frame ) ); + } + + void dataReadLock() + { + m_varLock.lockForRead(); + } + + void dataUnlock() + { + m_varLock.unlock(); } static QString tryToMakeRelative( const QString & _file ); diff --git a/include/SamplePlayHandle.h b/include/SamplePlayHandle.h index 847277a5b49..8c69c72c18f 100644 --- a/include/SamplePlayHandle.h +++ b/include/SamplePlayHandle.h @@ -25,9 +25,9 @@ #ifndef SAMPLE_PLAY_HANDLE_H #define SAMPLE_PLAY_HANDLE_H -#include "Mixer.h" #include "SampleBuffer.h" #include "AutomatableModel.h" +#include "PlayHandle.h" class BBTrack; class SampleTCO; diff --git a/include/SampleRecordHandle.h b/include/SampleRecordHandle.h index b6a44439674..b2ead8ae834 100644 --- a/include/SampleRecordHandle.h +++ b/include/SampleRecordHandle.h @@ -29,10 +29,11 @@ #include #include -#include "Mixer.h" -#include "SampleBuffer.h" +#include "MidiTime.h" +#include "PlayHandle.h" class BBTrack; +class SampleBuffer; class SampleTCO; class Track; diff --git a/include/SetupDialog.h b/include/SetupDialog.h index 3c27d3a67fa..ffe367340be 100644 --- a/include/SetupDialog.h +++ b/include/SetupDialog.h @@ -77,7 +77,6 @@ private slots: void setGIGDir( const QString & _gd ); void setSF2Dir( const QString & _sfd ); 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 ); @@ -110,7 +109,6 @@ private slots: void openGIGDir(); void openSF2Dir(); void openArtworkDir(); - void openFLDir(); void openLADSPADir(); void openSTKDir(); void openDefaultSoundfont(); @@ -150,7 +148,6 @@ private slots: QLineEdit * m_wdLineEdit; QLineEdit * m_vdLineEdit; QLineEdit * m_adLineEdit; - QLineEdit * m_fdLineEdit; QLineEdit * m_ladLineEdit; QLineEdit * m_gigLineEdit; QLineEdit * m_sf2LineEdit; @@ -165,7 +162,6 @@ private slots: QString m_workingDir; QString m_vstDir; QString m_artworkDir; - QString m_flDir; QString m_ladDir; QString m_gigDir; QString m_sf2Dir; diff --git a/include/Song.h b/include/Song.h index 56f3ffe9b86..c8c5656e927 100644 --- a/include/Song.h +++ b/include/Song.h @@ -340,6 +340,7 @@ private slots: QString m_fileName; QString m_oldFileName; bool m_modified; + bool m_loadOnLaunch; volatile bool m_recording; volatile bool m_exporting; diff --git a/include/SongEditor.h b/include/SongEditor.h index 4280540cef1..d5bddc8ae23 100644 --- a/include/SongEditor.h +++ b/include/SongEditor.h @@ -27,6 +27,8 @@ #ifndef SONG_EDITOR_H #define SONG_EDITOR_H +#include + #include "Editor.h" #include "TrackContainerView.h" @@ -45,10 +47,10 @@ class TimeLineWidget; class positionLine : public QWidget { public: - positionLine( QWidget * _parent ); + positionLine( QWidget * parent ); private: - virtual void paintEvent( QPaintEvent * _pe ); + virtual void paintEvent( QPaintEvent * pe ); } ; @@ -63,43 +65,44 @@ class SongEditor : public TrackContainerView SelectMode }; - SongEditor( Song * _song ); + SongEditor( Song * song ); ~SongEditor(); void saveSettings( QDomDocument& doc, QDomElement& element ); void loadSettings( const QDomElement& element ); public slots: - void scrolled( int _new_pos ); + void scrolled( int new_pos ); - void setEditMode(EditMode mode); + void setEditMode( EditMode mode ); void setEditModeDraw(); void setEditModeSelect(); + void updatePosition( const MidiTime & t ); + protected: - virtual void closeEvent( QCloseEvent * _ce ); + virtual void closeEvent( QCloseEvent * ce ); private slots: void setHighQuality( bool ); - void setMasterVolume( int _new_val ); + void setMasterVolume( int new_val ); void showMasterVolumeFloat(); - void updateMasterVolumeFloat( int _new_val ); + void updateMasterVolumeFloat( int new_val ); void hideMasterVolumeFloat(); - void setMasterPitch( int _new_val ); + void setMasterPitch( int new_val ); void showMasterPitchFloat(); - void updateMasterPitchFloat( int _new_val ); + void updateMasterPitchFloat( int new_val ); void hideMasterPitchFloat(); - void updateScrollBar( int ); - void updatePosition( const MidiTime & _t ); + void updateScrollBar(int len); void zoomingChanged(); private: - virtual void keyPressEvent( QKeyEvent * _ke ); - virtual void wheelEvent( QWheelEvent * _we ); + virtual void keyPressEvent( QKeyEvent * ke ); + virtual void wheelEvent( QWheelEvent * we ); virtual bool allowRubberband() const; @@ -123,6 +126,8 @@ private slots: ComboBoxModel* m_zoomingModel; + static const QVector m_zoomLevels; + bool m_scrollBack; bool m_smoothScroll; @@ -132,11 +137,14 @@ private slots: } ; + + + class SongEditorWindow : public Editor { Q_OBJECT public: - SongEditorWindow(Song* song); + SongEditorWindow( Song* song ); QSize sizeHint() const; diff --git a/include/SubWindow.h b/include/SubWindow.h index 821e0a76201..3a00ecf1683 100644 --- a/include/SubWindow.h +++ b/include/SubWindow.h @@ -23,18 +23,19 @@ * Boston, MA 02110-1301 USA. * */ - - #ifndef SUBWINDOW_H #define SUBWINDOW_H - +#include +#include #include -#include +#include +#include +#include +#include #include "export.h" - class QMoveEvent; class QResizeEvent; class QWidget; @@ -43,16 +44,44 @@ class QWidget; class EXPORT SubWindow : public QMdiSubWindow { Q_OBJECT + Q_PROPERTY( QBrush activeColor READ activeColor WRITE setActiveColor ) + Q_PROPERTY( QColor textShadowColor READ textShadowColor WRITE setTextShadowColor ) + Q_PROPERTY( QColor borderColor READ borderColor WRITE setBorderColor ) + public: - SubWindow(QWidget *parent=NULL, Qt::WindowFlags windowFlags=0); + SubWindow( QWidget *parent = NULL, Qt::WindowFlags windowFlags = 0 ); // same as QWidet::normalGeometry, but works properly under X11 (see https://bugreports.qt.io/browse/QTBUG-256) QRect getTrueNormalGeometry() const; + QBrush activeColor() const; + QColor textShadowColor() const; + QColor borderColor() const; + void setActiveColor( const QBrush & b ); + void setTextShadowColor( const QColor &c ); + void setBorderColor( const QColor &c ); + protected: // hook the QWidget move/resize events to update the tracked geometry - virtual void moveEvent(QMoveEvent * event); - virtual void resizeEvent(QResizeEvent * event); + virtual void moveEvent( QMoveEvent * event ); + virtual void resizeEvent( QResizeEvent * event ); + virtual void paintEvent( QPaintEvent * pe ); + private: + const QSize m_buttonSize; + const int m_titleBarHeight; + QPushButton * m_closeBtn; + QPushButton * m_minimizeBtn; + QPushButton * m_maximizeBtn; + QPushButton * m_restoreBtn; + QBrush m_activeColor; + QColor m_textShadowColor; + QColor m_borderColor; + QPoint m_position; QRect m_trackedNormalGeom; + QLabel * m_windowTitle; + QGraphicsDropShadowEffect * m_shadow; + + static void elideText( QLabel *label, QString text ); + bool isMaximized(); }; -#endif \ No newline at end of file +#endif diff --git a/include/TimeLineWidget.h b/include/TimeLineWidget.h index 6487c840a63..0f8ac835025 100644 --- a/include/TimeLineWidget.h +++ b/include/TimeLineWidget.h @@ -42,6 +42,16 @@ class TimeLineWidget : public QWidget, public JournallingObject { Q_OBJECT public: + Q_PROPERTY( QColor barLineColor READ getBarLineColor WRITE setBarLineColor ) + Q_PROPERTY( QColor barNumberColor READ getBarNumberColor WRITE setBarNumberColor ) + Q_PROPERTY( QColor inactiveLoopColor READ getInactiveLoopColor WRITE setInactiveLoopColor ) + Q_PROPERTY( QBrush inactiveLoopBrush READ getInactiveLoopBrush WRITE setInactiveLoopBrush ) + Q_PROPERTY( QColor inactiveLoopInnerColor READ getInactiveLoopInnerColor WRITE setInactiveLoopInnerColor ) + Q_PROPERTY( QColor activeLoopColor READ getActiveLoopColor WRITE setActiveLoopColor ) + Q_PROPERTY( QBrush activeLoopBrush READ getActiveLoopBrush WRITE setActiveLoopBrush ) + Q_PROPERTY( QColor activeLoopInnerColor READ getActiveLoopInnerColor WRITE setActiveLoopInnerColor ) + Q_PROPERTY( int loopRectangleVerticalPadding READ getLoopRectangleVerticalPadding WRITE setLoopRectangleVerticalPadding ) + enum AutoScrollStates { AutoScrollEnabled, @@ -66,6 +76,33 @@ class TimeLineWidget : public QWidget, public JournallingObject const MidiTime & begin, QWidget * parent ); virtual ~TimeLineWidget(); + inline QColor const & getBarLineColor() const { return m_barLineColor; } + inline void setBarLineColor(QColor const & tactLineColor) { m_barLineColor = tactLineColor; } + + inline QColor const & getBarNumberColor() const { return m_barNumberColor; } + inline void setBarNumberColor(QColor const & tactNumberColor) { m_barNumberColor = tactNumberColor; } + + inline QColor const & getInactiveLoopColor() const { return m_inactiveLoopColor; } + inline void setInactiveLoopColor(QColor const & inactiveLoopColor) { m_inactiveLoopColor = inactiveLoopColor; } + + inline QBrush const & getInactiveLoopBrush() const { return m_inactiveLoopBrush; } + inline void setInactiveLoopBrush(QBrush const & inactiveLoopBrush) { m_inactiveLoopBrush = inactiveLoopBrush; } + + inline QColor const & getInactiveLoopInnerColor() const { return m_inactiveLoopInnerColor; } + inline void setInactiveLoopInnerColor(QColor const & inactiveLoopInnerColor) { m_inactiveLoopInnerColor = inactiveLoopInnerColor; } + + inline QColor const & getActiveLoopColor() const { return m_activeLoopColor; } + inline void setActiveLoopColor(QColor const & activeLoopColor) { m_activeLoopColor = activeLoopColor; } + + inline QBrush const & getActiveLoopBrush() const { return m_activeLoopBrush; } + inline void setActiveLoopBrush(QBrush const & activeLoopBrush) { m_activeLoopBrush = activeLoopBrush; } + + inline QColor const & getActiveLoopInnerColor() const { return m_activeLoopInnerColor; } + inline void setActiveLoopInnerColor(QColor const & activeLoopInnerColor) { m_activeLoopInnerColor = activeLoopInnerColor; } + + inline int const & getLoopRectangleVerticalPadding() const { return m_loopRectangleVerticalPadding; } + inline void setLoopRectangleVerticalPadding(int const & loopRectangleVerticalPadding) { m_loopRectangleVerticalPadding = loopRectangleVerticalPadding; } + inline Song::PlayPos & pos() { return( m_pos ); @@ -155,9 +192,19 @@ public slots: private: static QPixmap * s_posMarkerPixmap; - static QPixmap * s_loopPointBeginPixmap; - static QPixmap * s_loopPointEndPixmap; - static QPixmap * s_loopPointDisabledPixmap; + + QColor m_inactiveLoopColor; + QBrush m_inactiveLoopBrush; + QColor m_inactiveLoopInnerColor; + + QColor m_activeLoopColor; + QBrush m_activeLoopBrush; + QColor m_activeLoopInnerColor; + + int m_loopRectangleVerticalPadding; + + QColor m_barLineColor; + QColor m_barNumberColor; AutoScrollStates m_autoScroll; LoopPointStates m_loopPoints; diff --git a/include/Track.h b/include/Track.h index b9098922878..8905e02ad14 100644 --- a/include/Track.h +++ b/include/Track.h @@ -195,6 +195,7 @@ class TrackContentObjectView : public selectableObject, public ModelView Q_PROPERTY( QColor selectedColor READ selectedColor WRITE setSelectedColor ) Q_PROPERTY( QColor textColor READ textColor WRITE setTextColor ) Q_PROPERTY( QColor textShadowColor READ textShadowColor WRITE setTextShadowColor ) + Q_PROPERTY( QColor BBPatternBackground READ BBPatternBackground WRITE setBBPatternBackground ) Q_PROPERTY( bool gradient READ gradient WRITE setGradient ) public: @@ -213,12 +214,14 @@ class TrackContentObjectView : public selectableObject, public ModelView QColor selectedColor() const; QColor textColor() const; QColor textShadowColor() const; + QColor BBPatternBackground() const; bool gradient() const; void setMutedColor( const QColor & c ); void setMutedBackgroundColor( const QColor & c ); void setSelectedColor( const QColor & c ); void setTextColor( const QColor & c ); void setTextShadowColor( const QColor & c ); + void setBBPatternBackground( const QColor & c ); void setGradient( const bool & b ); // access needsUpdate member variable @@ -293,6 +296,7 @@ protected slots: QColor m_selectedColor; QColor m_textColor; QColor m_textShadowColor; + QColor m_BBPatternBackground; bool m_gradient; bool m_needsUpdate; @@ -522,6 +526,8 @@ class EXPORT Track : public Model, public JournallingObject const MidiTime & end ); void swapPositionOfTCOs( int tcoNum1, int tcoNum2 ); + void createTCOsForBB( int bb ); + void insertTact( const MidiTime & pos ); void removeTact( const MidiTime & pos ); diff --git a/include/TrackLabelButton.h b/include/TrackLabelButton.h index 7af8f495e4c..918c29f832c 100644 --- a/include/TrackLabelButton.h +++ b/include/TrackLabelButton.h @@ -27,6 +27,7 @@ #define TRACK_LABEL_BUTTON_H #include +#include class TrackView; @@ -42,6 +43,7 @@ class TrackLabelButton : public QToolButton public slots: void rename(); + void renameFinished(); protected: @@ -55,6 +57,7 @@ public slots: private: TrackView * m_trackView; QString m_iconName; + QLineEdit * m_renameLineEdit; } ; diff --git a/include/VisualizationWidget.h b/include/VisualizationWidget.h index 5bc25c43dcd..ee2f1760ed5 100644 --- a/include/VisualizationWidget.h +++ b/include/VisualizationWidget.h @@ -29,7 +29,7 @@ #include #include -#include "Mixer.h" +#include "lmms_basics.h" class VisualizationWidget : public QWidget diff --git a/include/aeffectx.h b/include/aeffectx.h index 65db7a29993..703b56e4ced 100644 --- a/include/aeffectx.h +++ b/include/aeffectx.h @@ -103,7 +103,6 @@ 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; @@ -114,27 +113,35 @@ const int kEffectMagic = CCONST( 'V', 's', 't', 'P' ); const int kVstLangEnglish = 1; const int kVstMidiType = 1; +const int kVstTransportChanged = 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); +const int kVstTransportRecording = 1 << 3; // currently unused +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; // currently unused +const int kVstClockValid = 1 << 15; // currently unused + +// currently unused +const int kVstSmpte24fps = 0; +const int kVstSmpte25fps = 1; +const int kVstSmpte2997fps = 2; +const int kVstSmpte30fps = 3; +const int kVstSmpte2997dfps = 4; +const int kVstSmpte30dfps = 5; +const int kVstSmpteFilm16mm = 6; // very likely +const int kVstSmpteFilm35mm = 7; // very likely +const int kVstSmpte239fps = 10; +const int kVstSmpte249fps = 11; +const int kVstSmpte599fps = 12; +const int kVstSmpte60fps = 13; -class RemoteVstPlugin; - - class VstMidiEvent { public: @@ -188,52 +195,6 @@ class VstEvents } ; -/* 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: @@ -264,7 +225,7 @@ class AEffect // Zeroes 2c-2f 30-33 34-37 38-3b char empty3[4 + 4 + 4]; // 1.0f 3c-3f - float unkown_float; + float unknown_float; // An object? pointer 40-43 void *ptr3; // Zeroes 44-47 @@ -292,22 +253,24 @@ class VstTimeInfo double nanoSeconds; // 18 double ppqPos; - // 20? + // 20 double tempo; // 28 double barStartPos; - // 30? + // 30 double cycleStartPos; - // 38? + // 38 double cycleEndPos; - // 40? + // 40 int32_t timeSigNumerator; - // 44? + // 44 int32_t timeSigDenominator; - - int32_t smpteOffset; - int32_t smpteFrameRate; - int32_t samplesToNextClock; + // 48 unused + int32_t smpteOffset; + // 4c unused + int32_t smpteFrameRate; + // 50? unused, where does this come from? + int32_t samplesToNextClock; // 54 int32_t flags; diff --git a/include/lmms_math.h b/include/lmms_math.h index b4d8995a035..28a3ce86317 100644 --- a/include/lmms_math.h +++ b/include/lmms_math.h @@ -34,7 +34,7 @@ #include using namespace std; -#if defined (LMMS_BUILD_WIN32) || defined (LMMS_BUILD_APPLE) || defined(LMMS_BUILD_HAIKU) || defined (__FreeBSD__) +#if defined (LMMS_BUILD_WIN32) || defined (LMMS_BUILD_APPLE) || defined(LMMS_BUILD_HAIKU) || defined (__FreeBSD__) || defined(__OpenBSD__) #ifndef isnanf #define isnanf(x) isnan(x) #endif diff --git a/include/versioninfo.h b/include/versioninfo.h index 58f7a79e930..8477a61c0d7 100644 --- a/include/versioninfo.h +++ b/include/versioninfo.h @@ -24,6 +24,10 @@ #define PLATFORM "OS X" #endif +#ifdef LMMS_BUILD_OPENBSD +#define PLATFORM "OpenBSD" +#endif + #ifdef LMMS_BUILD_WIN32 #define PLATFORM "win32" #endif diff --git a/plugins/Amplifier/AmplifierControlDialog.cpp b/plugins/Amplifier/AmplifierControlDialog.cpp index 50396a5515d..ac3b231afc8 100644 --- a/plugins/Amplifier/AmplifierControlDialog.cpp +++ b/plugins/Amplifier/AmplifierControlDialog.cpp @@ -38,33 +38,32 @@ AmplifierControlDialog::AmplifierControlDialog( AmplifierControls* controls ) : QPalette pal; pal.setBrush( backgroundRole(), PLUGIN_NAME::getIconPixmap( "artwork" ) ); setPalette( pal ); - setFixedSize( 100, 125 ); + setFixedSize( 100, 110 ); Knob * volumeKnob = new Knob( knobBright_26, this); - volumeKnob -> move( 20, 30 ); + volumeKnob -> move( 16, 10 ); 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 -> move( 57, 10 ); 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 -> move( 16, 65 ); 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 -> move( 57, 65 ); rightKnob -> setVolumeKnob( true ); rightKnob->setModel( &controls->m_rightModel ); rightKnob->setLabel( tr( "RIGHT" ) ); rightKnob->setHintText( tr( "Right gain:" ) , "%" ); } - diff --git a/plugins/Amplifier/artwork.png b/plugins/Amplifier/artwork.png index 9750296a9d9..5598b32db47 100644 Binary files a/plugins/Amplifier/artwork.png and b/plugins/Amplifier/artwork.png differ diff --git a/plugins/Amplifier/logo.png b/plugins/Amplifier/logo.png index 89e9f368011..9340da708dd 100644 Binary files a/plugins/Amplifier/logo.png and b/plugins/Amplifier/logo.png differ diff --git a/plugins/BassBooster/BassBoosterControlDialog.cpp b/plugins/BassBooster/BassBoosterControlDialog.cpp index fa4eac97dc7..fc86f96cf6e 100644 --- a/plugins/BassBooster/BassBoosterControlDialog.cpp +++ b/plugins/BassBooster/BassBoosterControlDialog.cpp @@ -37,10 +37,10 @@ BassBoosterControlDialog::BassBoosterControlDialog( BassBoosterControls* control QPalette pal; pal.setBrush( backgroundRole(), PLUGIN_NAME::getIconPixmap( "artwork" ) ); setPalette( pal ); - setFixedSize( 120, 104 ); + setFixedSize( 120, 60 ); QVBoxLayout * tl = new QVBoxLayout( this ); - tl->addSpacing( 30 ); + tl->addSpacing( 4 ); QHBoxLayout * l = new QHBoxLayout; @@ -66,4 +66,3 @@ BassBoosterControlDialog::BassBoosterControlDialog( BassBoosterControls* control tl->addLayout( l ); setLayout( tl ); } - diff --git a/plugins/BassBooster/artwork.png b/plugins/BassBooster/artwork.png index 55ef058fffd..c16b8ca2bc5 100644 Binary files a/plugins/BassBooster/artwork.png and b/plugins/BassBooster/artwork.png differ diff --git a/plugins/BassBooster/logo.png b/plugins/BassBooster/logo.png index 89e9f368011..9340da708dd 100644 Binary files a/plugins/BassBooster/logo.png and b/plugins/BassBooster/logo.png differ diff --git a/plugins/Bitcrush/logo.png b/plugins/Bitcrush/logo.png new file mode 100644 index 00000000000..9340da708dd Binary files /dev/null and b/plugins/Bitcrush/logo.png differ diff --git a/plugins/CMakeLists.txt b/plugins/CMakeLists.txt index 55b27b344e8..500ed831ef5 100644 --- a/plugins/CMakeLists.txt +++ b/plugins/CMakeLists.txt @@ -5,51 +5,83 @@ INCLUDE_DIRECTORIES( ${SAMPLERATE_INCLUDE_DIRS} ) -ADD_SUBDIRECTORY(Amplifier) -ADD_SUBDIRECTORY(audio_file_processor) -ADD_SUBDIRECTORY(BassBooster) -ADD_SUBDIRECTORY(bit_invader) -ADD_SUBDIRECTORY(Bitcrush) -ADD_SUBDIRECTORY(carlabase) -ADD_SUBDIRECTORY(carlapatchbay) -ADD_SUBDIRECTORY(carlarack) -ADD_SUBDIRECTORY(CrossoverEQ) -ADD_SUBDIRECTORY(Delay) -ADD_SUBDIRECTORY(DualFilter) -ADD_SUBDIRECTORY(dynamics_processor) -ADD_SUBDIRECTORY(Eq) -ADD_SUBDIRECTORY(Flanger) -ADD_SUBDIRECTORY(flp_import) -ADD_SUBDIRECTORY(HydrogenImport) -ADD_SUBDIRECTORY(kicker) -ADD_SUBDIRECTORY(ladspa_browser) -ADD_SUBDIRECTORY(LadspaEffect) -ADD_SUBDIRECTORY(lb302) -ADD_SUBDIRECTORY(MidiImport) -ADD_SUBDIRECTORY(MidiExport) -ADD_SUBDIRECTORY(MultitapEcho) -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) +SET(PLUGIN_LIST "" CACHE STRING "List of plug-ins to build") + +STRING(REPLACE " " ";" PLUGIN_LIST "${PLUGIN_LIST}") + +OPTION(LMMS_MINIMAL "Build a minimal list of plug-ins" OFF) + +SET(MINIMAL_LIST + audio_file_processor + kicker + triple_oscillator +) + +IF(LMMS_MINIMAL) + IF("${PLUGIN_LIST}" STREQUAL "") + STRING(REPLACE ";" " " MINIMAL_LIST_STRING "${MINIMAL_LIST}") + MESSAGE( +"-- Using minimal plug-ins: ${MINIMAL_LIST_STRING}\n" +" Note: You can specify specific plug-ins using -DPLUGIN_LIST=\"foo bar\"" + ) + ENDIF() + SET(PLUGIN_LIST ${MINIMAL_LIST} ${PLUGIN_LIST}) ENDIF() -ADD_SUBDIRECTORY(GigPlayer) -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) + +IF("${PLUGIN_LIST}" STREQUAL "") + SET(PLUGIN_LIST + ${MINIMAL_LIST} + Amplifier + BassBooster + bit_invader + Bitcrush + carlabase + carlapatchbay + carlarack + CrossoverEQ + Delay + DualFilter + dynamics_processor + Eq + Flanger + HydrogenImport + ladspa_browser + LadspaEffect + lb302 + MidiImport + MidiExport + MultitapEcho + monstro + nes + opl2 + organic + papu + patman + peak_controller_effect + GigPlayer + sfxr + sid + SpectrumAnalyzer + stereo_enhancer + stereo_matrix + stk + vestige + vst_base + VstEffect + watsyn + waveshaper + vibed + zynaddsubfx + ) + + IF(NOT LMMS_BUILD_APPLE) + SET(PLUGIN_LIST + ${PLUGIN_LIST} + sf2_player + ) + ENDIF() +ENDIF("${PLUGIN_LIST}" STREQUAL "") + +FOREACH(PLUGIN ${PLUGIN_LIST}) + ADD_SUBDIRECTORY(${PLUGIN}) +ENDFOREACH() diff --git a/plugins/CrossoverEQ/CrossoverEQ.cpp b/plugins/CrossoverEQ/CrossoverEQ.cpp index 023bdff9cb0..d23638d6939 100644 --- a/plugins/CrossoverEQ/CrossoverEQ.cpp +++ b/plugins/CrossoverEQ/CrossoverEQ.cpp @@ -152,7 +152,7 @@ bool CrossoverEQEffect::processAudioBuffer( sampleFrame* buf, const fpp_t frames } // run band 1 - if( ! mute1 ) + if( mute1 ) { for( int f = 0; f < frames; ++f ) { @@ -162,7 +162,7 @@ bool CrossoverEQEffect::processAudioBuffer( sampleFrame* buf, const fpp_t frames } // run band 2 - if( ! mute2 ) + if( mute2 ) { for( int f = 0; f < frames; ++f ) { @@ -172,7 +172,7 @@ bool CrossoverEQEffect::processAudioBuffer( sampleFrame* buf, const fpp_t frames } // run band 3 - if( ! mute3 ) + if( mute3 ) { for( int f = 0; f < frames; ++f ) { @@ -182,7 +182,7 @@ bool CrossoverEQEffect::processAudioBuffer( sampleFrame* buf, const fpp_t frames } // run band 4 - if( ! mute4 ) + if( mute4 ) { for( int f = 0; f < frames; ++f ) { diff --git a/plugins/CrossoverEQ/CrossoverEQControlDialog.cpp b/plugins/CrossoverEQ/CrossoverEQControlDialog.cpp index 8a9eecf4df8..e8dd28fc09e 100644 --- a/plugins/CrossoverEQ/CrossoverEQControlDialog.cpp +++ b/plugins/CrossoverEQ/CrossoverEQControlDialog.cpp @@ -42,23 +42,23 @@ CrossoverEQControlDialog::CrossoverEQControlDialog( CrossoverEQControls * contro QPalette pal; pal.setBrush( backgroundRole(), PLUGIN_NAME::getIconPixmap( "artwork" ) ); setPalette( pal ); - setFixedSize( 167, 188 ); + setFixedSize( 167, 178 ); // knobs Knob * xover12 = new Knob( knobBright_26, this ); - xover12->move( 29, 15 ); + xover12->move( 29, 11 ); xover12->setModel( & controls->m_xover12 ); xover12->setLabel( "1/2" ); xover12->setHintText( tr( "Band 1/2 Crossover:" ), " Hz" ); Knob * xover23 = new Knob( knobBright_26, this ); - xover23->move( 69, 15 ); + xover23->move( 69, 11 ); xover23->setModel( & controls->m_xover23 ); xover23->setLabel( "2/3" ); xover23->setHintText( tr( "Band 2/3 Crossover:" ), " Hz" ); Knob * xover34 = new Knob( knobBright_26, this ); - xover34->move( 109, 15 ); + xover34->move( 109, 11 ); xover34->setModel( & controls->m_xover34 ); xover34->setLabel( "3/4" ); xover34->setHintText( tr( "Band 3/4 Crossover:" ), " Hz" ); @@ -93,23 +93,23 @@ CrossoverEQControlDialog::CrossoverEQControlDialog( CrossoverEQControls * contro gain4->setHintText( tr( "Band 4 Gain:" ), " dBV" ); // leds - LedCheckBox * mute1 = new LedCheckBox( "M", this, tr( "Band 1 Mute" ), LedCheckBox::Red ); - mute1->move( 11, 158 ); + LedCheckBox * mute1 = new LedCheckBox( "", this, tr( "Band 1 Mute" ), LedCheckBox::Green ); + mute1->move( 15, 154 ); mute1->setModel( & controls->m_mute1 ); ToolTip::add( mute1, tr( "Mute Band 1" ) ); - LedCheckBox * mute2 = new LedCheckBox( "M", this, tr( "Band 2 Mute" ), LedCheckBox::Red ); - mute2->move( 51, 158 ); + LedCheckBox * mute2 = new LedCheckBox( "", this, tr( "Band 2 Mute" ), LedCheckBox::Green ); + mute2->move( 55, 154 ); mute2->setModel( & controls->m_mute2 ); ToolTip::add( mute2, tr( "Mute Band 2" ) ); - LedCheckBox * mute3 = new LedCheckBox( "M", this, tr( "Band 3 Mute" ), LedCheckBox::Red ); - mute3->move( 91, 158 ); + LedCheckBox * mute3 = new LedCheckBox( "", this, tr( "Band 3 Mute" ), LedCheckBox::Green ); + mute3->move( 95, 154 ); mute3->setModel( & controls->m_mute3 ); ToolTip::add( mute3, tr( "Mute Band 3" ) ); - LedCheckBox * mute4 = new LedCheckBox( "M", this, tr( "Band 4 Mute" ), LedCheckBox::Red ); - mute4->move( 131, 158 ); + LedCheckBox * mute4 = new LedCheckBox( "", this, tr( "Band 4 Mute" ), LedCheckBox::Green ); + mute4->move( 135, 154 ); mute4->setModel( & controls->m_mute4 ); ToolTip::add( mute4, tr( "Mute Band 4" ) ); } diff --git a/plugins/CrossoverEQ/CrossoverEQControls.cpp b/plugins/CrossoverEQ/CrossoverEQControls.cpp index 9c58eabfffc..9c4fb9ad045 100644 --- a/plugins/CrossoverEQ/CrossoverEQControls.cpp +++ b/plugins/CrossoverEQ/CrossoverEQControls.cpp @@ -37,10 +37,10 @@ CrossoverEQControls::CrossoverEQControls( CrossoverEQEffect * eff ) : m_gain2( 0.f, -60.f, 30.f, 0.1f, this, "Band 2 Gain" ), m_gain3( 0.f, -60.f, 30.f, 0.1f, this, "Band 3 Gain" ), m_gain4( 0.f, -60.f, 30.f, 0.1f, this, "Band 4 Gain" ), - m_mute1( false, this, "Mute Band 1" ), - m_mute2( false, this, "Mute Band 2" ), - m_mute3( false, this, "Mute Band 3" ), - m_mute4( false, this, "Mute Band 4" ) + m_mute1( true, this, "Mute Band 1" ), + m_mute2( true, this, "Mute Band 2" ), + m_mute3( true, this, "Mute Band 3" ), + m_mute4( true, this, "Mute Band 4" ) { connect( Engine::mixer(), SIGNAL( sampleRateChanged() ), this, SLOT( sampleRateChanged() ) ); connect( &m_xover12, SIGNAL( dataChanged() ), this, SLOT( xover12Changed() ) ); diff --git a/plugins/CrossoverEQ/artwork.png b/plugins/CrossoverEQ/artwork.png index 5510d2b3c3e..ffd2788abed 100644 Binary files a/plugins/CrossoverEQ/artwork.png and b/plugins/CrossoverEQ/artwork.png differ diff --git a/plugins/CrossoverEQ/fader_bg.png b/plugins/CrossoverEQ/fader_bg.png index abe28110594..ca4eedafdc9 100644 Binary files a/plugins/CrossoverEQ/fader_bg.png and b/plugins/CrossoverEQ/fader_bg.png differ diff --git a/plugins/CrossoverEQ/fader_empty.png b/plugins/CrossoverEQ/fader_empty.png index 4a95f05aa4c..797a0d3bc2d 100644 Binary files a/plugins/CrossoverEQ/fader_empty.png and b/plugins/CrossoverEQ/fader_empty.png differ diff --git a/plugins/CrossoverEQ/fader_knob2.png b/plugins/CrossoverEQ/fader_knob2.png index 252b485ee87..b5238ac06c6 100644 Binary files a/plugins/CrossoverEQ/fader_knob2.png and b/plugins/CrossoverEQ/fader_knob2.png differ diff --git a/plugins/CrossoverEQ/logo.png b/plugins/CrossoverEQ/logo.png new file mode 100644 index 00000000000..9340da708dd Binary files /dev/null and b/plugins/CrossoverEQ/logo.png differ diff --git a/plugins/Delay/logo.png b/plugins/Delay/logo.png index 89e9f368011..9340da708dd 100644 Binary files a/plugins/Delay/logo.png and b/plugins/Delay/logo.png differ diff --git a/plugins/DualFilter/logo.png b/plugins/DualFilter/logo.png new file mode 100644 index 00000000000..9340da708dd Binary files /dev/null and b/plugins/DualFilter/logo.png differ diff --git a/plugins/Eq/EqSpectrumView.h b/plugins/Eq/EqSpectrumView.h index 1d9ad5ea23b..b1a084b5ca2 100644 --- a/plugins/Eq/EqSpectrumView.h +++ b/plugins/Eq/EqSpectrumView.h @@ -144,7 +144,7 @@ class EqSpectrumView : public QWidget setFixedSize( 400, 200 ); QTimer *timer = new QTimer(this); connect(timer, SIGNAL(timeout()), this, SLOT(update())); - timer->start(100); + timer->start(20); setAttribute( Qt::WA_TranslucentBackground, true ); m_skipBands = MAX_BANDS * 0.5; float totalLength = log10( 20000 ); diff --git a/plugins/Eq/logo.png b/plugins/Eq/logo.png index 89e9f368011..9340da708dd 100644 Binary files a/plugins/Eq/logo.png and b/plugins/Eq/logo.png differ diff --git a/plugins/Flanger/FlangerControlsDialog.cpp b/plugins/Flanger/FlangerControlsDialog.cpp index 4c4f12e1a06..5a10379977f 100644 --- a/plugins/Flanger/FlangerControlsDialog.cpp +++ b/plugins/Flanger/FlangerControlsDialog.cpp @@ -38,45 +38,45 @@ FlangerControlsDialog::FlangerControlsDialog( FlangerControls *controls ) : QPalette pal; pal.setBrush( backgroundRole(), PLUGIN_NAME::getIconPixmap( "artwork" ) ); setPalette( pal ); - setFixedSize( 200, 75 ); + setFixedSize( 195, 75 ); Knob* delayKnob = new Knob( knobBright_26, this ); - delayKnob->move( 20,10 ); + delayKnob->move( 10,10 ); delayKnob->setVolumeKnob( false ); delayKnob->setModel( &controls->m_delayTimeModel ); - delayKnob->setLabel( tr( "Delay" ) ); + delayKnob->setLabel( tr( "DELAY" ) ); delayKnob->setHintText( tr( "Delay Time:" ) + " ", "s" ); TempoSyncKnob * lfoFreqKnob = new TempoSyncKnob( knobBright_26, this ); - lfoFreqKnob->move( 53,10 ); + lfoFreqKnob->move( 48,10 ); lfoFreqKnob->setVolumeKnob( false ); lfoFreqKnob->setModel( &controls->m_lfoFrequencyModel ); - lfoFreqKnob->setLabel( tr( "Lfo Hz" ) ); - lfoFreqKnob->setHintText( tr ( "Lfo:" ) , "Hz" ); + lfoFreqKnob->setLabel( tr( "RATE" ) ); + lfoFreqKnob->setHintText( tr ( "Rate:" ) , "Hz" ); Knob * lfoAmtKnob = new Knob( knobBright_26, this ); - lfoAmtKnob->move( 86,10 ); + lfoAmtKnob->move( 85,10 ); lfoAmtKnob->setVolumeKnob( false ); lfoAmtKnob->setModel( &controls->m_lfoAmountModel ); - lfoAmtKnob->setLabel( tr( "Amt" ) ); - lfoAmtKnob->setHintText( tr ( "Amt:" ) , "" ); + lfoAmtKnob->setLabel( tr( "AMNT" ) ); + lfoAmtKnob->setHintText( tr ( "Amount:" ) , "" ); Knob * feedbackKnob = new Knob( knobBright_26, this ); - feedbackKnob->move( 119,10 ); + feedbackKnob->move( 122,10 ); feedbackKnob->setVolumeKnob( true) ; feedbackKnob->setModel( &controls->m_feedbackModel ); - feedbackKnob->setLabel( tr( "Regen" ) ); + feedbackKnob->setLabel( tr( "FDBK" ) ); feedbackKnob->setHintText( tr ( "Feedback Amount:" ) , "" ); Knob * whiteNoiseKnob = new Knob( knobBright_26, this ); - whiteNoiseKnob->move( 150,10 ); + whiteNoiseKnob->move( 156,10 ); whiteNoiseKnob->setVolumeKnob( true) ; whiteNoiseKnob->setModel( &controls->m_whiteNoiseAmountModel ); - whiteNoiseKnob->setLabel( tr( "Noise" ) ); + whiteNoiseKnob->setLabel( tr( "NOISE" ) ); whiteNoiseKnob->setHintText( tr ( "White Noise Amount:" ) , "" ); - LedCheckBox* invertCb = new LedCheckBox( tr( "" ), this ); - invertCb->move( 15,55 ); + LedCheckBox * invertCb = new LedCheckBox( tr( "Invert" ), this ); + invertCb->move( 10,53 ); diff --git a/plugins/Flanger/artwork.png b/plugins/Flanger/artwork.png index 239bc219e69..bbe80e59880 100644 Binary files a/plugins/Flanger/artwork.png and b/plugins/Flanger/artwork.png differ diff --git a/plugins/Flanger/logo.png b/plugins/Flanger/logo.png index 89e9f368011..9340da708dd 100644 Binary files a/plugins/Flanger/logo.png and b/plugins/Flanger/logo.png differ diff --git a/plugins/GigPlayer/CMakeLists.txt b/plugins/GigPlayer/CMakeLists.txt index 4e49988eb55..996444fff75 100644 --- a/plugins/GigPlayer/CMakeLists.txt +++ b/plugins/GigPlayer/CMakeLists.txt @@ -14,6 +14,10 @@ if(LMMS_HAVE_GIG) # Enable C++11 ADD_DEFINITIONS(-std=c++0x) + + IF(LMMS_BUILD_APPLE) + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++") + ENDIF() LINK_DIRECTORIES(${GIG_LIBRARY_DIRS} ${SAMPLERATE_LIBRARY_DIRS}) LINK_LIBRARIES(${GIG_LIBRARIES} ${SAMPLERATE_LIBRARIES}) diff --git a/plugins/GigPlayer/GigPlayer.cpp b/plugins/GigPlayer/GigPlayer.cpp index dedfe0edeaf..d9f2e0c5a3b 100644 --- a/plugins/GigPlayer/GigPlayer.cpp +++ b/plugins/GigPlayer/GigPlayer.cpp @@ -40,8 +40,10 @@ #include "Engine.h" #include "InstrumentTrack.h" #include "InstrumentPlayHandle.h" +#include "Mixer.h" #include "NotePlayHandle.h" #include "Knob.h" +#include "SampleBuffer.h" #include "Song.h" #include "ConfigManager.h" #include "endian_handling.h" @@ -209,7 +211,7 @@ void GigInstrument::openFile( const QString & _gigFile, bool updateTrackName ) try { - m_instance = new GigInstance( _gigFile ); + m_instance = new GigInstance( SampleBuffer::tryToMakeAbsolute( _gigFile ) ); m_filename = SampleBuffer::tryToMakeRelative( _gigFile ); } catch( ... ) @@ -1067,18 +1069,7 @@ void GigInstrumentView::showFileDialog() QString dir; if( k->m_filename != "" ) { - QString f = k->m_filename; - - if( QFileInfo( f ).isRelative() ) - { - f = ConfigManager::inst()->gigDir() + f; - - if( QFileInfo( f ).exists() == false ) - { - f = ConfigManager::inst()->factorySamplesDir() + k->m_filename; - } - } - + QString f = SampleBuffer::tryToMakeAbsolute( k->m_filename ); ofd.setDirectory( QFileInfo( f ).absolutePath() ); ofd.selectFile( QFileInfo( f ).fileName() ); } diff --git a/plugins/GigPlayer/GigPlayer.h b/plugins/GigPlayer/GigPlayer.h index e637fcd6ac4..08a3b184cf5 100644 --- a/plugins/GigPlayer/GigPlayer.h +++ b/plugins/GigPlayer/GigPlayer.h @@ -30,6 +30,7 @@ #include #include #include +#include #include "Instrument.h" #include "PixmapButton.h" @@ -37,7 +38,6 @@ #include "Knob.h" #include "LcdSpinBox.h" #include "LedCheckbox.h" -#include "SampleBuffer.h" #include "MemoryManager.h" #include "gig.h" diff --git a/plugins/LadspaEffect/calf/CMakeLists.txt b/plugins/LadspaEffect/calf/CMakeLists.txt index 3bd4ae0f8f6..b78a3817540 100644 --- a/plugins/LadspaEffect/calf/CMakeLists.txt +++ b/plugins/LadspaEffect/calf/CMakeLists.txt @@ -1,4 +1,5 @@ FILE(GLOB SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp") +LIST(SORT SOURCES) ADD_LIBRARY(calf MODULE ${SOURCES}) INCLUDE_DIRECTORIES("${CMAKE_SOURCE_DIR}/include" "${CMAKE_BINARY_DIR}" @@ -15,7 +16,7 @@ SET_TARGET_PROPERTIES(calf PROPERTIES COMPILE_FLAGS "-O2 -finline-functions ${IN IF(LMMS_BUILD_WIN32) ADD_CUSTOM_COMMAND(TARGET calf POST_BUILD COMMAND "${STRIP}" "$") ENDIF(LMMS_BUILD_WIN32) -IF(NOT LMMS_BUILD_APPLE) +IF(NOT LMMS_BUILD_APPLE AND NOT LMMS_BUILD_OPENBSD) SET_TARGET_PROPERTIES(calf PROPERTIES LINK_FLAGS "${LINK_FLAGS} -shared -Wl,-no-undefined") -ENDIF(NOT LMMS_BUILD_APPLE) +ENDIF(NOT LMMS_BUILD_APPLE AND NOT LMMS_BUILD_OPENBSD) diff --git a/plugins/LadspaEffect/calf/src/modules_limit.cpp b/plugins/LadspaEffect/calf/src/modules_limit.cpp index 3930078bb1e..cd3d6fa7b1b 100644 --- a/plugins/LadspaEffect/calf/src/modules_limit.cpp +++ b/plugins/LadspaEffect/calf/src/modules_limit.cpp @@ -540,7 +540,8 @@ uint32_t multibandlimiter_audio_module::process(uint32_t offset, uint32_t numsam } // 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); + float pre_buffer = *params[param_limit] / std::max(fabs(sum_left), fabs(sum_right)); + buffer[pos] = std::min(pre_buffer, 1.0f); for (int i = 0; i < strips; i++) { // process gain reduction diff --git a/plugins/LadspaEffect/caps/Amp.cc b/plugins/LadspaEffect/caps/Amp.cc index 1d2a8a71b43..10a5f13899b 100644 --- a/plugins/LadspaEffect/caps/Amp.cc +++ b/plugins/LadspaEffect/caps/Amp.cc @@ -370,7 +370,7 @@ AmpV::one_cycle (int frames) current.g = max (gain < 1 ? gain : pow (20, gain - 1), .000001); #if 0 - if (++_turn & 127) == 0) + if ( (++_turn & 127) == 0) fprintf (stderr, "supply = %.3f sag = %.3f\n", supply, sag); #endif diff --git a/plugins/LadspaEffect/caps/CMakeLists.txt b/plugins/LadspaEffect/caps/CMakeLists.txt index cb4ce1a0087..0eff4d5cd9c 100644 --- a/plugins/LadspaEffect/caps/CMakeLists.txt +++ b/plugins/LadspaEffect/caps/CMakeLists.txt @@ -1,5 +1,6 @@ INCLUDE_DIRECTORIES("${CMAKE_SOURCE_DIR}/include") FILE(GLOB SOURCES *.cc) +LIST(SORT SOURCES) ADD_LIBRARY(caps MODULE ${SOURCES}) INSTALL(TARGETS caps LIBRARY DESTINATION "${PLUGIN_DIR}/ladspa") IF(LMMS_BUILD_WIN64) @@ -11,9 +12,9 @@ SET_TARGET_PROPERTIES(caps PROPERTIES COMPILE_FLAGS "-O2 -funroll-loops -Wno-wri IF(LMMS_BUILD_WIN32) ADD_CUSTOM_COMMAND(TARGET caps POST_BUILD COMMAND "${STRIP}" \"$\") ENDIF(LMMS_BUILD_WIN32) -IF(NOT LMMS_BUILD_APPLE) +IF(NOT LMMS_BUILD_APPLE AND NOT LMMS_BUILD_OPENBSD) SET_TARGET_PROPERTIES(caps PROPERTIES LINK_FLAGS "${LINK_FLAGS} -shared -Wl,-no-undefined") -ENDIF(NOT LMMS_BUILD_APPLE) +ENDIF(NOT LMMS_BUILD_APPLE AND NOT LMMS_BUILD_OPENBSD) IF(LMMS_BUILD_LINUX) SET_TARGET_PROPERTIES(caps PROPERTIES LINK_FLAGS "${LINK_FLAGS}") diff --git a/plugins/LadspaEffect/cmt/CMakeLists.txt b/plugins/LadspaEffect/cmt/CMakeLists.txt index 81bb13dc267..f9fcd89cbb4 100644 --- a/plugins/LadspaEffect/cmt/CMakeLists.txt +++ b/plugins/LadspaEffect/cmt/CMakeLists.txt @@ -1,5 +1,6 @@ INCLUDE_DIRECTORIES("${CMAKE_SOURCE_DIR}/include") FILE(GLOB_RECURSE SOURCES src/*.cpp) +LIST(SORT SOURCES) ADD_LIBRARY(cmt MODULE ${SOURCES}) INSTALL(TARGETS cmt LIBRARY DESTINATION "${PLUGIN_DIR}/ladspa") @@ -12,7 +13,7 @@ ELSE(LMMS_BUILD_WIN32) SET_TARGET_PROPERTIES(cmt PROPERTIES COMPILE_FLAGS "${COMPILE_FLAGS} -fPIC") ENDIF(LMMS_BUILD_WIN32) -IF(NOT LMMS_BUILD_APPLE) +IF(NOT LMMS_BUILD_APPLE AND NOT LMMS_BUILD_OPENBSD) SET_TARGET_PROPERTIES(cmt PROPERTIES LINK_FLAGS "${LINK_FLAGS} -shared -Wl,-no-undefined") -ENDIF(NOT LMMS_BUILD_APPLE) +ENDIF(NOT LMMS_BUILD_APPLE AND NOT LMMS_BUILD_OPENBSD) diff --git a/plugins/LadspaEffect/logo.png b/plugins/LadspaEffect/logo.png index 89e9f368011..24d9135ffff 100644 Binary files a/plugins/LadspaEffect/logo.png and b/plugins/LadspaEffect/logo.png differ diff --git a/plugins/LadspaEffect/swh/CMakeLists.txt b/plugins/LadspaEffect/swh/CMakeLists.txt index e140b179335..a14fc1428f8 100644 --- a/plugins/LadspaEffect/swh/CMakeLists.txt +++ b/plugins/LadspaEffect/swh/CMakeLists.txt @@ -4,13 +4,17 @@ INCLUDE_DIRECTORIES("${CMAKE_SOURCE_DIR}/include" ${FFTW3F_INCLUDE_DIRS} "${CMAKE_BINARY_DIR}") LINK_DIRECTORIES(${FFTW3F_LIBRARY_DIRS}) -LINK_LIBRARIES(-lfftw3f) FILE(GLOB PLUGIN_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.c") +LIST(SORT PLUGIN_SOURCES) FOREACH(_item ${PLUGIN_SOURCES}) GET_FILENAME_COMPONENT(_plugin "${_item}" NAME_WE) ADD_LIBRARY("${_plugin}" MODULE "${_item}") + # vocoder_1337 does not use fftw3f + IF(NOT ("${_plugin}" STREQUAL "vocoder_1337")) + TARGET_LINK_LIBRARIES("${_plugin}" -lfftw3f) + ENDIF() 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") @@ -21,7 +25,7 @@ FOREACH(_item ${PLUGIN_SOURCES}) ENDIF(LMMS_BUILD_WIN32) IF(LMMS_BUILD_APPLE) SET_TARGET_PROPERTIES("${_plugin}" PROPERTIES LINK_FLAGS "${LINK_FLAGS} -Bsymbolic -lm") - ELSE(LMMS_BUILD_APPLE) + ELSEIF(NOT LMMS_BUILD_APPLE AND NOT LMMS_BUILD_OPENBSD) SET_TARGET_PROPERTIES("${_plugin}" PROPERTIES LINK_FLAGS "${LINK_FLAGS} -shared -Wl,-no-undefined -Wl,-Bsymbolic -lm") ENDIF(LMMS_BUILD_APPLE) IF(LMMS_BUILD_LINUX OR LMMS_BUILD_HAIKU) @@ -46,6 +50,7 @@ TARGET_LINK_LIBRARIES(lowpass_iir_1891 iir) TARGET_LINK_LIBRARIES(notch_iir_1894 iir) FILE(GLOB GSM_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/gsm/*.c") +LIST(SORT GSM_SOURCES) ADD_LIBRARY(gsm STATIC ${GSM_SOURCES}) SET_TARGET_PROPERTIES(gsm PROPERTIES COMPILE_FLAGS "${PIC_FLAGS}") TARGET_LINK_LIBRARIES(gsm_1215 gsm) @@ -56,6 +61,8 @@ 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(analogue_osc_1416 blo) +TARGET_LINK_LIBRARIES(fm_osc_1415 blo) TARGET_LINK_LIBRARIES(hermes_filter_1200 blo) ADD_LIBRARY(rms STATIC util/rms.c) @@ -71,5 +78,6 @@ 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(pitchscale -lfftw3f) TARGET_LINK_LIBRARIES(pitch_scale_1193 pitchscale) TARGET_LINK_LIBRARIES(pitch_scale_1194 pitchscale) diff --git a/plugins/LadspaEffect/swh/alias_1407.c b/plugins/LadspaEffect/swh/alias_1407.c index c3190e36ce9..387c3662e32 100644 --- a/plugins/LadspaEffect/swh/alias_1407.c +++ b/plugins/LadspaEffect/swh/alias_1407.c @@ -19,10 +19,10 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) -int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +int bIsFirstTime = 1; +static void __attribute__((constructor)) swh_init(); // forward declaration #else -#define _WINDOWS_DLL_EXPORT_ +#define _WINDOWS_DLL_EXPORT_ #endif @@ -83,7 +83,7 @@ static void connectPortAlias( static LADSPA_Handle instantiateAlias( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - Alias *plugin_data = (Alias *)malloc(sizeof(Alias)); + Alias *plugin_data = (Alias *)calloc(1, sizeof(Alias)); plugin_data->run_adding_gain = 1.0f; return (LADSPA_Handle)plugin_data; @@ -161,14 +161,13 @@ static void runAddingAlias(LADSPA_Handle instance, unsigned long sample_count) { } } -void __attribute__((constructor)) swh_init() { +static 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) @@ -240,12 +239,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (aliasDescriptor) { free((LADSPA_PortDescriptor *)aliasDescriptor->PortDescriptors); free((char **)aliasDescriptor->PortNames); free((LADSPA_PortRangeHint *)aliasDescriptor->PortRangeHints); free(aliasDescriptor); } + aliasDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/allpass_1895.c b/plugins/LadspaEffect/swh/allpass_1895.c index 8bbf534b05c..243851c5190 100644 --- a/plugins/LadspaEffect/swh/allpass_1895.c +++ b/plugins/LadspaEffect/swh/allpass_1895.c @@ -19,12 +19,14 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) -int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +int bIsFirstTime = 1; +static void __attribute__((constructor)) swh_init(); // forward declaration #else -#define _WINDOWS_DLL_EXPORT_ +#define _WINDOWS_DLL_EXPORT_ #endif +#line 10 "allpass_1895.xml" + #include "ladspa-util.h" #define MIN(a,b) ((a) < (b) ? (a) : (b)) @@ -153,18 +155,19 @@ static void activateAllpass_n(LADSPA_Handle instance) { 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; +#line 56 "allpass_1895.xml" 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) @@ -184,6 +187,7 @@ static void activateAllpass_n(LADSPA_Handle instance) { } static void cleanupAllpass_n(LADSPA_Handle instance) { +#line 78 "allpass_1895.xml" Allpass_n *plugin_data = (Allpass_n *)instance; free(plugin_data->buffer); free(instance); @@ -218,18 +222,27 @@ static void connectPortAllpass_n( static LADSPA_Handle instantiateAllpass_n( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - Allpass_n *plugin_data = (Allpass_n *)malloc(sizeof(Allpass_n)); + Allpass_n *plugin_data = (Allpass_n *)calloc(1, 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; + 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; +#line 44 "allpass_1895.xml" sample_rate = s_rate; + // Uninitialized variables + buffer_mask = 0; + delay_samples = 0; + feedback = 0; + last_decay_time = 0; + last_delay_time = 0; + write_phase = 0; + plugin_data->buffer = buffer; plugin_data->buffer_mask = buffer_mask; plugin_data->delay_samples = delay_samples; @@ -276,7 +289,8 @@ static void runAllpass_n(LADSPA_Handle instance, unsigned long sample_count) { unsigned int sample_rate = plugin_data->sample_rate; long write_phase = plugin_data->write_phase; - unsigned int i; +#line 82 "allpass_1895.xml" + int i; ignore(max_delay); @@ -286,7 +300,7 @@ static void runAllpass_n(LADSPA_Handle instance, unsigned long sample_count) { 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); @@ -417,7 +431,8 @@ static void runAddingAllpass_n(LADSPA_Handle instance, unsigned long sample_coun unsigned int sample_rate = plugin_data->sample_rate; long write_phase = plugin_data->write_phase; - unsigned int i; +#line 82 "allpass_1895.xml" + int i; ignore(max_delay); @@ -530,6 +545,7 @@ static void activateAllpass_l(LADSPA_Handle instance) { 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; +#line 56 "allpass_1895.xml" unsigned int minsize, size; if (plugin_data->max_delay && *plugin_data->max_delay > 0) @@ -561,6 +577,7 @@ static void activateAllpass_l(LADSPA_Handle instance) { } static void cleanupAllpass_l(LADSPA_Handle instance) { +#line 78 "allpass_1895.xml" Allpass_l *plugin_data = (Allpass_l *)instance; free(plugin_data->buffer); free(instance); @@ -595,18 +612,27 @@ static void connectPortAllpass_l( static LADSPA_Handle instantiateAllpass_l( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - Allpass_l *plugin_data = (Allpass_l *)malloc(sizeof(Allpass_l)); + Allpass_l *plugin_data = (Allpass_l *)calloc(1, 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; + 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; +#line 44 "allpass_1895.xml" sample_rate = s_rate; + // Uninitialized variables + buffer_mask = 0; + delay_samples = 0; + feedback = 0; + last_decay_time = 0; + last_delay_time = 0; + write_phase = 0; + plugin_data->buffer = buffer; plugin_data->buffer_mask = buffer_mask; plugin_data->delay_samples = delay_samples; @@ -636,6 +662,9 @@ static void runAllpass_l(LADSPA_Handle instance, unsigned long sample_count) { /* 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); @@ -650,7 +679,10 @@ static void runAllpass_l(LADSPA_Handle instance, unsigned long sample_count) { unsigned int sample_rate = plugin_data->sample_rate; long write_phase = plugin_data->write_phase; - unsigned int i; +#line 82 "allpass_1895.xml" + int i; + + ignore(max_delay); if (write_phase == 0) { plugin_data->last_delay_time = delay_time; @@ -729,6 +761,9 @@ static void runAddingAllpass_l(LADSPA_Handle instance, unsigned long sample_coun /* 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); @@ -743,7 +778,10 @@ static void runAddingAllpass_l(LADSPA_Handle instance, unsigned long sample_coun unsigned int sample_rate = plugin_data->sample_rate; long write_phase = plugin_data->write_phase; - unsigned int i; +#line 82 "allpass_1895.xml" + int i; + + ignore(max_delay); if (write_phase == 0) { plugin_data->last_delay_time = delay_time; @@ -811,6 +849,7 @@ static void activateAllpass_c(LADSPA_Handle instance) { 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; +#line 56 "allpass_1895.xml" unsigned int minsize, size; if (plugin_data->max_delay && *plugin_data->max_delay > 0) @@ -842,6 +881,7 @@ static void activateAllpass_c(LADSPA_Handle instance) { } static void cleanupAllpass_c(LADSPA_Handle instance) { +#line 78 "allpass_1895.xml" Allpass_c *plugin_data = (Allpass_c *)instance; free(plugin_data->buffer); free(instance); @@ -876,18 +916,27 @@ static void connectPortAllpass_c( static LADSPA_Handle instantiateAllpass_c( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - Allpass_c *plugin_data = (Allpass_c *)malloc(sizeof(Allpass_c)); + Allpass_c *plugin_data = (Allpass_c *)calloc(1, 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; + 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; +#line 44 "allpass_1895.xml" sample_rate = s_rate; + // Uninitialized variables + buffer_mask = 0; + delay_samples = 0; + feedback = 0; + last_decay_time = 0; + last_delay_time = 0; + write_phase = 0; + plugin_data->buffer = buffer; plugin_data->buffer_mask = buffer_mask; plugin_data->delay_samples = delay_samples; @@ -917,6 +966,9 @@ static void runAllpass_c(LADSPA_Handle instance, unsigned long sample_count) { /* 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); @@ -931,7 +983,10 @@ static void runAllpass_c(LADSPA_Handle instance, unsigned long sample_count) { unsigned int sample_rate = plugin_data->sample_rate; long write_phase = plugin_data->write_phase; - unsigned int i; +#line 82 "allpass_1895.xml" + int i; + + ignore(max_delay); if (write_phase == 0) { plugin_data->last_delay_time = delay_time; @@ -1013,6 +1068,9 @@ static void runAddingAllpass_c(LADSPA_Handle instance, unsigned long sample_coun /* 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); @@ -1027,7 +1085,10 @@ static void runAddingAllpass_c(LADSPA_Handle instance, unsigned long sample_coun unsigned int sample_rate = plugin_data->sample_rate; long write_phase = plugin_data->write_phase; - unsigned int i; +#line 82 "allpass_1895.xml" + int i; + + ignore(max_delay); if (write_phase == 0) { plugin_data->last_delay_time = delay_time; @@ -1088,14 +1149,13 @@ static void runAddingAllpass_c(LADSPA_Handle instance, unsigned long sample_coun plugin_data->write_phase = write_phase; } -void __attribute__((constructor)) swh_init() { +static 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) @@ -1346,24 +1406,27 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static 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); } + allpass_nDescriptor = NULL; if (allpass_lDescriptor) { free((LADSPA_PortDescriptor *)allpass_lDescriptor->PortDescriptors); free((char **)allpass_lDescriptor->PortNames); free((LADSPA_PortRangeHint *)allpass_lDescriptor->PortRangeHints); free(allpass_lDescriptor); } + allpass_lDescriptor = NULL; if (allpass_cDescriptor) { free((LADSPA_PortDescriptor *)allpass_cDescriptor->PortDescriptors); free((char **)allpass_cDescriptor->PortNames); free((LADSPA_PortRangeHint *)allpass_cDescriptor->PortRangeHints); free(allpass_cDescriptor); } + allpass_cDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/am_pitchshift_1433.c b/plugins/LadspaEffect/swh/am_pitchshift_1433.c index 65130c6dfc1..105751928ff 100644 --- a/plugins/LadspaEffect/swh/am_pitchshift_1433.c +++ b/plugins/LadspaEffect/swh/am_pitchshift_1433.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -114,7 +114,7 @@ static void connectPortAmPitchshift( static LADSPA_Handle instantiateAmPitchshift( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - AmPitchshift *plugin_data = (AmPitchshift *)malloc(sizeof(AmPitchshift)); + AmPitchshift *plugin_data = (AmPitchshift *)calloc(1, sizeof(AmPitchshift)); unsigned int count; LADSPA_Data *delay = NULL; unsigned int delay_mask; @@ -359,14 +359,13 @@ static void runAddingAmPitchshift(LADSPA_Handle instance, unsigned long sample_c *(plugin_data->latency) = delay_ofs/2; } -void __attribute__((constructor)) swh_init() { +static 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) @@ -455,12 +454,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (amPitchshiftDescriptor) { free((LADSPA_PortDescriptor *)amPitchshiftDescriptor->PortDescriptors); free((char **)amPitchshiftDescriptor->PortNames); free((LADSPA_PortRangeHint *)amPitchshiftDescriptor->PortRangeHints); free(amPitchshiftDescriptor); } + amPitchshiftDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/amp_1181.c b/plugins/LadspaEffect/swh/amp_1181.c index 30e87053852..1bbd97a3c91 100644 --- a/plugins/LadspaEffect/swh/amp_1181.c +++ b/plugins/LadspaEffect/swh/amp_1181.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -86,7 +86,7 @@ static void connectPortAmp( static LADSPA_Handle instantiateAmp( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - Amp *plugin_data = (Amp *)malloc(sizeof(Amp)); + Amp *plugin_data = (Amp *)calloc(1, sizeof(Amp)); plugin_data->run_adding_gain = 1.0f; return (LADSPA_Handle)plugin_data; @@ -154,14 +154,13 @@ static void runAddingAmp(LADSPA_Handle instance, unsigned long sample_count) { } } -void __attribute__((constructor)) swh_init() { +static 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) @@ -233,12 +232,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (ampDescriptor) { free((LADSPA_PortDescriptor *)ampDescriptor->PortDescriptors); free((char **)ampDescriptor->PortNames); free((LADSPA_PortRangeHint *)ampDescriptor->PortRangeHints); free(ampDescriptor); } + ampDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/analogue_osc_1416.c b/plugins/LadspaEffect/swh/analogue_osc_1416.c new file mode 100644 index 00000000000..9a3b47a78c1 --- /dev/null +++ b/plugins/LadspaEffect/swh/analogue_osc_1416.c @@ -0,0 +1,410 @@ +#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; +static void __attribute__((constructor)) swh_init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + +#line 10 "analogue_osc_1416.xml" + +#include + +#include "ladspa-util.h" +#include "util/blo.h" + +#define ANALOGUEOSC_WAVE 0 +#define ANALOGUEOSC_FREQ 1 +#define ANALOGUEOSC_WARM 2 +#define ANALOGUEOSC_INSTAB 3 +#define ANALOGUEOSC_OUTPUT 4 + +static LADSPA_Descriptor *analogueOscDescriptor = NULL; + +typedef struct { + LADSPA_Data *wave; + LADSPA_Data *freq; + LADSPA_Data *warm; + LADSPA_Data *instab; + LADSPA_Data *output; + float fs; + float itm1; + blo_h_osc * osc; + float otm1; + float otm2; + unsigned int rnda; + unsigned int rndb; + blo_h_tables *tables; + LADSPA_Data run_adding_gain; +} AnalogueOsc; + +_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 analogueOscDescriptor; + default: + return NULL; + } +} + +static void cleanupAnalogueOsc(LADSPA_Handle instance) { +#line 37 "analogue_osc_1416.xml" + AnalogueOsc *plugin_data = (AnalogueOsc *)instance; + blo_h_tables_free(plugin_data->tables); + blo_h_free(plugin_data->osc); + free(instance); +} + +static void connectPortAnalogueOsc( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + AnalogueOsc *plugin; + + plugin = (AnalogueOsc *)instance; + switch (port) { + case ANALOGUEOSC_WAVE: + plugin->wave = data; + break; + case ANALOGUEOSC_FREQ: + plugin->freq = data; + break; + case ANALOGUEOSC_WARM: + plugin->warm = data; + break; + case ANALOGUEOSC_INSTAB: + plugin->instab = data; + break; + case ANALOGUEOSC_OUTPUT: + plugin->output = data; + break; + } +} + +static LADSPA_Handle instantiateAnalogueOsc( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + AnalogueOsc *plugin_data = (AnalogueOsc *)calloc(1, sizeof(AnalogueOsc)); + float fs; + float itm1; + blo_h_osc *osc = NULL; + float otm1; + float otm2; + unsigned int rnda; + unsigned int rndb; + blo_h_tables *tables = NULL; + +#line 26 "analogue_osc_1416.xml" + tables = blo_h_tables_new(512); + osc = blo_h_new(tables, BLO_SINE, (float)s_rate); + fs = (float)s_rate; + itm1 = 0.0f; + otm1 = 0.0f; + otm2 = 0.0f; + rnda = 43437; + rndb = 111145; + + plugin_data->fs = fs; + plugin_data->itm1 = itm1; + plugin_data->osc = osc; + plugin_data->otm1 = otm1; + plugin_data->otm2 = otm2; + plugin_data->rnda = rnda; + plugin_data->rndb = rndb; + plugin_data->tables = tables; + + 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 runAnalogueOsc(LADSPA_Handle instance, unsigned long sample_count) { + AnalogueOsc *plugin_data = (AnalogueOsc *)instance; + + /* Waveform (1=sin, 2=tri, 3=squ, 4=saw) (float value) */ + const LADSPA_Data wave = *(plugin_data->wave); + + /* Frequency (Hz) (float value) */ + const LADSPA_Data freq = *(plugin_data->freq); + + /* Warmth (float value) */ + const LADSPA_Data warm = *(plugin_data->warm); + + /* Instability (float value) */ + const LADSPA_Data instab = *(plugin_data->instab); + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + float fs = plugin_data->fs; + float itm1 = plugin_data->itm1; + blo_h_osc * osc = plugin_data->osc; + float otm1 = plugin_data->otm1; + float otm2 = plugin_data->otm2; + unsigned int rnda = plugin_data->rnda; + unsigned int rndb = plugin_data->rndb; + blo_h_tables * tables = plugin_data->tables; + +#line 42 "analogue_osc_1416.xml" + unsigned long pos; + LADSPA_Data x, y; + const float q = warm - 0.999f; + const float leak = 1.0f - warm * 0.02f; + const unsigned int max_jump = (unsigned int)f_round(instab * 30000.0f) + 1; + + osc->wave = LIMIT(f_round(wave) - 1, 0, BLO_N_WAVES-1); + osc->nyquist = fs * (0.47f - f_clamp(warm, 0.0f, 1.0f) * 0.41f); + blo_hd_set_freq(osc, freq); + + tables = tables; // So gcc doesn't think it's unused + + for (pos = 0; pos < sample_count; pos++) { + x = blo_hd_run_cub(osc); + rnda += 432577; + rnda *= 47; + rndb += 7643113; + rnda *= 59; + osc->ph.all += (((rnda + rndb)/2) % max_jump) - max_jump/2; + osc->ph.all &= osc->ph_mask; + y = (x - q) / (1.0f - f_exp(-1.2f * (x - q))) + + q / (1.0f - f_exp(1.2f * q)); + /* Catch the case where x ~= q */ + if (isnan(y) || fabs(y) > 1.0f) { + y = 0.83333f + q / (1.0f - f_exp(1.2f * q)); + } + otm2 = otm1; + otm1 = leak * otm1 + y - itm1; + itm1 = y; + + buffer_write(output[pos], (otm1 + otm2) * 0.5f); + } + + plugin_data->itm1 = itm1; + plugin_data->otm1 = otm1; + plugin_data->otm2 = otm2; + plugin_data->rnda = rnda; + plugin_data->rndb = rndb; +} +#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 setRunAddingGainAnalogueOsc(LADSPA_Handle instance, LADSPA_Data gain) { + ((AnalogueOsc *)instance)->run_adding_gain = gain; +} + +static void runAddingAnalogueOsc(LADSPA_Handle instance, unsigned long sample_count) { + AnalogueOsc *plugin_data = (AnalogueOsc *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Waveform (1=sin, 2=tri, 3=squ, 4=saw) (float value) */ + const LADSPA_Data wave = *(plugin_data->wave); + + /* Frequency (Hz) (float value) */ + const LADSPA_Data freq = *(plugin_data->freq); + + /* Warmth (float value) */ + const LADSPA_Data warm = *(plugin_data->warm); + + /* Instability (float value) */ + const LADSPA_Data instab = *(plugin_data->instab); + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + float fs = plugin_data->fs; + float itm1 = plugin_data->itm1; + blo_h_osc * osc = plugin_data->osc; + float otm1 = plugin_data->otm1; + float otm2 = plugin_data->otm2; + unsigned int rnda = plugin_data->rnda; + unsigned int rndb = plugin_data->rndb; + blo_h_tables * tables = plugin_data->tables; + +#line 42 "analogue_osc_1416.xml" + unsigned long pos; + LADSPA_Data x, y; + const float q = warm - 0.999f; + const float leak = 1.0f - warm * 0.02f; + const unsigned int max_jump = (unsigned int)f_round(instab * 30000.0f) + 1; + + osc->wave = LIMIT(f_round(wave) - 1, 0, BLO_N_WAVES-1); + osc->nyquist = fs * (0.47f - f_clamp(warm, 0.0f, 1.0f) * 0.41f); + blo_hd_set_freq(osc, freq); + + tables = tables; // So gcc doesn't think it's unused + + for (pos = 0; pos < sample_count; pos++) { + x = blo_hd_run_cub(osc); + rnda += 432577; + rnda *= 47; + rndb += 7643113; + rnda *= 59; + osc->ph.all += (((rnda + rndb)/2) % max_jump) - max_jump/2; + osc->ph.all &= osc->ph_mask; + y = (x - q) / (1.0f - f_exp(-1.2f * (x - q))) + + q / (1.0f - f_exp(1.2f * q)); + /* Catch the case where x ~= q */ + if (isnan(y) || fabs(y) > 1.0f) { + y = 0.83333f + q / (1.0f - f_exp(1.2f * q)); + } + otm2 = otm1; + otm1 = leak * otm1 + y - itm1; + itm1 = y; + + buffer_write(output[pos], (otm1 + otm2) * 0.5f); + } + + plugin_data->itm1 = itm1; + plugin_data->otm1 = otm1; + plugin_data->otm2 = otm2; + plugin_data->rnda = rnda; + plugin_data->rndb = rndb; +} + +static 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) + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + analogueOscDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (analogueOscDescriptor) { + analogueOscDescriptor->UniqueID = 1416; + analogueOscDescriptor->Label = "analogueOsc"; + analogueOscDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + analogueOscDescriptor->Name = + D_("Analogue Oscillator"); + analogueOscDescriptor->Maker = + "Steve Harris "; + analogueOscDescriptor->Copyright = + "GPL"; + analogueOscDescriptor->PortCount = 5; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(5, + sizeof(LADSPA_PortDescriptor)); + analogueOscDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(5, + sizeof(LADSPA_PortRangeHint)); + analogueOscDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(5, sizeof(char*)); + analogueOscDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Waveform (1=sin, 2=tri, 3=squ, 4=saw) */ + port_descriptors[ANALOGUEOSC_WAVE] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[ANALOGUEOSC_WAVE] = + D_("Waveform (1=sin, 2=tri, 3=squ, 4=saw)"); + port_range_hints[ANALOGUEOSC_WAVE].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_INTEGER | LADSPA_HINT_DEFAULT_1; + port_range_hints[ANALOGUEOSC_WAVE].LowerBound = 1; + port_range_hints[ANALOGUEOSC_WAVE].UpperBound = BLO_N_WAVES; + + /* Parameters for Frequency (Hz) */ + port_descriptors[ANALOGUEOSC_FREQ] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[ANALOGUEOSC_FREQ] = + D_("Frequency (Hz)"); + port_range_hints[ANALOGUEOSC_FREQ].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_SAMPLE_RATE | LADSPA_HINT_DEFAULT_440 | LADSPA_HINT_LOGARITHMIC; + port_range_hints[ANALOGUEOSC_FREQ].LowerBound = 0.000001; + port_range_hints[ANALOGUEOSC_FREQ].UpperBound = 0.499; + + /* Parameters for Warmth */ + port_descriptors[ANALOGUEOSC_WARM] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[ANALOGUEOSC_WARM] = + D_("Warmth"); + port_range_hints[ANALOGUEOSC_WARM].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[ANALOGUEOSC_WARM].LowerBound = 0; + port_range_hints[ANALOGUEOSC_WARM].UpperBound = 1; + + /* Parameters for Instability */ + port_descriptors[ANALOGUEOSC_INSTAB] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[ANALOGUEOSC_INSTAB] = + D_("Instability"); + port_range_hints[ANALOGUEOSC_INSTAB].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_DEFAULT_0; + port_range_hints[ANALOGUEOSC_INSTAB].LowerBound = 0; + port_range_hints[ANALOGUEOSC_INSTAB].UpperBound = 1; + + /* Parameters for Output */ + port_descriptors[ANALOGUEOSC_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[ANALOGUEOSC_OUTPUT] = + D_("Output"); + port_range_hints[ANALOGUEOSC_OUTPUT].HintDescriptor = 0; + + analogueOscDescriptor->activate = NULL; + analogueOscDescriptor->cleanup = cleanupAnalogueOsc; + analogueOscDescriptor->connect_port = connectPortAnalogueOsc; + analogueOscDescriptor->deactivate = NULL; + analogueOscDescriptor->instantiate = instantiateAnalogueOsc; + analogueOscDescriptor->run = runAnalogueOsc; + analogueOscDescriptor->run_adding = runAddingAnalogueOsc; + analogueOscDescriptor->set_run_adding_gain = setRunAddingGainAnalogueOsc; + } +} + +static void __attribute__((destructor)) swh_fini() { + if (analogueOscDescriptor) { + free((LADSPA_PortDescriptor *)analogueOscDescriptor->PortDescriptors); + free((char **)analogueOscDescriptor->PortNames); + free((LADSPA_PortRangeHint *)analogueOscDescriptor->PortRangeHints); + free(analogueOscDescriptor); + } + analogueOscDescriptor = NULL; + +} diff --git a/plugins/LadspaEffect/swh/bandpass_a_iir_1893.c b/plugins/LadspaEffect/swh/bandpass_a_iir_1893.c index e46f0651142..4388b484b6c 100644 --- a/plugins/LadspaEffect/swh/bandpass_a_iir_1893.c +++ b/plugins/LadspaEffect/swh/bandpass_a_iir_1893.c @@ -20,11 +20,13 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif +#line 9 "bandpass_a_iir_1893.xml" + #include "config.h" #include "util/iir.h" @@ -68,6 +70,7 @@ static void activateBandpass_a_iir(LADSPA_Handle instance) { iir_stage_t*gt = plugin_data->gt; iirf_t*iirf = plugin_data->iirf; long sample_rate = plugin_data->sample_rate; +#line 33 "bandpass_a_iir_1893.xml" gt = init_iir_stage(IIR_STAGE_LOWPASS,1,3,2); iirf = init_iirf_t(gt); @@ -79,6 +82,7 @@ static void activateBandpass_a_iir(LADSPA_Handle instance) { } static void cleanupBandpass_a_iir(LADSPA_Handle instance) { +#line 39 "bandpass_a_iir_1893.xml" Bandpass_a_iir *plugin_data = (Bandpass_a_iir *)instance; free_iirf_t(plugin_data->iirf, plugin_data->gt); free_iir_stage(plugin_data->gt); @@ -111,11 +115,12 @@ static void connectPortBandpass_a_iir( 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)); + Bandpass_a_iir *plugin_data = (Bandpass_a_iir *)calloc(1, sizeof(Bandpass_a_iir)); iir_stage_t*gt = NULL; iirf_t*iirf = NULL; long sample_rate; +#line 22 "bandpass_a_iir_1893.xml" sample_rate = s_rate; plugin_data->gt = gt; @@ -135,6 +140,7 @@ static LADSPA_Handle instantiateBandpass_a_iir( static void runBandpass_a_iir(LADSPA_Handle instance, unsigned long sample_count) { Bandpass_a_iir *plugin_data = (Bandpass_a_iir *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Center Frequency (Hz) (float value) */ const LADSPA_Data center = *(plugin_data->center); @@ -151,8 +157,12 @@ static void runBandpass_a_iir(LADSPA_Handle instance, unsigned long sample_count iirf_t* iirf = plugin_data->iirf; long sample_rate = plugin_data->sample_rate; +#line 25 "bandpass_a_iir_1893.xml" calc_2polebandpass(iirf, gt, center, width, sample_rate); iir_process_buffer_1s_5(iirf, gt, input, output, sample_count,0); + + // Unused variable + (void)(run_adding_gain); } #undef buffer_write #undef RUN_ADDING @@ -168,6 +178,7 @@ static void setRunAddingGainBandpass_a_iir(LADSPA_Handle instance, LADSPA_Data g static void runAddingBandpass_a_iir(LADSPA_Handle instance, unsigned long sample_count) { Bandpass_a_iir *plugin_data = (Bandpass_a_iir *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Center Frequency (Hz) (float value) */ const LADSPA_Data center = *(plugin_data->center); @@ -184,18 +195,21 @@ static void runAddingBandpass_a_iir(LADSPA_Handle instance, unsigned long sample iirf_t* iirf = plugin_data->iirf; long sample_rate = plugin_data->sample_rate; +#line 25 "bandpass_a_iir_1893.xml" calc_2polebandpass(iirf, gt, center, width, sample_rate); iir_process_buffer_1s_5(iirf, gt, input, output, sample_count,0); + + // Unused variable + (void)(run_adding_gain); } -void __attribute__((constructor)) swh_init() { +static 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) @@ -277,12 +291,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static 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); } + bandpass_a_iirDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/bandpass_iir_1892.c b/plugins/LadspaEffect/swh/bandpass_iir_1892.c index b723b8717a8..71e287d02ae 100644 --- a/plugins/LadspaEffect/swh/bandpass_iir_1892.c +++ b/plugins/LadspaEffect/swh/bandpass_iir_1892.c @@ -20,11 +20,12 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif +#line 9 "bandpass_iir_1892.xml" #include "config.h" #include "util/iir.h" @@ -79,6 +80,7 @@ static void activateBandpass_iir(LADSPA_Handle instance) { long sample_rate = plugin_data->sample_rate; iir_stage_t*second = plugin_data->second; float ufc = plugin_data->ufc; +#line 43 "bandpass_iir_1892.xml" ufc = (*(plugin_data->center) + *(plugin_data->width)*0.5f)/(float)sample_rate; lfc = (*(plugin_data->center) - *(plugin_data->width)*0.5f)/(float)sample_rate; @@ -100,6 +102,7 @@ static void activateBandpass_iir(LADSPA_Handle instance) { } static void cleanupBandpass_iir(LADSPA_Handle instance) { +#line 55 "bandpass_iir_1892.xml" Bandpass_iir *plugin_data = (Bandpass_iir *)instance; free_iirf_t(plugin_data->iirf, plugin_data->gt); free_iir_stage(plugin_data->first); @@ -137,17 +140,22 @@ static void connectPortBandpass_iir( static LADSPA_Handle instantiateBandpass_iir( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - Bandpass_iir *plugin_data = (Bandpass_iir *)malloc(sizeof(Bandpass_iir)); + Bandpass_iir *plugin_data = (Bandpass_iir *)calloc(1, sizeof(Bandpass_iir)); iir_stage_t*first = NULL; iir_stage_t*gt = NULL; iirf_t*iirf = NULL; - float lfc = 0; - long sample_rate = 0; + float lfc; + long sample_rate; iir_stage_t*second = NULL; - float ufc = 0; + float ufc; +#line 24 "bandpass_iir_1892.xml" sample_rate = s_rate; + // Uninitialized variables + lfc = 0; + ufc = 0; + plugin_data->first = first; plugin_data->gt = gt; plugin_data->iirf = iirf; @@ -169,6 +177,7 @@ static LADSPA_Handle instantiateBandpass_iir( static void runBandpass_iir(LADSPA_Handle instance, unsigned long sample_count) { Bandpass_iir *plugin_data = (Bandpass_iir *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Center Frequency (Hz) (float value) */ const LADSPA_Data center = *(plugin_data->center); @@ -192,12 +201,16 @@ static void runBandpass_iir(LADSPA_Handle instance, unsigned long sample_count) iir_stage_t* second = plugin_data->second; float ufc = plugin_data->ufc; +#line 31 "bandpass_iir_1892.xml" 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); + + // Unused variable + (void)(run_adding_gain); } #undef buffer_write #undef RUN_ADDING @@ -213,6 +226,7 @@ static void setRunAddingGainBandpass_iir(LADSPA_Handle instance, LADSPA_Data gai static void runAddingBandpass_iir(LADSPA_Handle instance, unsigned long sample_count) { Bandpass_iir *plugin_data = (Bandpass_iir *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Center Frequency (Hz) (float value) */ const LADSPA_Data center = *(plugin_data->center); @@ -236,22 +250,25 @@ static void runAddingBandpass_iir(LADSPA_Handle instance, unsigned long sample_c iir_stage_t* second = plugin_data->second; float ufc = plugin_data->ufc; +#line 31 "bandpass_iir_1892.xml" 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); + + // Unused variable + (void)(run_adding_gain); } -void __attribute__((constructor)) swh_init() { +static 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) @@ -343,12 +360,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static 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); } + bandpass_iirDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/bode_shifter_1431.c b/plugins/LadspaEffect/swh/bode_shifter_1431.c index 4c48355c656..b92c6d91476 100644 --- a/plugins/LadspaEffect/swh/bode_shifter_1431.c +++ b/plugins/LadspaEffect/swh/bode_shifter_1431.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -141,7 +141,7 @@ static void connectPortBodeShifter( static LADSPA_Handle instantiateBodeShifter( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - BodeShifter *plugin_data = (BodeShifter *)malloc(sizeof(BodeShifter)); + BodeShifter *plugin_data = (BodeShifter *)calloc(1, sizeof(BodeShifter)); LADSPA_Data *delay = NULL; unsigned int dptr; float fs; @@ -365,14 +365,13 @@ static void runAddingBodeShifter(LADSPA_Handle instance, unsigned long sample_co *(plugin_data->latency) = 99; } -void __attribute__((constructor)) swh_init() { +static 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) @@ -458,12 +457,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (bodeShifterDescriptor) { free((LADSPA_PortDescriptor *)bodeShifterDescriptor->PortDescriptors); free((char **)bodeShifterDescriptor->PortNames); free((LADSPA_PortRangeHint *)bodeShifterDescriptor->PortRangeHints); free(bodeShifterDescriptor); } + bodeShifterDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/bode_shifter_cv_1432.c b/plugins/LadspaEffect/swh/bode_shifter_cv_1432.c index a9c764e599d..4c14b3ff1a5 100644 --- a/plugins/LadspaEffect/swh/bode_shifter_cv_1432.c +++ b/plugins/LadspaEffect/swh/bode_shifter_cv_1432.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -160,7 +160,7 @@ static void connectPortBodeShifterCV( static LADSPA_Handle instantiateBodeShifterCV( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - BodeShifterCV *plugin_data = (BodeShifterCV *)malloc(sizeof(BodeShifterCV)); + BodeShifterCV *plugin_data = (BodeShifterCV *)calloc(1, sizeof(BodeShifterCV)); LADSPA_Data *delay = NULL; unsigned int dptr; float fs; @@ -393,14 +393,13 @@ static void runAddingBodeShifterCV(LADSPA_Handle instance, unsigned long sample_ *(plugin_data->latency) = 99; } -void __attribute__((constructor)) swh_init() { +static 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) @@ -523,12 +522,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (bodeShifterCVDescriptor) { free((LADSPA_PortDescriptor *)bodeShifterCVDescriptor->PortDescriptors); free((char **)bodeShifterCVDescriptor->PortNames); free((LADSPA_PortRangeHint *)bodeShifterCVDescriptor->PortRangeHints); free(bodeShifterCVDescriptor); } + bodeShifterCVDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/butterworth_1902.c b/plugins/LadspaEffect/swh/butterworth_1902.c index 0e218babe6c..e2844ed7b91 100644 --- a/plugins/LadspaEffect/swh/butterworth_1902.c +++ b/plugins/LadspaEffect/swh/butterworth_1902.c @@ -20,11 +20,12 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif +#line 9 "butterworth_1902.xml" #include "config.h" #include "util/iir.h" @@ -110,6 +111,7 @@ static void activateBwxover_iir(LADSPA_Handle instance) { iir_stage_t*gt = plugin_data->gt; iirf_t*iirf = plugin_data->iirf; long sample_rate = plugin_data->sample_rate; +#line 34 "butterworth_1902.xml" gt = init_iir_stage(IIR_STAGE_LOWPASS,1,3,2); iirf = init_iirf_t(gt); @@ -123,6 +125,7 @@ static void activateBwxover_iir(LADSPA_Handle instance) { } static void cleanupBwxover_iir(LADSPA_Handle instance) { +#line 42 "butterworth_1902.xml" Bwxover_iir *plugin_data = (Bwxover_iir *)instance; free_iirf_t(plugin_data->iirf, plugin_data->gt); free_iir_stage(plugin_data->gt); @@ -158,11 +161,12 @@ static void connectPortBwxover_iir( static LADSPA_Handle instantiateBwxover_iir( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - Bwxover_iir *plugin_data = (Bwxover_iir *)malloc(sizeof(Bwxover_iir)); + Bwxover_iir *plugin_data = (Bwxover_iir *)calloc(1, sizeof(Bwxover_iir)); iir_stage_t*gt = NULL; iirf_t*iirf = NULL; long sample_rate; +#line 22 "butterworth_1902.xml" sample_rate = s_rate; plugin_data->gt = gt; @@ -182,6 +186,7 @@ static LADSPA_Handle instantiateBwxover_iir( static void runBwxover_iir(LADSPA_Handle instance, unsigned long sample_count) { Bwxover_iir *plugin_data = (Bwxover_iir *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Cutoff Frequency (Hz) (float value) */ const LADSPA_Data cutoff = *(plugin_data->cutoff); @@ -201,9 +206,13 @@ static void runBwxover_iir(LADSPA_Handle instance, unsigned long sample_count) { iirf_t* iirf = plugin_data->iirf; long sample_rate = plugin_data->sample_rate; +#line 25 "butterworth_1902.xml" 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); + + // Unused variable + (void)(run_adding_gain); } #undef buffer_write #undef RUN_ADDING @@ -219,6 +228,7 @@ static void setRunAddingGainBwxover_iir(LADSPA_Handle instance, LADSPA_Data gain static void runAddingBwxover_iir(LADSPA_Handle instance, unsigned long sample_count) { Bwxover_iir *plugin_data = (Bwxover_iir *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Cutoff Frequency (Hz) (float value) */ const LADSPA_Data cutoff = *(plugin_data->cutoff); @@ -238,9 +248,13 @@ static void runAddingBwxover_iir(LADSPA_Handle instance, unsigned long sample_co iirf_t* iirf = plugin_data->iirf; long sample_rate = plugin_data->sample_rate; +#line 25 "butterworth_1902.xml" 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); + + // Unused variable + (void)(run_adding_gain); } static void activateButtlow_iir(LADSPA_Handle instance) { @@ -248,6 +262,7 @@ static void activateButtlow_iir(LADSPA_Handle instance) { iir_stage_t*gt = plugin_data->gt; iirf_t*iirf = plugin_data->iirf; long sample_rate = plugin_data->sample_rate; +#line 34 "butterworth_1902.xml" gt = init_iir_stage(IIR_STAGE_LOWPASS,1,3,2); iirf = init_iirf_t(gt); @@ -261,6 +276,7 @@ static void activateButtlow_iir(LADSPA_Handle instance) { } static void cleanupButtlow_iir(LADSPA_Handle instance) { +#line 42 "butterworth_1902.xml" Buttlow_iir *plugin_data = (Buttlow_iir *)instance; free_iirf_t(plugin_data->iirf, plugin_data->gt); free_iir_stage(plugin_data->gt); @@ -293,11 +309,12 @@ static void connectPortButtlow_iir( static LADSPA_Handle instantiateButtlow_iir( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - Buttlow_iir *plugin_data = (Buttlow_iir *)malloc(sizeof(Buttlow_iir)); + Buttlow_iir *plugin_data = (Buttlow_iir *)calloc(1, sizeof(Buttlow_iir)); iir_stage_t*gt = NULL; iirf_t*iirf = NULL; long sample_rate; +#line 22 "butterworth_1902.xml" sample_rate = s_rate; plugin_data->gt = gt; @@ -317,6 +334,7 @@ static LADSPA_Handle instantiateButtlow_iir( static void runButtlow_iir(LADSPA_Handle instance, unsigned long sample_count) { Buttlow_iir *plugin_data = (Buttlow_iir *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Cutoff Frequency (Hz) (float value) */ const LADSPA_Data cutoff = *(plugin_data->cutoff); @@ -333,8 +351,12 @@ static void runButtlow_iir(LADSPA_Handle instance, unsigned long sample_count) { iirf_t* iirf = plugin_data->iirf; long sample_rate = plugin_data->sample_rate; +#line 25 "butterworth_1902.xml" butterworth_stage(gt, 0, cutoff, resonance, sample_rate); iir_process_buffer_1s_5(iirf, gt, input, output, sample_count,0); + + // Unused variable + (void)(run_adding_gain); } #undef buffer_write #undef RUN_ADDING @@ -350,6 +372,7 @@ static void setRunAddingGainButtlow_iir(LADSPA_Handle instance, LADSPA_Data gain static void runAddingButtlow_iir(LADSPA_Handle instance, unsigned long sample_count) { Buttlow_iir *plugin_data = (Buttlow_iir *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Cutoff Frequency (Hz) (float value) */ const LADSPA_Data cutoff = *(plugin_data->cutoff); @@ -366,8 +389,12 @@ static void runAddingButtlow_iir(LADSPA_Handle instance, unsigned long sample_co iirf_t* iirf = plugin_data->iirf; long sample_rate = plugin_data->sample_rate; +#line 25 "butterworth_1902.xml" butterworth_stage(gt, 0, cutoff, resonance, sample_rate); iir_process_buffer_1s_5(iirf, gt, input, output, sample_count,0); + + // Unused variable + (void)(run_adding_gain); } static void activateButthigh_iir(LADSPA_Handle instance) { @@ -375,6 +402,7 @@ static void activateButthigh_iir(LADSPA_Handle instance) { iir_stage_t*gt = plugin_data->gt; iirf_t*iirf = plugin_data->iirf; long sample_rate = plugin_data->sample_rate; +#line 34 "butterworth_1902.xml" gt = init_iir_stage(IIR_STAGE_LOWPASS,1,3,2); iirf = init_iirf_t(gt); @@ -388,6 +416,7 @@ static void activateButthigh_iir(LADSPA_Handle instance) { } static void cleanupButthigh_iir(LADSPA_Handle instance) { +#line 42 "butterworth_1902.xml" Butthigh_iir *plugin_data = (Butthigh_iir *)instance; free_iirf_t(plugin_data->iirf, plugin_data->gt); free_iir_stage(plugin_data->gt); @@ -420,11 +449,12 @@ static void connectPortButthigh_iir( static LADSPA_Handle instantiateButthigh_iir( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - Butthigh_iir *plugin_data = (Butthigh_iir *)malloc(sizeof(Butthigh_iir)); + Butthigh_iir *plugin_data = (Butthigh_iir *)calloc(1, sizeof(Butthigh_iir)); iir_stage_t*gt = NULL; iirf_t*iirf = NULL; long sample_rate; +#line 22 "butterworth_1902.xml" sample_rate = s_rate; plugin_data->gt = gt; @@ -444,6 +474,7 @@ static LADSPA_Handle instantiateButthigh_iir( static void runButthigh_iir(LADSPA_Handle instance, unsigned long sample_count) { Butthigh_iir *plugin_data = (Butthigh_iir *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Cutoff Frequency (Hz) (float value) */ const LADSPA_Data cutoff = *(plugin_data->cutoff); @@ -460,8 +491,12 @@ static void runButthigh_iir(LADSPA_Handle instance, unsigned long sample_count) iirf_t* iirf = plugin_data->iirf; long sample_rate = plugin_data->sample_rate; +#line 25 "butterworth_1902.xml" butterworth_stage(gt, 1, cutoff, resonance, sample_rate); iir_process_buffer_1s_5(iirf, gt, input, output, sample_count,0); + + // Unused variable + (void)(run_adding_gain); } #undef buffer_write #undef RUN_ADDING @@ -477,6 +512,7 @@ static void setRunAddingGainButthigh_iir(LADSPA_Handle instance, LADSPA_Data gai static void runAddingButthigh_iir(LADSPA_Handle instance, unsigned long sample_count) { Butthigh_iir *plugin_data = (Butthigh_iir *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Cutoff Frequency (Hz) (float value) */ const LADSPA_Data cutoff = *(plugin_data->cutoff); @@ -493,18 +529,21 @@ static void runAddingButthigh_iir(LADSPA_Handle instance, unsigned long sample_c iirf_t* iirf = plugin_data->iirf; long sample_rate = plugin_data->sample_rate; +#line 25 "butterworth_1902.xml" butterworth_stage(gt, 1, cutoff, resonance, sample_rate); iir_process_buffer_1s_5(iirf, gt, input, output, sample_count,0); + + // Unused variable + (void)(run_adding_gain); } -void __attribute__((constructor)) swh_init() { +static 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) @@ -741,24 +780,27 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static 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); } + bwxover_iirDescriptor = NULL; if (buttlow_iirDescriptor) { free((LADSPA_PortDescriptor *)buttlow_iirDescriptor->PortDescriptors); free((char **)buttlow_iirDescriptor->PortNames); free((LADSPA_PortRangeHint *)buttlow_iirDescriptor->PortRangeHints); free(buttlow_iirDescriptor); } + buttlow_iirDescriptor = NULL; if (butthigh_iirDescriptor) { free((LADSPA_PortDescriptor *)butthigh_iirDescriptor->PortDescriptors); free((char **)butthigh_iirDescriptor->PortNames); free((LADSPA_PortRangeHint *)butthigh_iirDescriptor->PortRangeHints); free(butthigh_iirDescriptor); } + butthigh_iirDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/chebstortion_1430.c b/plugins/LadspaEffect/swh/chebstortion_1430.c index d7b71afa79a..7d19bd208b2 100644 --- a/plugins/LadspaEffect/swh/chebstortion_1430.c +++ b/plugins/LadspaEffect/swh/chebstortion_1430.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -143,7 +143,7 @@ static void connectPortChebstortion( static LADSPA_Handle instantiateChebstortion( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - Chebstortion *plugin_data = (Chebstortion *)malloc(sizeof(Chebstortion)); + Chebstortion *plugin_data = (Chebstortion *)calloc(1, sizeof(Chebstortion)); unsigned int count; float env; float itm1; @@ -314,14 +314,13 @@ static void runAddingChebstortion(LADSPA_Handle instance, unsigned long sample_c plugin_data->count = count; } -void __attribute__((constructor)) swh_init() { +static 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) @@ -399,12 +398,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (chebstortionDescriptor) { free((LADSPA_PortDescriptor *)chebstortionDescriptor->PortDescriptors); free((char **)chebstortionDescriptor->PortNames); free((LADSPA_PortRangeHint *)chebstortionDescriptor->PortRangeHints); free(chebstortionDescriptor); } + chebstortionDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/comb_1190.c b/plugins/LadspaEffect/swh/comb_1190.c index 1e01570ae76..2254f11b412 100644 --- a/plugins/LadspaEffect/swh/comb_1190.c +++ b/plugins/LadspaEffect/swh/comb_1190.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -121,7 +121,7 @@ static void connectPortComb( static LADSPA_Handle instantiateComb( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - Comb *plugin_data = (Comb *)malloc(sizeof(Comb)); + Comb *plugin_data = (Comb *)calloc(1, sizeof(Comb)); long comb_pos; LADSPA_Data *comb_tbl = NULL; float last_offset; @@ -251,14 +251,13 @@ static void runAddingComb(LADSPA_Handle instance, unsigned long sample_count) { plugin_data->last_offset = offset; } -void __attribute__((constructor)) swh_init() { +static 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) @@ -340,12 +339,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (combDescriptor) { free((LADSPA_PortDescriptor *)combDescriptor->PortDescriptors); free((char **)combDescriptor->PortNames); free((LADSPA_PortRangeHint *)combDescriptor->PortRangeHints); free(combDescriptor); } + combDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/comb_1887.c b/plugins/LadspaEffect/swh/comb_1887.c index 23dc53400fb..a4bc4ea2606 100644 --- a/plugins/LadspaEffect/swh/comb_1887.c +++ b/plugins/LadspaEffect/swh/comb_1887.c @@ -20,11 +20,12 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif +#line 10 "comb_1887.xml" #include "ladspa-util.h" @@ -151,6 +152,7 @@ static void activateComb_n(LADSPA_Handle instance) { 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; +#line 53 "comb_1887.xml" unsigned int minsize, size; if (plugin_data->max_delay && *plugin_data->max_delay > 0) @@ -182,6 +184,7 @@ static void activateComb_n(LADSPA_Handle instance) { } static void cleanupComb_n(LADSPA_Handle instance) { +#line 75 "comb_1887.xml" Comb_n *plugin_data = (Comb_n *)instance; free(plugin_data->buffer); free(instance); @@ -216,18 +219,27 @@ static void connectPortComb_n( static LADSPA_Handle instantiateComb_n( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - Comb_n *plugin_data = (Comb_n *)malloc(sizeof(Comb_n)); + Comb_n *plugin_data = (Comb_n *)calloc(1, 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; + 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; +#line 41 "comb_1887.xml" sample_rate = s_rate; + // Uninitialized variables + buffer_mask = 0; + delay_samples = 0; + feedback = 0; + last_decay_time = 0; + last_delay_time = 0; + write_phase = 0; + plugin_data->buffer = buffer; plugin_data->buffer_mask = buffer_mask; plugin_data->delay_samples = delay_samples; @@ -274,7 +286,8 @@ static void runComb_n(LADSPA_Handle instance, unsigned long sample_count) { unsigned int sample_rate = plugin_data->sample_rate; long write_phase = plugin_data->write_phase; - unsigned int i; +#line 79 "comb_1887.xml" + int i; i = max_delay; /* stop gcc complaining */ @@ -412,7 +425,8 @@ static void runAddingComb_n(LADSPA_Handle instance, unsigned long sample_count) unsigned int sample_rate = plugin_data->sample_rate; long write_phase = plugin_data->write_phase; - unsigned int i; +#line 79 "comb_1887.xml" + int i; i = max_delay; /* stop gcc complaining */ @@ -522,6 +536,7 @@ static void activateComb_l(LADSPA_Handle instance) { 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; +#line 53 "comb_1887.xml" unsigned int minsize, size; if (plugin_data->max_delay && *plugin_data->max_delay > 0) @@ -553,6 +568,7 @@ static void activateComb_l(LADSPA_Handle instance) { } static void cleanupComb_l(LADSPA_Handle instance) { +#line 75 "comb_1887.xml" Comb_l *plugin_data = (Comb_l *)instance; free(plugin_data->buffer); free(instance); @@ -587,18 +603,27 @@ static void connectPortComb_l( static LADSPA_Handle instantiateComb_l( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - Comb_l *plugin_data = (Comb_l *)malloc(sizeof(Comb_l)); + Comb_l *plugin_data = (Comb_l *)calloc(1, 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; + 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; +#line 41 "comb_1887.xml" sample_rate = s_rate; + // Uninitialized variables + buffer_mask = 0; + delay_samples = 0; + feedback = 0; + last_decay_time = 0; + last_delay_time = 0; + write_phase = 0; + plugin_data->buffer = buffer; plugin_data->buffer_mask = buffer_mask; plugin_data->delay_samples = delay_samples; @@ -645,7 +670,8 @@ static void runComb_l(LADSPA_Handle instance, unsigned long sample_count) { unsigned int sample_rate = plugin_data->sample_rate; long write_phase = plugin_data->write_phase; - unsigned int i; +#line 79 "comb_1887.xml" + int i; i = max_delay; @@ -741,7 +767,8 @@ static void runAddingComb_l(LADSPA_Handle instance, unsigned long sample_count) unsigned int sample_rate = plugin_data->sample_rate; long write_phase = plugin_data->write_phase; - unsigned int i; +#line 79 "comb_1887.xml" + int i; i = max_delay; @@ -809,6 +836,7 @@ static void activateComb_c(LADSPA_Handle instance) { 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; +#line 53 "comb_1887.xml" unsigned int minsize, size; if (plugin_data->max_delay && *plugin_data->max_delay > 0) @@ -840,6 +868,7 @@ static void activateComb_c(LADSPA_Handle instance) { } static void cleanupComb_c(LADSPA_Handle instance) { +#line 75 "comb_1887.xml" Comb_c *plugin_data = (Comb_c *)instance; free(plugin_data->buffer); free(instance); @@ -874,18 +903,27 @@ static void connectPortComb_c( static LADSPA_Handle instantiateComb_c( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - Comb_c *plugin_data = (Comb_c *)malloc(sizeof(Comb_c)); + Comb_c *plugin_data = (Comb_c *)calloc(1, 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; + 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; +#line 41 "comb_1887.xml" sample_rate = s_rate; + // Uninitialized variables + buffer_mask = 0; + delay_samples = 0; + feedback = 0; + last_decay_time = 0; + last_delay_time = 0; + write_phase = 0; + plugin_data->buffer = buffer; plugin_data->buffer_mask = buffer_mask; plugin_data->delay_samples = delay_samples; @@ -932,7 +970,8 @@ static void runComb_c(LADSPA_Handle instance, unsigned long sample_count) { unsigned int sample_rate = plugin_data->sample_rate; long write_phase = plugin_data->write_phase; - unsigned int i; +#line 79 "comb_1887.xml" + int i; i = max_delay; @@ -1032,7 +1071,8 @@ static void runAddingComb_c(LADSPA_Handle instance, unsigned long sample_count) unsigned int sample_rate = plugin_data->sample_rate; long write_phase = plugin_data->write_phase; - unsigned int i; +#line 79 "comb_1887.xml" + int i; i = max_delay; @@ -1094,14 +1134,13 @@ static void runAddingComb_c(LADSPA_Handle instance, unsigned long sample_count) plugin_data->write_phase = write_phase; } -void __attribute__((constructor)) swh_init() { +static 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) @@ -1352,24 +1391,27 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static 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); } + comb_nDescriptor = NULL; if (comb_lDescriptor) { free((LADSPA_PortDescriptor *)comb_lDescriptor->PortDescriptors); free((char **)comb_lDescriptor->PortNames); free((LADSPA_PortRangeHint *)comb_lDescriptor->PortRangeHints); free(comb_lDescriptor); } + comb_lDescriptor = NULL; if (comb_cDescriptor) { free((LADSPA_PortDescriptor *)comb_cDescriptor->PortDescriptors); free((char **)comb_cDescriptor->PortNames); free((LADSPA_PortRangeHint *)comb_cDescriptor->PortRangeHints); free(comb_cDescriptor); } + comb_cDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/comb_splitter_1411.c b/plugins/LadspaEffect/swh/comb_splitter_1411.c index 70d78e726f3..0de94bb7f82 100644 --- a/plugins/LadspaEffect/swh/comb_splitter_1411.c +++ b/plugins/LadspaEffect/swh/comb_splitter_1411.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -121,7 +121,7 @@ static void connectPortCombSplitter( static LADSPA_Handle instantiateCombSplitter( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - CombSplitter *plugin_data = (CombSplitter *)malloc(sizeof(CombSplitter)); + CombSplitter *plugin_data = (CombSplitter *)calloc(1, sizeof(CombSplitter)); long comb_pos; LADSPA_Data *comb_tbl = NULL; float last_offset; @@ -255,14 +255,13 @@ static void runAddingCombSplitter(LADSPA_Handle instance, unsigned long sample_c plugin_data->last_offset = offset; } -void __attribute__((constructor)) swh_init() { +static 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) @@ -341,12 +340,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (combSplitterDescriptor) { free((LADSPA_PortDescriptor *)combSplitterDescriptor->PortDescriptors); free((char **)combSplitterDescriptor->PortNames); free((LADSPA_PortRangeHint *)combSplitterDescriptor->PortRangeHints); free(combSplitterDescriptor); } + combSplitterDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/const_1909.c b/plugins/LadspaEffect/swh/const_1909.c index 31633b2763d..e1fd03579d0 100644 --- a/plugins/LadspaEffect/swh/const_1909.c +++ b/plugins/LadspaEffect/swh/const_1909.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -93,7 +93,7 @@ static void connectPortConst( static LADSPA_Handle instantiateConst( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - Const *plugin_data = (Const *)malloc(sizeof(Const)); + Const *plugin_data = (Const *)calloc(1, sizeof(Const)); plugin_data->run_adding_gain = 1.0f; return (LADSPA_Handle)plugin_data; @@ -171,14 +171,13 @@ static void runAddingConst(LADSPA_Handle instance, unsigned long sample_count) { plugin_data->last_amp = amp; } -void __attribute__((constructor)) swh_init() { +static 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) @@ -250,12 +249,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (constDescriptor) { free((LADSPA_PortDescriptor *)constDescriptor->PortDescriptors); free((char **)constDescriptor->PortNames); free((LADSPA_PortRangeHint *)constDescriptor->PortRangeHints); free(constDescriptor); } + constDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/crossover_dist_1404.c b/plugins/LadspaEffect/swh/crossover_dist_1404.c index 7ad6c4d3bc0..9415c34f67f 100644 --- a/plugins/LadspaEffect/swh/crossover_dist_1404.c +++ b/plugins/LadspaEffect/swh/crossover_dist_1404.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -91,7 +91,7 @@ static void connectPortCrossoverDist( static LADSPA_Handle instantiateCrossoverDist( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - CrossoverDist *plugin_data = (CrossoverDist *)malloc(sizeof(CrossoverDist)); + CrossoverDist *plugin_data = (CrossoverDist *)calloc(1, sizeof(CrossoverDist)); plugin_data->run_adding_gain = 1.0f; return (LADSPA_Handle)plugin_data; @@ -187,14 +187,13 @@ static void runAddingCrossoverDist(LADSPA_Handle instance, unsigned long sample_ } } -void __attribute__((constructor)) swh_init() { +static 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) @@ -276,12 +275,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (crossoverDistDescriptor) { free((LADSPA_PortDescriptor *)crossoverDistDescriptor->PortDescriptors); free((char **)crossoverDistDescriptor->PortNames); free((LADSPA_PortRangeHint *)crossoverDistDescriptor->PortRangeHints); free(crossoverDistDescriptor); } + crossoverDistDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/dc_remove_1207.c b/plugins/LadspaEffect/swh/dc_remove_1207.c index ff795118ffa..715f0a1f475 100644 --- a/plugins/LadspaEffect/swh/dc_remove_1207.c +++ b/plugins/LadspaEffect/swh/dc_remove_1207.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -92,7 +92,7 @@ static void connectPortDcRemove( static LADSPA_Handle instantiateDcRemove( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - DcRemove *plugin_data = (DcRemove *)malloc(sizeof(DcRemove)); + DcRemove *plugin_data = (DcRemove *)calloc(1, sizeof(DcRemove)); plugin_data->run_adding_gain = 1.0f; return (LADSPA_Handle)plugin_data; @@ -166,14 +166,13 @@ static void runAddingDcRemove(LADSPA_Handle instance, unsigned long sample_count plugin_data->otm1 = otm1; } -void __attribute__((constructor)) swh_init() { +static 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) @@ -235,12 +234,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (dcRemoveDescriptor) { free((LADSPA_PortDescriptor *)dcRemoveDescriptor->PortDescriptors); free((char **)dcRemoveDescriptor->PortNames); free((LADSPA_PortRangeHint *)dcRemoveDescriptor->PortRangeHints); free(dcRemoveDescriptor); } + dcRemoveDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/decay_1886.c b/plugins/LadspaEffect/swh/decay_1886.c index eab8570d316..02e948506cd 100644 --- a/plugins/LadspaEffect/swh/decay_1886.c +++ b/plugins/LadspaEffect/swh/decay_1886.c @@ -20,11 +20,12 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif +#line 10 "decay_1886.xml" #include "ladspa-util.h" @@ -72,6 +73,7 @@ static void activateDecay(LADSPA_Handle instance) { LADSPA_Data last_decay_time = plugin_data->last_decay_time; LADSPA_Data sample_rate = plugin_data->sample_rate; LADSPA_Data y = plugin_data->y; +#line 34 "decay_1886.xml" b = 0.f; y = 0.f; last_decay_time = 0.f; @@ -111,15 +113,22 @@ static void connectPortDecay( 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; - + Decay *plugin_data = (Decay *)calloc(1, sizeof(Decay)); + LADSPA_Data b; + char first_time; + LADSPA_Data last_decay_time; + LADSPA_Data sample_rate; + LADSPA_Data y; + +#line 24 "decay_1886.xml" sample_rate = s_rate; + // Uninitialized variables + b = 0; + first_time = 0; + last_decay_time = 0; + y = 0; + plugin_data->b = b; plugin_data->first_time = first_time; plugin_data->last_decay_time = last_decay_time; @@ -154,7 +163,8 @@ static void runDecay(LADSPA_Handle instance, unsigned long sample_count) { LADSPA_Data sample_rate = plugin_data->sample_rate; LADSPA_Data y = plugin_data->y; - unsigned int i; +#line 41 "decay_1886.xml" + int i; if (first_time) { plugin_data->last_decay_time = decay_time; @@ -215,7 +225,8 @@ static void runAddingDecay(LADSPA_Handle instance, unsigned long sample_count) { LADSPA_Data sample_rate = plugin_data->sample_rate; LADSPA_Data y = plugin_data->y; - unsigned int i; +#line 41 "decay_1886.xml" + int i; if (first_time) { plugin_data->last_decay_time = decay_time; @@ -247,14 +258,13 @@ static void runAddingDecay(LADSPA_Handle instance, unsigned long sample_count) { plugin_data->y = y; } -void __attribute__((constructor)) swh_init() { +static 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) @@ -325,12 +335,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (decayDescriptor) { free((LADSPA_PortDescriptor *)decayDescriptor->PortDescriptors); free((char **)decayDescriptor->PortNames); free((LADSPA_PortRangeHint *)decayDescriptor->PortRangeHints); free(decayDescriptor); } + decayDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/decimator_1202.c b/plugins/LadspaEffect/swh/decimator_1202.c index 6765d350e95..ffd4952e9dd 100644 --- a/plugins/LadspaEffect/swh/decimator_1202.c +++ b/plugins/LadspaEffect/swh/decimator_1202.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -95,7 +95,7 @@ static void connectPortDecimator( static LADSPA_Handle instantiateDecimator( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - Decimator *plugin_data = (Decimator *)malloc(sizeof(Decimator)); + Decimator *plugin_data = (Decimator *)calloc(1, sizeof(Decimator)); float count; LADSPA_Data last_out; long sample_rate; @@ -240,14 +240,13 @@ static void runAddingDecimator(LADSPA_Handle instance, unsigned long sample_coun plugin_data->count = count; } -void __attribute__((constructor)) swh_init() { +static 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) @@ -335,12 +334,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (decimatorDescriptor) { free((LADSPA_PortDescriptor *)decimatorDescriptor->PortDescriptors); free((char **)decimatorDescriptor->PortNames); free((LADSPA_PortRangeHint *)decimatorDescriptor->PortRangeHints); free(decimatorDescriptor); } + decimatorDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/declip_1195.c b/plugins/LadspaEffect/swh/declip_1195.c index bc3db16c27a..c10cf983803 100644 --- a/plugins/LadspaEffect/swh/declip_1195.c +++ b/plugins/LadspaEffect/swh/declip_1195.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -84,7 +84,7 @@ static void connectPortDeclip( static LADSPA_Handle instantiateDeclip( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - Declip *plugin_data = (Declip *)malloc(sizeof(Declip)); + Declip *plugin_data = (Declip *)calloc(1, sizeof(Declip)); plugin_data->run_adding_gain = 1.0f; return (LADSPA_Handle)plugin_data; @@ -160,14 +160,13 @@ static void runAddingDeclip(LADSPA_Handle instance, unsigned long sample_count) } } -void __attribute__((constructor)) swh_init() { +static 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) @@ -235,12 +234,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (declipDescriptor) { free((LADSPA_PortDescriptor *)declipDescriptor->PortDescriptors); free((char **)declipDescriptor->PortNames); free((LADSPA_PortRangeHint *)declipDescriptor->PortRangeHints); free(declipDescriptor); } + declipDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/delay_1898.c b/plugins/LadspaEffect/swh/delay_1898.c index 57c8f0195b8..014d532039d 100644 --- a/plugins/LadspaEffect/swh/delay_1898.c +++ b/plugins/LadspaEffect/swh/delay_1898.c @@ -20,11 +20,12 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif +#line 10 "delay_1898.xml" #include "ladspa-util.h" @@ -122,6 +123,7 @@ static void activateDelay_n(LADSPA_Handle instance) { 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; +#line 37 "delay_1898.xml" unsigned int minsize, size; if (plugin_data->max_delay && *plugin_data->max_delay > 0) @@ -151,6 +153,7 @@ static void activateDelay_n(LADSPA_Handle instance) { } static void cleanupDelay_n(LADSPA_Handle instance) { +#line 59 "delay_1898.xml" Delay_n *plugin_data = (Delay_n *)instance; free(plugin_data->buffer); free(instance); @@ -182,16 +185,23 @@ static void connectPortDelay_n( static LADSPA_Handle instantiateDelay_n( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - Delay_n *plugin_data = (Delay_n *)malloc(sizeof(Delay_n)); + Delay_n *plugin_data = (Delay_n *)calloc(1, 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; + unsigned int buffer_mask; + LADSPA_Data delay_samples; + LADSPA_Data last_delay_time; + unsigned int sample_rate; + long write_phase; +#line 27 "delay_1898.xml" sample_rate = s_rate; + // Uninitialized variables + buffer_mask = 0; + delay_samples = 0; + last_delay_time = 0; + write_phase = 0; + plugin_data->buffer = buffer; plugin_data->buffer_mask = buffer_mask; plugin_data->delay_samples = delay_samples; @@ -219,6 +229,9 @@ static void runDelay_n(LADSPA_Handle instance, unsigned long sample_count) { /* 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); LADSPA_Data * buffer = plugin_data->buffer; @@ -228,7 +241,8 @@ static void runDelay_n(LADSPA_Handle instance, unsigned long sample_count) { unsigned int sample_rate = plugin_data->sample_rate; long write_phase = plugin_data->write_phase; - unsigned int i; +#line 63 "delay_1898.xml" + int i; if (write_phase == 0) { plugin_data->last_delay_time = delay_time; @@ -286,6 +300,9 @@ static void runDelay_n(LADSPA_Handle instance, unsigned long sample_count) { } plugin_data->write_phase = write_phase; + + // Unused variable + (void)(max_delay); } #undef buffer_write #undef RUN_ADDING @@ -309,6 +326,9 @@ static void runAddingDelay_n(LADSPA_Handle instance, unsigned long sample_count) /* 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); LADSPA_Data * buffer = plugin_data->buffer; @@ -318,7 +338,8 @@ static void runAddingDelay_n(LADSPA_Handle instance, unsigned long sample_count) unsigned int sample_rate = plugin_data->sample_rate; long write_phase = plugin_data->write_phase; - unsigned int i; +#line 63 "delay_1898.xml" + int i; if (write_phase == 0) { plugin_data->last_delay_time = delay_time; @@ -376,6 +397,9 @@ static void runAddingDelay_n(LADSPA_Handle instance, unsigned long sample_count) } plugin_data->write_phase = write_phase; + + // Unused variable + (void)(max_delay); } static void activateDelay_l(LADSPA_Handle instance) { @@ -386,6 +410,7 @@ static void activateDelay_l(LADSPA_Handle instance) { 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; +#line 37 "delay_1898.xml" unsigned int minsize, size; if (plugin_data->max_delay && *plugin_data->max_delay > 0) @@ -415,6 +440,7 @@ static void activateDelay_l(LADSPA_Handle instance) { } static void cleanupDelay_l(LADSPA_Handle instance) { +#line 59 "delay_1898.xml" Delay_l *plugin_data = (Delay_l *)instance; free(plugin_data->buffer); free(instance); @@ -446,16 +472,23 @@ static void connectPortDelay_l( static LADSPA_Handle instantiateDelay_l( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - Delay_l *plugin_data = (Delay_l *)malloc(sizeof(Delay_l)); + Delay_l *plugin_data = (Delay_l *)calloc(1, 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; + unsigned int buffer_mask; + LADSPA_Data delay_samples; + LADSPA_Data last_delay_time; + unsigned int sample_rate; + long write_phase; +#line 27 "delay_1898.xml" sample_rate = s_rate; + // Uninitialized variables + buffer_mask = 0; + delay_samples = 0; + last_delay_time = 0; + write_phase = 0; + plugin_data->buffer = buffer; plugin_data->buffer_mask = buffer_mask; plugin_data->delay_samples = delay_samples; @@ -483,6 +516,9 @@ static void runDelay_l(LADSPA_Handle instance, unsigned long sample_count) { /* 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); LADSPA_Data * buffer = plugin_data->buffer; @@ -492,7 +528,8 @@ static void runDelay_l(LADSPA_Handle instance, unsigned long sample_count) { unsigned int sample_rate = plugin_data->sample_rate; long write_phase = plugin_data->write_phase; - unsigned int i; +#line 63 "delay_1898.xml" + int i; if (write_phase == 0) { plugin_data->last_delay_time = delay_time; @@ -538,6 +575,9 @@ static void runDelay_l(LADSPA_Handle instance, unsigned long sample_count) { } plugin_data->write_phase = write_phase; + + // Unused variable + (void)(max_delay); } #undef buffer_write #undef RUN_ADDING @@ -561,6 +601,9 @@ static void runAddingDelay_l(LADSPA_Handle instance, unsigned long sample_count) /* 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); LADSPA_Data * buffer = plugin_data->buffer; @@ -570,7 +613,8 @@ static void runAddingDelay_l(LADSPA_Handle instance, unsigned long sample_count) unsigned int sample_rate = plugin_data->sample_rate; long write_phase = plugin_data->write_phase; - unsigned int i; +#line 63 "delay_1898.xml" + int i; if (write_phase == 0) { plugin_data->last_delay_time = delay_time; @@ -616,6 +660,9 @@ static void runAddingDelay_l(LADSPA_Handle instance, unsigned long sample_count) } plugin_data->write_phase = write_phase; + + // Unused variable + (void)(max_delay); } static void activateDelay_c(LADSPA_Handle instance) { @@ -626,6 +673,7 @@ static void activateDelay_c(LADSPA_Handle instance) { 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; +#line 37 "delay_1898.xml" unsigned int minsize, size; if (plugin_data->max_delay && *plugin_data->max_delay > 0) @@ -655,6 +703,7 @@ static void activateDelay_c(LADSPA_Handle instance) { } static void cleanupDelay_c(LADSPA_Handle instance) { +#line 59 "delay_1898.xml" Delay_c *plugin_data = (Delay_c *)instance; free(plugin_data->buffer); free(instance); @@ -686,16 +735,23 @@ static void connectPortDelay_c( static LADSPA_Handle instantiateDelay_c( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - Delay_c *plugin_data = (Delay_c *)malloc(sizeof(Delay_c)); + Delay_c *plugin_data = (Delay_c *)calloc(1, 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; + unsigned int buffer_mask; + LADSPA_Data delay_samples; + LADSPA_Data last_delay_time; + unsigned int sample_rate; + long write_phase; +#line 27 "delay_1898.xml" sample_rate = s_rate; + // Uninitialized variables + buffer_mask = 0; + delay_samples = 0; + last_delay_time = 0; + write_phase = 0; + plugin_data->buffer = buffer; plugin_data->buffer_mask = buffer_mask; plugin_data->delay_samples = delay_samples; @@ -723,6 +779,9 @@ static void runDelay_c(LADSPA_Handle instance, unsigned long sample_count) { /* 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); LADSPA_Data * buffer = plugin_data->buffer; @@ -732,7 +791,8 @@ static void runDelay_c(LADSPA_Handle instance, unsigned long sample_count) { unsigned int sample_rate = plugin_data->sample_rate; long write_phase = plugin_data->write_phase; - unsigned int i; +#line 63 "delay_1898.xml" + int i; if (write_phase == 0) { plugin_data->last_delay_time = delay_time; @@ -780,6 +840,9 @@ static void runDelay_c(LADSPA_Handle instance, unsigned long sample_count) { } plugin_data->write_phase = write_phase; + + // Unused variable + (void)(max_delay); } #undef buffer_write #undef RUN_ADDING @@ -803,6 +866,9 @@ static void runAddingDelay_c(LADSPA_Handle instance, unsigned long sample_count) /* 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); LADSPA_Data * buffer = plugin_data->buffer; @@ -812,7 +878,8 @@ static void runAddingDelay_c(LADSPA_Handle instance, unsigned long sample_count) unsigned int sample_rate = plugin_data->sample_rate; long write_phase = plugin_data->write_phase; - unsigned int i; +#line 63 "delay_1898.xml" + int i; if (write_phase == 0) { plugin_data->last_delay_time = delay_time; @@ -860,16 +927,18 @@ static void runAddingDelay_c(LADSPA_Handle instance, unsigned long sample_count) } plugin_data->write_phase = write_phase; + + // Unused variable + (void)(max_delay); } -void __attribute__((constructor)) swh_init() { +static 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) @@ -1093,24 +1162,27 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static 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); } + delay_nDescriptor = NULL; if (delay_lDescriptor) { free((LADSPA_PortDescriptor *)delay_lDescriptor->PortDescriptors); free((char **)delay_lDescriptor->PortNames); free((LADSPA_PortRangeHint *)delay_lDescriptor->PortRangeHints); free(delay_lDescriptor); } + delay_lDescriptor = NULL; if (delay_cDescriptor) { free((LADSPA_PortDescriptor *)delay_cDescriptor->PortDescriptors); free((char **)delay_cDescriptor->PortNames); free((LADSPA_PortRangeHint *)delay_cDescriptor->PortRangeHints); free(delay_cDescriptor); } + delay_cDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/delayorama_1402.c b/plugins/LadspaEffect/swh/delayorama_1402.c index a5d1bcce8ba..8e9ab1bbb1b 100644 --- a/plugins/LadspaEffect/swh/delayorama_1402.c +++ b/plugins/LadspaEffect/swh/delayorama_1402.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -214,7 +214,7 @@ static void connectPortDelayorama( static LADSPA_Handle instantiateDelayorama( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - Delayorama *plugin_data = (Delayorama *)malloc(sizeof(Delayorama)); + Delayorama *plugin_data = (Delayorama *)calloc(1, sizeof(Delayorama)); unsigned int active_set; LADSPA_Data *buffer = NULL; unsigned long buffer_pos; @@ -668,14 +668,13 @@ static void runAddingDelayorama(LADSPA_Handle instance, unsigned long sample_cou plugin_data->last_out = out; } -void __attribute__((constructor)) swh_init() { +static 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) @@ -847,12 +846,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (delayoramaDescriptor) { free((LADSPA_PortDescriptor *)delayoramaDescriptor->PortDescriptors); free((char **)delayoramaDescriptor->PortNames); free((LADSPA_PortRangeHint *)delayoramaDescriptor->PortRangeHints); free(delayoramaDescriptor); } + delayoramaDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/diode_1185.c b/plugins/LadspaEffect/swh/diode_1185.c index bce602ae4d8..03d9166615f 100644 --- a/plugins/LadspaEffect/swh/diode_1185.c +++ b/plugins/LadspaEffect/swh/diode_1185.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -83,7 +83,7 @@ static void connectPortDiode( static LADSPA_Handle instantiateDiode( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - Diode *plugin_data = (Diode *)malloc(sizeof(Diode)); + Diode *plugin_data = (Diode *)calloc(1, sizeof(Diode)); plugin_data->run_adding_gain = 1.0f; return (LADSPA_Handle)plugin_data; @@ -185,14 +185,13 @@ static void runAddingDiode(LADSPA_Handle instance, unsigned long sample_count) { } } -void __attribute__((constructor)) swh_init() { +static 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) @@ -264,12 +263,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (diodeDescriptor) { free((LADSPA_PortDescriptor *)diodeDescriptor->PortDescriptors); free((char **)diodeDescriptor->PortNames); free((LADSPA_PortRangeHint *)diodeDescriptor->PortRangeHints); free(diodeDescriptor); } + diodeDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/divider_1186.c b/plugins/LadspaEffect/swh/divider_1186.c index 6c7de0170d3..a36ec17af74 100644 --- a/plugins/LadspaEffect/swh/divider_1186.c +++ b/plugins/LadspaEffect/swh/divider_1186.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -89,7 +89,7 @@ static void connectPortDivider( static LADSPA_Handle instantiateDivider( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - Divider *plugin_data = (Divider *)malloc(sizeof(Divider)); + Divider *plugin_data = (Divider *)calloc(1, sizeof(Divider)); LADSPA_Data amp; float count; LADSPA_Data lamp; @@ -249,14 +249,13 @@ static void runAddingDivider(LADSPA_Handle instance, unsigned long sample_count) plugin_data->out = out; } -void __attribute__((constructor)) swh_init() { +static 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) @@ -331,12 +330,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (dividerDescriptor) { free((LADSPA_PortDescriptor *)dividerDescriptor->PortDescriptors); free((char **)dividerDescriptor->PortNames); free((LADSPA_PortRangeHint *)dividerDescriptor->PortRangeHints); free(dividerDescriptor); } + dividerDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/dj_eq_1901.c b/plugins/LadspaEffect/swh/dj_eq_1901.c index 65205c123b0..6452375c34d 100644 --- a/plugins/LadspaEffect/swh/dj_eq_1901.c +++ b/plugins/LadspaEffect/swh/dj_eq_1901.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -116,6 +116,7 @@ static void activateDj_eq_mono(LADSPA_Handle instance) { } static void cleanupDj_eq_mono(LADSPA_Handle instance) { +#line 60 "dj_eq_1901.xml" Dj_eq_mono *plugin_data = (Dj_eq_mono *)instance; free(plugin_data->filters); free(instance); @@ -153,7 +154,7 @@ static void connectPortDj_eq_mono( 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)); + Dj_eq_mono *plugin_data = (Dj_eq_mono *)calloc(1, sizeof(Dj_eq_mono)); biquad *filters = NULL; float fs; @@ -285,6 +286,7 @@ static void activateDj_eq(LADSPA_Handle instance) { } static void cleanupDj_eq(LADSPA_Handle instance) { +#line 60 "dj_eq_1901.xml" Dj_eq *plugin_data = (Dj_eq *)instance; free(plugin_data->filters); free(instance); @@ -328,7 +330,7 @@ static void connectPortDj_eq( static LADSPA_Handle instantiateDj_eq( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - Dj_eq *plugin_data = (Dj_eq *)malloc(sizeof(Dj_eq)); + Dj_eq *plugin_data = (Dj_eq *)calloc(1, sizeof(Dj_eq)); biquad *filters = NULL; float fs; @@ -467,14 +469,13 @@ static void runAddingDj_eq(LADSPA_Handle instance, unsigned long sample_count) { *(plugin_data->latency) = 3; //XXX is this right? } -void __attribute__((constructor)) swh_init() { +static 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) @@ -678,18 +679,20 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static 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); } + dj_eq_monoDescriptor = NULL; if (dj_eqDescriptor) { free((LADSPA_PortDescriptor *)dj_eqDescriptor->PortDescriptors); free((char **)dj_eqDescriptor->PortNames); free((LADSPA_PortRangeHint *)dj_eqDescriptor->PortRangeHints); free(dj_eqDescriptor); } + dj_eqDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/dj_flanger_1438.c b/plugins/LadspaEffect/swh/dj_flanger_1438.c index 1c7a9ce2d53..4df8a6d8692 100644 --- a/plugins/LadspaEffect/swh/dj_flanger_1438.c +++ b/plugins/LadspaEffect/swh/dj_flanger_1438.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -136,7 +136,7 @@ static void connectPortDjFlanger( static LADSPA_Handle instantiateDjFlanger( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - DjFlanger *plugin_data = (DjFlanger *)malloc(sizeof(DjFlanger)); + DjFlanger *plugin_data = (DjFlanger *)calloc(1, sizeof(DjFlanger)); LADSPA_Data *buffer = NULL; unsigned int buffer_mask; unsigned int buffer_pos; @@ -366,14 +366,13 @@ static void runAddingDjFlanger(LADSPA_Handle instance, unsigned long sample_coun plugin_data->buffer_pos = buffer_pos; } -void __attribute__((constructor)) swh_init() { +static 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) @@ -472,12 +471,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (djFlangerDescriptor) { free((LADSPA_PortDescriptor *)djFlangerDescriptor->PortDescriptors); free((char **)djFlangerDescriptor->PortNames); free((LADSPA_PortRangeHint *)djFlangerDescriptor->PortRangeHints); free(djFlangerDescriptor); } + djFlangerDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/dyson_compress_1403.c b/plugins/LadspaEffect/swh/dyson_compress_1403.c index 552edb7b0e8..25e0b7d64cc 100644 --- a/plugins/LadspaEffect/swh/dyson_compress_1403.c +++ b/plugins/LadspaEffect/swh/dyson_compress_1403.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -254,7 +254,7 @@ static void connectPortDysonCompress( static LADSPA_Handle instantiateDysonCompress( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - DysonCompress *plugin_data = (DysonCompress *)malloc(sizeof(DysonCompress)); + DysonCompress *plugin_data = (DysonCompress *)calloc(1, sizeof(DysonCompress)); LADSPA_Data *delay = NULL; float extra_maxlevel; float lastrgain; @@ -776,14 +776,13 @@ static void runAddingDysonCompress(LADSPA_Handle instance, unsigned long sample_ plugin_data->extra_maxlevel = extra_maxlevel; } -void __attribute__((constructor)) swh_init() { +static 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) @@ -885,12 +884,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (dysonCompressDescriptor) { free((LADSPA_PortDescriptor *)dysonCompressDescriptor->PortDescriptors); free((char **)dysonCompressDescriptor->PortNames); free((LADSPA_PortRangeHint *)dysonCompressDescriptor->PortRangeHints); free(dysonCompressDescriptor); } + dysonCompressDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/fad_delay_1192.c b/plugins/LadspaEffect/swh/fad_delay_1192.c index 422e769d94f..494c89d6271 100644 --- a/plugins/LadspaEffect/swh/fad_delay_1192.c +++ b/plugins/LadspaEffect/swh/fad_delay_1192.c @@ -20,11 +20,12 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif +#line 8 "fad_delay_1192.xml" #include "ladspa-util.h" @@ -78,7 +79,8 @@ static void activateFadDelay(LADSPA_Handle instance) { int last_phase = plugin_data->last_phase; float phase = plugin_data->phase; long sample_rate = plugin_data->sample_rate; - unsigned int i; +#line 35 "fad_delay_1192.xml" + int i; for (i = 0; i < buffer_size; i++) { buffer[i] = 0; @@ -86,6 +88,7 @@ static void activateFadDelay(LADSPA_Handle instance) { phase = 0; last_phase = 0; last_in = 0.0f; + sample_rate = sample_rate; plugin_data->buffer = buffer; plugin_data->buffer_mask = buffer_mask; plugin_data->buffer_size = buffer_size; @@ -97,6 +100,7 @@ static void activateFadDelay(LADSPA_Handle instance) { } static void cleanupFadDelay(LADSPA_Handle instance) { +#line 47 "fad_delay_1192.xml" FadDelay *plugin_data = (FadDelay *)instance; free(plugin_data->buffer); free(instance); @@ -128,7 +132,7 @@ static void connectPortFadDelay( static LADSPA_Handle instantiateFadDelay( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - FadDelay *plugin_data = (FadDelay *)malloc(sizeof(FadDelay)); + FadDelay *plugin_data = (FadDelay *)calloc(1, sizeof(FadDelay)); LADSPA_Data *buffer = NULL; unsigned long buffer_mask; unsigned long buffer_size; @@ -137,6 +141,7 @@ static LADSPA_Handle instantiateFadDelay( float phase; long sample_rate; +#line 21 "fad_delay_1192.xml" unsigned int min_bs; sample_rate = s_rate; @@ -190,7 +195,8 @@ static void runFadDelay(LADSPA_Handle instance, unsigned long sample_count) { float phase = plugin_data->phase; long sample_rate = plugin_data->sample_rate; - unsigned long int pos; +#line 51 "fad_delay_1192.xml" + long int pos; float increment = (float)buffer_size / ((float)sample_rate * f_max(fabs(delay), 0.01)); float lin_int, lin_inc; @@ -261,7 +267,8 @@ static void runAddingFadDelay(LADSPA_Handle instance, unsigned long sample_count float phase = plugin_data->phase; long sample_rate = plugin_data->sample_rate; - unsigned long int pos; +#line 51 "fad_delay_1192.xml" + long int pos; float increment = (float)buffer_size / ((float)sample_rate * f_max(fabs(delay), 0.01)); float lin_int, lin_inc; @@ -298,14 +305,13 @@ static void runAddingFadDelay(LADSPA_Handle instance, unsigned long sample_count plugin_data->last_in = last_in; } -void __attribute__((constructor)) swh_init() { +static 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) @@ -387,12 +393,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (fadDelayDescriptor) { free((LADSPA_PortDescriptor *)fadDelayDescriptor->PortDescriptors); free((char **)fadDelayDescriptor->PortNames); free((LADSPA_PortRangeHint *)fadDelayDescriptor->PortRangeHints); free(fadDelayDescriptor); } + fadDelayDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/fast_lookahead_limiter_1913.c b/plugins/LadspaEffect/swh/fast_lookahead_limiter_1913.c index eecd72e8ead..759155f677b 100644 --- a/plugins/LadspaEffect/swh/fast_lookahead_limiter_1913.c +++ b/plugins/LadspaEffect/swh/fast_lookahead_limiter_1913.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -182,7 +182,7 @@ static void connectPortFastLookaheadLimiter( static LADSPA_Handle instantiateFastLookaheadLimiter( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - FastLookaheadLimiter *plugin_data = (FastLookaheadLimiter *)malloc(sizeof(FastLookaheadLimiter)); + FastLookaheadLimiter *plugin_data = (FastLookaheadLimiter *)calloc(1, sizeof(FastLookaheadLimiter)); float atten; float atten_lp; LADSPA_Data *buffer = NULL; @@ -574,14 +574,13 @@ static void runAddingFastLookaheadLimiter(LADSPA_Handle instance, unsigned long *(plugin_data->latency) = delay; } -void __attribute__((constructor)) swh_init() { +static 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) @@ -704,12 +703,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (fastLookaheadLimiterDescriptor) { free((LADSPA_PortDescriptor *)fastLookaheadLimiterDescriptor->PortDescriptors); free((char **)fastLookaheadLimiterDescriptor->PortNames); free((LADSPA_PortRangeHint *)fastLookaheadLimiterDescriptor->PortRangeHints); free(fastLookaheadLimiterDescriptor); } + fastLookaheadLimiterDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/flanger_1191.c b/plugins/LadspaEffect/swh/flanger_1191.c index e5741f2e5d6..46630581a37 100644 --- a/plugins/LadspaEffect/swh/flanger_1191.c +++ b/plugins/LadspaEffect/swh/flanger_1191.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -144,7 +144,7 @@ static void connectPortFlanger( static LADSPA_Handle instantiateFlanger( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - Flanger *plugin_data = (Flanger *)malloc(sizeof(Flanger)); + Flanger *plugin_data = (Flanger *)calloc(1, sizeof(Flanger)); long count; long delay_pos; long delay_size; @@ -435,14 +435,13 @@ static void runAddingFlanger(LADSPA_Handle instance, unsigned long sample_count) plugin_data->old_d_base = new_d_base; } -void __attribute__((constructor)) swh_init() { +static 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) @@ -544,12 +543,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (flangerDescriptor) { free((LADSPA_PortDescriptor *)flangerDescriptor->PortDescriptors); free((char **)flangerDescriptor->PortNames); free((LADSPA_PortRangeHint *)flangerDescriptor->PortRangeHints); free(flangerDescriptor); } + flangerDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/fm_osc_1415.c b/plugins/LadspaEffect/swh/fm_osc_1415.c new file mode 100644 index 00000000000..b8540f5814b --- /dev/null +++ b/plugins/LadspaEffect/swh/fm_osc_1415.c @@ -0,0 +1,272 @@ +#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; +static void __attribute__((constructor)) swh_init(); // forward declaration +#else +#define _WINDOWS_DLL_EXPORT_ +#endif + +#line 10 "fm_osc_1415.xml" + +#include "ladspa-util.h" +#include "util/blo.h" + +#define FMOSC_WAVE 0 +#define FMOSC_FM 1 +#define FMOSC_OUTPUT 2 + +static LADSPA_Descriptor *fmOscDescriptor = NULL; + +typedef struct { + LADSPA_Data *wave; + LADSPA_Data *fm; + LADSPA_Data *output; + blo_h_osc * osc; + blo_h_tables *tables; + LADSPA_Data run_adding_gain; +} FmOsc; + +_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 fmOscDescriptor; + default: + return NULL; + } +} + +static void cleanupFmOsc(LADSPA_Handle instance) { +#line 37 "fm_osc_1415.xml" + FmOsc *plugin_data = (FmOsc *)instance; + blo_h_tables_free(plugin_data->tables); + blo_h_free(plugin_data->osc); + free(instance); +} + +static void connectPortFmOsc( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + FmOsc *plugin; + + plugin = (FmOsc *)instance; + switch (port) { + case FMOSC_WAVE: + plugin->wave = data; + break; + case FMOSC_FM: + plugin->fm = data; + break; + case FMOSC_OUTPUT: + plugin->output = data; + break; + } +} + +static LADSPA_Handle instantiateFmOsc( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + FmOsc *plugin_data = (FmOsc *)calloc(1, sizeof(FmOsc)); + blo_h_osc *osc = NULL; + blo_h_tables *tables = NULL; + +#line 20 "fm_osc_1415.xml" + tables = blo_h_tables_new(1024); + osc = blo_h_new(tables, BLO_SINE, (float)s_rate); + + plugin_data->osc = osc; + plugin_data->tables = tables; + + 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 runFmOsc(LADSPA_Handle instance, unsigned long sample_count) { + FmOsc *plugin_data = (FmOsc *)instance; + + /* Waveform (1=sin, 2=tri, 3=squ, 4=saw) (float value) */ + const LADSPA_Data wave = *(plugin_data->wave); + + /* Frequency (Hz) (array of floats of length sample_count) */ + const LADSPA_Data * const fm = plugin_data->fm; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + blo_h_osc * osc = plugin_data->osc; + blo_h_tables * tables = plugin_data->tables; + +#line 25 "fm_osc_1415.xml" + unsigned long pos; + osc->wave = LIMIT(f_round(wave) - 1, 0, BLO_N_WAVES-1); + + tables = tables; // So gcc doesn't think it's unused + + for (pos = 0; pos < sample_count; pos++) { + blo_hd_set_freq(osc, fm[pos]); + buffer_write(output[pos], blo_hd_run_cub(osc)); + } +} +#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 setRunAddingGainFmOsc(LADSPA_Handle instance, LADSPA_Data gain) { + ((FmOsc *)instance)->run_adding_gain = gain; +} + +static void runAddingFmOsc(LADSPA_Handle instance, unsigned long sample_count) { + FmOsc *plugin_data = (FmOsc *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; + + /* Waveform (1=sin, 2=tri, 3=squ, 4=saw) (float value) */ + const LADSPA_Data wave = *(plugin_data->wave); + + /* Frequency (Hz) (array of floats of length sample_count) */ + const LADSPA_Data * const fm = plugin_data->fm; + + /* Output (array of floats of length sample_count) */ + LADSPA_Data * const output = plugin_data->output; + blo_h_osc * osc = plugin_data->osc; + blo_h_tables * tables = plugin_data->tables; + +#line 25 "fm_osc_1415.xml" + unsigned long pos; + osc->wave = LIMIT(f_round(wave) - 1, 0, BLO_N_WAVES-1); + + tables = tables; // So gcc doesn't think it's unused + + for (pos = 0; pos < sample_count; pos++) { + blo_hd_set_freq(osc, fm[pos]); + buffer_write(output[pos], blo_hd_run_cub(osc)); + } +} + +static 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) + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) +#endif + + + fmOscDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (fmOscDescriptor) { + fmOscDescriptor->UniqueID = 1415; + fmOscDescriptor->Label = "fmOsc"; + fmOscDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + fmOscDescriptor->Name = + D_("FM Oscillator"); + fmOscDescriptor->Maker = + "Steve Harris "; + fmOscDescriptor->Copyright = + "GPL"; + fmOscDescriptor->PortCount = 3; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(3, + sizeof(LADSPA_PortDescriptor)); + fmOscDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(3, + sizeof(LADSPA_PortRangeHint)); + fmOscDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(3, sizeof(char*)); + fmOscDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Waveform (1=sin, 2=tri, 3=squ, 4=saw) */ + port_descriptors[FMOSC_WAVE] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[FMOSC_WAVE] = + D_("Waveform (1=sin, 2=tri, 3=squ, 4=saw)"); + port_range_hints[FMOSC_WAVE].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_INTEGER | LADSPA_HINT_DEFAULT_1; + port_range_hints[FMOSC_WAVE].LowerBound = 1; + port_range_hints[FMOSC_WAVE].UpperBound = BLO_N_WAVES; + + /* Parameters for Frequency (Hz) */ + port_descriptors[FMOSC_FM] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[FMOSC_FM] = + D_("Frequency (Hz)"); + port_range_hints[FMOSC_FM].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_SAMPLE_RATE | LADSPA_HINT_DEFAULT_440; + port_range_hints[FMOSC_FM].LowerBound = -0.25; + port_range_hints[FMOSC_FM].UpperBound = 0.25; + + /* Parameters for Output */ + port_descriptors[FMOSC_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[FMOSC_OUTPUT] = + D_("Output"); + port_range_hints[FMOSC_OUTPUT].HintDescriptor = 0; + + fmOscDescriptor->activate = NULL; + fmOscDescriptor->cleanup = cleanupFmOsc; + fmOscDescriptor->connect_port = connectPortFmOsc; + fmOscDescriptor->deactivate = NULL; + fmOscDescriptor->instantiate = instantiateFmOsc; + fmOscDescriptor->run = runFmOsc; + fmOscDescriptor->run_adding = runAddingFmOsc; + fmOscDescriptor->set_run_adding_gain = setRunAddingGainFmOsc; + } +} + +static void __attribute__((destructor)) swh_fini() { + if (fmOscDescriptor) { + free((LADSPA_PortDescriptor *)fmOscDescriptor->PortDescriptors); + free((char **)fmOscDescriptor->PortNames); + free((LADSPA_PortRangeHint *)fmOscDescriptor->PortRangeHints); + free(fmOscDescriptor); + } + fmOscDescriptor = NULL; + +} diff --git a/plugins/LadspaEffect/swh/foldover_1213.c b/plugins/LadspaEffect/swh/foldover_1213.c index 5f488447629..1c655efe816 100644 --- a/plugins/LadspaEffect/swh/foldover_1213.c +++ b/plugins/LadspaEffect/swh/foldover_1213.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -88,7 +88,7 @@ static void connectPortFoldover( static LADSPA_Handle instantiateFoldover( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - Foldover *plugin_data = (Foldover *)malloc(sizeof(Foldover)); + Foldover *plugin_data = (Foldover *)calloc(1, sizeof(Foldover)); plugin_data->run_adding_gain = 1.0f; return (LADSPA_Handle)plugin_data; @@ -166,14 +166,13 @@ static void runAddingFoldover(LADSPA_Handle instance, unsigned long sample_count } } -void __attribute__((constructor)) swh_init() { +static 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) @@ -255,12 +254,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (foldoverDescriptor) { free((LADSPA_PortDescriptor *)foldoverDescriptor->PortDescriptors); free((char **)foldoverDescriptor->PortNames); free((LADSPA_PortRangeHint *)foldoverDescriptor->PortRangeHints); free(foldoverDescriptor); } + foldoverDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/foverdrive_1196.c b/plugins/LadspaEffect/swh/foverdrive_1196.c index f608e3ade5f..7892dbca35b 100644 --- a/plugins/LadspaEffect/swh/foverdrive_1196.c +++ b/plugins/LadspaEffect/swh/foverdrive_1196.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -83,7 +83,7 @@ static void connectPortFoverdrive( static LADSPA_Handle instantiateFoverdrive( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - Foverdrive *plugin_data = (Foverdrive *)malloc(sizeof(Foverdrive)); + Foverdrive *plugin_data = (Foverdrive *)calloc(1, sizeof(Foverdrive)); plugin_data->run_adding_gain = 1.0f; return (LADSPA_Handle)plugin_data; @@ -155,14 +155,13 @@ static void runAddingFoverdrive(LADSPA_Handle instance, unsigned long sample_cou } } -void __attribute__((constructor)) swh_init() { +static 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) @@ -234,12 +233,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (foverdriveDescriptor) { free((LADSPA_PortDescriptor *)foverdriveDescriptor->PortDescriptors); free((char **)foverdriveDescriptor->PortNames); free((LADSPA_PortRangeHint *)foverdriveDescriptor->PortRangeHints); free(foverdriveDescriptor); } + foverdriveDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/freq_tracker_1418.c b/plugins/LadspaEffect/swh/freq_tracker_1418.c index 73a7111ea82..922207f7687 100644 --- a/plugins/LadspaEffect/swh/freq_tracker_1418.c +++ b/plugins/LadspaEffect/swh/freq_tracker_1418.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -111,7 +111,7 @@ static void connectPortFreqTracker( static LADSPA_Handle instantiateFreqTracker( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - FreqTracker *plugin_data = (FreqTracker *)malloc(sizeof(FreqTracker)); + FreqTracker *plugin_data = (FreqTracker *)calloc(1, sizeof(FreqTracker)); int cross_time; LADSPA_Data f; LADSPA_Data fo; @@ -240,14 +240,13 @@ static void runAddingFreqTracker(LADSPA_Handle instance, unsigned long sample_co plugin_data->cross_time = cross_time; } -void __attribute__((constructor)) swh_init() { +static 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) @@ -319,12 +318,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (freqTrackerDescriptor) { free((LADSPA_PortDescriptor *)freqTrackerDescriptor->PortDescriptors); free((char **)freqTrackerDescriptor->PortNames); free((LADSPA_PortRangeHint *)freqTrackerDescriptor->PortRangeHints); free(freqTrackerDescriptor); } + freqTrackerDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/gate_1410.c b/plugins/LadspaEffect/swh/gate_1410.c index 71527ace27e..e02b7c64f8c 100644 --- a/plugins/LadspaEffect/swh/gate_1410.c +++ b/plugins/LadspaEffect/swh/gate_1410.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -165,7 +165,7 @@ static void connectPortGate( static LADSPA_Handle instantiateGate( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - Gate *plugin_data = (Gate *)malloc(sizeof(Gate)); + Gate *plugin_data = (Gate *)calloc(1, sizeof(Gate)); float env; float fs; float gate; @@ -433,14 +433,13 @@ static void runAddingGate(LADSPA_Handle instance, unsigned long sample_count) { plugin_data->hold_count = hold_count; } -void __attribute__((constructor)) swh_init() { +static 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) @@ -582,12 +581,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (gateDescriptor) { free((LADSPA_PortDescriptor *)gateDescriptor->PortDescriptors); free((char **)gateDescriptor->PortNames); free((LADSPA_PortRangeHint *)gateDescriptor->PortRangeHints); free(gateDescriptor); } + gateDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/giant_flange_1437.c b/plugins/LadspaEffect/swh/giant_flange_1437.c index fd022d7b193..336dbb1fe10 100644 --- a/plugins/LadspaEffect/swh/giant_flange_1437.c +++ b/plugins/LadspaEffect/swh/giant_flange_1437.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -160,7 +160,7 @@ static void connectPortGiantFlange( static LADSPA_Handle instantiateGiantFlange( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - GiantFlange *plugin_data = (GiantFlange *)malloc(sizeof(GiantFlange)); + GiantFlange *plugin_data = (GiantFlange *)calloc(1, sizeof(GiantFlange)); int16_t *buffer = NULL; unsigned int buffer_mask; unsigned int buffer_pos; @@ -501,14 +501,13 @@ static void runAddingGiantFlange(LADSPA_Handle instance, unsigned long sample_co plugin_data->buffer_pos = buffer_pos; } -void __attribute__((constructor)) swh_init() { +static 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) @@ -637,12 +636,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (giantFlangeDescriptor) { free((LADSPA_PortDescriptor *)giantFlangeDescriptor->PortDescriptors); free((char **)giantFlangeDescriptor->PortNames); free((LADSPA_PortRangeHint *)giantFlangeDescriptor->PortRangeHints); free(giantFlangeDescriptor); } + giantFlangeDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/gong_1424.c b/plugins/LadspaEffect/swh/gong_1424.c index b7e0656b25a..800257fc5a6 100644 --- a/plugins/LadspaEffect/swh/gong_1424.c +++ b/plugins/LadspaEffect/swh/gong_1424.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -250,7 +250,7 @@ static void connectPortGong( static LADSPA_Handle instantiateGong( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - Gong *plugin_data = (Gong *)malloc(sizeof(Gong)); + Gong *plugin_data = (Gong *)calloc(1, sizeof(Gong)); int maxsize_i; int maxsize_o; float *out = NULL; @@ -608,14 +608,13 @@ static void runAddingGong(LADSPA_Handle instance, unsigned long sample_count) { } } -void __attribute__((constructor)) swh_init() { +static 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) @@ -947,12 +946,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (gongDescriptor) { free((LADSPA_PortDescriptor *)gongDescriptor->PortDescriptors); free((char **)gongDescriptor->PortNames); free((LADSPA_PortRangeHint *)gongDescriptor->PortRangeHints); free(gongDescriptor); } + gongDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/gong_beater_1439.c b/plugins/LadspaEffect/swh/gong_beater_1439.c index b80e164d325..5070b1085fc 100644 --- a/plugins/LadspaEffect/swh/gong_beater_1439.c +++ b/plugins/LadspaEffect/swh/gong_beater_1439.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -128,7 +128,7 @@ static void connectPortGongBeater( static LADSPA_Handle instantiateGongBeater( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - GongBeater *plugin_data = (GongBeater *)malloc(sizeof(GongBeater)); + GongBeater *plugin_data = (GongBeater *)calloc(1, sizeof(GongBeater)); float fs; float imp_level; unsigned int running; @@ -301,14 +301,13 @@ static void runAddingGongBeater(LADSPA_Handle instance, unsigned long sample_cou plugin_data->imp_level = imp_level; } -void __attribute__((constructor)) swh_init() { +static 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) @@ -400,12 +399,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (gongBeaterDescriptor) { free((LADSPA_PortDescriptor *)gongBeaterDescriptor->PortDescriptors); free((char **)gongBeaterDescriptor->PortNames); free((LADSPA_PortRangeHint *)gongBeaterDescriptor->PortRangeHints); free(gongBeaterDescriptor); } + gongBeaterDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/gsm_1215.c b/plugins/LadspaEffect/swh/gsm_1215.c index 8cef93ba5ea..7c17552ddbf 100644 --- a/plugins/LadspaEffect/swh/gsm_1215.c +++ b/plugins/LadspaEffect/swh/gsm_1215.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -158,7 +158,7 @@ static void connectPortGsm( static LADSPA_Handle instantiateGsm( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - Gsm *plugin_data = (Gsm *)malloc(sizeof(Gsm)); + Gsm *plugin_data = (Gsm *)calloc(1, sizeof(Gsm)); biquad *blf = NULL; int count; LADSPA_Data *dry = NULL; @@ -224,6 +224,7 @@ static void runGsm(LADSPA_Handle instance, unsigned long sample_count) { 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; @@ -237,6 +238,8 @@ static void runGsm(LADSPA_Handle instance, unsigned long sample_count) { int error_rate = f_round(error); int num_passes = f_round(passes); + fs = fs; // So gcc doesn't think it's unused + for (pos = 0; pos < sample_count; pos++) { // oversample into buffer down to aprox 8kHz, 13bit @@ -319,6 +322,7 @@ static void runAddingGsm(LADSPA_Handle instance, unsigned long sample_count) { 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; @@ -332,6 +336,8 @@ static void runAddingGsm(LADSPA_Handle instance, unsigned long sample_count) { int error_rate = f_round(error); int num_passes = f_round(passes); + fs = fs; // So gcc doesn't think it's unused + for (pos = 0; pos < sample_count; pos++) { // oversample into buffer down to aprox 8kHz, 13bit @@ -381,14 +387,13 @@ static void runAddingGsm(LADSPA_Handle instance, unsigned long sample_count) { *(plugin_data->latency) = 160 * resamp; } -void __attribute__((constructor)) swh_init() { +static 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) @@ -487,12 +492,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (gsmDescriptor) { free((LADSPA_PortDescriptor *)gsmDescriptor->PortDescriptors); free((char **)gsmDescriptor->PortNames); free((LADSPA_PortRangeHint *)gsmDescriptor->PortRangeHints); free(gsmDescriptor); } + gsmDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/gverb_1216.c b/plugins/LadspaEffect/swh/gverb_1216.c index e9bdac87dfb..0a30f37d50a 100644 --- a/plugins/LadspaEffect/swh/gverb_1216.c +++ b/plugins/LadspaEffect/swh/gverb_1216.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -146,7 +146,7 @@ static void connectPortGverb( static LADSPA_Handle instantiateGverb( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - Gverb *plugin_data = (Gverb *)malloc(sizeof(Gverb)); + Gverb *plugin_data = (Gverb *)calloc(1, sizeof(Gverb)); ty_gverb *verb = NULL; #line 50 "gverb_1216.xml" @@ -283,14 +283,13 @@ static void runAddingGverb(LADSPA_Handle instance, unsigned long sample_count) { } } -void __attribute__((constructor)) swh_init() { +static 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) @@ -429,12 +428,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (gverbDescriptor) { free((LADSPA_PortDescriptor *)gverbDescriptor->PortDescriptors); free((char **)gverbDescriptor->PortNames); free((LADSPA_PortRangeHint *)gverbDescriptor->PortRangeHints); free(gverbDescriptor); } + gverbDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/hard_limiter_1413.c b/plugins/LadspaEffect/swh/hard_limiter_1413.c index bf41e6acd73..d4b2d747328 100644 --- a/plugins/LadspaEffect/swh/hard_limiter_1413.c +++ b/plugins/LadspaEffect/swh/hard_limiter_1413.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -97,7 +97,7 @@ static void connectPortHardLimiter( static LADSPA_Handle instantiateHardLimiter( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - HardLimiter *plugin_data = (HardLimiter *)malloc(sizeof(HardLimiter)); + HardLimiter *plugin_data = (HardLimiter *)calloc(1, sizeof(HardLimiter)); plugin_data->run_adding_gain = 1.0f; return (LADSPA_Handle)plugin_data; @@ -187,14 +187,13 @@ static void runAddingHardLimiter(LADSPA_Handle instance, unsigned long sample_co } } -void __attribute__((constructor)) swh_init() { +static 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) @@ -286,12 +285,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (hardLimiterDescriptor) { free((LADSPA_PortDescriptor *)hardLimiterDescriptor->PortDescriptors); free((char **)hardLimiterDescriptor->PortNames); free((LADSPA_PortRangeHint *)hardLimiterDescriptor->PortRangeHints); free(hardLimiterDescriptor); } + hardLimiterDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/harmonic_gen_1220.c b/plugins/LadspaEffect/swh/harmonic_gen_1220.c index bbd2324c71e..b38c0b520e0 100644 --- a/plugins/LadspaEffect/swh/harmonic_gen_1220.c +++ b/plugins/LadspaEffect/swh/harmonic_gen_1220.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -175,7 +175,7 @@ static void connectPortHarmonicGen( static LADSPA_Handle instantiateHarmonicGen( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - HarmonicGen *plugin_data = (HarmonicGen *)malloc(sizeof(HarmonicGen)); + HarmonicGen *plugin_data = (HarmonicGen *)calloc(1, sizeof(HarmonicGen)); plugin_data->run_adding_gain = 1.0f; return (LADSPA_Handle)plugin_data; @@ -367,14 +367,13 @@ static void runAddingHarmonicGen(LADSPA_Handle instance, unsigned long sample_co plugin_data->otm1 = otm1; } -void __attribute__((constructor)) swh_init() { +static 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) @@ -542,12 +541,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (harmonicGenDescriptor) { free((LADSPA_PortDescriptor *)harmonicGenDescriptor->PortDescriptors); free((char **)harmonicGenDescriptor->PortNames); free((LADSPA_PortRangeHint *)harmonicGenDescriptor->PortRangeHints); free(harmonicGenDescriptor); } + harmonicGenDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/hermes_filter_1200.c b/plugins/LadspaEffect/swh/hermes_filter_1200.c index a8dd28e9877..5cac646ba60 100644 --- a/plugins/LadspaEffect/swh/hermes_filter_1200.c +++ b/plugins/LadspaEffect/swh/hermes_filter_1200.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -569,7 +569,7 @@ static void connectPortHermesFilter( static LADSPA_Handle instantiateHermesFilter( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - HermesFilter *plugin_data = (HermesFilter *)malloc(sizeof(HermesFilter)); + HermesFilter *plugin_data = (HermesFilter *)calloc(1, sizeof(HermesFilter)); long count; float **dela_data = NULL; int *dela_pos = NULL; @@ -817,6 +817,7 @@ static void runHermesFilter(LADSPA_Handle instance, unsigned long sample_count) 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; @@ -926,6 +927,8 @@ static void runHermesFilter(LADSPA_Handle instance, unsigned long sample_count) dela_fb[1] = dela2_fb; dela_fb[2] = dela3_fb; + tables = tables; // To shut up gcc + for (pos = 0; pos < sample_count; pos++) { count++; // Count of number of samples processed @@ -1201,6 +1204,7 @@ static void runAddingHermesFilter(LADSPA_Handle instance, unsigned long sample_c 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; @@ -1310,6 +1314,8 @@ static void runAddingHermesFilter(LADSPA_Handle instance, unsigned long sample_c dela_fb[1] = dela2_fb; dela_fb[2] = dela3_fb; + tables = tables; // To shut up gcc + for (pos = 0; pos < sample_count; pos++) { count++; // Count of number of samples processed @@ -1397,14 +1403,13 @@ static void runAddingHermesFilter(LADSPA_Handle instance, unsigned long sample_c plugin_data->lfo2_phase = lfo2_phase; } -void __attribute__((constructor)) swh_init() { +static 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) @@ -1992,12 +1997,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (hermesFilterDescriptor) { free((LADSPA_PortDescriptor *)hermesFilterDescriptor->PortDescriptors); free((char **)hermesFilterDescriptor->PortNames); free((LADSPA_PortRangeHint *)hermesFilterDescriptor->PortRangeHints); free(hermesFilterDescriptor); } + hermesFilterDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/highpass_iir_1890.c b/plugins/LadspaEffect/swh/highpass_iir_1890.c index d00ddd159bb..0656bb61e5b 100644 --- a/plugins/LadspaEffect/swh/highpass_iir_1890.c +++ b/plugins/LadspaEffect/swh/highpass_iir_1890.c @@ -20,11 +20,12 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif +#line 9 "highpass_iir_1890.xml" #include "config.h" #include "util/iir.h" @@ -69,6 +70,7 @@ static void activateHighpass_iir(LADSPA_Handle instance) { iir_stage_t*gt = plugin_data->gt; iirf_t*iirf = plugin_data->iirf; long sample_rate = plugin_data->sample_rate; +#line 35 "highpass_iir_1890.xml" gt = init_iir_stage(IIR_STAGE_HIGHPASS,10,3,2); iirf = init_iirf_t(gt); @@ -80,6 +82,7 @@ static void activateHighpass_iir(LADSPA_Handle instance) { } static void cleanupHighpass_iir(LADSPA_Handle instance) { +#line 41 "highpass_iir_1890.xml" Highpass_iir *plugin_data = (Highpass_iir *)instance; free_iirf_t(plugin_data->iirf, plugin_data->gt); free_iir_stage(plugin_data->gt); @@ -112,11 +115,12 @@ static void connectPortHighpass_iir( static LADSPA_Handle instantiateHighpass_iir( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - Highpass_iir *plugin_data = (Highpass_iir *)malloc(sizeof(Highpass_iir)); + Highpass_iir *plugin_data = (Highpass_iir *)calloc(1, sizeof(Highpass_iir)); iir_stage_t*gt = NULL; iirf_t*iirf = NULL; long sample_rate; +#line 24 "highpass_iir_1890.xml" sample_rate = s_rate; plugin_data->gt = gt; @@ -136,6 +140,7 @@ static LADSPA_Handle instantiateHighpass_iir( static void runHighpass_iir(LADSPA_Handle instance, unsigned long sample_count) { Highpass_iir *plugin_data = (Highpass_iir *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Cutoff Frequency (float value) */ const LADSPA_Data cutoff = *(plugin_data->cutoff); @@ -152,8 +157,12 @@ static void runHighpass_iir(LADSPA_Handle instance, unsigned long sample_count) iirf_t* iirf = plugin_data->iirf; long sample_rate = plugin_data->sample_rate; +#line 27 "highpass_iir_1890.xml" 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); + + // Unused variable + (void)(run_adding_gain); } #undef buffer_write #undef RUN_ADDING @@ -169,6 +178,7 @@ static void setRunAddingGainHighpass_iir(LADSPA_Handle instance, LADSPA_Data gai static void runAddingHighpass_iir(LADSPA_Handle instance, unsigned long sample_count) { Highpass_iir *plugin_data = (Highpass_iir *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Cutoff Frequency (float value) */ const LADSPA_Data cutoff = *(plugin_data->cutoff); @@ -185,18 +195,21 @@ static void runAddingHighpass_iir(LADSPA_Handle instance, unsigned long sample_c iirf_t* iirf = plugin_data->iirf; long sample_rate = plugin_data->sample_rate; +#line 27 "highpass_iir_1890.xml" 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); + + // Unused variable + (void)(run_adding_gain); } -void __attribute__((constructor)) swh_init() { +static 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) @@ -278,12 +291,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static 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); } + highpass_iirDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/hilbert_1440.c b/plugins/LadspaEffect/swh/hilbert_1440.c index a52b2139092..8c5157beb46 100644 --- a/plugins/LadspaEffect/swh/hilbert_1440.c +++ b/plugins/LadspaEffect/swh/hilbert_1440.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -128,7 +128,7 @@ static void connectPortHilbert( static LADSPA_Handle instantiateHilbert( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - Hilbert *plugin_data = (Hilbert *)malloc(sizeof(Hilbert)); + Hilbert *plugin_data = (Hilbert *)calloc(1, sizeof(Hilbert)); LADSPA_Data *delay = NULL; unsigned int dptr; @@ -233,14 +233,13 @@ static void runAddingHilbert(LADSPA_Handle instance, unsigned long sample_count) *(plugin_data->latency) = 99; } -void __attribute__((constructor)) swh_init() { +static 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) @@ -316,12 +315,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (hilbertDescriptor) { free((LADSPA_PortDescriptor *)hilbertDescriptor->PortDescriptors); free((char **)hilbertDescriptor->PortNames); free((LADSPA_PortRangeHint *)hilbertDescriptor->PortRangeHints); free(hilbertDescriptor); } + hilbertDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/imp_1199.c b/plugins/LadspaEffect/swh/imp_1199.c index 90e8e8c33b7..8242a2aaeb1 100644 --- a/plugins/LadspaEffect/swh/imp_1199.c +++ b/plugins/LadspaEffect/swh/imp_1199.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -75,7 +75,7 @@ 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) +static void impulse2freq(int id, float *imp, unsigned int length, fftw_real *out) #else static inline void impulse2freq(int id, float *imp, unsigned int length, fftw_real *out) #endif @@ -103,7 +103,7 @@ static inline void impulse2freq(int id, float *imp, unsigned int length, fftw_re for (i=0; i=last) impulse_time[i] = 0.0f; @@ -172,7 +172,7 @@ static void activateImp(LADSPA_Handle instance) { 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" +#line 167 "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)); @@ -195,7 +195,7 @@ static void activateImp(LADSPA_Handle instance) { } static void cleanupImp(LADSPA_Handle instance) { -#line 173 "imp_1199.xml" +#line 179 "imp_1199.xml" Imp *plugin_data = (Imp *)instance; local_free(plugin_data->block_time); local_free(plugin_data->block_freq); @@ -242,7 +242,7 @@ static void connectPortImp( static LADSPA_Handle instantiateImp( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - Imp *plugin_data = (Imp *)malloc(sizeof(Imp)); + Imp *plugin_data = (Imp *)calloc(1, sizeof(Imp)); fftw_real *block_freq = NULL; fftw_real *block_time = NULL; unsigned int count; @@ -253,7 +253,7 @@ static LADSPA_Handle instantiateImp( unsigned long out_ptr; LADSPA_Data *overlap = NULL; -#line 135 "imp_1199.xml" +#line 141 "imp_1199.xml" unsigned int i; impulse_freq = local_malloc(IMPULSES * sizeof(fftw_real *)); @@ -326,7 +326,7 @@ static void runImp(LADSPA_Handle instance, unsigned long sample_count) { unsigned long out_ptr = plugin_data->out_ptr; LADSPA_Data * overlap = plugin_data->overlap; -#line 181 "imp_1199.xml" +#line 192 "imp_1199.xml" unsigned long i, pos, ipos, limit; unsigned int im; unsigned int len; @@ -448,7 +448,7 @@ static void runAddingImp(LADSPA_Handle instance, unsigned long sample_count) { unsigned long out_ptr = plugin_data->out_ptr; LADSPA_Data * overlap = plugin_data->overlap; -#line 181 "imp_1199.xml" +#line 192 "imp_1199.xml" unsigned long i, pos, ipos, limit; unsigned int im; unsigned int len; @@ -531,14 +531,13 @@ static void runAddingImp(LADSPA_Handle instance, unsigned long sample_count) { *(plugin_data->latency) = SEG_LENGTH; } -void __attribute__((constructor)) swh_init() { +static 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) @@ -637,12 +636,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (impDescriptor) { free((LADSPA_PortDescriptor *)impDescriptor->PortDescriptors); free((char **)impDescriptor->PortNames); free((LADSPA_PortRangeHint *)impDescriptor->PortRangeHints); free(impDescriptor); } + impDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/impulse_1885.c b/plugins/LadspaEffect/swh/impulse_1885.c index cc53506b7ad..6d2cf186569 100644 --- a/plugins/LadspaEffect/swh/impulse_1885.c +++ b/plugins/LadspaEffect/swh/impulse_1885.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -96,7 +96,7 @@ static void connectPortImpulse_fc( static LADSPA_Handle instantiateImpulse_fc( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - Impulse_fc *plugin_data = (Impulse_fc *)malloc(sizeof(Impulse_fc)); + Impulse_fc *plugin_data = (Impulse_fc *)calloc(1, sizeof(Impulse_fc)); float phase; LADSPA_Data sample_rate; @@ -186,14 +186,13 @@ static void runAddingImpulse_fc(LADSPA_Handle instance, unsigned long sample_cou plugin_data->phase = phase; } -void __attribute__((constructor)) swh_init() { +static 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) @@ -257,12 +256,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static 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); } + impulse_fcDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/impulses/all.h b/plugins/LadspaEffect/swh/impulses/all.h index b0897fb5eab..9a99a02cbbc 100644 --- a/plugins/LadspaEffect/swh/impulses/all.h +++ b/plugins/LadspaEffect/swh/impulses/all.h @@ -1,6 +1,6 @@ /* Generated file, do not edit */ -#define IMPULSES 21 +#define IMPULSES 21 #include "impulses/01-unit.h" #include "impulses/02-steves-flat.h" @@ -25,7 +25,7 @@ #include "impulses/21-matchless-chieftain-sm57-off.h" #ifdef __clang__ -void mk_imps(fftw_real **impulse_freq) +static void mk_imps(fftw_real **impulse_freq) #else static inline void mk_imps(fftw_real **impulse_freq) #endif diff --git a/plugins/LadspaEffect/swh/inv_1429.c b/plugins/LadspaEffect/swh/inv_1429.c index e0a6f77159a..d18534e9994 100644 --- a/plugins/LadspaEffect/swh/inv_1429.c +++ b/plugins/LadspaEffect/swh/inv_1429.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -78,7 +78,7 @@ static void connectPortInv( static LADSPA_Handle instantiateInv( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - Inv *plugin_data = (Inv *)malloc(sizeof(Inv)); + Inv *plugin_data = (Inv *)calloc(1, sizeof(Inv)); plugin_data->run_adding_gain = 1.0f; return (LADSPA_Handle)plugin_data; @@ -138,14 +138,13 @@ static void runAddingInv(LADSPA_Handle instance, unsigned long sample_count) { } } -void __attribute__((constructor)) swh_init() { +static 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) @@ -207,12 +206,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (invDescriptor) { free((LADSPA_PortDescriptor *)invDescriptor->PortDescriptors); free((char **)invDescriptor->PortNames); free((LADSPA_PortRangeHint *)invDescriptor->PortRangeHints); free(invDescriptor); } + invDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/karaoke_1409.c b/plugins/LadspaEffect/swh/karaoke_1409.c index 9dd09c336fa..b1bbf8c9b2e 100644 --- a/plugins/LadspaEffect/swh/karaoke_1409.c +++ b/plugins/LadspaEffect/swh/karaoke_1409.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -93,7 +93,7 @@ static void connectPortKaraoke( static LADSPA_Handle instantiateKaraoke( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - Karaoke *plugin_data = (Karaoke *)malloc(sizeof(Karaoke)); + Karaoke *plugin_data = (Karaoke *)calloc(1, sizeof(Karaoke)); plugin_data->run_adding_gain = 1.0f; return (LADSPA_Handle)plugin_data; @@ -181,14 +181,13 @@ static void runAddingKaraoke(LADSPA_Handle instance, unsigned long sample_count) } } -void __attribute__((constructor)) swh_init() { +static 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) @@ -274,12 +273,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (karaokeDescriptor) { free((LADSPA_PortDescriptor *)karaokeDescriptor->PortDescriptors); free((char **)karaokeDescriptor->PortNames); free((LADSPA_PortRangeHint *)karaokeDescriptor->PortRangeHints); free(karaokeDescriptor); } + karaokeDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/latency_1914.c b/plugins/LadspaEffect/swh/latency_1914.c index 202b65baa2a..639f692cf05 100644 --- a/plugins/LadspaEffect/swh/latency_1914.c +++ b/plugins/LadspaEffect/swh/latency_1914.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -92,7 +92,7 @@ static void connectPortArtificialLatency( static LADSPA_Handle instantiateArtificialLatency( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - ArtificialLatency *plugin_data = (ArtificialLatency *)malloc(sizeof(ArtificialLatency)); + ArtificialLatency *plugin_data = (ArtificialLatency *)calloc(1, sizeof(ArtificialLatency)); float fs; #line 21 "latency_1914.xml" @@ -173,14 +173,13 @@ static void runAddingArtificialLatency(LADSPA_Handle instance, unsigned long sam *(plugin_data->latency) = (float)delay_fr; } -void __attribute__((constructor)) swh_init() { +static 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) @@ -259,12 +258,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (artificialLatencyDescriptor) { free((LADSPA_PortDescriptor *)artificialLatencyDescriptor->PortDescriptors); free((char **)artificialLatencyDescriptor->PortNames); free((LADSPA_PortRangeHint *)artificialLatencyDescriptor->PortRangeHints); free(artificialLatencyDescriptor); } + artificialLatencyDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/lcr_delay_1436.c b/plugins/LadspaEffect/swh/lcr_delay_1436.c index f9d4df7b618..307241db4b7 100644 --- a/plugins/LadspaEffect/swh/lcr_delay_1436.c +++ b/plugins/LadspaEffect/swh/lcr_delay_1436.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -199,7 +199,7 @@ static void connectPortLcrDelay( static LADSPA_Handle instantiateLcrDelay( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - LcrDelay *plugin_data = (LcrDelay *)malloc(sizeof(LcrDelay)); + LcrDelay *plugin_data = (LcrDelay *)calloc(1, sizeof(LcrDelay)); LADSPA_Data *buffer = NULL; unsigned int buffer_mask; unsigned int buffer_pos; @@ -540,14 +540,13 @@ static void runAddingLcrDelay(LADSPA_Handle instance, unsigned long sample_count plugin_data->buffer_pos = buffer_pos; } -void __attribute__((constructor)) swh_init() { +static 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) @@ -733,12 +732,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (lcrDelayDescriptor) { free((LADSPA_PortDescriptor *)lcrDelayDescriptor->PortDescriptors); free((char **)lcrDelayDescriptor->PortNames); free((LADSPA_PortRangeHint *)lcrDelayDescriptor->PortRangeHints); free(lcrDelayDescriptor); } + lcrDelayDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/lowpass_iir_1891.c b/plugins/LadspaEffect/swh/lowpass_iir_1891.c index a8ecb9ad4c3..0b57e84826d 100644 --- a/plugins/LadspaEffect/swh/lowpass_iir_1891.c +++ b/plugins/LadspaEffect/swh/lowpass_iir_1891.c @@ -20,11 +20,12 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif +#line 9 "lowpass_iir_1891.xml" #include "config.h" #include "util/iir.h" @@ -70,6 +71,7 @@ static void activateLowpass_iir(LADSPA_Handle instance) { iir_stage_t*gt = plugin_data->gt; iirf_t*iirf = plugin_data->iirf; long sample_rate = plugin_data->sample_rate; +#line 36 "lowpass_iir_1891.xml" gt = init_iir_stage(IIR_STAGE_LOWPASS,10,3,2); iirf = init_iirf_t(gt); @@ -82,6 +84,7 @@ static void activateLowpass_iir(LADSPA_Handle instance) { } static void cleanupLowpass_iir(LADSPA_Handle instance) { +#line 43 "lowpass_iir_1891.xml" Lowpass_iir *plugin_data = (Lowpass_iir *)instance; free_iirf_t(plugin_data->iirf, plugin_data->gt); free_iir_stage(plugin_data->gt); @@ -114,11 +117,12 @@ static void connectPortLowpass_iir( static LADSPA_Handle instantiateLowpass_iir( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - Lowpass_iir *plugin_data = (Lowpass_iir *)malloc(sizeof(Lowpass_iir)); + Lowpass_iir *plugin_data = (Lowpass_iir *)calloc(1, sizeof(Lowpass_iir)); iir_stage_t*gt = NULL; iirf_t*iirf = NULL; long sample_rate; +#line 25 "lowpass_iir_1891.xml" sample_rate = s_rate; plugin_data->gt = gt; @@ -138,6 +142,7 @@ static LADSPA_Handle instantiateLowpass_iir( static void runLowpass_iir(LADSPA_Handle instance, unsigned long sample_count) { Lowpass_iir *plugin_data = (Lowpass_iir *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Cutoff Frequency (float value) */ const LADSPA_Data cutoff = *(plugin_data->cutoff); @@ -154,8 +159,12 @@ static void runLowpass_iir(LADSPA_Handle instance, unsigned long sample_count) { iirf_t* iirf = plugin_data->iirf; long sample_rate = plugin_data->sample_rate; +#line 28 "lowpass_iir_1891.xml" 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); + + // Unused variable + (void)(run_adding_gain); } #undef buffer_write #undef RUN_ADDING @@ -171,6 +180,7 @@ static void setRunAddingGainLowpass_iir(LADSPA_Handle instance, LADSPA_Data gain static void runAddingLowpass_iir(LADSPA_Handle instance, unsigned long sample_count) { Lowpass_iir *plugin_data = (Lowpass_iir *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Cutoff Frequency (float value) */ const LADSPA_Data cutoff = *(plugin_data->cutoff); @@ -187,18 +197,21 @@ static void runAddingLowpass_iir(LADSPA_Handle instance, unsigned long sample_co iirf_t* iirf = plugin_data->iirf; long sample_rate = plugin_data->sample_rate; +#line 28 "lowpass_iir_1891.xml" 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); + + // Unused variable + (void)(run_adding_gain); } -void __attribute__((constructor)) swh_init() { +static 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) @@ -280,12 +293,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static 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); } + lowpass_iirDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/ls_filter_1908.c b/plugins/LadspaEffect/swh/ls_filter_1908.c index e67177bcd7d..036017fe471 100644 --- a/plugins/LadspaEffect/swh/ls_filter_1908.c +++ b/plugins/LadspaEffect/swh/ls_filter_1908.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -113,7 +113,7 @@ static void connectPortLsFilter( static LADSPA_Handle instantiateLsFilter( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - LsFilter *plugin_data = (LsFilter *)malloc(sizeof(LsFilter)); + LsFilter *plugin_data = (LsFilter *)calloc(1, sizeof(LsFilter)); ls_filt *filt = NULL; float fs; @@ -209,14 +209,13 @@ static void runAddingLsFilter(LADSPA_Handle instance, unsigned long sample_count } } -void __attribute__((constructor)) swh_init() { +static 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) @@ -308,12 +307,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (lsFilterDescriptor) { free((LADSPA_PortDescriptor *)lsFilterDescriptor->PortDescriptors); free((char **)lsFilterDescriptor->PortNames); free((LADSPA_PortRangeHint *)lsFilterDescriptor->PortRangeHints); free(lsFilterDescriptor); } + lsFilterDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/matrix_ms_st_1421.c b/plugins/LadspaEffect/swh/matrix_ms_st_1421.c index e1c81d8d27c..2e255c217d6 100644 --- a/plugins/LadspaEffect/swh/matrix_ms_st_1421.c +++ b/plugins/LadspaEffect/swh/matrix_ms_st_1421.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -93,7 +93,7 @@ static void connectPortMatrixMSSt( static LADSPA_Handle instantiateMatrixMSSt( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - MatrixMSSt *plugin_data = (MatrixMSSt *)malloc(sizeof(MatrixMSSt)); + MatrixMSSt *plugin_data = (MatrixMSSt *)calloc(1, sizeof(MatrixMSSt)); plugin_data->run_adding_gain = 1.0f; return (LADSPA_Handle)plugin_data; @@ -173,14 +173,13 @@ static void runAddingMatrixMSSt(LADSPA_Handle instance, unsigned long sample_cou } } -void __attribute__((constructor)) swh_init() { +static 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) @@ -266,12 +265,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (matrixMSStDescriptor) { free((LADSPA_PortDescriptor *)matrixMSStDescriptor->PortDescriptors); free((char **)matrixMSStDescriptor->PortNames); free((LADSPA_PortRangeHint *)matrixMSStDescriptor->PortRangeHints); free(matrixMSStDescriptor); } + matrixMSStDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/matrix_spatialiser_1422.c b/plugins/LadspaEffect/swh/matrix_spatialiser_1422.c index 74b3f1cfdb3..389d04a1e2d 100644 --- a/plugins/LadspaEffect/swh/matrix_spatialiser_1422.c +++ b/plugins/LadspaEffect/swh/matrix_spatialiser_1422.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -165,7 +165,7 @@ static void connectPortMatrixSpatialiser( static LADSPA_Handle instantiateMatrixSpatialiser( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - MatrixSpatialiser *plugin_data = (MatrixSpatialiser *)malloc(sizeof(MatrixSpatialiser)); + MatrixSpatialiser *plugin_data = (MatrixSpatialiser *)calloc(1, sizeof(MatrixSpatialiser)); LADSPA_Data current_m_gain; LADSPA_Data current_s_gain; @@ -331,14 +331,13 @@ static void runAddingMatrixSpatialiser(LADSPA_Handle instance, unsigned long sam plugin_data->current_s_gain = current_s_gain; } -void __attribute__((constructor)) swh_init() { +static 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) @@ -424,12 +423,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (matrixSpatialiserDescriptor) { free((LADSPA_PortDescriptor *)matrixSpatialiserDescriptor->PortDescriptors); free((char **)matrixSpatialiserDescriptor->PortNames); free((LADSPA_PortRangeHint *)matrixSpatialiserDescriptor->PortRangeHints); free(matrixSpatialiserDescriptor); } + matrixSpatialiserDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/matrix_st_ms_1420.c b/plugins/LadspaEffect/swh/matrix_st_ms_1420.c index 0d18f98b20f..78463e22fb1 100644 --- a/plugins/LadspaEffect/swh/matrix_st_ms_1420.c +++ b/plugins/LadspaEffect/swh/matrix_st_ms_1420.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -88,7 +88,7 @@ static void connectPortMatrixStMS( static LADSPA_Handle instantiateMatrixStMS( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - MatrixStMS *plugin_data = (MatrixStMS *)malloc(sizeof(MatrixStMS)); + MatrixStMS *plugin_data = (MatrixStMS *)calloc(1, sizeof(MatrixStMS)); plugin_data->run_adding_gain = 1.0f; return (LADSPA_Handle)plugin_data; @@ -162,14 +162,13 @@ static void runAddingMatrixStMS(LADSPA_Handle instance, unsigned long sample_cou } } -void __attribute__((constructor)) swh_init() { +static 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) @@ -245,12 +244,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (matrixStMSDescriptor) { free((LADSPA_PortDescriptor *)matrixStMSDescriptor->PortDescriptors); free((char **)matrixStMSDescriptor->PortNames); free((LADSPA_PortRangeHint *)matrixStMSDescriptor->PortRangeHints); free(matrixStMSDescriptor); } + matrixStMSDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/mbeq_1197.c b/plugins/LadspaEffect/swh/mbeq_1197.c index c10da591903..7361c31bdae 100644 --- a/plugins/LadspaEffect/swh/mbeq_1197.c +++ b/plugins/LadspaEffect/swh/mbeq_1197.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -246,7 +246,7 @@ static void connectPortMbeq( static LADSPA_Handle instantiateMbeq( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - Mbeq *plugin_data = (Mbeq *)malloc(sizeof(Mbeq)); + Mbeq *plugin_data = (Mbeq *)calloc(1, sizeof(Mbeq)); int *bin_base = NULL; float *bin_delta = NULL; fftw_real *comp = NULL; @@ -286,10 +286,11 @@ static LADSPA_Handle instantiateMbeq( // 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] = -0.5f*cos(2.0f*M_PI*(double)i/(double)FFT_LENGTH)+0.5f; + window[i] *= 2.0f; } - // Create db->coefficient lookup table + // Create db->coeffiecnt lookup table db_table = malloc(1000 * sizeof(float)); for (i=0; i < 1000; i++) { db = ((float)i/10) - 70; @@ -471,12 +472,8 @@ static void runMbeq(LADSPA_Handle instance, unsigned long sample_count) { // Window into the output accumulator for (i = 0; i < FFT_LENGTH; i++) { - // correction factor for window measured from white noise - // reduce intermediate output by (number of coefficients) * OVER_SAMP - out_accum[i] += real[i] * window[i] * 1.27519f / - ((FFT_LENGTH/2) * OVER_SAMP); + 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]; } @@ -662,14 +659,13 @@ static void runAddingMbeq(LADSPA_Handle instance, unsigned long sample_count) { *(plugin_data->latency) = fft_latency; } -void __attribute__((constructor)) swh_init() { +static 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) @@ -888,12 +884,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (mbeqDescriptor) { free((LADSPA_PortDescriptor *)mbeqDescriptor->PortDescriptors); free((char **)mbeqDescriptor->PortNames); free((LADSPA_PortRangeHint *)mbeqDescriptor->PortRangeHints); free(mbeqDescriptor); } + mbeqDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/mod_delay_1419.c b/plugins/LadspaEffect/swh/mod_delay_1419.c index 30ae3e553a1..5e2494466b4 100644 --- a/plugins/LadspaEffect/swh/mod_delay_1419.c +++ b/plugins/LadspaEffect/swh/mod_delay_1419.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -114,7 +114,7 @@ static void connectPortModDelay( static LADSPA_Handle instantiateModDelay( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - ModDelay *plugin_data = (ModDelay *)malloc(sizeof(ModDelay)); + ModDelay *plugin_data = (ModDelay *)calloc(1, sizeof(ModDelay)); LADSPA_Data *buffer = NULL; unsigned int buffer_mask; float fs; @@ -229,14 +229,13 @@ static void runAddingModDelay(LADSPA_Handle instance, unsigned long sample_count plugin_data->write_ptr = write_ptr; } -void __attribute__((constructor)) swh_init() { +static 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) @@ -318,12 +317,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (modDelayDescriptor) { free((LADSPA_PortDescriptor *)modDelayDescriptor->PortDescriptors); free((char **)modDelayDescriptor->PortNames); free((LADSPA_PortRangeHint *)modDelayDescriptor->PortRangeHints); free(modDelayDescriptor); } + modDelayDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/multivoice_chorus_1201.c b/plugins/LadspaEffect/swh/multivoice_chorus_1201.c index 24c100dd48b..06debf19ea1 100644 --- a/plugins/LadspaEffect/swh/multivoice_chorus_1201.c +++ b/plugins/LadspaEffect/swh/multivoice_chorus_1201.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -182,7 +182,7 @@ static void connectPortMultivoiceChorus( static LADSPA_Handle instantiateMultivoiceChorus( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - MultivoiceChorus *plugin_data = (MultivoiceChorus *)malloc(sizeof(MultivoiceChorus)); + MultivoiceChorus *plugin_data = (MultivoiceChorus *)calloc(1, sizeof(MultivoiceChorus)); long count; unsigned int delay_mask; unsigned int delay_pos; @@ -527,14 +527,13 @@ static void runAddingMultivoiceChorus(LADSPA_Handle instance, unsigned long samp plugin_data->delay_pos = delay_pos; } -void __attribute__((constructor)) swh_init() { +static 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) @@ -656,12 +655,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (multivoiceChorusDescriptor) { free((LADSPA_PortDescriptor *)multivoiceChorusDescriptor->PortDescriptors); free((char **)multivoiceChorusDescriptor->PortNames); free((LADSPA_PortRangeHint *)multivoiceChorusDescriptor->PortRangeHints); free(multivoiceChorusDescriptor); } + multivoiceChorusDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/notch_iir_1894.c b/plugins/LadspaEffect/swh/notch_iir_1894.c index 69009967b74..ae83a2f9824 100644 --- a/plugins/LadspaEffect/swh/notch_iir_1894.c +++ b/plugins/LadspaEffect/swh/notch_iir_1894.c @@ -20,11 +20,12 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif +#line 9 "notch_iir_1894.xml" #include "config.h" #include "util/iir.h" @@ -79,6 +80,7 @@ static void activateNotch_iir(LADSPA_Handle instance) { long sample_rate = plugin_data->sample_rate; iir_stage_t*second = plugin_data->second; float ufc = plugin_data->ufc; +#line 39 "notch_iir_1894.xml" ufc = (*(plugin_data->center) - *(plugin_data->width)*0.5f)/(float)sample_rate; lfc = (*(plugin_data->center) + *(plugin_data->width)*0.5f)/(float)sample_rate; @@ -99,6 +101,7 @@ static void activateNotch_iir(LADSPA_Handle instance) { } static void cleanupNotch_iir(LADSPA_Handle instance) { +#line 50 "notch_iir_1894.xml" 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); @@ -136,7 +139,7 @@ static void connectPortNotch_iir( static LADSPA_Handle instantiateNotch_iir( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - Notch_iir *plugin_data = (Notch_iir *)malloc(sizeof(Notch_iir)); + Notch_iir *plugin_data = (Notch_iir *)calloc(1, sizeof(Notch_iir)); iir_stage_t*first = NULL; iirf_t*iirf1 = NULL; iirf_t*iirf2 = NULL; @@ -145,6 +148,7 @@ static LADSPA_Handle instantiateNotch_iir( iir_stage_t*second = NULL; float ufc; +#line 23 "notch_iir_1894.xml" sample_rate = s_rate; ufc = lfc = 0.0f; @@ -169,6 +173,7 @@ static LADSPA_Handle instantiateNotch_iir( static void runNotch_iir(LADSPA_Handle instance, unsigned long sample_count) { Notch_iir *plugin_data = (Notch_iir *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Center Frequency (Hz) (float value) */ const LADSPA_Data center = *(plugin_data->center); @@ -192,12 +197,16 @@ static void runNotch_iir(LADSPA_Handle instance, unsigned long sample_count) { iir_stage_t* second = plugin_data->second; float ufc = plugin_data->ufc; +#line 27 "notch_iir_1894.xml" 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 */ + + // Unused variable + (void)(run_adding_gain); } #undef buffer_write #undef RUN_ADDING @@ -213,6 +222,7 @@ static void setRunAddingGainNotch_iir(LADSPA_Handle instance, LADSPA_Data gain) static void runAddingNotch_iir(LADSPA_Handle instance, unsigned long sample_count) { Notch_iir *plugin_data = (Notch_iir *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; /* Center Frequency (Hz) (float value) */ const LADSPA_Data center = *(plugin_data->center); @@ -236,22 +246,25 @@ static void runAddingNotch_iir(LADSPA_Handle instance, unsigned long sample_coun iir_stage_t* second = plugin_data->second; float ufc = plugin_data->ufc; +#line 27 "notch_iir_1894.xml" 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 */ + + // Unused variable + (void)(run_adding_gain); } -void __attribute__((constructor)) swh_init() { +static 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) @@ -343,12 +356,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static 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); } + notch_iirDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/phasers_1217.c b/plugins/LadspaEffect/swh/phasers_1217.c index da50e11e86e..0619b791311 100644 --- a/plugins/LadspaEffect/swh/phasers_1217.c +++ b/plugins/LadspaEffect/swh/phasers_1217.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -255,7 +255,7 @@ static void connectPortLfoPhaser( static LADSPA_Handle instantiateLfoPhaser( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - LfoPhaser *plugin_data = (LfoPhaser *)malloc(sizeof(LfoPhaser)); + LfoPhaser *plugin_data = (LfoPhaser *)calloc(1, sizeof(LfoPhaser)); allpass *ap = NULL; int count; float f_per_lv; @@ -551,7 +551,7 @@ static void connectPortFourByFourPole( static LADSPA_Handle instantiateFourByFourPole( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - FourByFourPole *plugin_data = (FourByFourPole *)malloc(sizeof(FourByFourPole)); + FourByFourPole *plugin_data = (FourByFourPole *)calloc(1, sizeof(FourByFourPole)); allpass *ap = NULL; float sr_r_2; float y0; @@ -838,7 +838,7 @@ static void connectPortAutoPhaser( static LADSPA_Handle instantiateAutoPhaser( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - AutoPhaser *plugin_data = (AutoPhaser *)malloc(sizeof(AutoPhaser)); + AutoPhaser *plugin_data = (AutoPhaser *)calloc(1, sizeof(AutoPhaser)); allpass *ap = NULL; envelope *env = NULL; float sample_rate; @@ -1030,14 +1030,13 @@ static void runAddingAutoPhaser(LADSPA_Handle instance, unsigned long sample_cou plugin_data->ym1 = ym1; } -void __attribute__((constructor)) swh_init() { +static 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) @@ -1377,24 +1376,27 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (lfoPhaserDescriptor) { free((LADSPA_PortDescriptor *)lfoPhaserDescriptor->PortDescriptors); free((char **)lfoPhaserDescriptor->PortNames); free((LADSPA_PortRangeHint *)lfoPhaserDescriptor->PortRangeHints); free(lfoPhaserDescriptor); } + lfoPhaserDescriptor = NULL; if (fourByFourPoleDescriptor) { free((LADSPA_PortDescriptor *)fourByFourPoleDescriptor->PortDescriptors); free((char **)fourByFourPoleDescriptor->PortNames); free((LADSPA_PortRangeHint *)fourByFourPoleDescriptor->PortRangeHints); free(fourByFourPoleDescriptor); } + fourByFourPoleDescriptor = NULL; if (autoPhaserDescriptor) { free((LADSPA_PortDescriptor *)autoPhaserDescriptor->PortDescriptors); free((char **)autoPhaserDescriptor->PortNames); free((LADSPA_PortRangeHint *)autoPhaserDescriptor->PortRangeHints); free(autoPhaserDescriptor); } + autoPhaserDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/pitch_scale_1193.c b/plugins/LadspaEffect/swh/pitch_scale_1193.c index 88cf24cc8f0..7892cb4980c 100644 --- a/plugins/LadspaEffect/swh/pitch_scale_1193.c +++ b/plugins/LadspaEffect/swh/pitch_scale_1193.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -79,6 +79,7 @@ static void activatePitchScale(LADSPA_Handle instance) { memset(buffers->gAnaFreq, 0, FRAME_LENGTH*sizeof(float)); memset(buffers->gAnaMagn, 0, FRAME_LENGTH*sizeof(float)); buffers->gRover = 0; + sample_rate = sample_rate; /* 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); @@ -130,7 +131,7 @@ static void connectPortPitchScale( static LADSPA_Handle instantiatePitchScale( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - PitchScale *plugin_data = (PitchScale *)malloc(sizeof(PitchScale)); + PitchScale *plugin_data = (PitchScale *)calloc(1, sizeof(PitchScale)); sbuffers *buffers = NULL; long sample_rate; @@ -240,14 +241,13 @@ static void runAddingPitchScale(LADSPA_Handle instance, unsigned long sample_cou OVER_SAMP); } -void __attribute__((constructor)) swh_init() { +static 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) @@ -326,12 +326,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (pitchScaleDescriptor) { free((LADSPA_PortDescriptor *)pitchScaleDescriptor->PortDescriptors); free((char **)pitchScaleDescriptor->PortNames); free((LADSPA_PortRangeHint *)pitchScaleDescriptor->PortRangeHints); free(pitchScaleDescriptor); } + pitchScaleDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/pitch_scale_1194.c b/plugins/LadspaEffect/swh/pitch_scale_1194.c index 62d6be129be..8c1fcb86791 100644 --- a/plugins/LadspaEffect/swh/pitch_scale_1194.c +++ b/plugins/LadspaEffect/swh/pitch_scale_1194.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -128,7 +128,7 @@ static void connectPortPitchScaleHQ( static LADSPA_Handle instantiatePitchScaleHQ( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - PitchScaleHQ *plugin_data = (PitchScaleHQ *)malloc(sizeof(PitchScaleHQ)); + PitchScaleHQ *plugin_data = (PitchScaleHQ *)calloc(1, sizeof(PitchScaleHQ)); sbuffers *buffers = NULL; long sample_rate; @@ -225,14 +225,13 @@ static void runAddingPitchScaleHQ(LADSPA_Handle instance, unsigned long sample_c / OVER_SAMP); } -void __attribute__((constructor)) swh_init() { +static 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) @@ -311,12 +310,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (pitchScaleHQDescriptor) { free((LADSPA_PortDescriptor *)pitchScaleHQDescriptor->PortDescriptors); free((char **)pitchScaleHQDescriptor->PortNames); free((LADSPA_PortRangeHint *)pitchScaleHQDescriptor->PortRangeHints); free(pitchScaleHQDescriptor); } + pitchScaleHQDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/plate_1423.c b/plugins/LadspaEffect/swh/plate_1423.c index f73e8f138c9..817d2257abe 100644 --- a/plugins/LadspaEffect/swh/plate_1423.c +++ b/plugins/LadspaEffect/swh/plate_1423.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -132,7 +132,7 @@ static void connectPortPlate( static LADSPA_Handle instantiatePlate( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - Plate *plugin_data = (Plate *)malloc(sizeof(Plate)); + Plate *plugin_data = (Plate *)calloc(1, sizeof(Plate)); float *out = NULL; waveguide_nl **w = NULL; @@ -295,14 +295,13 @@ static void runAddingPlate(LADSPA_Handle instance, unsigned long sample_count) { } } -void __attribute__((constructor)) swh_init() { +static 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) @@ -401,12 +400,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (plateDescriptor) { free((LADSPA_PortDescriptor *)plateDescriptor->PortDescriptors); free((char **)plateDescriptor->PortNames); free((LADSPA_PortRangeHint *)plateDescriptor->PortRangeHints); free(plateDescriptor); } + plateDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/pointer_cast_1910.c b/plugins/LadspaEffect/swh/pointer_cast_1910.c index 7465bd14544..41155ac858e 100644 --- a/plugins/LadspaEffect/swh/pointer_cast_1910.c +++ b/plugins/LadspaEffect/swh/pointer_cast_1910.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -115,7 +115,7 @@ static void connectPortPointerCastDistortion( static LADSPA_Handle instantiatePointerCastDistortion( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - PointerCastDistortion *plugin_data = (PointerCastDistortion *)malloc(sizeof(PointerCastDistortion)); + PointerCastDistortion *plugin_data = (PointerCastDistortion *)calloc(1, sizeof(PointerCastDistortion)); biquad *filt = NULL; float fs; @@ -221,14 +221,13 @@ static void runAddingPointerCastDistortion(LADSPA_Handle instance, unsigned long } } -void __attribute__((constructor)) swh_init() { +static 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) @@ -310,12 +309,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (pointerCastDistortionDescriptor) { free((LADSPA_PortDescriptor *)pointerCastDistortionDescriptor->PortDescriptors); free((char **)pointerCastDistortionDescriptor->PortNames); free((LADSPA_PortRangeHint *)pointerCastDistortionDescriptor->PortRangeHints); free(pointerCastDistortionDescriptor); } + pointerCastDistortionDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/rate_shifter_1417.c b/plugins/LadspaEffect/swh/rate_shifter_1417.c index 21e03cbc35e..6cb4428efbb 100644 --- a/plugins/LadspaEffect/swh/rate_shifter_1417.c +++ b/plugins/LadspaEffect/swh/rate_shifter_1417.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -111,7 +111,7 @@ static void connectPortRateShifter( static LADSPA_Handle instantiateRateShifter( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - RateShifter *plugin_data = (RateShifter *)malloc(sizeof(RateShifter)); + RateShifter *plugin_data = (RateShifter *)calloc(1, sizeof(RateShifter)); LADSPA_Data *buffer = NULL; unsigned int buffer_mask; fixp32 read_ptr; @@ -235,14 +235,13 @@ static void runAddingRateShifter(LADSPA_Handle instance, unsigned long sample_co plugin_data->write_ptr = write_ptr; } -void __attribute__((constructor)) swh_init() { +static 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) @@ -314,12 +313,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (rateShifterDescriptor) { free((LADSPA_PortDescriptor *)rateShifterDescriptor->PortDescriptors); free((char **)rateShifterDescriptor->PortNames); free((LADSPA_PortRangeHint *)rateShifterDescriptor->PortRangeHints); free(rateShifterDescriptor); } + rateShifterDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/retro_flange_1208.c b/plugins/LadspaEffect/swh/retro_flange_1208.c index 9c7fb4fe41d..f6e971ddcf7 100644 --- a/plugins/LadspaEffect/swh/retro_flange_1208.c +++ b/plugins/LadspaEffect/swh/retro_flange_1208.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -178,7 +178,7 @@ static void connectPortRetroFlange( static LADSPA_Handle instantiateRetroFlange( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - RetroFlange *plugin_data = (RetroFlange *)malloc(sizeof(RetroFlange)); + RetroFlange *plugin_data = (RetroFlange *)calloc(1, sizeof(RetroFlange)); LADSPA_Data *buffer = NULL; long buffer_size; long count; @@ -492,14 +492,13 @@ static void runAddingRetroFlange(LADSPA_Handle instance, unsigned long sample_co plugin_data->z2 = z2; } -void __attribute__((constructor)) swh_init() { +static 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) @@ -581,12 +580,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (retroFlangeDescriptor) { free((LADSPA_PortDescriptor *)retroFlangeDescriptor->PortDescriptors); free((char **)retroFlangeDescriptor->PortNames); free((LADSPA_PortRangeHint *)retroFlangeDescriptor->PortRangeHints); free(retroFlangeDescriptor); } + retroFlangeDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/revdelay_1605.c b/plugins/LadspaEffect/swh/revdelay_1605.c index e714ee5e22e..1cc25af65c7 100644 --- a/plugins/LadspaEffect/swh/revdelay_1605.c +++ b/plugins/LadspaEffect/swh/revdelay_1605.c @@ -20,11 +20,12 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif +#line 10 "revdelay_1605.xml" #include "ladspa-util.h" #include @@ -85,6 +86,7 @@ static void activateRevdelay(LADSPA_Handle instance) { 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; +#line 38 "revdelay_1605.xml" unsigned int size; size = sample_rate * 5 * 2; /* 5 second maximum */ @@ -105,6 +107,7 @@ static void activateRevdelay(LADSPA_Handle instance) { } static void cleanupRevdelay(LADSPA_Handle instance) { +#line 51 "revdelay_1605.xml" Revdelay *plugin_data = (Revdelay *)instance; free(plugin_data->buffer); free(instance); @@ -145,7 +148,7 @@ static void connectPortRevdelay( static LADSPA_Handle instantiateRevdelay( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - Revdelay *plugin_data = (Revdelay *)malloc(sizeof(Revdelay)); + Revdelay *plugin_data = (Revdelay *)calloc(1, sizeof(Revdelay)); LADSPA_Data *buffer = NULL; unsigned int buffer_size; LADSPA_Data delay_samples; @@ -153,6 +156,7 @@ static LADSPA_Handle instantiateRevdelay( unsigned int sample_rate; long write_phase; +#line 30 "revdelay_1605.xml" sample_rate = s_rate; buffer_size = 0; delay_samples = 0; @@ -207,6 +211,7 @@ static void runRevdelay(LADSPA_Handle instance, unsigned long sample_count) { unsigned int sample_rate = plugin_data->sample_rate; long write_phase = plugin_data->write_phase; +#line 55 "revdelay_1605.xml" int i; unsigned long delay2; float dry = DB_CO(dry_level); @@ -335,6 +340,7 @@ static void runAddingRevdelay(LADSPA_Handle instance, unsigned long sample_count unsigned int sample_rate = plugin_data->sample_rate; long write_phase = plugin_data->write_phase; +#line 55 "revdelay_1605.xml" int i; unsigned long delay2; float dry = DB_CO(dry_level); @@ -421,14 +427,13 @@ static void runAddingRevdelay(LADSPA_Handle instance, unsigned long sample_count plugin_data->write_phase = write_phase; } -void __attribute__((constructor)) swh_init() { +static 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) @@ -540,12 +545,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (revdelayDescriptor) { free((LADSPA_PortDescriptor *)revdelayDescriptor->PortDescriptors); free((char **)revdelayDescriptor->PortNames); free((LADSPA_PortRangeHint *)revdelayDescriptor->PortRangeHints); free(revdelayDescriptor); } + revdelayDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/ringmod_1188.c b/plugins/LadspaEffect/swh/ringmod_1188.c index 591dc966e07..ca9defeef6b 100644 --- a/plugins/LadspaEffect/swh/ringmod_1188.c +++ b/plugins/LadspaEffect/swh/ringmod_1188.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -120,7 +120,7 @@ static void connectPortRingmod_2i1o( static LADSPA_Handle instantiateRingmod_2i1o( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - Ringmod_2i1o *plugin_data = (Ringmod_2i1o *)malloc(sizeof(Ringmod_2i1o)); + Ringmod_2i1o *plugin_data = (Ringmod_2i1o *)calloc(1, sizeof(Ringmod_2i1o)); plugin_data->run_adding_gain = 1.0f; return (LADSPA_Handle)plugin_data; @@ -207,6 +207,8 @@ static void activateRingmod_1i1o1l(LADSPA_Handle instance) { static void cleanupRingmod_1i1o1l(LADSPA_Handle instance) { #line 93 "ringmod_1188.xml" + Ringmod_1i1o1l *plugin_data = (Ringmod_1i1o1l *)instance; + plugin_data = plugin_data; if (--refcount == 0) { free(sin_tbl); free(tri_tbl); @@ -254,7 +256,7 @@ static void connectPortRingmod_1i1o1l( static LADSPA_Handle instantiateRingmod_1i1o1l( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - Ringmod_1i1o1l *plugin_data = (Ringmod_1i1o1l *)malloc(sizeof(Ringmod_1i1o1l)); + Ringmod_1i1o1l *plugin_data = (Ringmod_1i1o1l *)calloc(1, sizeof(Ringmod_1i1o1l)); LADSPA_Data offset; #line 59 "ringmod_1188.xml" @@ -427,14 +429,13 @@ static void runAddingRingmod_1i1o1l(LADSPA_Handle instance, unsigned long sample plugin_data->offset = offset; } -void __attribute__((constructor)) swh_init() { +static 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) @@ -630,18 +631,20 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static 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); } + ringmod_2i1oDescriptor = NULL; if (ringmod_1i1o1lDescriptor) { free((LADSPA_PortDescriptor *)ringmod_1i1o1lDescriptor->PortDescriptors); free((char **)ringmod_1i1o1lDescriptor->PortNames); free((LADSPA_PortRangeHint *)ringmod_1i1o1lDescriptor->PortRangeHints); free(ringmod_1i1o1lDescriptor); } + ringmod_1i1o1lDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/satan_maximiser_1408.c b/plugins/LadspaEffect/swh/satan_maximiser_1408.c index acf99ac3c52..2092f83030f 100644 --- a/plugins/LadspaEffect/swh/satan_maximiser_1408.c +++ b/plugins/LadspaEffect/swh/satan_maximiser_1408.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -116,7 +116,7 @@ static void connectPortSatanMaximiser( static LADSPA_Handle instantiateSatanMaximiser( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - SatanMaximiser *plugin_data = (SatanMaximiser *)malloc(sizeof(SatanMaximiser)); + SatanMaximiser *plugin_data = (SatanMaximiser *)calloc(1, sizeof(SatanMaximiser)); LADSPA_Data *buffer = NULL; unsigned int buffer_pos; float env; @@ -255,14 +255,13 @@ static void runAddingSatanMaximiser(LADSPA_Handle instance, unsigned long sample plugin_data->buffer_pos = buffer_pos; } -void __attribute__((constructor)) swh_init() { +static 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) @@ -344,12 +343,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (satanMaximiserDescriptor) { free((LADSPA_PortDescriptor *)satanMaximiserDescriptor->PortDescriptors); free((char **)satanMaximiserDescriptor->PortNames); free((LADSPA_PortRangeHint *)satanMaximiserDescriptor->PortRangeHints); free(satanMaximiserDescriptor); } + satanMaximiserDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/sc1_1425.c b/plugins/LadspaEffect/swh/sc1_1425.c index 4b2ce94f185..1af3793d151 100644 --- a/plugins/LadspaEffect/swh/sc1_1425.c +++ b/plugins/LadspaEffect/swh/sc1_1425.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -126,7 +126,7 @@ static void connectPortSc1( static LADSPA_Handle instantiateSc1( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - Sc1 *plugin_data = (Sc1 *)malloc(sizeof(Sc1)); + Sc1 *plugin_data = (Sc1 *)calloc(1, sizeof(Sc1)); float amp; float *as = NULL; unsigned int count; @@ -344,14 +344,13 @@ static void runAddingSc1(LADSPA_Handle instance, unsigned long sample_count) { plugin_data->count = count; } -void __attribute__((constructor)) swh_init() { +static 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) @@ -473,12 +472,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (sc1Descriptor) { free((LADSPA_PortDescriptor *)sc1Descriptor->PortDescriptors); free((char **)sc1Descriptor->PortNames); free((LADSPA_PortRangeHint *)sc1Descriptor->PortRangeHints); free(sc1Descriptor); } + sc1Descriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/sc2_1426.c b/plugins/LadspaEffect/swh/sc2_1426.c index dcad834bc9c..2271c2f8b9c 100644 --- a/plugins/LadspaEffect/swh/sc2_1426.c +++ b/plugins/LadspaEffect/swh/sc2_1426.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -131,7 +131,7 @@ static void connectPortSc2( static LADSPA_Handle instantiateSc2( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - Sc2 *plugin_data = (Sc2 *)malloc(sizeof(Sc2)); + Sc2 *plugin_data = (Sc2 *)calloc(1, sizeof(Sc2)); float amp; float *as = NULL; unsigned int count; @@ -355,14 +355,13 @@ static void runAddingSc2(LADSPA_Handle instance, unsigned long sample_count) { plugin_data->count = count; } -void __attribute__((constructor)) swh_init() { +static 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) @@ -491,12 +490,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (sc2Descriptor) { free((LADSPA_PortDescriptor *)sc2Descriptor->PortDescriptors); free((char **)sc2Descriptor->PortNames); free((LADSPA_PortRangeHint *)sc2Descriptor->PortRangeHints); free(sc2Descriptor); } + sc2Descriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/sc3_1427.c b/plugins/LadspaEffect/swh/sc3_1427.c index 27edde70552..9ab325657f3 100644 --- a/plugins/LadspaEffect/swh/sc3_1427.c +++ b/plugins/LadspaEffect/swh/sc3_1427.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -146,7 +146,7 @@ static void connectPortSc3( static LADSPA_Handle instantiateSc3( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - Sc3 *plugin_data = (Sc3 *)malloc(sizeof(Sc3)); + Sc3 *plugin_data = (Sc3 *)calloc(1, sizeof(Sc3)); float amp; float *as = NULL; unsigned int count; @@ -402,14 +402,13 @@ static void runAddingSc3(LADSPA_Handle instance, unsigned long sample_count) { plugin_data->count = count; } -void __attribute__((constructor)) swh_init() { +static 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) @@ -562,12 +561,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (sc3Descriptor) { free((LADSPA_PortDescriptor *)sc3Descriptor->PortDescriptors); free((char **)sc3Descriptor->PortNames); free((LADSPA_PortRangeHint *)sc3Descriptor->PortRangeHints); free(sc3Descriptor); } + sc3Descriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/sc4_1882.c b/plugins/LadspaEffect/swh/sc4_1882.c index 3ff1fd00281..6441fb1a809 100644 --- a/plugins/LadspaEffect/swh/sc4_1882.c +++ b/plugins/LadspaEffect/swh/sc4_1882.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -153,7 +153,7 @@ static void connectPortSc4( static LADSPA_Handle instantiateSc4( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - Sc4 *plugin_data = (Sc4 *)malloc(sizeof(Sc4)); + Sc4 *plugin_data = (Sc4 *)calloc(1, sizeof(Sc4)); float amp; float *as = NULL; unsigned int count; @@ -445,14 +445,13 @@ static void runAddingSc4(LADSPA_Handle instance, unsigned long sample_count) { *(plugin_data->gain_red) = lin2db(gain); } -void __attribute__((constructor)) swh_init() { +static 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) @@ -618,12 +617,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (sc4Descriptor) { free((LADSPA_PortDescriptor *)sc4Descriptor->PortDescriptors); free((char **)sc4Descriptor->PortNames); free((LADSPA_PortRangeHint *)sc4Descriptor->PortRangeHints); free(sc4Descriptor); } + sc4Descriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/sc4m_1916.c b/plugins/LadspaEffect/swh/sc4m_1916.c index 4d92a213eaa..1d20a7e6445 100644 --- a/plugins/LadspaEffect/swh/sc4m_1916.c +++ b/plugins/LadspaEffect/swh/sc4m_1916.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -143,7 +143,7 @@ static void connectPortSc4m( static LADSPA_Handle instantiateSc4m( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - Sc4m *plugin_data = (Sc4m *)malloc(sizeof(Sc4m)); + Sc4m *plugin_data = (Sc4m *)calloc(1, sizeof(Sc4m)); float amp; float *as = NULL; unsigned int count; @@ -409,14 +409,13 @@ static void runAddingSc4m(LADSPA_Handle instance, unsigned long sample_count) { *(plugin_data->gain_red) = lin2db(gain); } -void __attribute__((constructor)) swh_init() { +static 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) @@ -568,12 +567,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (sc4mDescriptor) { free((LADSPA_PortDescriptor *)sc4mDescriptor->PortDescriptors); free((char **)sc4mDescriptor->PortNames); free((LADSPA_PortRangeHint *)sc4mDescriptor->PortRangeHints); free(sc4mDescriptor); } + sc4mDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/se4_1883.c b/plugins/LadspaEffect/swh/se4_1883.c index 2c1ddce6e4e..b2de1ff5a87 100644 --- a/plugins/LadspaEffect/swh/se4_1883.c +++ b/plugins/LadspaEffect/swh/se4_1883.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -153,7 +153,7 @@ static void connectPortSe4( static LADSPA_Handle instantiateSe4( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - Se4 *plugin_data = (Se4 *)malloc(sizeof(Se4)); + Se4 *plugin_data = (Se4 *)calloc(1, sizeof(Se4)); float amp; float *as = NULL; unsigned int count; @@ -441,14 +441,13 @@ static void runAddingSe4(LADSPA_Handle instance, unsigned long sample_count) { *(plugin_data->gain_exp) = lin2db(gain); } -void __attribute__((constructor)) swh_init() { +static 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) @@ -614,12 +613,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (se4Descriptor) { free((LADSPA_PortDescriptor *)se4Descriptor->PortDescriptors); free((char **)se4Descriptor->PortNames); free((LADSPA_PortRangeHint *)se4Descriptor->PortRangeHints); free(se4Descriptor); } + se4Descriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/shaper_1187.c b/plugins/LadspaEffect/swh/shaper_1187.c index 89fc699b4ff..c1a52906bf7 100644 --- a/plugins/LadspaEffect/swh/shaper_1187.c +++ b/plugins/LadspaEffect/swh/shaper_1187.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -83,7 +83,7 @@ static void connectPortShaper( static LADSPA_Handle instantiateShaper( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - Shaper *plugin_data = (Shaper *)malloc(sizeof(Shaper)); + Shaper *plugin_data = (Shaper *)calloc(1, sizeof(Shaper)); plugin_data->run_adding_gain = 1.0f; return (LADSPA_Handle)plugin_data; @@ -175,14 +175,13 @@ static void runAddingShaper(LADSPA_Handle instance, unsigned long sample_count) } } -void __attribute__((constructor)) swh_init() { +static 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) @@ -260,12 +259,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (shaperDescriptor) { free((LADSPA_PortDescriptor *)shaperDescriptor->PortDescriptors); free((char **)shaperDescriptor->PortNames); free((LADSPA_PortRangeHint *)shaperDescriptor->PortRangeHints); free(shaperDescriptor); } + shaperDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/sifter_1210.c b/plugins/LadspaEffect/swh/sifter_1210.c index 1c05217b86e..0e401e88710 100644 --- a/plugins/LadspaEffect/swh/sifter_1210.c +++ b/plugins/LadspaEffect/swh/sifter_1210.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -33,11 +33,7 @@ void __attribute__((constructor)) swh_init(); // forward declaration 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) { @@ -164,7 +160,7 @@ static void connectPortSifter( static LADSPA_Handle instantiateSifter( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - Sifter *plugin_data = (Sifter *)malloc(sizeof(Sifter)); + Sifter *plugin_data = (Sifter *)calloc(1, sizeof(Sifter)); LADSPA_Data *b1 = NULL; long b1ptr; LADSPA_Data *b2 = NULL; @@ -359,14 +355,13 @@ static void runAddingSifter(LADSPA_Handle instance, unsigned long sample_count) plugin_data->b2ptr = b2ptr; } -void __attribute__((constructor)) swh_init() { +static 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) @@ -438,12 +433,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (sifterDescriptor) { free((LADSPA_PortDescriptor *)sifterDescriptor->PortDescriptors); free((char **)sifterDescriptor->PortNames); free((LADSPA_PortRangeHint *)sifterDescriptor->PortRangeHints); free(sifterDescriptor); } + sifterDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/sin_cos_1881.c b/plugins/LadspaEffect/swh/sin_cos_1881.c index d12977141d4..a80d4ca9097 100644 --- a/plugins/LadspaEffect/swh/sin_cos_1881.c +++ b/plugins/LadspaEffect/swh/sin_cos_1881.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -94,7 +94,7 @@ static void connectPortSinCos( static LADSPA_Handle instantiateSinCos( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - SinCos *plugin_data = (SinCos *)malloc(sizeof(SinCos)); + SinCos *plugin_data = (SinCos *)calloc(1, sizeof(SinCos)); float fs; double last_om; double phi; @@ -207,14 +207,13 @@ static void runAddingSinCos(LADSPA_Handle instance, unsigned long sample_count) plugin_data->last_om = target_om; } -void __attribute__((constructor)) swh_init() { +static 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) @@ -296,12 +295,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (sinCosDescriptor) { free((LADSPA_PortDescriptor *)sinCosDescriptor->PortDescriptors); free((char **)sinCosDescriptor->PortNames); free((LADSPA_PortRangeHint *)sinCosDescriptor->PortRangeHints); free(sinCosDescriptor); } + sinCosDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/single_para_1203.c b/plugins/LadspaEffect/swh/single_para_1203.c index ef322fe3656..fe2114ae869 100644 --- a/plugins/LadspaEffect/swh/single_para_1203.c +++ b/plugins/LadspaEffect/swh/single_para_1203.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -112,7 +112,7 @@ static void connectPortSinglePara( static LADSPA_Handle instantiateSinglePara( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - SinglePara *plugin_data = (SinglePara *)malloc(sizeof(SinglePara)); + SinglePara *plugin_data = (SinglePara *)calloc(1, sizeof(SinglePara)); biquad *filter = NULL; float fs; @@ -207,14 +207,13 @@ static void runAddingSinglePara(LADSPA_Handle instance, unsigned long sample_cou } } -void __attribute__((constructor)) swh_init() { +static 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) @@ -312,12 +311,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (singleParaDescriptor) { free((LADSPA_PortDescriptor *)singleParaDescriptor->PortDescriptors); free((char **)singleParaDescriptor->PortNames); free((LADSPA_PortRangeHint *)singleParaDescriptor->PortRangeHints); free(singleParaDescriptor); } + singleParaDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/sinus_wavewrapper_1198.c b/plugins/LadspaEffect/swh/sinus_wavewrapper_1198.c index d8dc7b2ccad..5d1d93fd762 100644 --- a/plugins/LadspaEffect/swh/sinus_wavewrapper_1198.c +++ b/plugins/LadspaEffect/swh/sinus_wavewrapper_1198.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -83,7 +83,7 @@ static void connectPortSinusWavewrapper( static LADSPA_Handle instantiateSinusWavewrapper( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - SinusWavewrapper *plugin_data = (SinusWavewrapper *)malloc(sizeof(SinusWavewrapper)); + SinusWavewrapper *plugin_data = (SinusWavewrapper *)calloc(1, sizeof(SinusWavewrapper)); plugin_data->run_adding_gain = 1.0f; return (LADSPA_Handle)plugin_data; @@ -159,14 +159,13 @@ static void runAddingSinusWavewrapper(LADSPA_Handle instance, unsigned long samp } } -void __attribute__((constructor)) swh_init() { +static 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) @@ -244,12 +243,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (sinusWavewrapperDescriptor) { free((LADSPA_PortDescriptor *)sinusWavewrapperDescriptor->PortDescriptors); free((char **)sinusWavewrapperDescriptor->PortNames); free((LADSPA_PortRangeHint *)sinusWavewrapperDescriptor->PortRangeHints); free(sinusWavewrapperDescriptor); } + sinusWavewrapperDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/smooth_decimate_1414.c b/plugins/LadspaEffect/swh/smooth_decimate_1414.c index c63e6ce6ff7..e4c2534d611 100644 --- a/plugins/LadspaEffect/swh/smooth_decimate_1414.c +++ b/plugins/LadspaEffect/swh/smooth_decimate_1414.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -114,7 +114,7 @@ static void connectPortSmoothDecimate( static LADSPA_Handle instantiateSmoothDecimate( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - SmoothDecimate *plugin_data = (SmoothDecimate *)malloc(sizeof(SmoothDecimate)); + SmoothDecimate *plugin_data = (SmoothDecimate *)calloc(1, sizeof(SmoothDecimate)); float accum; float *buffer = NULL; int buffer_pos; @@ -240,14 +240,13 @@ static void runAddingSmoothDecimate(LADSPA_Handle instance, unsigned long sample plugin_data->buffer_pos = buffer_pos; } -void __attribute__((constructor)) swh_init() { +static 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) @@ -329,12 +328,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (smoothDecimateDescriptor) { free((LADSPA_PortDescriptor *)smoothDecimateDescriptor->PortDescriptors); free((char **)smoothDecimateDescriptor->PortNames); free((LADSPA_PortRangeHint *)smoothDecimateDescriptor->PortRangeHints); free(smoothDecimateDescriptor); } + smoothDecimateDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/split_1406.c b/plugins/LadspaEffect/swh/split_1406.c index 2fa1bee7b71..cf977fb9a38 100644 --- a/plugins/LadspaEffect/swh/split_1406.c +++ b/plugins/LadspaEffect/swh/split_1406.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -83,7 +83,7 @@ static void connectPortSplit( static LADSPA_Handle instantiateSplit( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - Split *plugin_data = (Split *)malloc(sizeof(Split)); + Split *plugin_data = (Split *)calloc(1, sizeof(Split)); plugin_data->run_adding_gain = 1.0f; return (LADSPA_Handle)plugin_data; @@ -155,14 +155,13 @@ static void runAddingSplit(LADSPA_Handle instance, unsigned long sample_count) { } } -void __attribute__((constructor)) swh_init() { +static 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) @@ -240,12 +239,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (splitDescriptor) { free((LADSPA_PortDescriptor *)splitDescriptor->PortDescriptors); free((char **)splitDescriptor->PortNames); free((LADSPA_PortRangeHint *)splitDescriptor->PortRangeHints); free(splitDescriptor); } + splitDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/step_muxer_1212.c b/plugins/LadspaEffect/swh/step_muxer_1212.c index 99c4ecf15f3..90ee3a5e104 100644 --- a/plugins/LadspaEffect/swh/step_muxer_1212.c +++ b/plugins/LadspaEffect/swh/step_muxer_1212.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -100,6 +100,7 @@ static void activateStepMuxer(LADSPA_Handle instance) { } current_ch = 0; last_clock = 0.0f; + sample_rate = sample_rate; plugin_data->ch_gain = ch_gain; plugin_data->ch_state = ch_state; plugin_data->current_ch = current_ch; @@ -163,7 +164,7 @@ static void connectPortStepMuxer( static LADSPA_Handle instantiateStepMuxer( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - StepMuxer *plugin_data = (StepMuxer *)malloc(sizeof(StepMuxer)); + StepMuxer *plugin_data = (StepMuxer *)calloc(1, sizeof(StepMuxer)); float *ch_gain = NULL; int *ch_state = NULL; int current_ch; @@ -396,14 +397,13 @@ static void runAddingStepMuxer(LADSPA_Handle instance, unsigned long sample_coun plugin_data->last_clock = last_clock; } -void __attribute__((constructor)) swh_init() { +static 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) @@ -531,12 +531,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (stepMuxerDescriptor) { free((LADSPA_PortDescriptor *)stepMuxerDescriptor->PortDescriptors); free((char **)stepMuxerDescriptor->PortNames); free((LADSPA_PortRangeHint *)stepMuxerDescriptor->PortRangeHints); free(stepMuxerDescriptor); } + stepMuxerDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/surround_encoder_1401.c b/plugins/LadspaEffect/swh/surround_encoder_1401.c index 100a03e5a86..72ceef6c45f 100644 --- a/plugins/LadspaEffect/swh/surround_encoder_1401.c +++ b/plugins/LadspaEffect/swh/surround_encoder_1401.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -160,7 +160,7 @@ static void connectPortSurroundEncoder( static LADSPA_Handle instantiateSurroundEncoder( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - SurroundEncoder *plugin_data = (SurroundEncoder *)malloc(sizeof(SurroundEncoder)); + SurroundEncoder *plugin_data = (SurroundEncoder *)calloc(1, sizeof(SurroundEncoder)); LADSPA_Data *buffer = NULL; unsigned int buffer_pos; unsigned int buffer_size; @@ -317,14 +317,13 @@ static void runAddingSurroundEncoder(LADSPA_Handle instance, unsigned long sampl plugin_data->buffer_pos = buffer_pos; } -void __attribute__((constructor)) swh_init() { +static 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) @@ -414,12 +413,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (surroundEncoderDescriptor) { free((LADSPA_PortDescriptor *)surroundEncoderDescriptor->PortDescriptors); free((char **)surroundEncoderDescriptor->PortNames); free((LADSPA_PortRangeHint *)surroundEncoderDescriptor->PortRangeHints); free(surroundEncoderDescriptor); } + surroundEncoderDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/svf_1214.c b/plugins/LadspaEffect/swh/svf_1214.c index c1a74aa0b26..0982e003aac 100644 --- a/plugins/LadspaEffect/swh/svf_1214.c +++ b/plugins/LadspaEffect/swh/svf_1214.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -192,7 +192,7 @@ static void connectPortSvf( static LADSPA_Handle instantiateSvf( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - Svf *plugin_data = (Svf *)malloc(sizeof(Svf)); + Svf *plugin_data = (Svf *)calloc(1, sizeof(Svf)); int sample_rate; sv_filter *svf = NULL; @@ -293,14 +293,13 @@ static void runAddingSvf(LADSPA_Handle instance, unsigned long sample_count) { } } -void __attribute__((constructor)) swh_init() { +static 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) @@ -408,12 +407,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (svfDescriptor) { free((LADSPA_PortDescriptor *)svfDescriptor->PortDescriptors); free((char **)svfDescriptor->PortNames); free((LADSPA_PortRangeHint *)svfDescriptor->PortRangeHints); free(svfDescriptor); } + svfDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/tape_delay_1211.c b/plugins/LadspaEffect/swh/tape_delay_1211.c index 6d78239e305..c7c554c3f2c 100644 --- a/plugins/LadspaEffect/swh/tape_delay_1211.c +++ b/plugins/LadspaEffect/swh/tape_delay_1211.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -116,6 +116,7 @@ static void activateTapeDelay(LADSPA_Handle instance) { last_in = 0.0f; last2_in = 0.0f; last3_in = 0.0f; + sample_rate = sample_rate; z0 = 0.0f; z1 = 0.0f; z2 = 0.0f; @@ -191,7 +192,7 @@ static void connectPortTapeDelay( static LADSPA_Handle instantiateTapeDelay( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - TapeDelay *plugin_data = (TapeDelay *)malloc(sizeof(TapeDelay)); + TapeDelay *plugin_data = (TapeDelay *)calloc(1, sizeof(TapeDelay)); LADSPA_Data *buffer = NULL; unsigned int buffer_mask; unsigned int buffer_size; @@ -475,14 +476,13 @@ static void runAddingTapeDelay(LADSPA_Handle instance, unsigned long sample_coun plugin_data->z2 = z2; } -void __attribute__((constructor)) swh_init() { +static 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) @@ -644,12 +644,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (tapeDelayDescriptor) { free((LADSPA_PortDescriptor *)tapeDelayDescriptor->PortDescriptors); free((char **)tapeDelayDescriptor->PortNames); free((LADSPA_PortRangeHint *)tapeDelayDescriptor->PortRangeHints); free(tapeDelayDescriptor); } + tapeDelayDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/transient_1206.c b/plugins/LadspaEffect/swh/transient_1206.c index 3c591535fcf..6ec8c32c8ff 100644 --- a/plugins/LadspaEffect/swh/transient_1206.c +++ b/plugins/LadspaEffect/swh/transient_1206.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -97,6 +97,7 @@ static void activateTransient(LADSPA_Handle instance) { medi_track = 0.1; slow_track = 0.1; count = 0; + sample_rate = sample_rate; plugin_data->buffer = buffer; plugin_data->buffer_pos = buffer_pos; plugin_data->count = count; @@ -143,7 +144,7 @@ static void connectPortTransient( static LADSPA_Handle instantiateTransient( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - Transient *plugin_data = (Transient *)malloc(sizeof(Transient)); + Transient *plugin_data = (Transient *)calloc(1, sizeof(Transient)); float *buffer = NULL; int buffer_pos; long count; @@ -369,14 +370,13 @@ static void runAddingTransient(LADSPA_Handle instance, unsigned long sample_coun plugin_data->slow_buffer_sum = slow_buffer_sum; } -void __attribute__((constructor)) swh_init() { +static 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) @@ -464,12 +464,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (transientDescriptor) { free((LADSPA_PortDescriptor *)transientDescriptor->PortDescriptors); free((char **)transientDescriptor->PortNames); free((LADSPA_PortRangeHint *)transientDescriptor->PortRangeHints); free(transientDescriptor); } + transientDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/triple_para_1204.c b/plugins/LadspaEffect/swh/triple_para_1204.c index ef7a26b7c66..d357c9c37d8 100644 --- a/plugins/LadspaEffect/swh/triple_para_1204.c +++ b/plugins/LadspaEffect/swh/triple_para_1204.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -176,7 +176,7 @@ static void connectPortTriplePara( static LADSPA_Handle instantiateTriplePara( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - TriplePara *plugin_data = (TriplePara *)malloc(sizeof(TriplePara)); + TriplePara *plugin_data = (TriplePara *)calloc(1, sizeof(TriplePara)); biquad *filters = NULL; float fs; @@ -368,14 +368,13 @@ static void runAddingTriplePara(LADSPA_Handle instance, unsigned long sample_cou } } -void __attribute__((constructor)) swh_init() { +static 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) @@ -593,12 +592,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (tripleParaDescriptor) { free((LADSPA_PortDescriptor *)tripleParaDescriptor->PortDescriptors); free((char **)tripleParaDescriptor->PortNames); free((LADSPA_PortRangeHint *)tripleParaDescriptor->PortRangeHints); free(tripleParaDescriptor); } + tripleParaDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/util/buffer.h b/plugins/LadspaEffect/swh/util/buffer.h index f339d3cc539..cb53979c6c4 100644 --- a/plugins/LadspaEffect/swh/util/buffer.h +++ b/plugins/LadspaEffect/swh/util/buffer.h @@ -8,10 +8,8 @@ static inline void buffer_sub(const float* a, const float *b, float *c, int cnt) { int i; - float *h; - h = c; for(i=0;irun_adding_gain = 1.0f; return (LADSPA_Handle)plugin_data; @@ -243,14 +243,13 @@ static void runAddingValve(LADSPA_Handle instance, unsigned long sample_count) { plugin_data->otm1 = otm1; } -void __attribute__((constructor)) swh_init() { +static 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) @@ -332,12 +331,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (valveDescriptor) { free((LADSPA_PortDescriptor *)valveDescriptor->PortDescriptors); free((char **)valveDescriptor->PortNames); free((LADSPA_PortRangeHint *)valveDescriptor->PortRangeHints); free(valveDescriptor); } + valveDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/valve_rect_1405.c b/plugins/LadspaEffect/swh/valve_rect_1405.c index a4191a4fd58..ea2e8a40630 100644 --- a/plugins/LadspaEffect/swh/valve_rect_1405.c +++ b/plugins/LadspaEffect/swh/valve_rect_1405.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -126,7 +126,7 @@ static void connectPortValveRect( static LADSPA_Handle instantiateValveRect( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - ValveRect *plugin_data = (ValveRect *)malloc(sizeof(ValveRect)); + ValveRect *plugin_data = (ValveRect *)calloc(1, sizeof(ValveRect)); unsigned int apos; float *avg = NULL; int avg_size; @@ -312,14 +312,13 @@ static void runAddingValveRect(LADSPA_Handle instance, unsigned long sample_coun plugin_data->apos = apos; } -void __attribute__((constructor)) swh_init() { +static 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) @@ -401,12 +400,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (valveRectDescriptor) { free((LADSPA_PortDescriptor *)valveRectDescriptor->PortDescriptors); free((char **)valveRectDescriptor->PortNames); free((LADSPA_PortRangeHint *)valveRectDescriptor->PortRangeHints); free(valveRectDescriptor); } + valveRectDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/vocoder_1337.c b/plugins/LadspaEffect/swh/vocoder_1337.c index 599d22ebe94..d28975fe7e9 100644 --- a/plugins/LadspaEffect/swh/vocoder_1337.c +++ b/plugins/LadspaEffect/swh/vocoder_1337.c @@ -1,72 +1,40 @@ -/* 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. +#include +#include +#ifndef WIN32 +#include "config.h" +#endif - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. +#ifdef ENABLE_NLS +#include +#endif - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -*/ +#define _ISOC9X_SOURCE 1 +#define _ISOC99_SOURCE 1 +#define __USE_ISOC99 1 +#define __USE_ISOC9X 1 +#include -/* not familiar with WINDOWS stuff. Saw this in other sources, it should be needed */ +#include "ladspa.h" #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif +#line 10 "vocoder_1337.xml" -/*****************************************************************************/ -/* general includes */ -#include -#include -#include -#include - -/*****************************************************************************/ -/* LADSPA headers */ -#include - -/*****************************************************************************/ +#include "util/iir.h" +#define MAX_BANDS 16 +#define AMPLIFIER 16.0 -#define LADSPA_UNIQUE_ID 1337 - -#define MAX_BANDS 16 /* max 16 bands should be increased */ -#define AMPLIFIER 16.0 +// 0 = formant, 1 = carrier, 2 = output, 3 = output2, 4 = bandcount, 5 = pan +#define START_BANDS 6 /* start of bands level */ +#define PORT_COUNT START_BANDS + MAX_BANDS /* bands level */ struct bandpasses { @@ -79,10 +47,12 @@ struct bandpasses LADSPA_Data y[MAX_BANDS]; }; +void inline doBandpasses(struct bandpasses *bands, LADSPA_Data sample, int num_bands); + struct bands_out{ LADSPA_Data decay[MAX_BANDS]; LADSPA_Data oldval[MAX_BANDS]; - LADSPA_Data level[MAX_BANDS]; /* 0.0 - 1.0 level of this output band */ + LADSPA_Data level[MAX_BANDS]; /* 0.0 - 1.0 level of this output band */ }; const LADSPA_Data decay_table[] = @@ -95,367 +65,914 @@ const LADSPA_Data decay_table[] = 1/250.0, 1/250.0, 1/250.0 }; -/* The port numbers for the plugin: */ +void inline doBandpasses(struct bandpasses *bands, LADSPA_Data sample, int num_bands) +{ + int i; + for (i=0; i < num_bands; i++) + { + bands->high1[i] = sample - bands->f[i] * bands->mid1[i] - bands->low1[i]; + bands->mid1[i] += bands->high1[i] * bands->c[i]; + bands->low1[i] += bands->mid1[i]; + + bands->high2[i] = bands->low1[i] - bands->f[i] * bands->mid2[i] - bands->low2[i]; + bands->mid2[i] += bands->high2[i] * bands->c[i]; + bands->low2[i] += bands->mid2[i]; + bands->y[i] = bands->high2[i] * bands->att[i]; + } +} + +#define VOCODER_PORT_FORMANT 0 +#define VOCODER_PORT_CARRIER 1 +#define VOCODER_PORT_OUTPUT 2 +#define VOCODER_PORT_OUTPUT2 3 +#define VOCODER_CTRL_BAND_COUNT 4 +#define VOCODER_CTRL_PAN 5 +#define VOCODER_BAND1 6 +#define VOCODER_BAND2 7 +#define VOCODER_BAND3 8 +#define VOCODER_BAND4 9 +#define VOCODER_BAND5 10 +#define VOCODER_BAND6 11 +#define VOCODER_BAND7 12 +#define VOCODER_BAND8 13 +#define VOCODER_BAND9 14 +#define VOCODER_BAND10 15 +#define VOCODER_BAND11 16 +#define VOCODER_BAND12 17 +#define VOCODER_BAND13 18 +#define VOCODER_BAND14 19 +#define VOCODER_BAND15 20 +#define VOCODER_BAND16 21 + +static LADSPA_Descriptor *vocoderDescriptor = NULL; + +typedef struct { + LADSPA_Data *port_formant; + LADSPA_Data *port_carrier; + LADSPA_Data *port_output; + LADSPA_Data *port_output2; + LADSPA_Data *ctrl_band_count; + LADSPA_Data *ctrl_pan; + LADSPA_Data *band1; + LADSPA_Data *band2; + LADSPA_Data *band3; + LADSPA_Data *band4; + LADSPA_Data *band5; + LADSPA_Data *band6; + LADSPA_Data *band7; + LADSPA_Data *band8; + LADSPA_Data *band9; + LADSPA_Data *band10; + LADSPA_Data *band11; + LADSPA_Data *band12; + LADSPA_Data *band13; + LADSPA_Data *band14; + LADSPA_Data *band15; + LADSPA_Data *band16; + struct bandpasses bands_carrier; + struct bandpasses bands_formant; + struct bands_out bands_out; + LADSPA_Data *ctrl_band_levels; + float main_vol; + int num_bands; + LADSPA_Data sample_rate; + LADSPA_Data run_adding_gain; +} Vocoder; + +_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 vocoderDescriptor; + default: + return NULL; + } +} + +static void activateVocoder(LADSPA_Handle instance) { + Vocoder *plugin_data = (Vocoder *)instance; + struct bandpasses bands_carrier = plugin_data->bands_carrier; + struct bandpasses bands_formant = plugin_data->bands_formant; + struct bands_out bands_out = plugin_data->bands_out; + LADSPA_Data *ctrl_band_levels = plugin_data->ctrl_band_levels; + float main_vol = plugin_data->main_vol; + int num_bands = plugin_data->num_bands; + LADSPA_Data sample_rate = plugin_data->sample_rate; +#line 83 "vocoder_1337.xml" + int i; + for (i = 0; i < MAX_BANDS; i++) + { + bands_out.oldval[i] = 0.0f; + } + plugin_data->bands_carrier = bands_carrier; + plugin_data->bands_formant = bands_formant; + plugin_data->bands_out = bands_out; + plugin_data->ctrl_band_levels = ctrl_band_levels; + plugin_data->main_vol = main_vol; + plugin_data->num_bands = num_bands; + plugin_data->sample_rate = sample_rate; -#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 */ +static void cleanupVocoder(LADSPA_Handle instance) { +#line 92 "vocoder_1337.xml" + Vocoder *plugin_data = (Vocoder *)instance; + free(plugin_data->ctrl_band_levels); + free(instance); +} +static void connectPortVocoder( + LADSPA_Handle instance, + unsigned long port, + LADSPA_Data *data) { + Vocoder *plugin; + + plugin = (Vocoder *)instance; + switch (port) { + case VOCODER_PORT_FORMANT: + plugin->port_formant = data; + break; + case VOCODER_PORT_CARRIER: + plugin->port_carrier = data; + break; + case VOCODER_PORT_OUTPUT: + plugin->port_output = data; + break; + case VOCODER_PORT_OUTPUT2: + plugin->port_output2 = data; + break; + case VOCODER_CTRL_BAND_COUNT: + plugin->ctrl_band_count = data; + break; + case VOCODER_CTRL_PAN: + plugin->ctrl_pan = data; + break; + case VOCODER_BAND1: + plugin->band1 = data; + break; + case VOCODER_BAND2: + plugin->band2 = data; + break; + case VOCODER_BAND3: + plugin->band3 = data; + break; + case VOCODER_BAND4: + plugin->band4 = data; + break; + case VOCODER_BAND5: + plugin->band5 = data; + break; + case VOCODER_BAND6: + plugin->band6 = data; + break; + case VOCODER_BAND7: + plugin->band7 = data; + break; + case VOCODER_BAND8: + plugin->band8 = data; + break; + case VOCODER_BAND9: + plugin->band9 = data; + break; + case VOCODER_BAND10: + plugin->band10 = data; + break; + case VOCODER_BAND11: + plugin->band11 = data; + break; + case VOCODER_BAND12: + plugin->band12 = data; + break; + case VOCODER_BAND13: + plugin->band13 = data; + break; + case VOCODER_BAND14: + plugin->band14 = data; + break; + case VOCODER_BAND15: + plugin->band15 = data; + break; + case VOCODER_BAND16: + plugin->band16 = data; + break; + } +} -/* useful macros */ -#undef CLAMP -#define CLAMP(x, low, high) (((x) > (high)) ? (high) : (((x) < (low)) ? (low) : (x))) +static LADSPA_Handle instantiateVocoder( + const LADSPA_Descriptor *descriptor, + unsigned long s_rate) { + Vocoder *plugin_data = (Vocoder *)calloc(1, sizeof(Vocoder)); + struct bandpasses bands_carrier; + struct bandpasses bands_formant; + struct bands_out bands_out; + LADSPA_Data *ctrl_band_levels = NULL; + float main_vol; + int num_bands; + LADSPA_Data sample_rate; + +#line 75 "vocoder_1337.xml" + sample_rate = s_rate; + main_vol = 1.0 * AMPLIFIER; + + ctrl_band_levels = malloc(MAX_BANDS * sizeof(LADSPA_Data)); + num_bands = -1; + + plugin_data->bands_carrier = bands_carrier; + plugin_data->bands_formant = bands_formant; + plugin_data->bands_out = bands_out; + plugin_data->ctrl_band_levels = ctrl_band_levels; + plugin_data->main_vol = main_vol; + plugin_data->num_bands = num_bands; + plugin_data->sample_rate = sample_rate; + + return (LADSPA_Handle)plugin_data; +} -/* Instance data for the vocoder plugin */ -typedef struct { - LADSPA_Data SampleRate; +#undef buffer_write +#undef RUN_ADDING +#undef RUN_REPLACING - int num_bands; /* current number of bands */ - float mainvol; /* main volume */ +#define buffer_write(b, v) (b = v) +#define RUN_ADDING 0 +#define RUN_REPLACING 1 - struct bandpasses bands_formant; /* all bands in one struct now */ - struct bandpasses bands_carrier; /* ...same here */ - struct bands_out bands_out; /* ...and here. */ +static void runVocoder(LADSPA_Handle instance, unsigned long sample_count) { + Vocoder *plugin_data = (Vocoder *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; - /* Ports */ + /* Formant-in (array of floats of length sample_count) */ + const LADSPA_Data * const port_formant = plugin_data->port_formant; - 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 */ + /* Carrier-in (array of floats of length sample_count) */ + const LADSPA_Data * const port_carrier = plugin_data->port_carrier; -} VocoderInstance; + /* Output-out (array of floats of length sample_count) */ + LADSPA_Data * const port_output = plugin_data->port_output; -/*****************************************************************************/ + /* Output2-out (array of floats of length sample_count) */ + LADSPA_Data * const port_output2 = plugin_data->port_output2; -/* Construct a new plugin instance. */ -LADSPA_Handle -instantiateVocoder(const LADSPA_Descriptor * Descriptor, - unsigned long SampleRate) { - VocoderInstance * vocoder; + /* Number of bands (float value) */ + const LADSPA_Data ctrl_band_count = *(plugin_data->ctrl_band_count); - vocoder = (VocoderInstance *)malloc(sizeof(VocoderInstance)); + /* Left/Right (float value) */ + const LADSPA_Data ctrl_pan = *(plugin_data->ctrl_pan); - if (vocoder == NULL) - return NULL; + /* Band 1 Level (float value) */ + const LADSPA_Data band1 = *(plugin_data->band1); - vocoder->SampleRate = (LADSPA_Data)SampleRate; - vocoder->num_bands = -1; + /* Band 2 Level (float value) */ + const LADSPA_Data band2 = *(plugin_data->band2); - return vocoder; -} + /* Band 3 Level (float value) */ + const LADSPA_Data band3 = *(plugin_data->band3); -/*****************************************************************************/ + /* Band 4 Level (float value) */ + const LADSPA_Data band4 = *(plugin_data->band4); -/* Initialise and activate a plugin instance. */ -void -activateVocoder(LADSPA_Handle Instance) { - VocoderInstance *vocoder = (VocoderInstance *)Instance; - int i; + /* Band 5 Level (float value) */ + const LADSPA_Data band5 = *(plugin_data->band5); - vocoder->mainvol = 1.0 * AMPLIFIER; + /* Band 6 Level (float value) */ + const LADSPA_Data band6 = *(plugin_data->band6); - for (i = 0; i < MAX_BANDS; i++) - vocoder->bands_out.oldval[i] = 0.0f; -} + /* Band 7 Level (float value) */ + const LADSPA_Data band7 = *(plugin_data->band7); -/*****************************************************************************/ - -/* 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; - } -} + /* Band 8 Level (float value) */ + const LADSPA_Data band8 = *(plugin_data->band8); -/*****************************************************************************/ + /* Band 9 Level (float value) */ + const LADSPA_Data band9 = *(plugin_data->band9); -// vocoder_do_bandpasses /*fold00*/ -void inline vocoder_do_bandpasses(struct bandpasses *bands, LADSPA_Data sample, - VocoderInstance *vocoder) -{ - int i; - for (i=0; i < vocoder->num_bands; i++) - { - bands->high1[i] = sample - bands->f[i] * bands->mid1[i] - bands->low1[i]; - bands->mid1[i] += bands->high1[i] * bands->c[i]; - bands->low1[i] += bands->mid1[i]; - - bands->high2[i] = bands->low1[i] - bands->f[i] * bands->mid2[i] - - bands->low2[i]; - bands->mid2[i] += bands->high2[i] * bands->c[i]; - bands->low2[i] += bands->mid2[i]; - bands->y[i] = bands->high2[i] * bands->att[i]; - } -} + /* Band 10 Level (float value) */ + const LADSPA_Data band10 = *(plugin_data->band10); -/* 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; - - memset(&vocoder->bands_formant, 0, sizeof(struct bandpasses)); - for(i=0; i < numbands; i++) + /* Band 11 Level (float value) */ + const LADSPA_Data band11 = *(plugin_data->band11); + + /* Band 12 Level (float value) */ + const LADSPA_Data band12 = *(plugin_data->band12); + + /* Band 13 Level (float value) */ + const LADSPA_Data band13 = *(plugin_data->band13); + + /* Band 14 Level (float value) */ + const LADSPA_Data band14 = *(plugin_data->band14); + + /* Band 15 Level (float value) */ + const LADSPA_Data band15 = *(plugin_data->band15); + + /* Band 16 Level (float value) */ + const LADSPA_Data band16 = *(plugin_data->band16); + struct bandpasses bands_carrier = plugin_data->bands_carrier; + struct bandpasses bands_formant = plugin_data->bands_formant; + struct bands_out bands_out = plugin_data->bands_out; + LADSPA_Data * ctrl_band_levels = plugin_data->ctrl_band_levels; + float main_vol = plugin_data->main_vol; + int num_bands = plugin_data->num_bands; + LADSPA_Data sample_rate = plugin_data->sample_rate; + +#line 96 "vocoder_1337.xml" + int i, j, numbands, pan; + float a; + LADSPA_Data x, c; + float fl, fr; + + // Bind band level controls + plugin_data->ctrl_band_levels[0] = band1; + plugin_data->ctrl_band_levels[1] = band2; + plugin_data->ctrl_band_levels[2] = band3; + plugin_data->ctrl_band_levels[3] = band4; + plugin_data->ctrl_band_levels[4] = band5; + plugin_data->ctrl_band_levels[5] = band6; + plugin_data->ctrl_band_levels[6] = band7; + plugin_data->ctrl_band_levels[7] = band8; + plugin_data->ctrl_band_levels[8] = band9; + plugin_data->ctrl_band_levels[9] = band10; + plugin_data->ctrl_band_levels[10] = band11; + plugin_data->ctrl_band_levels[11] = band12; + plugin_data->ctrl_band_levels[12] = band13; + plugin_data->ctrl_band_levels[13] = band14; + plugin_data->ctrl_band_levels[14] = band15; + plugin_data->ctrl_band_levels[15] = band16; + + numbands = (int)(*plugin_data->ctrl_band_count); + if (numbands < 1 || numbands > MAX_BANDS) numbands = MAX_BANDS; + + /* initialize bandpass information if num_bands control has changed, + or on first run */ + if (plugin_data->num_bands != numbands) { - a = 16.0 * i/(double)numbands; // stretch existing bands + plugin_data->num_bands = numbands; + + memset(&plugin_data->bands_formant, 0, sizeof(struct bandpasses)); + for(i=0; i < numbands; i++) + { + a = 16.0 * i/(double)numbands; // stretch existing bands + + if (a < 4.0) + plugin_data->bands_formant.freq[i] = 150 + 420 * a / 4.0; + else + plugin_data->bands_formant.freq[i] = 600 * pow (1.23, a - 4.0); - if (a < 4.0) - vocoder->bands_formant.freq[i] = 150 + 420 * a / 4.0; - else - vocoder->bands_formant.freq[i] = 600 * pow (1.23, a - 4.0); + c = plugin_data->bands_formant.freq[i] * 2 * M_PI / plugin_data->sample_rate; + plugin_data->bands_formant.c[i] = c * c; - c = vocoder->bands_formant.freq[i] * 2 * M_PI / vocoder->SampleRate; - vocoder->bands_formant.c[i] = c * c; + plugin_data->bands_formant.f[i] = 0.4/c; + plugin_data->bands_formant.att[i] = + 1/(6.0 + ((exp (plugin_data->bands_formant.freq[i] + / plugin_data->sample_rate) - 1) * 10)); - vocoder->bands_formant.f[i] = 0.4/c; - vocoder->bands_formant.att[i] = - 1/(6.0 + ((exp (vocoder->bands_formant.freq[i] - / vocoder->SampleRate) - 1) * 10)); + plugin_data->bands_out.decay[i] = decay_table[(int)a]; + plugin_data->bands_out.level[i] = + CLAMP (plugin_data->ctrl_band_levels[i], 0.0, 1.0); + } + memcpy(&plugin_data->bands_carrier, + &plugin_data->bands_formant, sizeof(struct bandpasses)); - vocoder->bands_out.decay[i] = decay_table[(int)a]; - vocoder->bands_out.level[i] = - CLAMP (*vocoder->ctrlBandLevels[i], 0.0, 1.0); } - memcpy(&vocoder->bands_carrier, - &vocoder->bands_formant, sizeof(struct bandpasses)); - - } - else /* get current values of band level controls */ - { - for (i = 0; i < numbands; i++) - vocoder->bands_out.level[i] = 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); - - - LADSPA_Data sample = 0.0; - for (j=0; j < numbands; j++) + else /* get current values of band level controls */ { - vocoder->bands_out.oldval[j] = vocoder->bands_out.oldval[j] - + (fabs (vocoder->bands_formant.y[j]) - - vocoder->bands_out.oldval[j]) - * vocoder->bands_out.decay[j]; - x = vocoder->bands_carrier.y[j] * vocoder->bands_out.oldval[j]; + for (i = 0; i < numbands; i++) + plugin_data->bands_out.level[i] = CLAMP (plugin_data->ctrl_band_levels[i], + 0.0, 1.0); + } - sample += x * vocoder->bands_out.level[j]; + for (i=0; i < sample_count; i++) + { + doBandpasses (&(plugin_data->bands_carrier), + plugin_data->port_carrier[i], + plugin_data->num_bands); + doBandpasses (&(plugin_data->bands_formant), + plugin_data->port_formant[i], + plugin_data->num_bands); + + LADSPA_Data sample = 0.0; + for (j=0; j < numbands; j++) + { + plugin_data->bands_out.oldval[j] = plugin_data->bands_out.oldval[j] + + (fabs (plugin_data->bands_formant.y[j]) + - plugin_data->bands_out.oldval[j]) + * plugin_data->bands_out.decay[j]; + x = plugin_data->bands_carrier.y[j] * plugin_data->bands_out.oldval[j]; + + sample += x * plugin_data->bands_out.level[j]; + } + /* treat paning + main volume */ + pan = (int)(*plugin_data->ctrl_pan); + fl = fr = 1.0f; + 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 */ + plugin_data->port_output[i] = sample * plugin_data->main_vol * fl; + plugin_data->port_output2[i] = sample * plugin_data->main_vol * fr; } - /* treat paning + main volume */ - pan = (int)(*vocoder->ctrlPan); - fl = fr = 1.0f; - 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] = sample * vocoder->mainvol * fl; - vocoder->portOutput2[i] = sample * vocoder->mainvol * fr; - } -} + // Suppress unused warnings + (void)(sample_rate); + (void)(num_bands); + (void)(main_vol); + (void)(bands_formant); + (void)(bands_carrier); + (void)(bands_out); + (void)(ctrl_band_levels); + (void)(port_formant); + (void)(port_carrier); + (void)(port_output); + (void)(port_output2); + (void)(ctrl_band_count); + (void)(ctrl_pan); + (void)(run_adding_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 -/* Throw away a vocoder instance. */ -void -cleanupVocoder(LADSPA_Handle Instance) -{ - VocoderInstance * Vocoder; - Vocoder = (VocoderInstance *)Instance; - free(Vocoder); +static void setRunAddingGainVocoder(LADSPA_Handle instance, LADSPA_Data gain) { + ((Vocoder *)instance)->run_adding_gain = gain; } -/*****************************************************************************/ +static void runAddingVocoder(LADSPA_Handle instance, unsigned long sample_count) { + Vocoder *plugin_data = (Vocoder *)instance; + LADSPA_Data run_adding_gain = plugin_data->run_adding_gain; -LADSPA_Descriptor * g_psDescriptor = NULL; + /* Formant-in (array of floats of length sample_count) */ + const LADSPA_Data * const port_formant = plugin_data->port_formant; -/*****************************************************************************/ + /* Carrier-in (array of floats of length sample_count) */ + const LADSPA_Data * const port_carrier = plugin_data->port_carrier; -/* __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; + /* Output-out (array of floats of length sample_count) */ + LADSPA_Data * const port_output = plugin_data->port_output; - 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; - } -} + /* Output2-out (array of floats of length sample_count) */ + LADSPA_Data * const port_output2 = plugin_data->port_output2; -/*****************************************************************************/ - -/* __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); - } -} + /* Number of bands (float value) */ + const LADSPA_Data ctrl_band_count = *(plugin_data->ctrl_band_count); -/*****************************************************************************/ + /* Left/Right (float value) */ + const LADSPA_Data ctrl_pan = *(plugin_data->ctrl_pan); + + /* Band 1 Level (float value) */ + const LADSPA_Data band1 = *(plugin_data->band1); + + /* Band 2 Level (float value) */ + const LADSPA_Data band2 = *(plugin_data->band2); + + /* Band 3 Level (float value) */ + const LADSPA_Data band3 = *(plugin_data->band3); + + /* Band 4 Level (float value) */ + const LADSPA_Data band4 = *(plugin_data->band4); + + /* Band 5 Level (float value) */ + const LADSPA_Data band5 = *(plugin_data->band5); + + /* Band 6 Level (float value) */ + const LADSPA_Data band6 = *(plugin_data->band6); + + /* Band 7 Level (float value) */ + const LADSPA_Data band7 = *(plugin_data->band7); + + /* Band 8 Level (float value) */ + const LADSPA_Data band8 = *(plugin_data->band8); + + /* Band 9 Level (float value) */ + const LADSPA_Data band9 = *(plugin_data->band9); + + /* Band 10 Level (float value) */ + const LADSPA_Data band10 = *(plugin_data->band10); + + /* Band 11 Level (float value) */ + const LADSPA_Data band11 = *(plugin_data->band11); + + /* Band 12 Level (float value) */ + const LADSPA_Data band12 = *(plugin_data->band12); + + /* Band 13 Level (float value) */ + const LADSPA_Data band13 = *(plugin_data->band13); + + /* Band 14 Level (float value) */ + const LADSPA_Data band14 = *(plugin_data->band14); + + /* Band 15 Level (float value) */ + const LADSPA_Data band15 = *(plugin_data->band15); + + /* Band 16 Level (float value) */ + const LADSPA_Data band16 = *(plugin_data->band16); + struct bandpasses bands_carrier = plugin_data->bands_carrier; + struct bandpasses bands_formant = plugin_data->bands_formant; + struct bands_out bands_out = plugin_data->bands_out; + LADSPA_Data * ctrl_band_levels = plugin_data->ctrl_band_levels; + float main_vol = plugin_data->main_vol; + int num_bands = plugin_data->num_bands; + LADSPA_Data sample_rate = plugin_data->sample_rate; + +#line 96 "vocoder_1337.xml" + int i, j, numbands, pan; + float a; + LADSPA_Data x, c; + float fl, fr; + + // Bind band level controls + plugin_data->ctrl_band_levels[0] = band1; + plugin_data->ctrl_band_levels[1] = band2; + plugin_data->ctrl_band_levels[2] = band3; + plugin_data->ctrl_band_levels[3] = band4; + plugin_data->ctrl_band_levels[4] = band5; + plugin_data->ctrl_band_levels[5] = band6; + plugin_data->ctrl_band_levels[6] = band7; + plugin_data->ctrl_band_levels[7] = band8; + plugin_data->ctrl_band_levels[8] = band9; + plugin_data->ctrl_band_levels[9] = band10; + plugin_data->ctrl_band_levels[10] = band11; + plugin_data->ctrl_band_levels[11] = band12; + plugin_data->ctrl_band_levels[12] = band13; + plugin_data->ctrl_band_levels[13] = band14; + plugin_data->ctrl_band_levels[14] = band15; + plugin_data->ctrl_band_levels[15] = band16; + + numbands = (int)(*plugin_data->ctrl_band_count); + if (numbands < 1 || numbands > MAX_BANDS) numbands = MAX_BANDS; + + /* initialize bandpass information if num_bands control has changed, + or on first run */ + if (plugin_data->num_bands != numbands) + { + plugin_data->num_bands = numbands; + + memset(&plugin_data->bands_formant, 0, sizeof(struct bandpasses)); + for(i=0; i < numbands; i++) + { + a = 16.0 * i/(double)numbands; // stretch existing bands + + if (a < 4.0) + plugin_data->bands_formant.freq[i] = 150 + 420 * a / 4.0; + else + plugin_data->bands_formant.freq[i] = 600 * pow (1.23, a - 4.0); + + c = plugin_data->bands_formant.freq[i] * 2 * M_PI / plugin_data->sample_rate; + plugin_data->bands_formant.c[i] = c * c; + + plugin_data->bands_formant.f[i] = 0.4/c; + plugin_data->bands_formant.att[i] = + 1/(6.0 + ((exp (plugin_data->bands_formant.freq[i] + / plugin_data->sample_rate) - 1) * 10)); + + plugin_data->bands_out.decay[i] = decay_table[(int)a]; + plugin_data->bands_out.level[i] = + CLAMP (plugin_data->ctrl_band_levels[i], 0.0, 1.0); + } + memcpy(&plugin_data->bands_carrier, + &plugin_data->bands_formant, sizeof(struct bandpasses)); -/* 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; } + else /* get current values of band level controls */ + { + for (i = 0; i < numbands; i++) + plugin_data->bands_out.level[i] = CLAMP (plugin_data->ctrl_band_levels[i], + 0.0, 1.0); + } + + for (i=0; i < sample_count; i++) + { + doBandpasses (&(plugin_data->bands_carrier), + plugin_data->port_carrier[i], + plugin_data->num_bands); + doBandpasses (&(plugin_data->bands_formant), + plugin_data->port_formant[i], + plugin_data->num_bands); + + LADSPA_Data sample = 0.0; + for (j=0; j < numbands; j++) + { + plugin_data->bands_out.oldval[j] = plugin_data->bands_out.oldval[j] + + (fabs (plugin_data->bands_formant.y[j]) + - plugin_data->bands_out.oldval[j]) + * plugin_data->bands_out.decay[j]; + x = plugin_data->bands_carrier.y[j] * plugin_data->bands_out.oldval[j]; + + sample += x * plugin_data->bands_out.level[j]; + } + /* treat paning + main volume */ + pan = (int)(*plugin_data->ctrl_pan); + fl = fr = 1.0f; + 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 */ + plugin_data->port_output[i] = sample * plugin_data->main_vol * fl; + plugin_data->port_output2[i] = sample * plugin_data->main_vol * fr; + } + + // Suppress unused warnings + (void)(sample_rate); + (void)(num_bands); + (void)(main_vol); + (void)(bands_formant); + (void)(bands_carrier); + (void)(bands_out); + (void)(ctrl_band_levels); + (void)(port_formant); + (void)(port_carrier); + (void)(port_output); + (void)(port_output2); + (void)(ctrl_band_count); + (void)(ctrl_pan); + (void)(run_adding_gain); +} + +static 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) + bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); +#else +#define D_(s) (s) #endif - if (Index == 0) - return g_psDescriptor; - else - return NULL; + + + vocoderDescriptor = + (LADSPA_Descriptor *)malloc(sizeof(LADSPA_Descriptor)); + + if (vocoderDescriptor) { + vocoderDescriptor->UniqueID = 1337; + vocoderDescriptor->Label = "vocoder"; + vocoderDescriptor->Properties = + LADSPA_PROPERTY_HARD_RT_CAPABLE; + vocoderDescriptor->Name = + D_("Vocoder"); + vocoderDescriptor->Maker = + "Achim Settelmeier (adapted by Josh Green and Hexasoft)"; + vocoderDescriptor->Copyright = + "GPL"; + vocoderDescriptor->PortCount = 22; + + port_descriptors = (LADSPA_PortDescriptor *)calloc(22, + sizeof(LADSPA_PortDescriptor)); + vocoderDescriptor->PortDescriptors = + (const LADSPA_PortDescriptor *)port_descriptors; + + port_range_hints = (LADSPA_PortRangeHint *)calloc(22, + sizeof(LADSPA_PortRangeHint)); + vocoderDescriptor->PortRangeHints = + (const LADSPA_PortRangeHint *)port_range_hints; + + port_names = (char **)calloc(22, sizeof(char*)); + vocoderDescriptor->PortNames = + (const char **)port_names; + + /* Parameters for Formant-in */ + port_descriptors[VOCODER_PORT_FORMANT] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[VOCODER_PORT_FORMANT] = + D_("Formant-in"); + port_range_hints[VOCODER_PORT_FORMANT].HintDescriptor = 0; + + /* Parameters for Carrier-in */ + port_descriptors[VOCODER_PORT_CARRIER] = + LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO; + port_names[VOCODER_PORT_CARRIER] = + D_("Carrier-in"); + port_range_hints[VOCODER_PORT_CARRIER].HintDescriptor = 0; + + /* Parameters for Output-out */ + port_descriptors[VOCODER_PORT_OUTPUT] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[VOCODER_PORT_OUTPUT] = + D_("Output-out"); + port_range_hints[VOCODER_PORT_OUTPUT].HintDescriptor = 0; + + /* Parameters for Output2-out */ + port_descriptors[VOCODER_PORT_OUTPUT2] = + LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO; + port_names[VOCODER_PORT_OUTPUT2] = + D_("Output2-out"); + port_range_hints[VOCODER_PORT_OUTPUT2].HintDescriptor = 0; + + /* Parameters for Number of bands */ + port_descriptors[VOCODER_CTRL_BAND_COUNT] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[VOCODER_CTRL_BAND_COUNT] = + D_("Number of bands"); + port_range_hints[VOCODER_CTRL_BAND_COUNT].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_INTEGER; + port_range_hints[VOCODER_CTRL_BAND_COUNT].LowerBound = 1; + port_range_hints[VOCODER_CTRL_BAND_COUNT].UpperBound = MAX_BANDS; + + /* Parameters for Left/Right */ + port_descriptors[VOCODER_CTRL_PAN] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[VOCODER_CTRL_PAN] = + D_("Left/Right"); + port_range_hints[VOCODER_CTRL_PAN].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE | LADSPA_HINT_INTEGER; + port_range_hints[VOCODER_CTRL_PAN].LowerBound = -100; + port_range_hints[VOCODER_CTRL_PAN].UpperBound = +100; + + /* Parameters for Band 1 Level */ + port_descriptors[VOCODER_BAND1] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[VOCODER_BAND1] = + D_("Band 1 Level"); + port_range_hints[VOCODER_BAND1].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; + port_range_hints[VOCODER_BAND1].LowerBound = 0; + port_range_hints[VOCODER_BAND1].UpperBound = 1; + + /* Parameters for Band 2 Level */ + port_descriptors[VOCODER_BAND2] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[VOCODER_BAND2] = + D_("Band 2 Level"); + port_range_hints[VOCODER_BAND2].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; + port_range_hints[VOCODER_BAND2].LowerBound = 0; + port_range_hints[VOCODER_BAND2].UpperBound = 1; + + /* Parameters for Band 3 Level */ + port_descriptors[VOCODER_BAND3] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[VOCODER_BAND3] = + D_("Band 3 Level"); + port_range_hints[VOCODER_BAND3].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; + port_range_hints[VOCODER_BAND3].LowerBound = 0; + port_range_hints[VOCODER_BAND3].UpperBound = 1; + + /* Parameters for Band 4 Level */ + port_descriptors[VOCODER_BAND4] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[VOCODER_BAND4] = + D_("Band 4 Level"); + port_range_hints[VOCODER_BAND4].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; + port_range_hints[VOCODER_BAND4].LowerBound = 0; + port_range_hints[VOCODER_BAND4].UpperBound = 1; + + /* Parameters for Band 5 Level */ + port_descriptors[VOCODER_BAND5] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[VOCODER_BAND5] = + D_("Band 5 Level"); + port_range_hints[VOCODER_BAND5].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; + port_range_hints[VOCODER_BAND5].LowerBound = 0; + port_range_hints[VOCODER_BAND5].UpperBound = 1; + + /* Parameters for Band 6 Level */ + port_descriptors[VOCODER_BAND6] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[VOCODER_BAND6] = + D_("Band 6 Level"); + port_range_hints[VOCODER_BAND6].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; + port_range_hints[VOCODER_BAND6].LowerBound = 0; + port_range_hints[VOCODER_BAND6].UpperBound = 1; + + /* Parameters for Band 7 Level */ + port_descriptors[VOCODER_BAND7] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[VOCODER_BAND7] = + D_("Band 7 Level"); + port_range_hints[VOCODER_BAND7].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; + port_range_hints[VOCODER_BAND7].LowerBound = 0; + port_range_hints[VOCODER_BAND7].UpperBound = 1; + + /* Parameters for Band 8 Level */ + port_descriptors[VOCODER_BAND8] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[VOCODER_BAND8] = + D_("Band 8 Level"); + port_range_hints[VOCODER_BAND8].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; + port_range_hints[VOCODER_BAND8].LowerBound = 0; + port_range_hints[VOCODER_BAND8].UpperBound = 1; + + /* Parameters for Band 9 Level */ + port_descriptors[VOCODER_BAND9] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[VOCODER_BAND9] = + D_("Band 9 Level"); + port_range_hints[VOCODER_BAND9].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; + port_range_hints[VOCODER_BAND9].LowerBound = 0; + port_range_hints[VOCODER_BAND9].UpperBound = 1; + + /* Parameters for Band 10 Level */ + port_descriptors[VOCODER_BAND10] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[VOCODER_BAND10] = + D_("Band 10 Level"); + port_range_hints[VOCODER_BAND10].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; + port_range_hints[VOCODER_BAND10].LowerBound = 0; + port_range_hints[VOCODER_BAND10].UpperBound = 1; + + /* Parameters for Band 11 Level */ + port_descriptors[VOCODER_BAND11] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[VOCODER_BAND11] = + D_("Band 11 Level"); + port_range_hints[VOCODER_BAND11].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; + port_range_hints[VOCODER_BAND11].LowerBound = 0; + port_range_hints[VOCODER_BAND11].UpperBound = 1; + + /* Parameters for Band 12 Level */ + port_descriptors[VOCODER_BAND12] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[VOCODER_BAND12] = + D_("Band 12 Level"); + port_range_hints[VOCODER_BAND12].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; + port_range_hints[VOCODER_BAND12].LowerBound = 0; + port_range_hints[VOCODER_BAND12].UpperBound = 1; + + /* Parameters for Band 13 Level */ + port_descriptors[VOCODER_BAND13] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[VOCODER_BAND13] = + D_("Band 13 Level"); + port_range_hints[VOCODER_BAND13].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; + port_range_hints[VOCODER_BAND13].LowerBound = 0; + port_range_hints[VOCODER_BAND13].UpperBound = 1; + + /* Parameters for Band 14 Level */ + port_descriptors[VOCODER_BAND14] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[VOCODER_BAND14] = + D_("Band 14 Level"); + port_range_hints[VOCODER_BAND14].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; + port_range_hints[VOCODER_BAND14].LowerBound = 0; + port_range_hints[VOCODER_BAND14].UpperBound = 1; + + /* Parameters for Band 15 Level */ + port_descriptors[VOCODER_BAND15] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[VOCODER_BAND15] = + D_("Band 15 Level"); + port_range_hints[VOCODER_BAND15].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; + port_range_hints[VOCODER_BAND15].LowerBound = 0; + port_range_hints[VOCODER_BAND15].UpperBound = 1; + + /* Parameters for Band 16 Level */ + port_descriptors[VOCODER_BAND16] = + LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL; + port_names[VOCODER_BAND16] = + D_("Band 16 Level"); + port_range_hints[VOCODER_BAND16].HintDescriptor = + LADSPA_HINT_BOUNDED_BELOW | LADSPA_HINT_BOUNDED_ABOVE; + port_range_hints[VOCODER_BAND16].LowerBound = 0; + port_range_hints[VOCODER_BAND16].UpperBound = 1; + + vocoderDescriptor->activate = activateVocoder; + vocoderDescriptor->cleanup = cleanupVocoder; + vocoderDescriptor->connect_port = connectPortVocoder; + vocoderDescriptor->deactivate = NULL; + vocoderDescriptor->instantiate = instantiateVocoder; + vocoderDescriptor->run = runVocoder; + vocoderDescriptor->run_adding = runAddingVocoder; + vocoderDescriptor->set_run_adding_gain = setRunAddingGainVocoder; + } } -/*****************************************************************************/ +static void __attribute__((destructor)) swh_fini() { + if (vocoderDescriptor) { + free((LADSPA_PortDescriptor *)vocoderDescriptor->PortDescriptors); + free((char **)vocoderDescriptor->PortNames); + free((LADSPA_PortRangeHint *)vocoderDescriptor->PortRangeHints); + free(vocoderDescriptor); + } + vocoderDescriptor = NULL; -/* EOF */ +} diff --git a/plugins/LadspaEffect/swh/vynil_1905.c b/plugins/LadspaEffect/swh/vynil_1905.c index c6aa448b09b..e7640df315b 100644 --- a/plugins/LadspaEffect/swh/vynil_1905.c +++ b/plugins/LadspaEffect/swh/vynil_1905.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -211,7 +211,7 @@ static void connectPortVynil( static LADSPA_Handle instantiateVynil( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - Vynil *plugin_data = (Vynil *)malloc(sizeof(Vynil)); + Vynil *plugin_data = (Vynil *)calloc(1, sizeof(Vynil)); LADSPA_Data *buffer_m = NULL; unsigned int buffer_mask; unsigned int buffer_pos; @@ -580,14 +580,13 @@ static void runAddingVynil(LADSPA_Handle instance, unsigned long sample_count) { plugin_data->phi = phi; } -void __attribute__((constructor)) swh_init() { +static 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) @@ -713,12 +712,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (vynilDescriptor) { free((LADSPA_PortDescriptor *)vynilDescriptor->PortDescriptors); free((char **)vynilDescriptor->PortNames); free((LADSPA_PortRangeHint *)vynilDescriptor->PortRangeHints); free(vynilDescriptor); } + vynilDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/wave_terrain_1412.c b/plugins/LadspaEffect/swh/wave_terrain_1412.c index bb77bd8254e..ab2698d739b 100644 --- a/plugins/LadspaEffect/swh/wave_terrain_1412.c +++ b/plugins/LadspaEffect/swh/wave_terrain_1412.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -83,7 +83,7 @@ static void connectPortWaveTerrain( static LADSPA_Handle instantiateWaveTerrain( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - WaveTerrain *plugin_data = (WaveTerrain *)malloc(sizeof(WaveTerrain)); + WaveTerrain *plugin_data = (WaveTerrain *)calloc(1, sizeof(WaveTerrain)); plugin_data->run_adding_gain = 1.0f; return (LADSPA_Handle)plugin_data; @@ -155,14 +155,13 @@ static void runAddingWaveTerrain(LADSPA_Handle instance, unsigned long sample_co } } -void __attribute__((constructor)) swh_init() { +static 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) @@ -231,12 +230,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (waveTerrainDescriptor) { free((LADSPA_PortDescriptor *)waveTerrainDescriptor->PortDescriptors); free((char **)waveTerrainDescriptor->PortNames); free((LADSPA_PortRangeHint *)waveTerrainDescriptor->PortRangeHints); free(waveTerrainDescriptor); } + waveTerrainDescriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/xfade_1915.c b/plugins/LadspaEffect/swh/xfade_1915.c index 3a4ca234583..dcaa269668a 100644 --- a/plugins/LadspaEffect/swh/xfade_1915.c +++ b/plugins/LadspaEffect/swh/xfade_1915.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -132,7 +132,7 @@ static void connectPortXfade( static LADSPA_Handle instantiateXfade( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - Xfade *plugin_data = (Xfade *)malloc(sizeof(Xfade)); + Xfade *plugin_data = (Xfade *)calloc(1, sizeof(Xfade)); plugin_data->run_adding_gain = 1.0f; return (LADSPA_Handle)plugin_data; @@ -273,7 +273,7 @@ static void connectPortXfade4( static LADSPA_Handle instantiateXfade4( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - Xfade4 *plugin_data = (Xfade4 *)malloc(sizeof(Xfade4)); + Xfade4 *plugin_data = (Xfade4 *)calloc(1, sizeof(Xfade4)); plugin_data->run_adding_gain = 1.0f; return (LADSPA_Handle)plugin_data; @@ -385,14 +385,13 @@ static void runAddingXfade4(LADSPA_Handle instance, unsigned long sample_count) } } -void __attribute__((constructor)) swh_init() { +static 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) @@ -598,18 +597,20 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (xfadeDescriptor) { free((LADSPA_PortDescriptor *)xfadeDescriptor->PortDescriptors); free((char **)xfadeDescriptor->PortNames); free((LADSPA_PortRangeHint *)xfadeDescriptor->PortRangeHints); free(xfadeDescriptor); } + xfadeDescriptor = NULL; if (xfade4Descriptor) { free((LADSPA_PortDescriptor *)xfade4Descriptor->PortDescriptors); free((char **)xfade4Descriptor->PortNames); free((LADSPA_PortRangeHint *)xfade4Descriptor->PortRangeHints); free(xfade4Descriptor); } + xfade4Descriptor = NULL; } diff --git a/plugins/LadspaEffect/swh/zm1_1428.c b/plugins/LadspaEffect/swh/zm1_1428.c index baf063bfc04..529472d5eab 100644 --- a/plugins/LadspaEffect/swh/zm1_1428.c +++ b/plugins/LadspaEffect/swh/zm1_1428.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void __attribute__((constructor)) swh_init(); // forward declaration +static void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -88,7 +88,7 @@ static void connectPortZm1( static LADSPA_Handle instantiateZm1( const LADSPA_Descriptor *descriptor, unsigned long s_rate) { - Zm1 *plugin_data = (Zm1 *)malloc(sizeof(Zm1)); + Zm1 *plugin_data = (Zm1 *)calloc(1, sizeof(Zm1)); LADSPA_Data xm1; #line 17 "zm1_1428.xml" @@ -163,14 +163,13 @@ static void runAddingZm1(LADSPA_Handle instance, unsigned long sample_count) { plugin_data->xm1 = xm1; } -void __attribute__((constructor)) swh_init() { +static 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) @@ -232,12 +231,13 @@ void __attribute__((constructor)) swh_init() { } } -void __attribute__((destructor)) swh_fini() { +static void __attribute__((destructor)) swh_fini() { if (zm1Descriptor) { free((LADSPA_PortDescriptor *)zm1Descriptor->PortDescriptors); free((char **)zm1Descriptor->PortNames); free((LADSPA_PortRangeHint *)zm1Descriptor->PortRangeHints); free(zm1Descriptor); } + zm1Descriptor = NULL; } diff --git a/plugins/LadspaEffect/tap/CMakeLists.txt b/plugins/LadspaEffect/tap/CMakeLists.txt index 499dbf04653..309283da6c9 100644 --- a/plugins/LadspaEffect/tap/CMakeLists.txt +++ b/plugins/LadspaEffect/tap/CMakeLists.txt @@ -1,5 +1,6 @@ INCLUDE_DIRECTORIES("${CMAKE_SOURCE_DIR}/include") FILE(GLOB PLUGIN_SOURCES *.c) +LIST(SORT PLUGIN_SOURCES) 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) @@ -11,7 +12,7 @@ FOREACH(_item ${PLUGIN_SOURCES}) ENDIF(LMMS_BUILD_WIN32) IF(LMMS_BUILD_APPLE) SET_TARGET_PROPERTIES("${_plugin}" PROPERTIES LINK_FLAGS "${LINK_FLAGS} -Bsymbolic -lm") - ELSE(LMMS_BUILD_APPLE) + ELSEIF(NOT LMMS_BUILD_OPENBSD) SET_TARGET_PROPERTIES("${_plugin}" PROPERTIES LINK_FLAGS "${LINK_FLAGS} -shared -Wl,-no-undefined -Wl,-Bsymbolic -lm") ENDIF(LMMS_BUILD_APPLE) IF(LMMS_BUILD_LINUX OR LMMS_BUILD_HAIKU) diff --git a/plugins/MidiExport/CMakeLists.txt b/plugins/MidiExport/CMakeLists.txt index d5b08016921..96c8254bf18 100644 --- a/plugins/MidiExport/CMakeLists.txt +++ b/plugins/MidiExport/CMakeLists.txt @@ -3,5 +3,9 @@ INCLUDE(BuildPlugin) # Enable C++11 ADD_DEFINITIONS(-std=c++0x) +IF(LMMS_BUILD_APPLE) + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++") +ENDIF() + BUILD_PLUGIN(midiexport MidiExport.cpp MidiExport.h MidiFile.hpp MOCFILES MidiExport.h) diff --git a/plugins/MultitapEcho/MultitapEchoControlDialog.cpp b/plugins/MultitapEcho/MultitapEchoControlDialog.cpp index 5ff5fa90031..df20670ab8e 100644 --- a/plugins/MultitapEcho/MultitapEchoControlDialog.cpp +++ b/plugins/MultitapEcho/MultitapEchoControlDialog.cpp @@ -62,12 +62,12 @@ MultitapEchoControlDialog::MultitapEchoControlDialog( MultitapEchoControls * con ampGraph->setAutoFillBackground( true ); ampGraph->setPalette( pal ); - ampGraph->setGraphColor( QColor( 48, 255, 117 ) ); + ampGraph->setGraphColor( QColor( 11, 213, 86) ); ampGraph -> setMaximumSize( 204, 105 ); lpGraph->setAutoFillBackground( true ); lpGraph->setPalette( pal ); - lpGraph->setGraphColor( QColor( 255, 48, 117 ) ); + lpGraph->setGraphColor( QColor( 0, 200, 187) ); lpGraph -> setMaximumSize( 204, 105 ); // steps spinbox diff --git a/plugins/MultitapEcho/artwork.png b/plugins/MultitapEcho/artwork.png index af74d65bf7b..debe86cce33 100644 Binary files a/plugins/MultitapEcho/artwork.png and b/plugins/MultitapEcho/artwork.png differ diff --git a/plugins/MultitapEcho/graph_bg.png b/plugins/MultitapEcho/graph_bg.png index fee7226408f..7ff0054d043 100644 Binary files a/plugins/MultitapEcho/graph_bg.png and b/plugins/MultitapEcho/graph_bg.png differ diff --git a/plugins/MultitapEcho/logo.png b/plugins/MultitapEcho/logo.png new file mode 100644 index 00000000000..9340da708dd Binary files /dev/null and b/plugins/MultitapEcho/logo.png differ diff --git a/plugins/SpectrumAnalyzer/SpectrumAnalyzerControlDialog.cpp b/plugins/SpectrumAnalyzer/SpectrumAnalyzerControlDialog.cpp index d8b096a3e17..bbcfe5cd699 100644 --- a/plugins/SpectrumAnalyzer/SpectrumAnalyzerControlDialog.cpp +++ b/plugins/SpectrumAnalyzer/SpectrumAnalyzerControlDialog.cpp @@ -152,18 +152,18 @@ SpectrumAnalyzerControlDialog::SpectrumAnalyzerControlDialog( SpectrumAnalyzerCo setAutoFillBackground( true ); QPalette pal; pal.setBrush( backgroundRole(), PLUGIN_NAME::getIconPixmap( "background" ) ); - setFixedSize( 280, 243 ); + setFixedSize( 293, 205 ); setPalette( pal ); /* QVBoxLayout * l = new QVBoxLayout( this );*/ SpectrumView* v = new SpectrumView( controls->m_effect, this ); - v->move( 27, 30 ); + v->move( 34, 10 ); LedCheckBox * lin_spec = new LedCheckBox( tr( "Linear spectrum" ), this ); - lin_spec->move( 24, 204 ); + lin_spec->move( 32, 182 ); lin_spec->setModel( &controls->m_linearSpec ); LedCheckBox * lin_y = new LedCheckBox( tr( "Linear Y axis" ), this ); - lin_y->move( 24, 220 ); + lin_y->move( 137, 182 ); lin_y->setModel( &controls->m_linearYAxis ); connect( &controls->m_linearSpec, SIGNAL( dataChanged() ), this, SLOT( update() ) ); @@ -181,13 +181,12 @@ void SpectrumAnalyzerControlDialog::paintEvent( QPaintEvent * ) if( !m_controls->m_linearSpec.value() ) { - p.drawPixmap( 25, 183, m_logXAxis ); + p.drawPixmap( 33, 165, m_logXAxis ); } if( !m_controls->m_linearYAxis.value() ) { - p.drawPixmap( 3, 47, m_logYAxis); + p.drawPixmap( 10, 29, m_logYAxis); } } - diff --git a/plugins/SpectrumAnalyzer/background.png b/plugins/SpectrumAnalyzer/background.png index 548b98a8c5a..e375f7d3403 100644 Binary files a/plugins/SpectrumAnalyzer/background.png and b/plugins/SpectrumAnalyzer/background.png differ diff --git a/plugins/SpectrumAnalyzer/logo.png b/plugins/SpectrumAnalyzer/logo.png index 89e9f368011..9340da708dd 100644 Binary files a/plugins/SpectrumAnalyzer/logo.png and b/plugins/SpectrumAnalyzer/logo.png differ diff --git a/plugins/SpectrumAnalyzer/spectrum_background.png b/plugins/SpectrumAnalyzer/spectrum_background.png index 573954332e9..b65491bc39a 100644 Binary files a/plugins/SpectrumAnalyzer/spectrum_background.png and b/plugins/SpectrumAnalyzer/spectrum_background.png differ diff --git a/plugins/SpectrumAnalyzer/spectrum_background_plain.png b/plugins/SpectrumAnalyzer/spectrum_background_plain.png index 7632dd50063..ba9bcd1c89d 100644 Binary files a/plugins/SpectrumAnalyzer/spectrum_background_plain.png and b/plugins/SpectrumAnalyzer/spectrum_background_plain.png differ diff --git a/plugins/VstEffect/CMakeLists.txt b/plugins/VstEffect/CMakeLists.txt index b842e194c36..223963fc3ad 100644 --- a/plugins/VstEffect/CMakeLists.txt +++ b/plugins/VstEffect/CMakeLists.txt @@ -1,14 +1,26 @@ IF(LMMS_SUPPORT_VST) INCLUDE(BuildPlugin) INCLUDE_DIRECTORIES("${CMAKE_CURRENT_SOURCE_DIR}/../vst_base") -LINK_DIRECTORIES("${CMAKE_CURRENT_BINARY_DIR}/../vst_base") -LINK_LIBRARIES(vstbase) +LINK_DIRECTORIES("${CMAKE_CURRENT_BINARY_DIR}/..") +IF(LMMS_BUILD_LINUX) + LINK_LIBRARIES(-Wl,--enable-new-dtags) + SET(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE) + SET(CMAKE_INSTALL_RPATH "$ORIGIN") +ELSE() + SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${PLUGIN_DIR}") +ENDIF() # Enable C++11 ADD_DEFINITIONS(-std=c++0x) +IF(LMMS_BUILD_APPLE) + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++") +ENDIF() + 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") +TARGET_LINK_LIBRARIES(vsteffect -lvstbase) +ADD_DEPENDENCIES(vsteffect vstbase) ENDIF(LMMS_SUPPORT_VST) diff --git a/plugins/VstEffect/logo.png b/plugins/VstEffect/logo.png index 89e9f368011..ca98f15d442 100644 Binary files a/plugins/VstEffect/logo.png and b/plugins/VstEffect/logo.png differ diff --git a/plugins/audio_file_processor/audio_file_processor.cpp b/plugins/audio_file_processor/audio_file_processor.cpp index 7225a28deb9..5bd0edd847d 100644 --- a/plugins/audio_file_processor/audio_file_processor.cpp +++ b/plugins/audio_file_processor/audio_file_processor.cpp @@ -35,6 +35,7 @@ #include "Engine.h" #include "Song.h" #include "InstrumentTrack.h" +#include "Mixer.h" #include "NotePlayHandle.h" #include "interpolation.h" #include "gui_templates.h" diff --git a/plugins/bit_invader/bit_invader.cpp b/plugins/bit_invader/bit_invader.cpp index 668a761c89e..8178e5adda7 100644 --- a/plugins/bit_invader/bit_invader.cpp +++ b/plugins/bit_invader/bit_invader.cpp @@ -32,6 +32,7 @@ #include "InstrumentTrack.h" #include "Knob.h" #include "LedCheckbox.h" +#include "Mixer.h" #include "NotePlayHandle.h" #include "Oscillator.h" #include "PixmapButton.h" diff --git a/plugins/carlabase/carla.cpp b/plugins/carlabase/carla.cpp index ad1b683a69f..caba64297d0 100644 --- a/plugins/carlabase/carla.cpp +++ b/plugins/carlabase/carla.cpp @@ -32,6 +32,7 @@ #include "gui_templates.h" #include "InstrumentPlayHandle.h" #include "InstrumentTrack.h" +#include "Mixer.h" #include #include diff --git a/plugins/dynamics_processor/logo.png b/plugins/dynamics_processor/logo.png index 89e9f368011..9340da708dd 100644 Binary files a/plugins/dynamics_processor/logo.png and b/plugins/dynamics_processor/logo.png differ diff --git a/plugins/flp_import/CMakeLists.txt b/plugins/flp_import/CMakeLists.txt deleted file mode 100644 index 833bbd665fc..00000000000 --- a/plugins/flp_import/CMakeLists.txt +++ /dev/null @@ -1,13 +0,0 @@ -INCLUDE(BuildPlugin) - -INCLUDE_DIRECTORIES(unrtf) - -# Enable C++11 -ADD_DEFINITIONS(-std=c++0x) - -IF(LMMS_BUILD_APPLE) - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++") -ENDIF() - -BUILD_PLUGIN(flpimport FlpImport.cpp unrtf.cpp FlpImport.h) - diff --git a/plugins/flp_import/FlpImport.cpp b/plugins/flp_import/FlpImport.cpp deleted file mode 100644 index 406440ce24b..00000000000 --- a/plugins/flp_import/FlpImport.cpp +++ /dev/null @@ -1,1887 +0,0 @@ -/* - * 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 "BasicFilters.h" -#include "BBTrack.h" -#include "BBTrackContainer.h" -#include "ComboBox.h" -#include "ConfigManager.h" -#include "debug.h" -#include "Effect.h" -#include "Engine.h" -#include "FxMixer.h" -#include "FxMixerView.h" -#include "GroupBox.h" -#include "GuiApplication.h" -#include "Instrument.h" -#include "InstrumentTrack.h" -#include "EnvelopeAndLfoParameters.h" -#include "Knob.h" -#include "Oscillator.h" -#include "Pattern.h" -#include "Piano.h" -#include "PluginFactory.h" -#include "ProjectJournal.h" -#include "ProjectNotes.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(); - } - gui->fxMixerView()->refreshDisplay(); - - // set global parameters - Engine::getSong()->setMasterVolume( p.mainVolume ); - Engine::getSong()->setMasterPitch( p.mainPitch ); - Engine::getSong()->setTempo( p.tempo ); - - // set project notes - gui->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; - for (const Plugin::Descriptor* desc : pluginFactory->descriptors(Plugin::Effect)) - { - if( desc->subPluginFeatures ) - { - desc->subPluginFeatures->listSubPluginKeys( desc, effKeys ); - } - else - { - effKeys << EffectKey( desc, desc->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 ) ) ); -} - -} - diff --git a/plugins/flp_import/FlpImport.h b/plugins/flp_import/FlpImport.h deleted file mode 100644 index 18ba3e251db..00000000000 --- a/plugins/flp_import/FlpImport.h +++ /dev/null @@ -1,104 +0,0 @@ -/* - * 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 diff --git a/plugins/flp_import/unrtf/attr.c b/plugins/flp_import/unrtf/attr.c deleted file mode 100644 index b127b429dad..00000000000 --- a/plugins/flp_import/unrtf/attr.c +++ /dev/null @@ -1,677 +0,0 @@ -/*============================================================================= - 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--; - } -} - diff --git a/plugins/flp_import/unrtf/attr.h b/plugins/flp_import/unrtf/attr.h deleted file mode 100644 index 5ab23ef70df..00000000000 --- a/plugins/flp_import/unrtf/attr.h +++ /dev/null @@ -1,104 +0,0 @@ -/*============================================================================= - 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 diff --git a/plugins/flp_import/unrtf/convert.c b/plugins/flp_import/unrtf/convert.c deleted file mode 100644 index e56598a600a..00000000000 --- a/plugins/flp_import/unrtf/convert.c +++ /dev/null @@ -1,3684 +0,0 @@ - -/*=========================================================================== - 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; -} diff --git a/plugins/flp_import/unrtf/convert.h b/plugins/flp_import/unrtf/convert.h deleted file mode 100644 index 497a2188d41..00000000000 --- a/plugins/flp_import/unrtf/convert.h +++ /dev/null @@ -1,60 +0,0 @@ - -/*=========================================================================== - 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 - diff --git a/plugins/flp_import/unrtf/defs.h b/plugins/flp_import/unrtf/defs.h deleted file mode 100644 index b5bc459aaf3..00000000000 --- a/plugins/flp_import/unrtf/defs.h +++ /dev/null @@ -1,78 +0,0 @@ - -/*============================================================================= - 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" - diff --git a/plugins/flp_import/unrtf/error.c b/plugins/flp_import/unrtf/error.c deleted file mode 100644 index 5d8b1792c73..00000000000 --- a/plugins/flp_import/unrtf/error.c +++ /dev/null @@ -1,106 +0,0 @@ -/*============================================================================= - 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); -} diff --git a/plugins/flp_import/unrtf/error.h b/plugins/flp_import/unrtf/error.h deleted file mode 100644 index 43897927789..00000000000 --- a/plugins/flp_import/unrtf/error.h +++ /dev/null @@ -1,46 +0,0 @@ -/*============================================================================= - 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*); - - diff --git a/plugins/flp_import/unrtf/hash.c b/plugins/flp_import/unrtf/hash.c deleted file mode 100644 index b9dafd7f510..00000000000 --- a/plugins/flp_import/unrtf/hash.c +++ /dev/null @@ -1,218 +0,0 @@ -/*============================================================================= - 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; -} diff --git a/plugins/flp_import/unrtf/hash.h b/plugins/flp_import/unrtf/hash.h deleted file mode 100644 index 7aea699d62c..00000000000 --- a/plugins/flp_import/unrtf/hash.h +++ /dev/null @@ -1,42 +0,0 @@ -/*============================================================================= - 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 ); - - diff --git a/plugins/flp_import/unrtf/html.c b/plugins/flp_import/unrtf/html.c deleted file mode 100644 index 32fa187edbc..00000000000 --- a/plugins/flp_import/unrtf/html.c +++ /dev/null @@ -1,1265 +0,0 @@ -/*============================================================================= - 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; -} diff --git a/plugins/flp_import/unrtf/html.h b/plugins/flp_import/unrtf/html.h deleted file mode 100644 index 4af30cdc641..00000000000 --- a/plugins/flp_import/unrtf/html.h +++ /dev/null @@ -1,43 +0,0 @@ -/*============================================================================= - 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 - diff --git a/plugins/flp_import/unrtf/main.h b/plugins/flp_import/unrtf/main.h deleted file mode 100644 index 446b1806c8c..00000000000 --- a/plugins/flp_import/unrtf/main.h +++ /dev/null @@ -1,46 +0,0 @@ -/*============================================================================= - 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; - - diff --git a/plugins/flp_import/unrtf/output.c b/plugins/flp_import/unrtf/output.c deleted file mode 100644 index 85a80d10ef2..00000000000 --- a/plugins/flp_import/unrtf/output.c +++ /dev/null @@ -1,478 +0,0 @@ -/*============================================================================= - 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"); - } - } -} - - diff --git a/plugins/flp_import/unrtf/output.h b/plugins/flp_import/unrtf/output.h deleted file mode 100644 index 10ef2a3bfcd..00000000000 --- a/plugins/flp_import/unrtf/output.h +++ /dev/null @@ -1,312 +0,0 @@ -/*============================================================================= - 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 - diff --git a/plugins/flp_import/unrtf/parse.c b/plugins/flp_import/unrtf/parse.c deleted file mode 100644 index 353ad41de49..00000000000 --- a/plugins/flp_import/unrtf/parse.c +++ /dev/null @@ -1,472 +0,0 @@ -/*============================================================================= - 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); -} diff --git a/plugins/flp_import/unrtf/parse.h b/plugins/flp_import/unrtf/parse.h deleted file mode 100644 index b8f847679bd..00000000000 --- a/plugins/flp_import/unrtf/parse.h +++ /dev/null @@ -1,45 +0,0 @@ -/*============================================================================= - 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*); - - - diff --git a/plugins/flp_import/unrtf/ur_malloc.c b/plugins/flp_import/unrtf/ur_malloc.c deleted file mode 100644 index a72ade7338a..00000000000 --- a/plugins/flp_import/unrtf/ur_malloc.c +++ /dev/null @@ -1,133 +0,0 @@ -/*============================================================================= - 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; -} - diff --git a/plugins/flp_import/unrtf/ur_malloc.h b/plugins/flp_import/unrtf/ur_malloc.h deleted file mode 100644 index ac16123b47a..00000000000 --- a/plugins/flp_import/unrtf/ur_malloc.h +++ /dev/null @@ -1,39 +0,0 @@ -/*============================================================================= - 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*); - diff --git a/plugins/flp_import/unrtf/util.c b/plugins/flp_import/unrtf/util.c deleted file mode 100644 index 474f55a2275..00000000000 --- a/plugins/flp_import/unrtf/util.c +++ /dev/null @@ -1,72 +0,0 @@ -/*============================================================================= - 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; -} - diff --git a/plugins/flp_import/unrtf/util.h b/plugins/flp_import/unrtf/util.h deleted file mode 100644 index 890d66babe9..00000000000 --- a/plugins/flp_import/unrtf/util.h +++ /dev/null @@ -1,34 +0,0 @@ -/*============================================================================= - 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 *); diff --git a/plugins/flp_import/unrtf/word.c b/plugins/flp_import/unrtf/word.c deleted file mode 100644 index b639d94f599..00000000000 --- a/plugins/flp_import/unrtf/word.c +++ /dev/null @@ -1,217 +0,0 @@ -/*============================================================================= - 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; -} diff --git a/plugins/flp_import/unrtf/word.h b/plugins/flp_import/unrtf/word.h deleted file mode 100644 index 959b3b2ac0f..00000000000 --- a/plugins/flp_import/unrtf/word.h +++ /dev/null @@ -1,53 +0,0 @@ -/*============================================================================= - 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 diff --git a/plugins/kicker/kicker.cpp b/plugins/kicker/kicker.cpp index bc27340399f..c47f63b9ecb 100644 --- a/plugins/kicker/kicker.cpp +++ b/plugins/kicker/kicker.cpp @@ -31,6 +31,7 @@ #include "Engine.h" #include "InstrumentTrack.h" #include "Knob.h" +#include "Mixer.h" #include "NotePlayHandle.h" #include "KickerOsc.h" diff --git a/plugins/ladspa_browser/logo.png b/plugins/ladspa_browser/logo.png index 89e9f368011..24d9135ffff 100644 Binary files a/plugins/ladspa_browser/logo.png and b/plugins/ladspa_browser/logo.png differ diff --git a/plugins/lb302/CMakeLists.txt b/plugins/lb302/CMakeLists.txt index ba2edbd4baa..384f4ea30df 100644 --- a/plugins/lb302/CMakeLists.txt +++ b/plugins/lb302/CMakeLists.txt @@ -3,4 +3,8 @@ INCLUDE(BuildPlugin) # Enable C++11 ADD_DEFINITIONS(-std=c++0x) +IF(LMMS_BUILD_APPLE) + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++") +ENDIF() + BUILD_PLUGIN(lb302 lb302.cpp lb302.h MOCFILES lb302.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png") diff --git a/plugins/lb302/lb302.h b/plugins/lb302/lb302.h index 03cff135d1c..8b78bf11027 100644 --- a/plugins/lb302/lb302.h +++ b/plugins/lb302/lb302.h @@ -37,7 +37,6 @@ #include "InstrumentView.h" #include "LedCheckbox.h" #include "Knob.h" -#include "Mixer.h" #include "NotePlayHandle.h" #include diff --git a/plugins/nes/Nes.cpp b/plugins/nes/Nes.cpp index b23a03b9405..72587ae7e39 100644 --- a/plugins/nes/Nes.cpp +++ b/plugins/nes/Nes.cpp @@ -33,6 +33,7 @@ #include "Song.h" #include "lmms_math.h" #include "interpolation.h" +#include "Mixer.h" #include "Oscillator.h" #include "embed.cpp" diff --git a/plugins/opl2/CMakeLists.txt b/plugins/opl2/CMakeLists.txt index 785c3676ed4..9e9bd91ca57 100644 --- a/plugins/opl2/CMakeLists.txt +++ b/plugins/opl2/CMakeLists.txt @@ -3,4 +3,8 @@ INCLUDE(BuildPlugin) # Enable C++11 SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x") +IF(LMMS_BUILD_APPLE) + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++") +ENDIF() + 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") diff --git a/plugins/opl2/fmopl.c b/plugins/opl2/fmopl.c index 9b411a2dd9f..3dd4a51a110 100644 --- a/plugins/opl2/fmopl.c +++ b/plugins/opl2/fmopl.c @@ -653,21 +653,21 @@ static void init_timetables( FM_OPL *OPL , int ARRATE , int DRRATE ) { 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]; + 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, @@ -675,7 +675,6 @@ static void init_timetables( FM_OPL *OPL , int ARRATE , int DRRATE ) { ((double)(EG_ENT<DR_TABLE[i]) * (1000.0 / OPL->rate) )); } #endif - } } /* ---------- generic table initialize ---------- */ diff --git a/plugins/opl2/opl2instrument.cpp b/plugins/opl2/opl2instrument.cpp index 54493bf92e8..3afcfb24082 100644 --- a/plugins/opl2/opl2instrument.cpp +++ b/plugins/opl2/opl2instrument.cpp @@ -40,6 +40,7 @@ #include "Engine.h" #include "InstrumentPlayHandle.h" #include "InstrumentTrack.h" +#include "Mixer.h" #include #include diff --git a/plugins/organic/organic.cpp b/plugins/organic/organic.cpp index dcf99b2f51f..13e42f977c6 100644 --- a/plugins/organic/organic.cpp +++ b/plugins/organic/organic.cpp @@ -33,6 +33,7 @@ #include "Engine.h" #include "InstrumentTrack.h" #include "Knob.h" +#include "Mixer.h" #include "NotePlayHandle.h" #include "Oscillator.h" #include "PixmapButton.h" @@ -81,7 +82,7 @@ organicInstrument::organicInstrument( InstrumentTrack * _instrument_track ) : 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_numOscillators = NUM_OSCILLATORS; m_osc = new OscillatorObject*[ m_numOscillators ]; for (int i=0; i < m_numOscillators; i++) @@ -235,15 +236,14 @@ void organicInstrument::playNote( NotePlayHandle * _n, Oscillator * oscs_l[m_numOscillators]; Oscillator * oscs_r[m_numOscillators]; + _n->m_pluginData = new oscPtr; + 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 ); - - + static_cast( _n->m_pluginData )->phaseOffsetLeft[i] + = rand() / ( RAND_MAX + 1.0f ); + static_cast( _n->m_pluginData )->phaseOffsetRight[i] + = rand() / ( RAND_MAX + 1.0f ); // initialise ocillators @@ -255,7 +255,7 @@ void organicInstrument::playNote( NotePlayHandle * _n, &m_modulationAlgo, _n->frequency(), m_osc[i]->m_detuningLeft, - m_osc[i]->m_phaseOffsetLeft, + static_cast( _n->m_pluginData )->phaseOffsetLeft[i], m_osc[i]->m_volumeLeft ); // create right oscillator oscs_r[i] = new Oscillator( @@ -263,7 +263,7 @@ void organicInstrument::playNote( NotePlayHandle * _n, &m_modulationAlgo, _n->frequency(), m_osc[i]->m_detuningRight, - m_osc[i]->m_phaseOffsetRight, + static_cast( _n->m_pluginData )->phaseOffsetRight[i], m_osc[i]->m_volumeRight ); } else @@ -274,7 +274,7 @@ void organicInstrument::playNote( NotePlayHandle * _n, &m_modulationAlgo, _n->frequency(), m_osc[i]->m_detuningLeft, - m_osc[i]->m_phaseOffsetLeft, + static_cast( _n->m_pluginData )->phaseOffsetLeft[i], m_osc[i]->m_volumeLeft, oscs_l[i + 1] ); // create right oscillator @@ -283,7 +283,7 @@ void organicInstrument::playNote( NotePlayHandle * _n, &m_modulationAlgo, _n->frequency(), m_osc[i]->m_detuningRight, - m_osc[i]->m_phaseOffsetRight, + static_cast( _n->m_pluginData )->phaseOffsetRight[i], m_osc[i]->m_volumeRight, oscs_r[i + 1] ); } @@ -291,7 +291,6 @@ void organicInstrument::playNote( NotePlayHandle * _n, } - _n->m_pluginData = new oscPtr; static_cast( _n->m_pluginData )->oscLeft = oscs_l[0]; static_cast( _n->m_pluginData )->oscRight = oscs_r[0]; } @@ -330,6 +329,7 @@ void organicInstrument::deleteNotePluginData( NotePlayHandle * _n ) _n->m_pluginData )->oscLeft ); delete static_cast( static_cast( _n->m_pluginData )->oscRight ); + delete static_cast( _n->m_pluginData ); } diff --git a/plugins/organic/organic.h b/plugins/organic/organic.h index a5ef5451eb4..6b368f01d8c 100644 --- a/plugins/organic/organic.h +++ b/plugins/organic/organic.h @@ -39,6 +39,7 @@ class Knob; class NotePlayHandle; class PixmapButton; +const int NUM_OSCILLATORS = 8; const int NUM_HARMONICS = 18; const QString HARMONIC_NAMES[NUM_HARMONICS] = { "Octave below", @@ -153,6 +154,8 @@ public slots: MM_OPERATORS Oscillator * oscLeft; Oscillator * oscRight; + float phaseOffsetLeft[NUM_OSCILLATORS]; + float phaseOffsetRight[NUM_OSCILLATORS]; } ; const IntModel m_modulationAlgo; diff --git a/plugins/papu/papu_instrument.cpp b/plugins/papu/papu_instrument.cpp index 8e011816444..acf2042c520 100644 --- a/plugins/papu/papu_instrument.cpp +++ b/plugins/papu/papu_instrument.cpp @@ -32,6 +32,7 @@ #include "base64.h" #include "InstrumentTrack.h" #include "Knob.h" +#include "Mixer.h" #include "NotePlayHandle.h" #include "PixmapButton.h" #include "ToolTip.h" diff --git a/plugins/patman/patman.cpp b/plugins/patman/patman.cpp index b488ed72e7a..b6c7b587054 100644 --- a/plugins/patman/patman.cpp +++ b/plugins/patman/patman.cpp @@ -156,6 +156,10 @@ void patmanInstrument::playNote( NotePlayHandle * _n, instrumentTrack()->processAudioBuffer( _working_buffer, frames + offset, _n ); } + else + { + memset( _working_buffer, 0, ( frames + offset ) * sizeof( sampleFrame ) ); + } } diff --git a/plugins/peak_controller_effect/artwork.png b/plugins/peak_controller_effect/artwork.png index 66fe2c95226..5977f83cc27 100644 Binary files a/plugins/peak_controller_effect/artwork.png and b/plugins/peak_controller_effect/artwork.png differ diff --git a/plugins/peak_controller_effect/logo.png b/plugins/peak_controller_effect/logo.png index 89e9f368011..9340da708dd 100644 Binary files a/plugins/peak_controller_effect/logo.png and b/plugins/peak_controller_effect/logo.png differ diff --git a/plugins/peak_controller_effect/peak_controller_effect_control_dialog.cpp b/plugins/peak_controller_effect/peak_controller_effect_control_dialog.cpp index 7675da5d01d..ad0e6f4aabc 100644 --- a/plugins/peak_controller_effect/peak_controller_effect_control_dialog.cpp +++ b/plugins/peak_controller_effect/peak_controller_effect_control_dialog.cpp @@ -39,17 +39,13 @@ PeakControllerEffectControlDialog::PeakControllerEffectControlDialog( PeakControllerEffectControls * _controls ) : EffectControlDialog( _controls ) { + setWindowIcon( embed::getIconPixmap( "controller" ) ); setAutoFillBackground( true ); QPalette pal; - pal.setBrush( backgroundRole(), - PLUGIN_NAME::getIconPixmap( "artwork" ) ); + pal.setBrush( backgroundRole(), PLUGIN_NAME::getIconPixmap( "artwork" ) ); setPalette( pal ); + setFixedSize( 240, 80 ); - QVBoxLayout * tl = new QVBoxLayout( this ); - tl->setContentsMargins( 5, 30, 5, 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 ); @@ -76,32 +72,34 @@ PeakControllerEffectControlDialog::PeakControllerEffectControlDialog( m_decayKnob->setHintText( tr( "Release:" ) , "" ); m_tresholdKnob = new Knob( knobBright_26, this ); - m_tresholdKnob->setLabel( tr( "TRES" ) ); + m_tresholdKnob->setLabel( tr( "TRSH" ) ); m_tresholdKnob->setModel( &_controls->m_tresholdModel ); m_tresholdKnob->setHintText( tr( "Treshold:" ) , "" ); - l->addWidget( m_baseKnob ); - l->addWidget( m_amountKnob ); - l->addWidget( m_amountMultKnob ); - l->addWidget( m_attackKnob ); - l->addWidget( m_decayKnob ); - l->addWidget( m_tresholdKnob ); - 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 ); + QVBoxLayout * mainLayout = new QVBoxLayout(); + QHBoxLayout * knobLayout = new QHBoxLayout(); + QHBoxLayout * ledLayout = new QHBoxLayout(); + + knobLayout->addWidget( m_baseKnob ); + knobLayout->addWidget( m_amountKnob ); + knobLayout->addWidget( m_amountMultKnob ); + knobLayout->addWidget( m_attackKnob ); + knobLayout->addWidget( m_decayKnob ); + knobLayout->addWidget( m_tresholdKnob ); + + ledLayout->addWidget( m_muteLed ); + ledLayout->addWidget( m_absLed ); + + mainLayout->setContentsMargins( 3, 10, 0, 0 ); + mainLayout->addLayout( knobLayout ); + mainLayout->addLayout( ledLayout ); - setLayout( tl ); + setLayout( mainLayout ); } diff --git a/plugins/sf2_player/sf2_player.cpp b/plugins/sf2_player/sf2_player.cpp index 50a39c34952..097399c620d 100644 --- a/plugins/sf2_player/sf2_player.cpp +++ b/plugins/sf2_player/sf2_player.cpp @@ -33,8 +33,10 @@ #include "Engine.h" #include "InstrumentTrack.h" #include "InstrumentPlayHandle.h" +#include "Mixer.h" #include "NotePlayHandle.h" #include "Knob.h" +#include "SampleBuffer.h" #include "Song.h" #include "patches_dialog.h" @@ -574,16 +576,15 @@ void sf2Instrument::playNote( NotePlayHandle * _n, sampleFrame * ) m_playingNotes.append( _n ); m_playingNotesMutex.unlock(); } - else if( _n->isReleased() ) // note is released during this period + else if( _n->isReleased() && ! _n->instrumentTrack()->isSustainPedalPressed() ) // note is released during this period { SF2PluginData * pluginData = static_cast( _n->m_pluginData ); pluginData->offset = _n->framesBeforeRelease(); pluginData->isNew = false; - + m_playingNotesMutex.lock(); m_playingNotes.append( _n ); m_playingNotesMutex.unlock(); - } } diff --git a/plugins/sf2_player/sf2_player.h b/plugins/sf2_player/sf2_player.h index 2a6995c01d6..8996b3e14d4 100644 --- a/plugins/sf2_player/sf2_player.h +++ b/plugins/sf2_player/sf2_player.h @@ -28,6 +28,7 @@ #define SF2_PLAYER_H #include +#include #include "Instrument.h" #include "PixmapButton.h" @@ -36,7 +37,6 @@ #include "LcdSpinBox.h" #include "LedCheckbox.h" #include "fluidsynth.h" -#include "SampleBuffer.h" #include "MemoryManager.h" class sf2InstrumentView; diff --git a/plugins/sfxr/sfxr.cpp b/plugins/sfxr/sfxr.cpp index 6d9b8a45112..540987b8d28 100644 --- a/plugins/sfxr/sfxr.cpp +++ b/plugins/sfxr/sfxr.cpp @@ -49,6 +49,7 @@ float frnd(float range) #include "Song.h" #include "MidiEvent.h" #include "MidiTime.h" +#include "Mixer.h" #include "embed.cpp" diff --git a/plugins/sid/sid_instrument.cpp b/plugins/sid/sid_instrument.cpp index 03090e94d58..1a02dd9fb00 100644 --- a/plugins/sid/sid_instrument.cpp +++ b/plugins/sid/sid_instrument.cpp @@ -35,6 +35,7 @@ #include "Engine.h" #include "InstrumentTrack.h" #include "Knob.h" +#include "Mixer.h" #include "NotePlayHandle.h" #include "PixmapButton.h" #include "ToolTip.h" diff --git a/plugins/stereo_enhancer/logo.png b/plugins/stereo_enhancer/logo.png index 89e9f368011..9340da708dd 100644 Binary files a/plugins/stereo_enhancer/logo.png and b/plugins/stereo_enhancer/logo.png differ diff --git a/plugins/stereo_matrix/artwork.png b/plugins/stereo_matrix/artwork.png index 0add443fa80..f76567fd2c9 100644 Binary files a/plugins/stereo_matrix/artwork.png and b/plugins/stereo_matrix/artwork.png differ diff --git a/plugins/stereo_matrix/logo.png b/plugins/stereo_matrix/logo.png index 89e9f368011..9340da708dd 100644 Binary files a/plugins/stereo_matrix/logo.png and b/plugins/stereo_matrix/logo.png differ diff --git a/plugins/stereo_matrix/stereo_matrix.cpp b/plugins/stereo_matrix/stereo_matrix.cpp index db0f588a365..a8a8720bff5 100644 --- a/plugins/stereo_matrix/stereo_matrix.cpp +++ b/plugins/stereo_matrix/stereo_matrix.cpp @@ -34,7 +34,7 @@ extern "C" Plugin::Descriptor PLUGIN_EXPORT stereomatrix_plugin_descriptor = { STRINGIFY( PLUGIN_NAME ), - "Stereophonic Matrix", + "Stereo Matrix", QT_TRANSLATE_NOOP( "pluginBrowser", "Plugin for freely manipulating stereo output" ), "Paul Giblock ", @@ -121,4 +121,3 @@ Plugin * PLUGIN_EXPORT lmms_plugin_main( Model * _parent, void * _data ) } } - diff --git a/plugins/stereo_matrix/stereomatrix_control_dialog.cpp b/plugins/stereo_matrix/stereomatrix_control_dialog.cpp index 587787dc072..80987a316e0 100644 --- a/plugins/stereo_matrix/stereomatrix_control_dialog.cpp +++ b/plugins/stereo_matrix/stereomatrix_control_dialog.cpp @@ -38,7 +38,7 @@ stereoMatrixControlDialog::stereoMatrixControlDialog( EffectControlDialog( _controls ) { - setFixedSize( 105, 115); + setFixedSize( 160, 185 ); setAutoFillBackground( true ); QPalette pal; @@ -47,24 +47,23 @@ stereoMatrixControlDialog::stereoMatrixControlDialog( setPalette( pal ); - Knob * llKnob = new Knob( knobSmall_17, this ); + Knob * llKnob = new Knob( knobBright_26, this ); llKnob->setModel( &_controls->m_llModel ); llKnob->setHintText( tr( "Left to Left Vol:" ) , "" ); - llKnob->move( 40, 60 ); + llKnob->move( 10, 79 ); - Knob * lrKnob = new Knob( knobSmall_17, this ); + Knob * lrKnob = new Knob( knobBright_26, this ); lrKnob->setModel( &_controls->m_lrModel ); lrKnob->setHintText( tr( "Left to Right Vol:" ) , "" ); - lrKnob->move( 40+28, 60); + lrKnob->move( 48, 79 ); - Knob * rlKnob = new Knob( knobSmall_17, this ); + Knob * rlKnob = new Knob( knobBright_26, this ); rlKnob->setModel( &_controls->m_rlModel ); rlKnob->setHintText( tr( "Right to Left Vol:" ) , "" ); - rlKnob->move( 40, 60+28 ); + rlKnob->move( 85, 79 ); - Knob * rrKnob = new Knob( knobSmall_17, this ); + Knob * rrKnob = new Knob( knobBright_26, this ); rrKnob->setModel( &_controls->m_rrModel ); rrKnob->setHintText( tr( "Right to Right Vol:" ) , "" ); - rrKnob->move( 40+28, 60+28 ); + rrKnob->move( 123, 79 ); } - diff --git a/plugins/stereo_matrix/stereomatrix_controls.cpp b/plugins/stereo_matrix/stereomatrix_controls.cpp index 8a70e5aeaf4..10d41c9d2f4 100644 --- a/plugins/stereo_matrix/stereomatrix_controls.cpp +++ b/plugins/stereo_matrix/stereomatrix_controls.cpp @@ -37,6 +37,11 @@ stereoMatrixControls::stereoMatrixControls( stereoMatrixEffect * _eff ) : 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" ) ) { + m_llModel.setCenterValue( 0 ); + m_lrModel.setCenterValue( 0 ); + m_rlModel.setCenterValue( 0 ); + m_rrModel.setCenterValue( 0 ); + connect( &m_llModel, SIGNAL( dataChanged() ), this, SLOT( changeMatrix() ) ); connect( &m_lrModel, SIGNAL( dataChanged() ), @@ -76,8 +81,3 @@ void stereoMatrixControls::saveSettings( QDomDocument & _doc, m_rlModel.saveSettings( _doc, _this, "r-l" ); m_rrModel.saveSettings( _doc, _this, "r-r" ); } - - - - - diff --git a/plugins/stk/mallets/mallets.cpp b/plugins/stk/mallets/mallets.cpp index d99c36820c7..8819a1d5bb5 100644 --- a/plugins/stk/mallets/mallets.cpp +++ b/plugins/stk/mallets/mallets.cpp @@ -3,6 +3,7 @@ * * Copyright (c) 2006-2008 Danny McRae * Copyright (c) 2009-2015 Tobias Doerffel + * Copyright (c) 2016 Oskar Wallgren * * This file is part of LMMS - http://lmms.io * @@ -36,6 +37,7 @@ #include "gui_templates.h" #include "GuiApplication.h" #include "InstrumentTrack.h" +#include "Mixer.h" #include "embed.cpp" @@ -63,21 +65,24 @@ Plugin::Descriptor PLUGIN_EXPORT malletsstk_plugin_descriptor = 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_positionModel(64.0f, 0.0f, 64.0f, 0.1f, this, tr( "Position" )), + m_vibratoGainModel(0.0f, 0.0f, 128.0f, 0.1f, this, tr( "Vibrato Gain" )), + m_vibratoFreqModel(0.0f, 0.0f, 128.0f, 0.1f, this, tr( "Vibrato Freq" )), + m_stickModel(0.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_pressureModel(64.0f, 0.1f, 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" ) ), +// TODO: m_vibratoModel + m_velocityModel(64.0f, 0.1f, 128.0f, 0.1f, this, tr( "Speed" )), + m_strikeModel( true, this, tr( "Bowed" ) ), m_presetsModel(this), m_spreadModel(0, 0, 255, 1, this, tr( "Spread" )), + m_versionModel( MALLETS_PRESET_VERSION, 0, MALLETS_PRESET_VERSION, this, "" ), + m_isOldVersionModel( false, this, "" ), m_filesMissing( !QDir( ConfigManager::inst()->stkDir() ).exists() || !QFileInfo( ConfigManager::inst()->stkDir() + "/sinewave.raw" ).exists() ) { @@ -144,13 +149,15 @@ void malletsInstrument::saveSettings( QDomDocument & _doc, QDomElement & _this ) // BandedWG m_pressureModel.saveSettings( _doc, _this, "pressure" ); - m_motionModel.saveSettings( _doc, _this, "motion" ); - m_vibratoModel.saveSettings( _doc, _this, "vibrato" ); +// 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" ); + m_versionModel.saveSettings( _doc, _this, "version" ); + m_isOldVersionModel.saveSettings( _doc, _this, "oldversion" ); } @@ -158,6 +165,8 @@ void malletsInstrument::saveSettings( QDomDocument & _doc, QDomElement & _this ) void malletsInstrument::loadSettings( const QDomElement & _this ) { + m_versionModel.loadSettings( _this, "version" ); + // ModalBar m_hardnessModel.loadSettings( _this, "hardness" ); m_positionModel.loadSettings( _this, "position" ); @@ -174,13 +183,86 @@ void malletsInstrument::loadSettings( const QDomElement & _this ) // BandedWG m_pressureModel.loadSettings( _this, "pressure" ); - m_motionModel.loadSettings( _this, "motion" ); - m_vibratoModel.loadSettings( _this, "vibrato" ); +// 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" ); + m_isOldVersionModel.loadSettings( _this, "oldversion" ); + + // To maintain backward compatibility + if( !_this.hasAttribute( "version" ) ) + { + m_isOldVersionModel.setValue( true ); + m_vibratoGainModel.setValue( 0.0f ); + if( m_presetsModel.value() == 1 ) + { + /* Earlier mallets used the stk internal + default of 0.2. 0.2 * 128.0 = 25.6 */ + m_vibratoGainModel.setValue( 25.6f ); + } + if( m_presetsModel.value() != 1 ) + { + // Frequency actually worked for Vibraphone! + m_vibratoFreqModel.setValue( 0.0f ); + } + /* Modalbar preset values, see stk, ModalBar.cpp + void ModalBar :: setPreset( int preset ) + Stick Mix * 128.0 + m_positionModel values over 64 is formatted to the + new knob by 128 - x */ + + switch( m_presetsModel.value() ) + { + case 0: + m_hardnessModel.setValue( 55.0f ); + m_positionModel.setValue( 57.0f ); + m_stickModel.setValue( 12.0f ); + break; + case 1: + m_hardnessModel.setValue( 50.0f ); + m_positionModel.setValue( 55.0f );// 128 - 73! + m_stickModel.setValue( 10.0f ); + break; + case 2: + m_hardnessModel.setValue( 78.0f ); + m_positionModel.setValue( 46.0f ); + m_stickModel.setValue( 18.0f ); + break; + case 3: + m_hardnessModel.setValue( 59.0f ); + m_positionModel.setValue( 48.0f ); + m_stickModel.setValue( 6.0f ); + break; + case 4: + m_hardnessModel.setValue( 58.0f ); + m_positionModel.setValue( 32.0f ); + m_stickModel.setValue( 13.0f ); + break; + case 5: + m_hardnessModel.setValue( 40.0f ); + m_positionModel.setValue( 57.0f ); + m_stickModel.setValue( 14.0f ); + break; + case 6: + m_hardnessModel.setValue( 51.0f ); + m_positionModel.setValue( 38.0f ); + m_stickModel.setValue( 9.0f ); + break; + case 7: + m_hardnessModel.setValue( 58.0f ); + m_positionModel.setValue( 58.0f ); + m_stickModel.setValue( 9.0f ); + break; + case 8: + m_hardnessModel.setValue( 50.0f ); + m_positionModel.setValue( 55.0f );// 128 - 73! + m_stickModel.setValue( 10.0f ); + break; + } + } } @@ -207,7 +289,10 @@ void malletsInstrument::playNote( NotePlayHandle * _n, const float freq = _n->frequency(); if ( _n->totalFramesPlayed() == 0 || _n->m_pluginData == NULL ) { - const float vel = _n->getVolume() / 100.0f; + // If newer projects, adjust velocity to within stk's limits + float velocityAdjust = + m_isOldVersionModel.value() ? 100.0 : 200.0; + const float vel = _n->getVolume() / velocityAdjust; // critical section as STK is not thread-safe static QMutex m; @@ -216,10 +301,10 @@ void malletsInstrument::playNote( NotePlayHandle * _n, { _n->m_pluginData = new malletsSynth( freq, vel, - m_vibratoGainModel.value(), + m_stickModel.value(), m_hardnessModel.value(), m_positionModel.value(), - m_stickModel.value(), + m_vibratoGainModel.value(), m_vibratoFreqModel.value(), p, (uint8_t) m_spreadModel.value(), @@ -261,18 +346,19 @@ void malletsInstrument::playNote( NotePlayHandle * _n, ps->setFrequency( freq ); sample_t add_scale = 0.0f; - if( p == 10 ) + if( p == 10 && m_isOldVersionModel.value() == true ) { add_scale = static_cast( m_strikeModel.value() ) * freq * 2.5f; } + for( fpp_t frame = offset; frame < frames + offset; ++frame ) { - _working_buffer[frame][0] = ps->nextSampleLeft() * + _working_buffer[frame][0] = ps->nextSampleLeft() * ( m_scalers[m_presetsModel.value()] + add_scale ); - _working_buffer[frame][1] = ps->nextSampleRight() * + _working_buffer[frame][1] = ps->nextSampleRight() * ( m_scalers[m_presetsModel.value()] + add_scale ); } - + instrumentTrack()->processAudioBuffer( _working_buffer, frames + offset, _n ); } @@ -301,19 +387,18 @@ malletsInstrumentView::malletsInstrumentView( malletsInstrument * _instrument, { 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 ); - + + changePreset(); // Show widget + m_presetsCombo = new ComboBox( this, tr( "Instrument" ) ); m_presetsCombo->setGeometry( 140, 50, 99, 22 ); m_presetsCombo->setFont( pointSize<8>( m_presetsCombo->font() ) ); @@ -436,28 +521,28 @@ QWidget * malletsInstrumentView::setupBandedWGControls( QWidget * _parent ) QWidget * widget = new QWidget( _parent ); widget->setFixedSize( 250, 250 ); - m_strikeLED = new LedCheckBox( tr( "Bowed" ), widget ); - m_strikeLED->move( 138, 25 ); +/* 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 = new Knob( knobVintage_32, widget ); m_motionKnob->setLabel( tr( "Motion" ) ); m_motionKnob->move( 110, 90 ); - m_motionKnob->setHintText( tr( "Motion:" ), "" ); - + 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 = new Knob( knobVintage_32, widget, tr( "Vibrato" ) ); m_vibratoKnob->setLabel( tr( "Vibrato" ) ); m_vibratoKnob->move( 110, 140 ); - m_vibratoKnob->setHintText( tr( "Vibrato:" ), "" ); + m_vibratoKnob->setHintText( tr( "Vibrato:" ), "" );*/ return( widget ); } @@ -479,10 +564,10 @@ void malletsInstrumentView::modelChanged() 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_motionKnob->setModel( &inst->m_motionModel ); +// m_vibratoKnob->setModel( &inst->m_vibratoModel ); m_velocityKnob->setModel( &inst->m_velocityModel ); - m_strikeLED->setModel( &inst->m_strikeModel ); +// m_strikeLED->setModel( &inst->m_strikeModel ); m_presetsCombo->setModel( &inst->m_presetsModel ); m_spreadKnob->setModel( &inst->m_spreadModel ); } @@ -493,8 +578,9 @@ void malletsInstrumentView::modelChanged() void malletsInstrumentView::changePreset() { malletsInstrument * inst = castModel(); + inst->instrumentTrack()->silenceAllNotes(); int _preset = inst->m_presetsModel.value(); - + if( _preset < 9 ) { m_tubeBellWidget->hide(); @@ -512,7 +598,7 @@ void malletsInstrumentView::changePreset() m_modalBarWidget->hide(); m_tubeBellWidget->hide(); m_bandedWGWidget->show(); - } + } } @@ -537,12 +623,12 @@ malletsSynth::malletsSynth( const StkFloat _pitch, m_voice = new ModalBar(); + m_voice->controlChange( 16, _control16 ); 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 ); diff --git a/plugins/stk/mallets/mallets.h b/plugins/stk/mallets/mallets.h index a194479bf17..1fe5bbebbd1 100644 --- a/plugins/stk/mallets/mallets.h +++ b/plugins/stk/mallets/mallets.h @@ -42,6 +42,7 @@ namespace stk { } ; using namespace stk; +static const int MALLETS_PRESET_VERSION = 1; class malletsSynth { @@ -173,6 +174,8 @@ class malletsInstrument : public Instrument ComboBoxModel m_presetsModel; FloatModel m_spreadModel; + IntModel m_versionModel; + BoolModel m_isOldVersionModel; QVector m_scalers; @@ -219,10 +222,10 @@ public slots: QWidget * m_bandedWGWidget; Knob * m_pressureKnob; - Knob * m_motionKnob; - Knob * m_vibratoKnob; +// Knob * m_motionKnob; +// Knob * m_vibratoKnob; Knob * m_velocityKnob; - LedCheckBox * m_strikeLED; +// LedCheckBox * m_strikeLED; ComboBox * m_presetsCombo; Knob * m_spreadKnob; diff --git a/plugins/triple_oscillator/TripleOscillator.cpp b/plugins/triple_oscillator/TripleOscillator.cpp index f314c64f0b8..3cb9c9417f6 100644 --- a/plugins/triple_oscillator/TripleOscillator.cpp +++ b/plugins/triple_oscillator/TripleOscillator.cpp @@ -33,6 +33,7 @@ #include "Engine.h" #include "InstrumentTrack.h" #include "Knob.h" +#include "Mixer.h" #include "NotePlayHandle.h" #include "PixmapButton.h" #include "SampleBuffer.h" diff --git a/plugins/vestige/CMakeLists.txt b/plugins/vestige/CMakeLists.txt index ccc12984d88..58008fe4315 100644 --- a/plugins/vestige/CMakeLists.txt +++ b/plugins/vestige/CMakeLists.txt @@ -1,15 +1,23 @@ IF(LMMS_SUPPORT_VST) # Enable C++11 ADD_DEFINITIONS(-std=c++0x) + + IF(LMMS_BUILD_APPLE) + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++") + ENDIF() INCLUDE(BuildPlugin) INCLUDE_DIRECTORIES("${CMAKE_CURRENT_SOURCE_DIR}/../vst_base") - LINK_DIRECTORIES("${CMAKE_CURRENT_BINARY_DIR}/../vst_base") - LINK_LIBRARIES(vstbase) - IF(LMMS_BUILD_WIN32) - BUILD_PLUGIN(vestige vestige.cpp vestige.h MOCFILES vestige.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png") + LINK_DIRECTORIES("${CMAKE_CURRENT_BINARY_DIR}/..") + IF(LMMS_BUILD_LINUX) + LINK_LIBRARIES(-Wl,--enable-new-dtags) + SET(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE) + SET(CMAKE_INSTALL_RPATH "$ORIGIN") ELSE() - BUILD_PLUGIN(vestige vestige.cpp vestige.h MOCFILES vestige.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png" LINK SHARED) + SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${PLUGIN_DIR}") ENDIF() + BUILD_PLUGIN(vestige vestige.cpp vestige.h MOCFILES vestige.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png") + TARGET_LINK_LIBRARIES(vestige -lvstbase) + ADD_DEPENDENCIES(vestige vstbase) ENDIF(LMMS_SUPPORT_VST) diff --git a/plugins/vestige/vestige.cpp b/plugins/vestige/vestige.cpp index 9db5ea352b5..856739f1498 100644 --- a/plugins/vestige/vestige.cpp +++ b/plugins/vestige/vestige.cpp @@ -38,6 +38,7 @@ #include "InstrumentTrack.h" #include "VstPlugin.h" #include "MainWindow.h" +#include "Mixer.h" #include "GuiApplication.h" #include "PixmapButton.h" #include "StringPairDrag.h" @@ -643,7 +644,7 @@ void VestigeInstrumentView::openPlugin() { return; } - Engine::mixer()->lock(); + Engine::mixer()->requestChangeInModel(); if (m_vi->p_subWindow != NULL) { delete m_vi->p_subWindow; @@ -651,7 +652,7 @@ void VestigeInstrumentView::openPlugin() } m_vi->loadFile( ofd.selectedFiles()[0] ); - Engine::mixer()->unlock(); + Engine::mixer()->doneChangeInModel(); if( m_vi->m_plugin && m_vi->m_plugin->pluginWidget() ) { m_vi->m_plugin->pluginWidget()->setWindowIcon( @@ -886,7 +887,7 @@ manageVestigeInstrumentView::manageVestigeInstrumentView( Instrument * _instrume 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); + m_vi->m_subWindow->setAttribute( Qt::WA_DeleteOnClose, false ); l->setContentsMargins( 20, 10, 10, 10 ); diff --git a/plugins/vibed/vibed.cpp b/plugins/vibed/vibed.cpp index d74b654e20c..1697b5d0bd8 100644 --- a/plugins/vibed/vibed.cpp +++ b/plugins/vibed/vibed.cpp @@ -29,6 +29,7 @@ #include "vibed.h" #include "Engine.h" #include "InstrumentTrack.h" +#include "Mixer.h" #include "NotePlayHandle.h" #include "ToolTip.h" #include "base64.h" diff --git a/plugins/vst_base/CMakeLists.txt b/plugins/vst_base/CMakeLists.txt index 18b944bc891..733af18d863 100644 --- a/plugins/vst_base/CMakeLists.txt +++ b/plugins/vst_base/CMakeLists.txt @@ -24,11 +24,10 @@ IF(LMMS_BUILD_WIN32) ENDIF(LMMS_BUILD_WIN64 AND NOT LMMS_BUILD_MSYS) ENDIF(LMMS_BUILD_WIN32) -IF(LMMS_BUILD_WIN32) - BUILD_PLUGIN(vstbase vst_base.cpp VstPlugin.cpp VstPlugin.h communication.h MOCFILES VstPlugin.h) -ELSE() - BUILD_PLUGIN(vstbase vst_base.cpp VstPlugin.cpp VstPlugin.h communication.h MOCFILES VstPlugin.h LINK SHARED) -ENDIF() +SET(REMOTE_VST_PLUGIN_FILEPATH "RemoteVstPlugin" CACHE STRING "Relative file path to RemoteVstPlugin") + +ADD_DEFINITIONS(-DREMOTE_VST_PLUGIN_FILEPATH="${REMOTE_VST_PLUGIN_FILEPATH}") +BUILD_PLUGIN(vstbase vst_base.cpp VstPlugin.cpp VstPlugin.h communication.h MOCFILES VstPlugin.h) IF(LMMS_BUILD_LINUX AND NOT WANT_VST_NOWINE) @@ -42,17 +41,20 @@ IF(LMMS_HOST_X86_64) ENDIF() ENDIF(LMMS_HOST_X86_64) +SET(WINE_CXX_FLAGS "" CACHE STRING "Extra flags passed to wineg++") + +STRING(REPLACE " " ";" WINE_BUILD_FLAGS ${CMAKE_CXX_FLAGS} ${CMAKE_EXE_LINKER_FLAGS} " " ${WINE_CXX_FLAGS}) 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 "';'" + 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} -fno-omit-frame-pointer ${WINE_BUILD_FLAGS} -o ../RemoteVstPlugin + COMMAND sh -c "mv ../RemoteVstPlugin.exe ../RemoteVstPlugin || true" TARGET vstbase - OUTPUTS RemoteVstPlugin + 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}") +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) diff --git a/plugins/vst_base/RemoteVstPlugin.cpp b/plugins/vst_base/RemoteVstPlugin.cpp index 234b89acd63..c92a1b959ef 100644 --- a/plugins/vst_base/RemoteVstPlugin.cpp +++ b/plugins/vst_base/RemoteVstPlugin.cpp @@ -56,6 +56,7 @@ #endif +#define USE_WS_PREFIX #include #ifdef LMMS_BUILD_WIN32 @@ -121,7 +122,11 @@ DWORD __GuiThreadID = 0; class RemoteVstPlugin : public RemotePluginClient { public: +#ifdef SYNC_WITH_SHM_FIFO RemoteVstPlugin( key_t _shm_in, key_t _shm_out ); +#else + RemoteVstPlugin( const char * socketPath ); +#endif virtual ~RemoteVstPlugin(); virtual bool processMessage( const message & _m ); @@ -187,9 +192,6 @@ class RemoteVstPlugin : public RemotePluginClient // 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 ); @@ -332,8 +334,13 @@ class RemoteVstPlugin : public RemotePluginClient +#ifdef SYNC_WITH_SHM_FIFO RemoteVstPlugin::RemoteVstPlugin( key_t _shm_in, key_t _shm_out ) : RemotePluginClient( _shm_in, _shm_out ), +#else +RemoteVstPlugin::RemoteVstPlugin( const char * socketPath ) : + RemotePluginClient( socketPath ), +#endif m_shortName( "" ), m_libInst( NULL ), m_plugin( NULL ), @@ -493,10 +500,6 @@ bool RemoteVstPlugin::processMessage( const message & _m ) setParameterDump( _m ); break; - case IdVstGetParameterProperties: - getParameterProperties( _m.getInt() ); - break; - case IdSaveSettingsToFile: saveChunkToFile( _m.getString() ); sendMessage( IdSaveSettingsToFile ); @@ -974,37 +977,6 @@ void RemoteVstPlugin::setParameterDump( const message & _m ) -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 ) @@ -1014,7 +986,11 @@ void RemoteVstPlugin::saveChunkToFile( const std::string & _file ) if( len > 0 ) { int fd = open( _file.c_str(), O_WRONLY | O_BINARY ); - write( fd, chunk, len ); + if ( ::write( fd, chunk, len ) != len ) + { + fprintf( stderr, + "Error saving chunk to file.\n" ); + } close( fd ); } } @@ -1231,7 +1207,10 @@ void RemoteVstPlugin::loadPresetFile( const std::string & _file ) unsigned int len = 0; sBank * pBank = (sBank*) new char[ sizeof( sBank ) ]; FILE * stream = fopen( _file.c_str(), "r" ); - fread ( pBank, 1, 56, stream ); + if ( fread ( pBank, 1, 56, stream ) != 56 ) + { + fprintf( stderr, "Error loading preset file.\n" ); + } pBank->fxID = endian_swap( pBank->fxID ); pBank->numPrograms = endian_swap( pBank->numPrograms ); unsigned int toUInt; @@ -1251,10 +1230,17 @@ void RemoteVstPlugin::loadPresetFile( const std::string & _file ) if(pBank->fxMagic != 0x6B427846) { if(pBank->fxMagic != 0x6B437846) { - fread (pLen, 1, 4, stream); + if ( fread (pLen, 1, 4, stream) != 4 ) + { + fprintf( stderr, + "Error loading preset file.\n" ); + } chunk = new char[len = endian_swap(*pLen)]; } else chunk = new char[len = sizeof(float)*pBank->numPrograms]; - fread (chunk, len, 1, stream); + if ( fread (chunk, len, 1, stream) != 1 ) + { + fprintf( stderr, "Error loading preset file.\n" ); + } fclose( stream ); } @@ -1286,8 +1272,16 @@ void RemoteVstPlugin::loadPresetFile( const std::string & _file ) toUIntArray = reinterpret_cast( chunk ); lock(); for (int i =0; i < numPrograms; i++) { - fread (pBank, 1, 56, stream); - fread (chunk, len, 1, stream); + if ( fread (pBank, 1, 56, stream) != 56 ) + { + fprintf( stderr, + "Error loading preset file.\n" ); + } + if ( fread (chunk, len, 1, stream) != 1 ) + { + fprintf( stderr, + "Error loading preset file.\n" ); + } pluginDispatch( effSetProgram, 0, i ); pBank->prgName[23] = 0; pluginDispatch( 4, 0, 0, pBank->prgName ); @@ -1331,7 +1325,10 @@ void RemoteVstPlugin::loadChunkFromFile( const std::string & _file, int _len ) } const int fd = open( _file.c_str(), O_RDONLY | O_BINARY ); - read( fd, chunk, _len ); + if ( ::read( fd, chunk, _len ) != _len ) + { + fprintf( stderr, "Error loading chunk from file.\n" ); + } close( fd ); pluginDispatch( 24, 0, _len, chunk ); @@ -1853,7 +1850,11 @@ DWORD WINAPI RemoteVstPlugin::guiEventLoop( LPVOID _param ) int main( int _argc, char * * _argv ) { +#ifdef SYNC_WITH_SHM_FIFO if( _argc < 3 ) +#else + if( _argc < 2 ) +#endif { fprintf( stderr, "not enough arguments\n" ); return -1; @@ -1886,7 +1887,11 @@ int main( int _argc, char * * _argv ) // constructor automatically will process messages until it receives // a IdVstLoadPlugin message and processes it +#ifdef SYNC_WITH_SHM_FIFO __plugin = new RemoteVstPlugin( atoi( _argv[1] ), atoi( _argv[2] ) ); +#else + __plugin = new RemoteVstPlugin( _argv[1] ); +#endif if( __plugin->isInitialized() ) { diff --git a/plugins/vst_base/VstPlugin.cpp b/plugins/vst_base/VstPlugin.cpp index 954b6196cea..991067efbfd 100644 --- a/plugins/vst_base/VstPlugin.cpp +++ b/plugins/vst_base/VstPlugin.cpp @@ -48,6 +48,7 @@ #include "ConfigManager.h" #include "GuiApplication.h" #include "MainWindow.h" +#include "Mixer.h" #include "Song.h" #include "templates.h" #include "FileDialog.h" @@ -80,9 +81,8 @@ class vstSubWin : public QMdiSubWindow VstPlugin::VstPlugin( const QString & _plugin ) : - QObject(), - JournallingObject(), RemotePlugin(), + JournallingObject(), m_plugin( _plugin ), m_pluginWidget( NULL ), m_pluginWindowID( 0 ), @@ -99,7 +99,7 @@ VstPlugin::VstPlugin( const QString & _plugin ) : { setSplittedChannels( true ); - tryLoad( "RemoteVstPlugin" ); + tryLoad( REMOTE_VST_PLUGIN_FILEPATH ); #ifdef LMMS_BUILD_WIN64 if( m_badDllFormat ) { diff --git a/plugins/vst_base/VstPlugin.h b/plugins/vst_base/VstPlugin.h index 1ce6b9b22cd..047d58662ea 100644 --- a/plugins/vst_base/VstPlugin.h +++ b/plugins/vst_base/VstPlugin.h @@ -32,13 +32,11 @@ #include #include -#include "Mixer.h" #include "JournallingObject.h" #include "communication.h" -class PLUGIN_EXPORT VstPlugin : public QObject, public JournallingObject, - public RemotePlugin +class PLUGIN_EXPORT VstPlugin : public RemotePlugin, public JournallingObject { Q_OBJECT public: diff --git a/plugins/vst_base/communication.h b/plugins/vst_base/communication.h index 6786b11896b..ca674bcb4fb 100644 --- a/plugins/vst_base/communication.h +++ b/plugins/vst_base/communication.h @@ -63,7 +63,6 @@ enum VstRemoteMessageIDs IdVstGetParameterCount, IdVstGetParameterDump, IdVstSetParameterDump, - IdVstGetParameterProperties, IdVstProgramNames, IdVstCurrentProgram, IdVstCurrentProgramName, @@ -84,8 +83,7 @@ enum VstRemoteMessageIDs IdVstPluginUniqueID, IdVstSetParameter, IdVstParameterCount, - IdVstParameterDump, - IdVstParameterProperties + IdVstParameterDump } ; diff --git a/plugins/watsyn/Watsyn.cpp b/plugins/watsyn/Watsyn.cpp index a1a0747a186..f180f0549ea 100644 --- a/plugins/watsyn/Watsyn.cpp +++ b/plugins/watsyn/Watsyn.cpp @@ -32,6 +32,7 @@ #include "ToolTip.h" #include "Song.h" #include "lmms_math.h" +#include "Mixer.h" #include "interpolation.h" #include "embed.cpp" diff --git a/plugins/waveshaper/logo.png b/plugins/waveshaper/logo.png index 89e9f368011..9340da708dd 100644 Binary files a/plugins/waveshaper/logo.png and b/plugins/waveshaper/logo.png differ diff --git a/plugins/zynaddsubfx/CMakeLists.txt b/plugins/zynaddsubfx/CMakeLists.txt index fa96b9f3240..2b126998cf5 100644 --- a/plugins/zynaddsubfx/CMakeLists.txt +++ b/plugins/zynaddsubfx/CMakeLists.txt @@ -2,11 +2,13 @@ INCLUDE(BuildPlugin) # definitions for ZynAddSubFX -IF(LMMS_BUILD_LINUX OR LMMS_BUILD_APPLE) +IF(LMMS_BUILD_LINUX OR LMMS_BUILD_APPLE OR LMMS_BUILD_OPENBSD) + FIND_PACKAGE(X11) + INCLUDE_DIRECTORIES(${X11_INCLUDE_DIR}) ADD_DEFINITIONS(-DOS_LINUX) -ELSE(LMMS_BUILD_LINUX OR LMMS_BUILD_APPLE) +ELSE() ADD_DEFINITIONS(-DOS_WINDOWS) -ENDIF(LMMS_BUILD_LINUX OR LMMS_BUILD_APPLE) +ENDIF() # do not conflict with LMMS' Controller class ADD_DEFINITIONS(-DController=ZynController) @@ -21,6 +23,10 @@ SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2 -Wno-write-strings -Wno-deprecated-d # Enable C++11, but only for ZynAddSubFx.cpp set_property(SOURCE ZynAddSubFx.cpp APPEND_STRING PROPERTY COMPILE_FLAGS " -std=c++0x ") + +IF(LMMS_BUILD_APPLE) + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++") +ENDIF() # link system-libraries when on win32 IF(LMMS_BUILD_WIN32) @@ -35,8 +41,6 @@ IF(MINGW_PREFIX) SET(FLTK_SKIP_FLUID TRUE) ENDIF() -FIND_PACKAGE(FLTK) - IF(NOT FLTK_FOUND) RETURN() ENDIF() @@ -115,7 +119,11 @@ SET(zynaddsubfx_core_SRCS ) -ADD_LIBRARY(ZynAddSubFxCore SHARED LocalZynAddSubFx.cpp ${zynaddsubfx_core_SRCS}) +IF(LMMS_BUILD_LINUX) + ADD_LIBRARY(ZynAddSubFxCore MODULE LocalZynAddSubFx.cpp ${zynaddsubfx_core_SRCS}) +ELSE() + ADD_LIBRARY(ZynAddSubFxCore SHARED LocalZynAddSubFx.cpp ${zynaddsubfx_core_SRCS}) +ENDIF() TARGET_LINK_LIBRARIES(ZynAddSubFxCore zynaddsubfx_nio ${FFTW3F_LIBRARIES} ${QT_LIBRARIES} -lz -lpthread) # required libs for debug msys builds @@ -134,8 +142,17 @@ ELSE(LMMS_BUILD_WIN32) INSTALL(TARGETS ZynAddSubFxCore LIBRARY DESTINATION "${PLUGIN_DIR}") ENDIF(LMMS_BUILD_WIN32) +LINK_DIRECTORIES("${CMAKE_CURRENT_BINARY_DIR}/..") +IF(LMMS_BUILD_LINUX) + LINK_LIBRARIES(-Wl,--enable-new-dtags) + SET(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE) + SET(CMAKE_INSTALL_RPATH "$ORIGIN") +ELSE() + SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${PLUGIN_DIR}") +ENDIF() BUILD_PLUGIN(zynaddsubfx ZynAddSubFx.cpp ZynAddSubFx.h MOCFILES ZynAddSubFx.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png") -TARGET_LINK_LIBRARIES(zynaddsubfx ZynAddSubFxCore) +TARGET_LINK_LIBRARIES(zynaddsubfx -lZynAddSubFxCore) +ADD_DEPENDENCIES(zynaddsubfx ZynAddSubFxCore) IF(WIN32) SET(WINRC "${CMAKE_CURRENT_BINARY_DIR}/zynaddsubfxrc.obj") @@ -147,22 +164,34 @@ IF(WIN32) DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/zynaddsubfx.rc") ENDIF(WIN32) -SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${PLUGIN_DIR}") +# Use libraries in non-standard directories (e.g., another version of Qt) 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 ) + +# Remove useless dependencies from FLTK. Use fltk-config to avoid static library +# in older environments +SET(FLTK_FILTERED_LDFLAGS ${FLTK_LIBRARIES}) +FIND_PROGRAM(FLTK_CONFIG fltk-config) +IF(FLTK_CONFIG AND NOT (LMMS_BUILD_APPLE OR LMMS_BUILD_WIN32)) + EXECUTE_PROCESS(COMMAND ${FLTK_CONFIG} --ldflags OUTPUT_VARIABLE FLTK_FILTERED_LDFLAGS OUTPUT_STRIP_TRAILING_WHITESPACE) + STRING(REPLACE " " ";" FLTK_FILTERED_LDFLAGS ${FLTK_FILTERED_LDFLAGS}) + LIST(REMOVE_ITEM FLTK_FILTERED_LDFLAGS -lX11) +ENDIF() +TARGET_LINK_LIBRARIES(RemoteZynAddSubFx zynaddsubfx_gui -lZynAddSubFxCore ${FLTK_FILTERED_LDFLAGS} -lpthread ) +ADD_DEPENDENCIES(RemoteZynAddSubFx ZynAddSubFxCore) + +# Support qt_version_tag in Qt 5.6 +IF(QT5) + TARGET_LINK_LIBRARIES(RemoteZynAddSubFx Qt5::Core) +ENDIF(QT5) # 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 ${CMAKE_DL_LIBS}) -ENDIF(LMMS_BUILD_LINUX) - IF(LMMS_BUILD_WIN32) ADD_CUSTOM_COMMAND(TARGET ZynAddSubFxCore POST_BUILD COMMAND "${STRIP}" \"$\") diff --git a/plugins/zynaddsubfx/README.txt b/plugins/zynaddsubfx/README.txt index 44740a7dc62..c7ae09ea8f1 100644 --- a/plugins/zynaddsubfx/README.txt +++ b/plugins/zynaddsubfx/README.txt @@ -3,7 +3,7 @@ ZynAddSubFX 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. +ZynAddSubFX is free program and is distributed WITH NO WARRANTY. It is licensed under GNU General Public License version 2 (or later) - see the file COPYING. --==## PLEASE SHARE YOUR INSTRUMENTS/MASTER SETTINGS ##==-- --==## MADE WITH ZynAddSubFX ##==-- diff --git a/plugins/zynaddsubfx/RemoteZynAddSubFx.cpp b/plugins/zynaddsubfx/RemoteZynAddSubFx.cpp index 54da176ea64..aab691898cb 100644 --- a/plugins/zynaddsubfx/RemoteZynAddSubFx.cpp +++ b/plugins/zynaddsubfx/RemoteZynAddSubFx.cpp @@ -44,8 +44,13 @@ class RemoteZynAddSubFx : public RemotePluginClient, public LocalZynAddSubFx { public: +#ifdef SYNC_WITH_SHM_FIFO RemoteZynAddSubFx( int _shm_in, int _shm_out ) : RemotePluginClient( _shm_in, _shm_out ), +#else + RemoteZynAddSubFx( const char * socketPath ) : + RemotePluginClient( socketPath ), +#endif LocalZynAddSubFx(), m_guiSleepTime( 100 ), m_guiExit( false ) @@ -261,7 +266,11 @@ void RemoteZynAddSubFx::guiThread() int main( int _argc, char * * _argv ) { +#ifdef SYNC_WITH_SHM_FIFO if( _argc < 3 ) +#else + if( _argc < 2 ) +#endif { fprintf( stderr, "not enough arguments\n" ); return -1; @@ -276,8 +285,12 @@ int main( int _argc, char * * _argv ) #endif +#ifdef SYNC_WITH_SHM_FIFO RemoteZynAddSubFx * remoteZASF = new RemoteZynAddSubFx( atoi( _argv[1] ), atoi( _argv[2] ) ); +#else + RemoteZynAddSubFx * remoteZASF = new RemoteZynAddSubFx( _argv[1] ); +#endif remoteZASF->run(); diff --git a/plugins/zynaddsubfx/ZynAddSubFx.cpp b/plugins/zynaddsubfx/ZynAddSubFx.cpp index 14080f3bec3..fdc1e4d26bb 100644 --- a/plugins/zynaddsubfx/ZynAddSubFx.cpp +++ b/plugins/zynaddsubfx/ZynAddSubFx.cpp @@ -42,6 +42,7 @@ #include "StringPairDrag.h" #include "RemoteZynAddSubFx.h" #include "LocalZynAddSubFx.h" +#include "Mixer.h" #include "ControllerConnection.h" #include "embed.cpp" @@ -70,7 +71,6 @@ Plugin::Descriptor PLUGIN_EXPORT zynaddsubfx_plugin_descriptor = ZynAddSubFxRemotePlugin::ZynAddSubFxRemotePlugin() : - QObject(), RemotePlugin() { init( "RemoteZynAddSubFx", false ); @@ -533,9 +533,6 @@ ZynAddSubFxView::ZynAddSubFxView( Instrument * _instrument, QWidget * _parent ) 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() ) ); diff --git a/plugins/zynaddsubfx/ZynAddSubFx.h b/plugins/zynaddsubfx/ZynAddSubFx.h index 76073ce23b2..b86e94841b2 100644 --- a/plugins/zynaddsubfx/ZynAddSubFx.h +++ b/plugins/zynaddsubfx/ZynAddSubFx.h @@ -44,7 +44,7 @@ class Knob; class LedCheckBox; -class ZynAddSubFxRemotePlugin : public QObject, public RemotePlugin +class ZynAddSubFxRemotePlugin : public RemotePlugin { Q_OBJECT public: diff --git a/plugins/zynaddsubfx/zynaddsubfx/README.txt b/plugins/zynaddsubfx/zynaddsubfx/README.txt index 76b56c6a4ab..366880c7050 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/README.txt +++ b/plugins/zynaddsubfx/zynaddsubfx/README.txt @@ -3,7 +3,7 @@ ZynAddSubFX 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. +ZynAddSubFX is free program and is distributed WITH NO WARRANTY. It is licensed under GNU General Public License version 2 (or later) - see the file COPYING. --==## PLEASE SHARE YOUR INSTRUMENTS/MASTER SETTINGS ##==-- --==## MADE WITH ZynAddSubFX ##==-- diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/DSP/AnalogFilter.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/DSP/AnalogFilter.cpp index 58f46a213e8..a403df3a5c4 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/DSP/AnalogFilter.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/DSP/AnalogFilter.cpp @@ -8,8 +8,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/DSP/AnalogFilter.h b/plugins/zynaddsubfx/zynaddsubfx/src/DSP/AnalogFilter.h index 8a012d47daf..99e7844b5e6 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/DSP/AnalogFilter.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/DSP/AnalogFilter.h @@ -8,8 +8,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/DSP/FFTwrapper.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/DSP/FFTwrapper.cpp index 4d995b035a5..95641570c49 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/DSP/FFTwrapper.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/DSP/FFTwrapper.cpp @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/DSP/FFTwrapper.h b/plugins/zynaddsubfx/zynaddsubfx/src/DSP/FFTwrapper.h index 6eb603336fd..1d61e2e538f 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/DSP/FFTwrapper.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/DSP/FFTwrapper.h @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/DSP/Filter.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/DSP/Filter.cpp index 9487fb47587..2e2a0181627 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/DSP/Filter.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/DSP/Filter.cpp @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/DSP/Filter.h b/plugins/zynaddsubfx/zynaddsubfx/src/DSP/Filter.h index 52e3675c17a..c8e4ac86385 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/DSP/Filter.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/DSP/Filter.h @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/DSP/FormantFilter.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/DSP/FormantFilter.cpp index 36db5f6d1c9..06616002cd3 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/DSP/FormantFilter.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/DSP/FormantFilter.cpp @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/DSP/FormantFilter.h b/plugins/zynaddsubfx/zynaddsubfx/src/DSP/FormantFilter.h index 715f00f033f..fedd13da1fb 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/DSP/FormantFilter.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/DSP/FormantFilter.h @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/DSP/SVFilter.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/DSP/SVFilter.cpp index 5e27c39c3d0..e7836a8b614 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/DSP/SVFilter.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/DSP/SVFilter.cpp @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/DSP/SVFilter.h b/plugins/zynaddsubfx/zynaddsubfx/src/DSP/SVFilter.h index e9d002c7b3b..d5f720c2afe 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/DSP/SVFilter.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/DSP/SVFilter.h @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/DSP/Unison.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/DSP/Unison.cpp index 540a7ef1152..82880f16e11 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/DSP/Unison.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/DSP/Unison.cpp @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/DSP/Unison.h b/plugins/zynaddsubfx/zynaddsubfx/src/DSP/Unison.h index bca5ee8596d..c0fcf971a88 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/DSP/Unison.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/DSP/Unison.h @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Alienwah.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Alienwah.cpp index fae1860b668..cc34038e9ae 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Alienwah.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Alienwah.cpp @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Alienwah.h b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Alienwah.h index 52019ac9471..6f3ea8feb70 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Alienwah.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Alienwah.h @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Chorus.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Chorus.cpp index 7e95a21539c..8fa2f73a4e9 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Chorus.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Chorus.cpp @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Chorus.h b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Chorus.h index 7772d466875..49c6157b9b6 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Chorus.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Chorus.h @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Distorsion.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Distorsion.cpp index 5d5c8f6f93c..7fd2925abcb 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Distorsion.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Distorsion.cpp @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Distorsion.h b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Distorsion.h index 9d577ddd804..60973db3967 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Distorsion.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Distorsion.h @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/DynamicFilter.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/DynamicFilter.cpp index 650a882bec2..94816363181 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/DynamicFilter.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/DynamicFilter.cpp @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/DynamicFilter.h b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/DynamicFilter.h index 91d1f5e49af..a5cd28868e4 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/DynamicFilter.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/DynamicFilter.h @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EQ.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EQ.cpp index e03fcef71b3..cfafce6773e 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EQ.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EQ.cpp @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EQ.h b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EQ.h index b2e9e89a90b..f62aeb1f873 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EQ.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EQ.h @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Echo.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Echo.cpp index 712f291dad0..b920660f6c7 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Echo.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Echo.cpp @@ -8,8 +8,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Echo.h b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Echo.h index 4eb606b8224..6e443e14d43 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Echo.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Echo.h @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Effect.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Effect.cpp index bc1c0b00665..c8528ed37c9 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Effect.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Effect.cpp @@ -7,8 +7,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Effect.h b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Effect.h index d53bb9b71b9..f69e5f01ede 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Effect.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Effect.h @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EffectLFO.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EffectLFO.cpp index 1ec507a2fd8..4df2bc52405 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EffectLFO.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EffectLFO.cpp @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EffectLFO.h b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EffectLFO.h index 82cbf87f775..fb80cf94ecf 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EffectLFO.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EffectLFO.h @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EffectMgr.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EffectMgr.cpp index 08d4f1d8886..80e8185f3b9 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EffectMgr.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EffectMgr.cpp @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EffectMgr.h b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EffectMgr.h index 256a8d81dc9..fa58809e351 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EffectMgr.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/EffectMgr.h @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Phaser.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Phaser.cpp index 66a9283e331..b21c11b2b87 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Phaser.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Phaser.cpp @@ -15,8 +15,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Phaser.h b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Phaser.h index 47961870d6a..b4edbc5fda0 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Phaser.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Phaser.h @@ -10,8 +10,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Reverb.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Reverb.cpp index 74961b2f52d..07f2ea206a7 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Reverb.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Reverb.cpp @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Reverb.h b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Reverb.h index 5363759b683..8383efe97f2 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Reverb.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Effects/Reverb.h @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Bank.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Bank.cpp index a1f9f5d6b40..5cb43e4ff25 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Bank.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Bank.cpp @@ -8,8 +8,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Bank.h b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Bank.h index 5a7ed9da255..e9f56e2fb42 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Bank.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Bank.h @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Config.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Config.cpp index d38c88bcae0..dc0280ec1d0 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Config.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Config.cpp @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Config.h b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Config.h index 1c875d87a3d..350561c46ae 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Config.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Config.h @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Control.h b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Control.h index a605a66b4ae..6cca23e3e11 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Control.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Control.h @@ -7,8 +7,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Dump.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Dump.cpp index e98074b40bb..32a01e0251c 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Dump.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Dump.cpp @@ -7,8 +7,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Dump.h b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Dump.h index dc543cf09eb..cd50512ba8e 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Dump.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Dump.h @@ -7,8 +7,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/LASHClient.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/LASHClient.cpp index 57979a32918..53398fefb2e 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/LASHClient.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/LASHClient.cpp @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/LASHClient.h b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/LASHClient.h index 1f3a4946747..0ef700e655a 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/LASHClient.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/LASHClient.h @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Master.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Master.cpp index c4b8947b8fa..c919eb56322 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Master.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Master.cpp @@ -7,8 +7,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Master.h b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Master.h index 2238d759320..3726870a614 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Master.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Master.h @@ -7,8 +7,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Microtonal.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Microtonal.cpp index fc0e015e178..c503fef99c4 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Microtonal.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Microtonal.cpp @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Microtonal.h b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Microtonal.h index 638a1590fb3..d294285cf3d 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Microtonal.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Microtonal.h @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Part.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Part.cpp index 184a0e23897..ed61ff9af04 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Part.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Part.cpp @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Part.h b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Part.h index ed247d30be7..16ab88318fe 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Part.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Part.h @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/QtXmlWrapper.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/QtXmlWrapper.cpp index 37d2c459716..9db281146a9 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/QtXmlWrapper.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/QtXmlWrapper.cpp @@ -33,8 +33,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/QtXmlWrapper.h b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/QtXmlWrapper.h index 2a2e18931a3..7b5ca548c5d 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/QtXmlWrapper.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/QtXmlWrapper.h @@ -33,8 +33,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Recorder.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Recorder.cpp index fede70104d7..a4e32634fd3 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Recorder.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Recorder.cpp @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Recorder.h b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Recorder.h index 0e3f02f1029..4198648db45 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Recorder.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Recorder.h @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Stereo.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Stereo.cpp index ac2f3172706..89fcfd208d8 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Stereo.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Stereo.cpp @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Stereo.h b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Stereo.h index 516d31870dc..6a8764607dc 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Stereo.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Stereo.h @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Util.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Util.cpp index 9025c622aca..8af97d41df6 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Util.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Util.cpp @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -189,8 +190,7 @@ void returnTmpBuffer(float *buf) return; } fprintf(stderr, - "ERROR: invalid buffer returned %s %d\n", - __FILE__, + "ERROR: invalid buffer returned src/Misc/Util.cpp %d\n", __LINE__); } diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Util.h b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Util.h index 45d6f84fc01..15fb479a38c 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Util.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Util.h @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -104,7 +105,9 @@ inline void sprng(prng_t p) /* * The random generator (0.0f..1.0f) */ +#ifndef INT32_MAX # define INT32_MAX (2147483647) +#endif #define RND (prng() / (INT32_MAX * 1.0f)) //Linear Interpolation diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/WavFile.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/WavFile.cpp index 78db9d52ea8..fde77be89a6 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/WavFile.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/WavFile.cpp @@ -4,8 +4,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/WavFile.h b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/WavFile.h index 4b29efa02b0..497cee88ec0 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/WavFile.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/WavFile.h @@ -7,8 +7,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/WaveShapeSmps.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/WaveShapeSmps.cpp index cf281296090..5b860fcbfc4 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/WaveShapeSmps.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/WaveShapeSmps.cpp @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/WaveShapeSmps.h b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/WaveShapeSmps.h index 980eb28bc14..965af83611a 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/WaveShapeSmps.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/WaveShapeSmps.h @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/XMLwrapper.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/XMLwrapper.cpp index 6148d68de53..d10967af45c 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/XMLwrapper.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/XMLwrapper.cpp @@ -8,8 +8,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/XMLwrapper.h b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/XMLwrapper.h index d046888b01c..6f120feb4f0 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/XMLwrapper.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/XMLwrapper.h @@ -8,8 +8,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/AlsaEngine.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/AlsaEngine.cpp index 434e2fbd323..8c343149a97 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/AlsaEngine.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/AlsaEngine.cpp @@ -7,7 +7,7 @@ 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. + version 2 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 diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/AlsaEngine.h b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/AlsaEngine.h index 0b9cc3c15a5..3414f45ed3e 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/AlsaEngine.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/AlsaEngine.h @@ -7,7 +7,7 @@ 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. + version 2 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 diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/AudioOut.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/AudioOut.cpp index 8c4f2d4497c..9588ac83451 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/AudioOut.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/AudioOut.cpp @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/AudioOut.h b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/AudioOut.h index f8e1a97ed5f..7bf2f413c07 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/AudioOut.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/AudioOut.h @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/Engine.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/Engine.cpp index 5e846b70898..3e026a52aa8 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/Engine.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/Engine.cpp @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/Engine.h b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/Engine.h index 9de4422c7ab..9be04be4a66 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/Engine.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/Engine.h @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/JackEngine.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/JackEngine.cpp index 1201024ddba..c3ce0a63b4f 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/JackEngine.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/JackEngine.cpp @@ -6,7 +6,7 @@ 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. + version 2 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 diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/JackEngine.h b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/JackEngine.h index 705ff3ecfea..29f6de0a39b 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/JackEngine.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/JackEngine.h @@ -6,7 +6,7 @@ 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. + version 2 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 diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/MidiIn.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/MidiIn.cpp index 3635bde2e29..5b977903468 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/MidiIn.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/MidiIn.cpp @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/MidiIn.h b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/MidiIn.h index 780a67ff57b..6dafc9df8ad 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/MidiIn.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/MidiIn.h @@ -8,8 +8,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/NulEngine.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/NulEngine.cpp index 633e2ae24c2..63d9c90c102 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/NulEngine.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/NulEngine.cpp @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/NulEngine.h b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/NulEngine.h index 18341809e71..afc4859c6de 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/NulEngine.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/NulEngine.h @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/OssEngine.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/OssEngine.cpp index 1c6cdf11c67..245bdf75655 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/OssEngine.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/OssEngine.cpp @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/OssEngine.h b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/OssEngine.h index cdccc8120e8..11fdd27d26a 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/OssEngine.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/OssEngine.h @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/PaEngine.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/PaEngine.cpp index d41543b04d9..c27467a7cc5 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/PaEngine.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/PaEngine.cpp @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/PaEngine.h b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/PaEngine.h index 12fd766a8ec..f9c5fc33b59 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/PaEngine.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/PaEngine.h @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/WavEngine.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/WavEngine.cpp index 1c3d66ec861..78e5ac45082 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/WavEngine.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/WavEngine.cpp @@ -3,8 +3,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/WavEngine.h b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/WavEngine.h index 73f553c9642..06dfe7264b5 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Nio/WavEngine.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Nio/WavEngine.h @@ -7,8 +7,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Output/DSSIaudiooutput.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Output/DSSIaudiooutput.cpp index b343a486cd2..669121e79db 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Output/DSSIaudiooutput.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Output/DSSIaudiooutput.cpp @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Output/DSSIaudiooutput.h b/plugins/zynaddsubfx/zynaddsubfx/src/Output/DSSIaudiooutput.h index f7eaaf35947..acc0fd21d93 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Output/DSSIaudiooutput.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Output/DSSIaudiooutput.h @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Params/ADnoteParameters.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Params/ADnoteParameters.cpp index 02564dbbf53..e4c9dcd00fd 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Params/ADnoteParameters.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Params/ADnoteParameters.cpp @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Params/ADnoteParameters.h b/plugins/zynaddsubfx/zynaddsubfx/src/Params/ADnoteParameters.h index a95e1d1bdff..eb35109a1bb 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Params/ADnoteParameters.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Params/ADnoteParameters.h @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Params/Controller.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Params/Controller.cpp index 5d126545059..777852462a6 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Params/Controller.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Params/Controller.cpp @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Params/Controller.h b/plugins/zynaddsubfx/zynaddsubfx/src/Params/Controller.h index 22483eaaa3b..2e61571a150 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Params/Controller.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Params/Controller.h @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Params/EnvelopeParams.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Params/EnvelopeParams.cpp index a06704d6357..57d244dfc04 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Params/EnvelopeParams.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Params/EnvelopeParams.cpp @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Params/EnvelopeParams.h b/plugins/zynaddsubfx/zynaddsubfx/src/Params/EnvelopeParams.h index 0b3e99c9604..64a06487156 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Params/EnvelopeParams.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Params/EnvelopeParams.h @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Params/FilterParams.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Params/FilterParams.cpp index 81309d6c748..1b82d9bc03d 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Params/FilterParams.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Params/FilterParams.cpp @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Params/FilterParams.h b/plugins/zynaddsubfx/zynaddsubfx/src/Params/FilterParams.h index 22a1a94f8b9..92cde419a0f 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Params/FilterParams.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Params/FilterParams.h @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Params/LFOParams.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Params/LFOParams.cpp index 72f2269da54..5d57bb00bc2 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Params/LFOParams.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Params/LFOParams.cpp @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Params/LFOParams.h b/plugins/zynaddsubfx/zynaddsubfx/src/Params/LFOParams.h index 6ca30719316..41572d9b412 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Params/LFOParams.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Params/LFOParams.h @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Params/PADnoteParameters.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Params/PADnoteParameters.cpp index 027289b61aa..d0572cac38c 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Params/PADnoteParameters.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Params/PADnoteParameters.cpp @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Params/PADnoteParameters.h b/plugins/zynaddsubfx/zynaddsubfx/src/Params/PADnoteParameters.h index b3283216ae5..d710d86139c 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Params/PADnoteParameters.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Params/PADnoteParameters.h @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Params/Presets.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Params/Presets.cpp index d96fc536e00..5fff68cf0cb 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Params/Presets.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Params/Presets.cpp @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Params/Presets.h b/plugins/zynaddsubfx/zynaddsubfx/src/Params/Presets.h index a64d25e74db..f500099e74a 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Params/Presets.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Params/Presets.h @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Params/PresetsArray.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Params/PresetsArray.cpp index 3dcf126376b..d10176e1557 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Params/PresetsArray.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Params/PresetsArray.cpp @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Params/PresetsArray.h b/plugins/zynaddsubfx/zynaddsubfx/src/Params/PresetsArray.h index 724dc0b58f1..00b812390da 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Params/PresetsArray.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Params/PresetsArray.h @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Params/PresetsStore.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Params/PresetsStore.cpp index 7a6366a081b..db055501f4d 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Params/PresetsStore.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Params/PresetsStore.cpp @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Params/PresetsStore.h b/plugins/zynaddsubfx/zynaddsubfx/src/Params/PresetsStore.h index a2f48fd2170..6753236c2c6 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Params/PresetsStore.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Params/PresetsStore.h @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Params/SUBnoteParameters.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Params/SUBnoteParameters.cpp index 7e303742bf7..125a49b6af1 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Params/SUBnoteParameters.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Params/SUBnoteParameters.cpp @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Params/SUBnoteParameters.h b/plugins/zynaddsubfx/zynaddsubfx/src/Params/SUBnoteParameters.h index adbfca3ec5a..dea2a39f54d 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Params/SUBnoteParameters.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Params/SUBnoteParameters.h @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Synth/ADnote.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/ADnote.cpp index c43f1fa3f0f..c3d7e86ce1d 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Synth/ADnote.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/ADnote.cpp @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Synth/ADnote.h b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/ADnote.h index 53420ee0e2e..76abd27900e 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Synth/ADnote.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/ADnote.h @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Synth/Envelope.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/Envelope.cpp index 41bb8047388..6fd086ff9fc 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Synth/Envelope.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/Envelope.cpp @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Synth/Envelope.h b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/Envelope.h index 8c6b082a7a1..af4a4a7b1aa 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Synth/Envelope.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/Envelope.h @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Synth/LFO.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/LFO.cpp index af9d10d7711..02bc35d5395 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Synth/LFO.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/LFO.cpp @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Synth/LFO.h b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/LFO.h index 2b933a34d73..a4c7e1fa209 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Synth/LFO.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/LFO.h @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Synth/OscilGen.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/OscilGen.cpp index d51957eaa7c..6cd89dcc694 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Synth/OscilGen.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/OscilGen.cpp @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Synth/OscilGen.h b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/OscilGen.h index 483a3859a1b..25c78b06bfd 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Synth/OscilGen.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/OscilGen.h @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Synth/PADnote.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/PADnote.cpp index 1778b338843..46d741c79bd 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Synth/PADnote.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/PADnote.cpp @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Synth/PADnote.h b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/PADnote.h index f401996727c..41d1a6cdbc2 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Synth/PADnote.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/PADnote.h @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Synth/Resonance.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/Resonance.cpp index 4eb4e019757..b358498e6c2 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Synth/Resonance.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/Resonance.cpp @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Synth/Resonance.h b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/Resonance.h index 7778571100e..30ec4b6c69d 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Synth/Resonance.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/Resonance.h @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Synth/SUBnote.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/SUBnote.cpp index 6c61447187c..7aebb5f3c3c 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Synth/SUBnote.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/SUBnote.cpp @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Synth/SUBnote.h b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/SUBnote.h index 87e1e93a26f..dfffcccc096 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Synth/SUBnote.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/SUBnote.h @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Synth/SynthNote.h b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/SynthNote.h index 3058e5d3fa3..1101e9ff17d 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Synth/SynthNote.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Synth/SynthNote.h @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Tests/AdNoteTest.h b/plugins/zynaddsubfx/zynaddsubfx/src/Tests/AdNoteTest.h index bd66704e0c5..30cab9975bb 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Tests/AdNoteTest.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Tests/AdNoteTest.h @@ -7,8 +7,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Tests/ControllerTest.h b/plugins/zynaddsubfx/zynaddsubfx/src/Tests/ControllerTest.h index f9b97046ba2..8f760dcdcbb 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Tests/ControllerTest.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Tests/ControllerTest.h @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Tests/EchoTest.h b/plugins/zynaddsubfx/zynaddsubfx/src/Tests/EchoTest.h index c0a295ed62b..3ea0086f419 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Tests/EchoTest.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Tests/EchoTest.h @@ -7,8 +7,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Tests/MicrotonalTest.h b/plugins/zynaddsubfx/zynaddsubfx/src/Tests/MicrotonalTest.h index 6ce1ca5242a..3d8db36a4a9 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Tests/MicrotonalTest.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Tests/MicrotonalTest.h @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Tests/OscilGenTest.h b/plugins/zynaddsubfx/zynaddsubfx/src/Tests/OscilGenTest.h index b0e13b254c1..894af24871f 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Tests/OscilGenTest.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Tests/OscilGenTest.h @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Tests/PadNoteTest.h b/plugins/zynaddsubfx/zynaddsubfx/src/Tests/PadNoteTest.h index 086efcdf03d..edea6f65b06 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Tests/PadNoteTest.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Tests/PadNoteTest.h @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Tests/PluginTest.h b/plugins/zynaddsubfx/zynaddsubfx/src/Tests/PluginTest.h index b88e9ba404a..71b5ed401d5 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Tests/PluginTest.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Tests/PluginTest.h @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Tests/RandTest.h b/plugins/zynaddsubfx/zynaddsubfx/src/Tests/RandTest.h index 2a51e952c88..a9925ad5fc1 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Tests/RandTest.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Tests/RandTest.h @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Tests/SubNoteTest.h b/plugins/zynaddsubfx/zynaddsubfx/src/Tests/SubNoteTest.h index e5cefd860b3..518ea861149 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Tests/SubNoteTest.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Tests/SubNoteTest.h @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Tests/UnisonTest.h b/plugins/zynaddsubfx/zynaddsubfx/src/Tests/UnisonTest.h index 86635004c2f..08a55e1c983 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Tests/UnisonTest.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Tests/UnisonTest.h @@ -7,8 +7,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Tests/XMLwrapperTest.h b/plugins/zynaddsubfx/zynaddsubfx/src/Tests/XMLwrapperTest.h index bf31ae085b2..0d375b3ace0 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Tests/XMLwrapperTest.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Tests/XMLwrapperTest.h @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/UI/EnvelopeUI.fl b/plugins/zynaddsubfx/zynaddsubfx/src/UI/EnvelopeUI.fl index 359f64caf30..db706777b43 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/UI/EnvelopeUI.fl +++ b/plugins/zynaddsubfx/zynaddsubfx/src/UI/EnvelopeUI.fl @@ -204,12 +204,14 @@ if (event==FL_RELEASE){ if ((event==FL_DRAG)&&(currentpoint>=0)){ int ny=127-(int) (y_*127.0/h()); - if (ny<0) ny=0;if (ny>127) ny=127; + 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 (newdt<0) newdt=0; + if (newdt>127) newdt=127; if (currentpoint!=0) env->Penvdt[currentpoint]=newdt; else env->Penvdt[currentpoint]=0; diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/UI/ResonanceUI.fl b/plugins/zynaddsubfx/zynaddsubfx/src/UI/ResonanceUI.fl index f1b887cd55d..5ab7290a519 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/UI/ResonanceUI.fl +++ b/plugins/zynaddsubfx/zynaddsubfx/src/UI/ResonanceUI.fl @@ -133,8 +133,10 @@ if ( (x_>=0)&&(x_=0)&&(y_=w()) x_=w();if (y_>=h()-1) y_=h()-1; + 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); diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/globals.h b/plugins/zynaddsubfx/zynaddsubfx/src/globals.h index d98e8babdf4..09ce60b1535 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/globals.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/globals.h @@ -7,8 +7,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/main.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/main.cpp index 555b1b4291a..750e9a2f228 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/main.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/main.cpp @@ -6,8 +6,9 @@ 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. + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 4d1a4a60d5c..563d240a901 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -53,6 +53,7 @@ INCLUDE_DIRECTORIES( ${JACK_INCLUDE_DIRS} ${SAMPLERATE_INCLUDE_DIRS} ${SNDFILE_INCLUDE_DIRS} + ${SNDIO_INCLUDE_DIRS} ) IF(NOT ("${SDL_INCLUDE_DIR}" STREQUAL "")) @@ -71,6 +72,13 @@ IF(NOT ("${OGGVORBIS_INCLUDE_DIR}" STREQUAL "")) INCLUDE_DIRECTORIES("${OGGVORBIS_INCLUDE_DIR}") ENDIF() +# Use libraries in non-standard directories (e.g., another version of Qt) +IF(LMMS_BUILD_LINUX) + LINK_LIBRARIES(-Wl,--enable-new-dtags) + SET(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE) +ENDIF() +SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) + # ADD_LIBRARY's OBJECT is only supported in CMake >=2.8.8 IF(CMAKE_VERSION VERSION_GREATER "2.8.7") @@ -106,6 +114,10 @@ IF(LMMS_BUILD_APPLE) SET(EXTRA_LIBRARIES "-framework CoreMIDI") ENDIF() +if(LMMS_HAVE_OSS AND LMMS_BUILD_OPENBSD) + SET(EXTRA_LIBRARIES "-lossaudio") +endif() + SET(LMMS_REQUIRED_LIBS ${CMAKE_THREAD_LIBS_INIT} ${QT_LIBRARIES} @@ -113,6 +125,7 @@ SET(LMMS_REQUIRED_LIBS ${SDL_LIBRARY} ${PORTAUDIO_LIBRARIES} ${SOUNDIO_LIBRARY} + ${SNDIO_LIBRARY} ${PULSEAUDIO_LIBRARIES} ${JACK_LIBRARIES} ${OGGVORBIS_LIBRARIES} @@ -171,13 +184,8 @@ IF(LMMS_BUILD_WIN32) "${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/libgig-6.dll" - "${MINGW_PREFIX}/bin/libportaudio-2.dll" - "${MINGW_PREFIX}/lib/libsoundio.dll" "${MINGW_PREFIX}/bin/libpng16-16.dll" "${MINGW_PREFIX}/bin/SDL.dll" "${MINGW_PREFIX}/bin/libglib-2.0-0.dll" @@ -191,6 +199,31 @@ IF(LMMS_BUILD_WIN32) "${MINGW_PREFIX}/bin/libstdc++-6.dll" DESTINATION .) ENDIF() + IF(FLTK_FOUND) + INSTALL(FILES + "${MINGW_PREFIX}/bin/libfltk.dll" + DESTINATION .) + ENDIF() + IF(FLUIDSYNTH_FOUND) + INSTALL(FILES + "${MINGW_PREFIX}/bin/libfluidsynth.dll" + DESTINATION .) + ENDIF() + IF(GIG_FOUND) + INSTALL(FILES + "${MINGW_PREFIX}/bin/libgig-6.dll" + DESTINATION .) + ENDIF() + IF(PORTAUDIO_FOUND) + INSTALL(FILES + "${MINGW_PREFIX}/bin/libportaudio-2.dll" + DESTINATION .) + ENDIF() + IF(SOUNDIO_FOUND) + INSTALL(FILES + "${MINGW_PREFIX}/lib/libsoundio.dll" + DESTINATION .) + ENDIF() ELSE(LMMS_BUILD_WIN32) IF(NOT LMMS_BUILD_APPLE) diff --git a/src/core/AutomatableModel.cpp b/src/core/AutomatableModel.cpp index 20b7b7d094a..509ee4aa0f9 100644 --- a/src/core/AutomatableModel.cpp +++ b/src/core/AutomatableModel.cpp @@ -27,6 +27,8 @@ #include "AutomationPattern.h" #include "ControllerConnection.h" #include "lmms_math.h" +#include "Mixer.h" +#include "ProjectJournal.h" float AutomatableModel::s_copiedValue = 0; long AutomatableModel::s_periodCounter = 0; @@ -97,7 +99,7 @@ void AutomatableModel::saveSettings( QDomDocument& doc, QDomElement& element, co // 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( "id", ProjectJournal::idToSave( id() ) ); me.setAttribute( "value", m_value ); me.setAttribute( "scale_type", m_scaleType == Logarithmic ? "log" : "linear" ); element.appendChild( me ); @@ -193,14 +195,20 @@ void AutomatableModel::loadSettings( const QDomElement& element, const QString& } } } - else if( element.hasAttribute( name ) ) - // attribute => read the element's value from the attribute list - { - setInitValue( element.attribute( name ).toFloat() ); - } else { - reset(); + + setScaleType( Linear ); + + if( element.hasAttribute( name ) ) + // attribute => read the element's value from the attribute list + { + setInitValue( element.attribute( name ).toFloat() ); + } + else + { + reset(); + } } } @@ -213,7 +221,7 @@ void AutomatableModel::setValue( const float value ) ++m_setValueDepth; const float old_val = m_value; - m_value = fittedValue( value, true ); + m_value = fittedValue( value ); if( old_val != m_value ) { // add changes to history so user can undo it @@ -369,11 +377,11 @@ void AutomatableModel::setStep( const float step ) -float AutomatableModel::fittedValue( float value, bool forceStep ) const +float AutomatableModel::fittedValue( float value ) const { value = tLimit( value, m_minValue, m_maxValue ); - if( m_step != 0 && ( m_hasStrictStepSize || forceStep ) ) + if( m_step != 0 && m_hasStrictStepSize ) { value = nearbyintf( value / m_step ) * m_step; } @@ -575,7 +583,7 @@ ValueBuffer * AutomatableModel::valueBuffer() float * nvalues = m_valueBuffer.values(); for( int i = 0; i < vb->length(); i++ ) { - nvalues[i] = fittedValue( values[i], false ); + nvalues[i] = fittedValue( values[i] ); } m_lastUpdatedPeriod = s_periodCounter; m_hasSampleExactData = true; diff --git a/src/core/AutomationPattern.cpp b/src/core/AutomationPattern.cpp index 9750a86136b..fc9fc42a9a1 100644 --- a/src/core/AutomationPattern.cpp +++ b/src/core/AutomationPattern.cpp @@ -28,6 +28,7 @@ #include "AutomationPatternView.h" #include "AutomationTrack.h" +#include "Note.h" #include "ProjectJournal.h" #include "BBTrackContainer.h" #include "Song.h" @@ -185,8 +186,7 @@ const AutomatableModel * AutomationPattern::firstObject() const - -MidiTime AutomationPattern::length() const +MidiTime AutomationPattern::timeMapLength() const { if( m_timeMap.isEmpty() ) return 0; timeMap::const_iterator it = m_timeMap.end(); @@ -196,6 +196,14 @@ MidiTime AutomationPattern::length() const +void AutomationPattern::updateLength() +{ + changeLength( timeMapLength() ); +} + + + + MidiTime AutomationPattern::putValue( const MidiTime & _time, const float _value, const bool _quant_pos ) @@ -218,7 +226,7 @@ MidiTime AutomationPattern::putValue( const MidiTime & _time, // automation track as the user can't resize this pattern if( getTrack() && getTrack()->type() == Track::HiddenAutomationTrack ) { - changeLength( length() ); + updateLength(); } emit dataChanged(); @@ -247,10 +255,9 @@ void AutomationPattern::removeValue( const MidiTime & _time, } generateTangents(it, 3); - if( getTrack() && - getTrack()->type() == Track::HiddenAutomationTrack ) + if( getTrack() && getTrack()->type() == Track::HiddenAutomationTrack ) { - changeLength( length() ); + updateLength(); } emit dataChanged(); @@ -513,7 +520,7 @@ void AutomationPattern::flipX( int length ) void AutomationPattern::saveSettings( QDomDocument & _doc, QDomElement & _this ) { _this.setAttribute( "pos", startPosition() ); - _this.setAttribute( "len", TrackContentObject::length() ); + _this.setAttribute( "len", length() ); _this.setAttribute( "name", name() ); _this.setAttribute( "prog", QString::number( progressionType() ) ); _this.setAttribute( "tens", QString::number( getTension() ) ); @@ -534,7 +541,8 @@ void AutomationPattern::saveSettings( QDomDocument & _doc, QDomElement & _this ) if( *it ) { QDomElement element = _doc.createElement( "object" ); - element.setAttribute( "id", ( *it )->id() ); + element.setAttribute( "id", + ProjectJournal::idToSave( ( *it )->id() ) ); _this.appendChild( element ); } } @@ -576,9 +584,13 @@ void AutomationPattern::loadSettings( const QDomElement & _this ) int len = _this.attribute( "len" ).toInt(); if( len <= 0 ) { - len = length(); + // TODO: Handle with an upgrade method + updateLength(); + } + else + { + changeLength( len ); } - changeLength( len ); generateTangents(); } diff --git a/src/core/BBTrackContainer.cpp b/src/core/BBTrackContainer.cpp index d38cfdc0096..da25a4580d1 100644 --- a/src/core/BBTrackContainer.cpp +++ b/src/core/BBTrackContainer.cpp @@ -85,12 +85,6 @@ void BBTrackContainer::updateAfterTrackAdd() { 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 ); - } } @@ -221,9 +215,6 @@ void BBTrackContainer::updateComboBox() 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(); @@ -241,21 +232,10 @@ void BBTrackContainer::currentBBChanged() 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 ) ); - } + tl[i]->createTCOsForBB( _bb ); } } diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index 18b1987e933..3ec3cb7ee9b 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -30,6 +30,7 @@ set(LMMS_SRCS core/LadspaControl.cpp core/LadspaManager.cpp core/LfoController.cpp + core/LocklessAllocator.cpp core/MemoryHelper.cpp core/MemoryManager.cpp core/MeterModel.cpp @@ -71,6 +72,7 @@ set(LMMS_SRCS core/audio/AudioFileWave.cpp core/audio/AudioJack.cpp core/audio/AudioOss.cpp + core/audio/AudioSndio.cpp core/audio/AudioPort.cpp core/audio/AudioPortAudio.cpp core/audio/AudioSoundIo.cpp @@ -84,6 +86,7 @@ set(LMMS_SRCS core/midi/MidiController.cpp core/midi/MidiJack.cpp core/midi/MidiOss.cpp + core/midi/MidiSndio.cpp core/midi/MidiApple.cpp core/midi/MidiPort.cpp core/midi/MidiTime.cpp diff --git a/src/core/ConfigManager.cpp b/src/core/ConfigManager.cpp index b81bad20045..cbedf4b05d4 100644 --- a/src/core/ConfigManager.cpp +++ b/src/core/ConfigManager.cpp @@ -55,7 +55,6 @@ ConfigManager::ConfigManager() : m_dataDir( "data:/" ), m_artworkDir( defaultArtworkDir() ), m_vstDir( m_workingDir + "vst/" ), - m_flDir( QDir::home().absolutePath() ), m_gigDir( m_workingDir + GIG_PATH ), m_sf2Dir( m_workingDir + SF2_PATH ), m_version( defaultVersion() ) @@ -63,14 +62,16 @@ ConfigManager::ConfigManager() : if (! qgetenv("LMMS_DATA_DIR").isEmpty()) QDir::addSearchPath("data", QString::fromLocal8Bit(qgetenv("LMMS_DATA_DIR"))); - // If we're in development (lmms is not installed) let's get the source - // directory by reading the CMake Cache + // If we're in development (lmms is not installed) let's get the source and + // binary directories by reading the CMake Cache QFile cmakeCache(qApp->applicationDirPath() + "/CMakeCache.txt"); if (cmakeCache.exists()) { cmakeCache.open(QFile::ReadOnly); QTextStream stream(&cmakeCache); - // Find the line containing something like lmms_SOURCE_DIR:static= + // Find the lines containing something like lmms_SOURCE_DIR:static= + // and lmms_BINARY_DIR:static= + int done = 0; while(! stream.atEnd()) { QString line = stream.readLine(); @@ -78,6 +79,15 @@ ConfigManager::ConfigManager() : if (line.startsWith("lmms_SOURCE_DIR:")) { QString srcDir = line.section('=', -1).trimmed(); QDir::addSearchPath("data", srcDir + "/data/"); + done++; + } + if (line.startsWith("lmms_BINARY_DIR:")) { + m_lmmsRcFile = line.section('=', -1).trimmed() + QDir::separator() + + ".lmmsrc.xml"; + done++; + } + if (done == 2) + { break; } } @@ -137,13 +147,13 @@ void ConfigManager::upgrade() ProjectVersion createdWith = m_version; - if ( createdWith.setCompareType(Build) < "1.1.90" ) + if ( createdWith.setCompareType(ProjectVersion::Build) < "1.1.90" ) { upgrade_1_1_90(); } // Don't use old themes as they break the UI (i.e. 0.4 != 1.0, etc) - if ( createdWith.setCompareType(Minor) != LMMS_VERSION ) + if ( createdWith.setCompareType(ProjectVersion::Minor) != LMMS_VERSION ) { m_artworkDir = defaultArtworkDir(); } @@ -182,14 +192,6 @@ void ConfigManager::setArtworkDir( const QString & _ad ) -void ConfigManager::setFLDir( const QString & _fd ) -{ - m_flDir = ensureTrailingSlash( _fd ); -} - - - - void ConfigManager::setLADSPADir( const QString & _fd ) { m_ladDir = _fd; @@ -331,9 +333,15 @@ void ConfigManager::deleteValue( const QString & cls, const QString & attribute) } -void ConfigManager::loadConfigFile() +void ConfigManager::loadConfigFile( const QString & configFile ) { // read the XML file and create DOM tree + // Allow configuration file override through --config commandline option + if ( !configFile.isEmpty() ) + { + m_lmmsRcFile = configFile; + } + QFile cfg_file( m_lmmsRcFile ); QDomDocument dom_tree; @@ -405,7 +413,6 @@ void ConfigManager::loadConfigFile() setGIGDir( value( "paths", "gigdir" ) == "" ? gigDir() : value( "paths", "gigdir" ) ); setSF2Dir( value( "paths", "sf2dir" ) == "" ? sf2Dir() : value( "paths", "sf2dir" ) ); setVSTDir( value( "paths", "vstdir" ) ); - setFLDir( value( "paths", "fldir" ) ); setLADSPADir( value( "paths", "laddir" ) ); #ifdef LMMS_HAVE_STK setSTKDir( value( "paths", "stkdir" ) ); @@ -438,11 +445,6 @@ void ConfigManager::loadConfigFile() #endif } - if( m_flDir.isEmpty() || m_flDir == QDir::separator() || m_flDir == "/") - { - m_flDir = ensureTrailingSlash( QDir::home().absolutePath() ); - } - if( m_ladDir.isEmpty() ) { m_ladDir = userLadspaDir(); @@ -485,7 +487,6 @@ 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", "gigdir", m_gigDir ); setValue( "paths", "sf2dir", m_sf2Dir ); setValue( "paths", "laddir", m_ladDir ); diff --git a/src/core/DataFile.cpp b/src/core/DataFile.cpp index 7cc3c1bb23d..89b6981ab79 100644 --- a/src/core/DataFile.cpp +++ b/src/core/DataFile.cpp @@ -37,11 +37,16 @@ #include "base64.h" #include "ConfigManager.h" #include "Effect.h" +#include "embed.h" #include "GuiApplication.h" +#include "lmms_basics.h" #include "lmmsversion.h" #include "PluginFactory.h" #include "ProjectVersion.h" #include "SongEditor.h" +#include "TextFloat.h" + +static void findIds(const QDomElement& elem, QList& idList); @@ -191,7 +196,7 @@ bool DataFile::validate( QString extension ) extension == "xpf" || extension == "xml" || ( extension == "xiz" && ! pluginFactory->pluginSupportingExtension(extension).isNull()) || extension == "sf2" || extension == "pat" || extension == "mid" || - extension == "flp" || extension == "dll" + extension == "dll" ) ) { return true; @@ -792,6 +797,84 @@ void DataFile::upgrade_0_4_0_rc2() } +void DataFile::upgrade_1_0_99() +{ + jo_id_t last_assigned_id = 0; + + QList idList; + findIds(documentElement(), idList); + + QDomNodeList list = elementsByTagName("ladspacontrols"); + for(int i = 0; !list.item(i).isNull(); ++i) + { + for(QDomNode node = list.item(i).firstChild(); !node.isNull(); + node = node.nextSibling()) + { + QDomElement el = node.toElement(); + QDomNode data_child = el.namedItem("data"); + if(!data_child.isElement()) + { + if (el.attribute("scale_type") == "log") + { + QDomElement me = createElement("data"); + me.setAttribute("value", el.attribute("data")); + me.setAttribute("scale_type", "log"); + + jo_id_t id; + for(id = last_assigned_id + 1; + idList.contains(id); id++) + { + } + + last_assigned_id = id; + idList.append(id); + me.setAttribute("id", id); + el.appendChild(me); + + } + } + } + } +} + + +void DataFile::upgrade_1_1_0() +{ + QDomNodeList list = elementsByTagName("fxchannel"); + for (int i = 1; !list.item(i).isNull(); ++i) + { + QDomElement el = list.item(i).toElement(); + QDomElement send = createElement("send"); + send.setAttribute("channel", "0"); + send.setAttribute("amount", "1"); + el.appendChild(send); + } +} + + +void DataFile::upgrade_1_1_91() +{ + // Upgrade to version 1.1.91 from some version less than 1.1.91 + 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( QRegExp("/samples/bassloopes/"), "/samples/bassloops/" ); + el.setAttribute( "src", s ); + } + + list = elementsByTagName( "attribute" ); + for( int i = 0; !list.item( i ).isNull(); ++i ) + { + QDomElement el = list.item( i ).toElement(); + if ( el.attribute( "name" ) == "plugin" && el.attribute( "value" ) == "vocoder-lmms" ) { + el.setAttribute( "value", "vocoder" ); + } + } +} + + void DataFile::upgrade() { ProjectVersion version = @@ -856,6 +939,18 @@ void DataFile::upgrade() { upgrade_0_4_0_rc2(); } + if( version < "1.0.99-0" ) + { + upgrade_1_0_99(); + } + if( version < "1.1.0-0" ) + { + upgrade_1_1_0(); + } + if( version < "1.1.91-0" ) + { + upgrade_1_1_91(); + } // update document meta data documentElement().setAttribute( "version", LDF_VERSION_STRING ); @@ -923,31 +1018,36 @@ void DataFile::loadData( const QByteArray & _data, const QString & _sourceFile ) { // compareType defaults to Build,so it doesn't have to be set here ProjectVersion createdWith = root.attribute( "creatorversion" ); - ProjectVersion openedWith = LMMS_VERSION;; + ProjectVersion openedWith = LMMS_VERSION; if ( createdWith != openedWith ) { // only one compareType needs to be set, and we can compare on one line because setCompareType returns ProjectVersion - if ( createdWith.setCompareType(Minor) != openedWith) + if( createdWith.setCompareType( ProjectVersion::Minor ) + != openedWith ) { if( gui != nullptr && root.attribute( "type" ) == "song" ) { - QMessageBox::information( NULL, - SongEditor::tr( "Project Version Mismatch" ), - SongEditor::tr( - "This %1 was created with " - "LMMS version %2, but version %3 " - "is installed") - .arg( _sourceFile.endsWith( ".mpt" ) ? - "template" : - "project" ) - .arg( root.attribute( "creatorversion" ) ) - .arg( LMMS_VERSION ) ); + TextFloat::displayMessage( + SongEditor::tr( "Version difference" ), + SongEditor::tr( + "This %1 was created with " + "LMMS %2." + ).arg( + _sourceFile.endsWith( ".mpt" ) ? + SongEditor::tr( "template" ) : + SongEditor::tr( "project" ) + ) + .arg( root.attribute( "creatorversion" ) ), + embed::getIconPixmap( "whatsthis", 24, 24 ), + 2500 + ); } } // the upgrade needs to happen after the warning as it updates the project version. - if( createdWith.setCompareType(Build) < openedWith ) + if( createdWith.setCompareType( ProjectVersion::Build ) + < openedWith ) { upgrade(); } @@ -958,3 +1058,18 @@ void DataFile::loadData( const QByteArray & _data, const QString & _sourceFile ) item( 0 ).toElement(); } + +void findIds(const QDomElement& elem, QList& idList) +{ + if(elem.hasAttribute("id")) + { + idList.append(elem.attribute("id").toInt()); + } + QDomElement child = elem.firstChildElement(); + while(!child.isNull()) + { + findIds(child, idList); + child = child.nextSiblingElement(); + } +} + diff --git a/src/core/DrumSynth.cpp b/src/core/DrumSynth.cpp index da77d93719d..d90cd9ee126 100644 --- a/src/core/DrumSynth.cpp +++ b/src/core/DrumSynth.cpp @@ -154,7 +154,8 @@ float DrumSynth::waveform(float ph, int form) 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; + if(w>1.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 @@ -428,7 +429,9 @@ int DrumSynth::GetDSFileSamples(const char *dsfile, int16_t *&wave, int channels 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; + if(DStep==7) DStep=20; + if(DStep==6) DStep=10; + if(DStep==5) DStep=8; clippoint = 32700; DAtten = 1.0f; diff --git a/src/core/EffectChain.cpp b/src/core/EffectChain.cpp index f06cc04aa90..47fb6255baf 100644 --- a/src/core/EffectChain.cpp +++ b/src/core/EffectChain.cpp @@ -122,9 +122,9 @@ void EffectChain::loadSettings( const QDomElement & _this ) void EffectChain::appendEffect( Effect * _effect ) { - Engine::mixer()->lock(); + Engine::mixer()->requestChangeInModel(); m_effects.append( _effect ); - Engine::mixer()->unlock(); + Engine::mixer()->doneChangeInModel(); emit dataChanged(); } @@ -134,21 +134,18 @@ void EffectChain::appendEffect( Effect * _effect ) void EffectChain::removeEffect( Effect * _effect ) { - Engine::mixer()->lock(); + Engine::mixer()->requestChangeInModel(); Effect ** found = qFind( m_effects.begin(), m_effects.end(), _effect ); if( found == m_effects.end() ) { - goto fail; + Engine::mixer()->doneChangeInModel(); + return; } m_effects.erase( found ); - Engine::mixer()->unlock(); + Engine::mixer()->doneChangeInModel(); emit dataChanged(); - return; - -fail: - Engine::mixer()->unlock(); } @@ -252,14 +249,15 @@ void EffectChain::clear() { emit aboutToClear(); - Engine::mixer()->lock(); + Engine::mixer()->requestChangeInModel(); m_enabledModel.setValue( false ); - for( int i = 0; i < m_effects.count(); ++i ) + while( m_effects.count() ) { - delete m_effects[i]; + Effect * e = m_effects[m_effects.count() - 1]; + m_effects.pop_back(); + delete e; } - m_effects.clear(); - Engine::mixer()->unlock(); + Engine::mixer()->doneChangeInModel(); } diff --git a/src/core/FxMixer.cpp b/src/core/FxMixer.cpp index be4378bd8bf..14f77bcf6c8 100644 --- a/src/core/FxMixer.cpp +++ b/src/core/FxMixer.cpp @@ -26,6 +26,7 @@ #include "BufferManager.h" #include "FxMixer.h" +#include "Mixer.h" #include "MixerWorkerThread.h" #include "MixHelpers.h" #include "Song.h" @@ -210,9 +211,11 @@ FxMixer::~FxMixer() { deleteChannelSend( m_fxRoutes.first() ); } - for( int i = 0; i < m_fxChannels.size(); ++i ) + while( m_fxChannels.size() ) { - delete m_fxChannels[i]; + FxChannel * f = m_fxChannels[m_fxChannels.size() - 1]; + m_fxChannels.pop_back(); + delete f; } } @@ -284,9 +287,8 @@ void FxMixer::toggledSolo() void FxMixer::deleteChannel( int index ) { - m_fxChannels[index]->m_lock.lock(); - - FxChannel * ch = m_fxChannels[index]; + // channel deletion is performed between mixer rounds + Engine::mixer()->requestChangeInModel(); // go through every instrument and adjust for the channel index change TrackContainer::TrackList tracks; @@ -313,6 +315,8 @@ void FxMixer::deleteChannel( int index ) } } + FxChannel * ch = m_fxChannels[index]; + // delete all of this channel's sends and receives while( ! ch->m_sends.isEmpty() ) { @@ -324,8 +328,8 @@ void FxMixer::deleteChannel( int index ) } // actually delete the channel - delete m_fxChannels[index]; m_fxChannels.remove(index); + delete ch; for( int i = index; i < m_fxChannels.size(); ++i ) { @@ -344,6 +348,8 @@ void FxMixer::deleteChannel( int index ) r->updateName(); } } + + Engine::mixer()->doneChangeInModel(); } @@ -430,7 +436,7 @@ FxRoute * FxMixer::createRoute( FxChannel * from, FxChannel * to, float amount ) { return NULL; } - m_sendsMutex.lock(); + Engine::mixer()->requestChangeInModel(); FxRoute * route = new FxRoute( from, to, amount ); // add us to from's sends @@ -441,7 +447,7 @@ FxRoute * FxMixer::createRoute( FxChannel * from, FxChannel * to, float amount ) // add us to fxmixer's list Engine::fxMixer()->m_fxRoutes.append( route ); - m_sendsMutex.unlock(); + Engine::mixer()->doneChangeInModel(); return route; } @@ -468,7 +474,7 @@ void FxMixer::deleteChannelSend( fx_ch_t fromChannel, fx_ch_t toChannel ) void FxMixer::deleteChannelSend( FxRoute * route ) { - m_sendsMutex.lock(); + Engine::mixer()->requestChangeInModel(); // remove us from from's sends route->sender()->m_sends.remove( route->sender()->m_sends.indexOf( route ) ); // remove us from to's receives @@ -476,7 +482,7 @@ void FxMixer::deleteChannelSend( FxRoute * route ) // remove us from fxmixer's list Engine::fxMixer()->m_fxRoutes.remove( Engine::fxMixer()->m_fxRoutes.indexOf( route ) ); delete route; - m_sendsMutex.unlock(); + Engine::mixer()->doneChangeInModel(); } @@ -543,10 +549,7 @@ FloatModel * FxMixer::channelSendModel( fx_ch_t fromChannel, fx_ch_t toChannel ) void FxMixer::mixToChannel( const sampleFrame * _buf, fx_ch_t _ch ) { - // The first check is for the case where the last fxchannel was deleted but - // there was a race condition where it had to be processed. - if( _ch < m_fxChannels.size() && - m_fxChannels[_ch]->m_muteModel.value() == false ) + 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() ); @@ -570,33 +573,46 @@ 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 ); + for( 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 ) { - // 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 ); + bool found = false; for( FxChannel * ch : m_fxChannels ) { - ch->m_muted = ch->m_muteModel.value(); - if( ch->m_muted ) // instantly "process" muted channels + int s = ch->state(); + if( s == ThreadableJob::Queued + || s == ThreadableJob::InProgress ) { - ch->processed(); - ch->done(); - } - else if( ch->m_receives.size() == 0 ) - { - ch->m_queued = true; - MixerWorkerThread::addJob( ch ); + found = true; + break; } } - while( m_fxChannels[0]->state() != ThreadableJob::Done ) + if( !found ) { - MixerWorkerThread::startAndWaitForJobs(); + break; } - m_sendsMutex.unlock(); + MixerWorkerThread::startAndWaitForJobs(); } // handle sample-exact data in master volume fader @@ -721,7 +737,6 @@ void FxMixer::loadSettings( const QDomElement & _this ) { clear(); QDomNode node = _this.firstChild(); - bool thereIsASend = false; while( ! node.isNull() ) { @@ -748,7 +763,6 @@ void FxMixer::loadSettings( const QDomElement & _this ) QDomElement chDataItem = chData.at(i).toElement(); if( chDataItem.nodeName() == QString( "send" ) ) { - thereIsASend = true; int sendTo = chDataItem.attribute( "channel" ).toInt(); allocateChannelsTo( sendTo ) ; FxRoute * fxr = createChannelSend( num, sendTo, 1.0f ); @@ -761,15 +775,6 @@ void FxMixer::loadSettings( const QDomElement & _this ) 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; i * diff --git a/src/core/InstrumentFunctions.cpp b/src/core/InstrumentFunctions.cpp index 1083a3052d0..886edf2d8e7 100644 --- a/src/core/InstrumentFunctions.cpp +++ b/src/core/InstrumentFunctions.cpp @@ -28,6 +28,7 @@ #include "embed.h" #include "Engine.h" #include "InstrumentTrack.h" +#include "Mixer.h" #include "NotePlayHandle.h" #include "PresetPreviewPlayHandle.h" @@ -267,8 +268,6 @@ void InstrumentFunctionNoteStacking::processNote( NotePlayHandle * _n ) } } } - - } @@ -302,6 +301,8 @@ InstrumentFunctionArpeggio::InstrumentFunctionArpeggio( Model * _parent ) : m_arpEnabledModel( false ), m_arpModel( this, tr( "Arpeggio type" ) ), m_arpRangeModel( 1.0f, 1.0f, 9.0f, 1.0f, this, tr( "Arpeggio range" ) ), + m_arpSkipModel( 0.0f, 0.0f, 100.0f, 1.0f, this, tr( "Skip rate" ) ), + m_arpMissModel( 0.0f, 0.0f, 100.0f, 1.0f, this, tr( "Miss rate" ) ), 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" ) ), @@ -407,7 +408,36 @@ void InstrumentFunctionArpeggio::processNote( NotePlayHandle * _n ) continue; } - const int dir = m_arpDirectionModel.value(); + // Skip notes randomly + if( m_arpSkipModel.value() ) + { + + if( 100 * ( (float) rand() / (float)( RAND_MAX + 1.0f ) ) < m_arpSkipModel.value() ) + { + if( cur_arp_idx == 0 ) + { + _n->setMasterNote(); + } + // update counters + frames_processed += arp_frames; + cur_frame += arp_frames; + continue; + } + } + + int dir = m_arpDirectionModel.value(); + + // Miss notes randomly. We intercept int dir and abuse it + // after need. :) + + if( m_arpMissModel.value() ) + { + if( 100 * ( (float) rand() / (float)( RAND_MAX + 1.0f ) ) < m_arpMissModel.value() ) + { + dir = ArpDirRandom; + } + } + // process according to arpeggio-direction... if( dir == ArpDirUp ) { @@ -496,6 +526,8 @@ void InstrumentFunctionArpeggio::saveSettings( QDomDocument & _doc, QDomElement m_arpEnabledModel.saveSettings( _doc, _this, "arp-enabled" ); m_arpModel.saveSettings( _doc, _this, "arp" ); m_arpRangeModel.saveSettings( _doc, _this, "arprange" ); + m_arpSkipModel.saveSettings( _doc, _this, "arpskip" ); + m_arpMissModel.saveSettings( _doc, _this, "arpmiss" ); m_arpTimeModel.saveSettings( _doc, _this, "arptime" ); m_arpGateModel.saveSettings( _doc, _this, "arpgate" ); m_arpDirectionModel.saveSettings( _doc, _this, "arpdir" ); @@ -511,6 +543,8 @@ void InstrumentFunctionArpeggio::loadSettings( const QDomElement & _this ) m_arpEnabledModel.loadSettings( _this, "arp-enabled" ); m_arpModel.loadSettings( _this, "arp" ); m_arpRangeModel.loadSettings( _this, "arprange" ); + m_arpSkipModel.loadSettings( _this, "arpskip" ); + m_arpMissModel.loadSettings( _this, "arpmiss" ); m_arpTimeModel.loadSettings( _this, "arptime" ); m_arpGateModel.loadSettings( _this, "arpgate" ); m_arpDirectionModel.loadSettings( _this, "arpdir" ); diff --git a/src/core/InstrumentSoundShaping.cpp b/src/core/InstrumentSoundShaping.cpp index 1dc6c033733..b006fadcdb4 100644 --- a/src/core/InstrumentSoundShaping.cpp +++ b/src/core/InstrumentSoundShaping.cpp @@ -31,6 +31,7 @@ #include "EnvelopeAndLfoParameters.h" #include "Instrument.h" #include "InstrumentTrack.h" +#include "Mixer.h" #include "NotePlayHandle.h" diff --git a/src/core/JournallingObject.cpp b/src/core/JournallingObject.cpp index 4c3163f0c10..1e15383d37c 100644 --- a/src/core/JournallingObject.cpp +++ b/src/core/JournallingObject.cpp @@ -135,6 +135,7 @@ void JournallingObject::changeID( jo_id_t _id ) return; } + Engine::projectJournal()->freeID( m_id ); Engine::projectJournal()->reallocID( _id, this ); m_id = _id; } diff --git a/src/core/LocklessAllocator.cpp b/src/core/LocklessAllocator.cpp new file mode 100644 index 00000000000..27341e926e5 --- /dev/null +++ b/src/core/LocklessAllocator.cpp @@ -0,0 +1,159 @@ +/* + * LocklessAllocator.cpp - allocator with lockless alloc and free + * + * Copyright (c) 2016 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 "LocklessAllocator.h" + +#include +#include + +#include "lmmsconfig.h" + + +static const size_t SIZEOF_SET = sizeof( int ) * 8; + + +static size_t align( size_t size, size_t alignment ) +{ + size_t misalignment = size % alignment; + if( misalignment ) + { + size += alignment - misalignment; + } + return size; +} + + + + +LocklessAllocator::LocklessAllocator( size_t nmemb, size_t size ) +{ + m_capacity = align( nmemb, SIZEOF_SET ); + m_elementSize = align( size, sizeof( void * ) ); + m_pool = new char[m_capacity * m_elementSize]; + + m_freeStateSets = m_capacity / SIZEOF_SET; + m_freeState = new AtomicInt[m_freeStateSets]; + + m_available = m_capacity; +} + + + + +LocklessAllocator::~LocklessAllocator() +{ + int available = m_available; + if( available != m_capacity ) + { + fprintf( stderr, "LocklessAllocator: " + "Destroying with elements still allocated\n" ); + } + + delete[] m_pool; + delete[] m_freeState; +} + + + + +#ifdef LMMS_BUILD_WIN32 +static int ffs( int i ) +{ + if( !i ) + { + return 0; + } + for( int j = 0;; ) + { + if( i & 1 << j++ ) + { + return j; + } + } +} +#endif + + + + +void * LocklessAllocator::alloc() +{ + int available; + do + { + available = m_available; + if( !available ) + { + fprintf( stderr, "LocklessAllocator: No free space\n" ); + return NULL; + } + } + while( !m_available.testAndSetOrdered( available, available - 1 ) ); + + size_t startIndex = m_startIndex.fetchAndAddOrdered( 1 ) + % m_freeStateSets; + for( size_t set = startIndex;; set = ( set + 1 ) % m_freeStateSets ) + { + for( int freeState = m_freeState[set]; freeState != -1; + freeState = m_freeState[set] ) + { + int bit = ffs( ~freeState ) - 1; + if( m_freeState[set].testAndSetOrdered( freeState, + freeState | 1 << bit ) ) + { + return m_pool + ( SIZEOF_SET * set + bit ) + * m_elementSize; + } + } + } +} + + + + +void LocklessAllocator::free( void * ptr ) +{ + ptrdiff_t diff = (char *)ptr - m_pool; + if( diff < 0 || diff % m_elementSize ) + { +invalid: + fprintf( stderr, "LocklessAllocator: Invalid pointer\n" ); + return; + } + size_t offset = diff / m_elementSize; + if( offset >= m_capacity ) + { + goto invalid; + } + size_t set = offset / SIZEOF_SET; + int bit = offset % SIZEOF_SET; + int mask = 1 << bit; + int prevState = m_freeState[set].fetchAndAndOrdered( ~mask ); + if ( !( prevState & mask ) ) + { + fprintf( stderr, "LocklessAllocator: Block not in use\n" ); + return; + } + m_available.fetchAndAddOrdered( 1 ); +} diff --git a/src/core/MemoryManager.cpp b/src/core/MemoryManager.cpp index 2f8cb675e18..6a0c7060b0b 100644 --- a/src/core/MemoryManager.cpp +++ b/src/core/MemoryManager.cpp @@ -50,6 +50,11 @@ bool MemoryManager::init() void * MemoryManager::alloc( size_t size ) { + if( !size ) + { + return NULL; + } + int requiredChunks = size / MM_CHUNK_SIZE + ( size % MM_CHUNK_SIZE > 0 ? 1 : 0 ); MemoryPool * mp = NULL; diff --git a/src/core/Mixer.cpp b/src/core/Mixer.cpp index 1f923e2ca36..a2072fc40d0 100644 --- a/src/core/Mixer.cpp +++ b/src/core/Mixer.cpp @@ -40,6 +40,7 @@ #include "AudioAlsa.h" #include "AudioJack.h" #include "AudioOss.h" +#include "AudioSndio.h" #include "AudioPortAudio.h" #include "AudioSoundIo.h" #include "AudioPulseAudio.h" @@ -51,6 +52,7 @@ #include "MidiAlsaSeq.h" #include "MidiJack.h" #include "MidiOss.h" +#include "MidiSndio.h" #include "MidiWinMM.h" #include "MidiApple.h" #include "MidiDummy.h" @@ -60,6 +62,14 @@ +typedef LocklessList::Element LocklessListElement; + + +static __thread bool s_renderingThread; + + + + Mixer::Mixer( bool renderOnly ) : m_framesPerPeriod( DEFAULT_BUFFER_SIZE ), m_inputBufferRead( 0 ), @@ -68,14 +78,20 @@ Mixer::Mixer( bool renderOnly ) : m_writeBuf( NULL ), m_workers(), m_numWorkers( QThread::idealThreadCount()-1 ), + m_newPlayHandles( PlayHandle::MaxNumber ), m_qualitySettings( qualitySettings::Mode_Draft ), m_masterGain( 1.0f ), + m_isProcessing( false ), m_audioDev( NULL ), m_oldAudioDev( NULL ), m_audioDevStartFailed( false ), - m_globalMutex( QMutex::Recursive ), m_profiler(), - m_metronomeActive(false) + m_metronomeActive(false), + m_clearSignal( false ), + m_changesSignal( false ), + m_changes( 0 ), + m_doChangesMutex( QMutex::Recursive ), + m_waitingForWrite( false ) { for( int i = 0; i < 2; ++i ) { @@ -150,6 +166,8 @@ Mixer::Mixer( bool renderOnly ) : Mixer::~Mixer() { + runChangesInModel(); + for( int w = 0; w < m_numWorkers; ++w ) { m_workers[w]->quit(); @@ -207,6 +225,8 @@ void Mixer::startProcessing( bool _needs_fifo ) } m_audioDev->startProcessing(); + + m_isProcessing = true; } @@ -214,13 +234,15 @@ void Mixer::startProcessing( bool _needs_fifo ) void Mixer::stopProcessing() { + m_isProcessing = false; + if( m_fifoWriter != NULL ) { m_fifoWriter->finish(); m_fifoWriter->wait(); + m_audioDev->stopProcessing(); delete m_fifoWriter; m_fifoWriter = NULL; - m_audioDev->stopProcessing(); } else { @@ -281,7 +303,7 @@ bool Mixer::criticalXRuns() const void Mixer::pushInputFrames( sampleFrame * _ab, const f_cnt_t _frames ) { - lockInputFrames(); + requestChangeInModel(); f_cnt_t frames = m_inputBufferFrames[ m_inputBufferWrite ]; int size = m_inputBufferSize[ m_inputBufferWrite ]; @@ -303,7 +325,7 @@ void Mixer::pushInputFrames( sampleFrame * _ab, const f_cnt_t _frames ) memcpy( &buf[ frames ], _ab, _frames * sizeof( sampleFrame ) ); m_inputBufferFrames[ m_inputBufferWrite ] += _frames; - unlockInputFrames(); + doneChangeInModel(); } @@ -313,6 +335,8 @@ const surroundSampleFrame * Mixer::renderNextBuffer() { m_profiler.startPeriod(); + s_renderingThread = true; + static Song::PlayPos last_metro_pos = -1; Song *song = Engine::getSong(); @@ -340,20 +364,22 @@ const surroundSampleFrame * Mixer::renderNextBuffer() 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(); + + if( m_clearSignal ) + { + m_clearSignal = false; + clearInternal(); + } // remove all play-handles that have to be deleted and delete // them if they still exist... // maybe this algorithm could be optimized... - lockPlayHandleRemoval(); ConstPlayHandleList::Iterator it_rem = m_playHandlesToRemove.begin(); while( it_rem != m_playHandlesToRemove.end() ) { @@ -372,11 +398,6 @@ const surroundSampleFrame * Mixer::renderNextBuffer() it_rem = m_playHandlesToRemove.erase( it_rem ); } - unlockPlayHandleRemoval(); - - // now we have to make sure no other thread does anything bad - // while we're acting... - lock(); // rotate buffers m_writeBuffer = ( m_writeBuffer + 1 ) % m_poolDepth; @@ -396,13 +417,15 @@ const surroundSampleFrame * Mixer::renderNextBuffer() song->processNextBuffer(); // add all play-handles that have to be added - m_playHandleMutex.lock(); - m_playHandles += m_newPlayHandles; - m_newPlayHandles.clear(); - m_playHandleMutex.unlock(); + for( LocklessListElement * e = m_newPlayHandles.popList(); e; ) + { + m_playHandles += e->value; + LocklessListElement * next = e->next; + m_newPlayHandles.free( e ); + e = next; + } // STAGE 1: run and render all play handles - lockPlayHandleRemoval(); MixerWorkerThread::fillJobQueue( m_playHandles ); MixerWorkerThread::startAndWaitForJobs(); @@ -431,7 +454,6 @@ const surroundSampleFrame * Mixer::renderNextBuffer() ++it; } } - unlockPlayHandleRemoval(); // STAGE 2: process effects of all instrument- and sampletracks MixerWorkerThread::fillJobQueue >( m_audioPorts ); @@ -441,11 +463,11 @@ const surroundSampleFrame * Mixer::renderNextBuffer() // STAGE 3: do master mix in FX mixer fxMixer->masterMix( m_writeBuf ); - unlock(); - emit nextAudioBuffer( m_readBuf ); + runChangesInModel(); + // and trigger LFOs EnvelopeAndLfoParameters::instances()->trigger(); Controller::triggerFrameCounter(); @@ -454,6 +476,8 @@ const surroundSampleFrame * Mixer::renderNextBuffer() // refresh buffer pool BufferManager::refresh(); + s_renderingThread = false; + m_profiler.finishPeriod( processingSampleRate(), m_framesPerPeriod ); return m_readBuf; @@ -462,13 +486,19 @@ const surroundSampleFrame * Mixer::renderNextBuffer() +void Mixer::clear() +{ + m_clearSignal = true; +} + + + + // 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() +void Mixer::clearInternal() { // TODO: m_midiClient->noteOffAll(); - lock(); - lockPlayHandleRemoval(); for( PlayHandleList::Iterator it = m_playHandles.begin(); it != m_playHandles.end(); ++it ) { // we must not delete instrument-play-handles as they exist @@ -478,8 +508,6 @@ void Mixer::clear() m_playHandlesToRemove.push_back( *it ); } } - unlockPlayHandleRemoval(); - unlock(); } @@ -601,15 +629,15 @@ void Mixer::restoreAudioDevice() void Mixer::removeAudioPort( AudioPort * _port ) { + requestChangeInModel(); QVector::Iterator it = qFind( m_audioPorts.begin(), m_audioPorts.end(), _port ); if( it != m_audioPorts.end() ) { - lock(); m_audioPorts.erase( it ); - unlock(); } + doneChangeInModel(); } @@ -617,10 +645,8 @@ bool Mixer::addPlayHandle( PlayHandle* handle ) { if( criticalXRuns() == false ) { - m_playHandleMutex.lock(); - m_newPlayHandles.append( handle ); - handle->audioPort()->addPlayHandle( handle ); - m_playHandleMutex.unlock(); + m_newPlayHandles.push( handle ); + handle->audioPort()->addPlayHandle( handle ); return true; } @@ -636,7 +662,7 @@ bool Mixer::addPlayHandle( PlayHandle* handle ) void Mixer::removePlayHandle( PlayHandle * _ph ) { - lockPlayHandleRemoval(); + requestChangeInModel(); // check thread affinity as we must not delete play-handles // which were created in a thread different than mixer thread if( _ph->affinityMatters() && @@ -646,18 +672,26 @@ void Mixer::removePlayHandle( PlayHandle * _ph ) bool removedFromList = false; // Check m_newPlayHandles first because doing it the other way around // creates a race condition - m_playHandleMutex.lock(); - PlayHandleList::Iterator it = - qFind( m_newPlayHandles.begin(), - m_newPlayHandles.end(), _ph ); - if( it != m_newPlayHandles.end() ) + for( LocklessListElement * e = m_newPlayHandles.first(), + * ePrev = NULL; e; ePrev = e, e = e->next ) { - m_newPlayHandles.erase( it ); - removedFromList = true; + if( e->value == _ph ) + { + if( ePrev ) + { + ePrev->next = e->next; + } + else + { + m_newPlayHandles.setFirst( e->next ); + } + m_newPlayHandles.free( e ); + removedFromList = true; + break; + } } - m_playHandleMutex.unlock(); // Now check m_playHandles - it = qFind( m_playHandles.begin(), + PlayHandleList::Iterator it = qFind( m_playHandles.begin(), m_playHandles.end(), _ph ); if( it != m_playHandles.end() ) { @@ -680,7 +714,7 @@ void Mixer::removePlayHandle( PlayHandle * _ph ) { m_playHandlesToRemove.push_back( _ph ); } - unlockPlayHandleRemoval(); + doneChangeInModel(); } @@ -688,7 +722,7 @@ void Mixer::removePlayHandle( PlayHandle * _ph ) void Mixer::removePlayHandlesOfTypes( Track * _track, const quint8 types ) { - lockPlayHandleRemoval(); + requestChangeInModel(); PlayHandleList::Iterator it = m_playHandles.begin(); while( it != m_playHandles.end() ) { @@ -707,27 +741,63 @@ void Mixer::removePlayHandlesOfTypes( Track * _track, const quint8 types ) ++it; } } - unlockPlayHandleRemoval(); + doneChangeInModel(); } -bool Mixer::hasNotePlayHandles() +void Mixer::requestChangeInModel() { - lock(); + if( s_renderingThread ) + return; - for( PlayHandleList::Iterator it = m_playHandles.begin(); it != m_playHandles.end(); ++it ) + m_changesMutex.lock(); + m_changes++; + m_changesMutex.unlock(); + + m_doChangesMutex.lock(); + m_waitChangesMutex.lock(); + if ( m_isProcessing && !m_waitingForWrite && !m_changesSignal ) { - if( (*it)->type() == PlayHandle::TypeNotePlayHandle ) - { - unlock(); - return true; - } + m_changesSignal = true; + m_changesRequestCondition.wait( &m_waitChangesMutex ); } + m_waitChangesMutex.unlock(); +} - unlock(); - return false; + + + +void Mixer::doneChangeInModel() +{ + if( s_renderingThread ) + return; + + m_changesMutex.lock(); + bool moreChanges = --m_changes; + m_changesMutex.unlock(); + + if( !moreChanges ) + { + m_changesSignal = false; + m_changesMixerCondition.wakeOne(); + } + m_doChangesMutex.unlock(); +} + + + + +void Mixer::runChangesInModel() +{ + if( m_changesSignal ) + { + m_waitChangesMutex.lock(); + m_changesRequestCondition.wakeOne(); + m_changesMixerCondition.wait( &m_waitChangesMutex ); + m_waitChangesMutex.unlock(); + } } @@ -796,6 +866,19 @@ AudioDevice * Mixer::tryAudioDevices() } #endif +#ifdef LMMS_HAVE_SNDIO + if( dev_name == AudioSndio::name() || dev_name == "" ) + { + dev = new AudioSndio( success_ful, this ); + if( success_ful ) + { + m_audioDevName = AudioSndio::name(); + return dev; + } + delete dev; + } +#endif + #ifdef LMMS_HAVE_JACK if( dev_name == AudioJack::name() || dev_name == "" ) @@ -919,6 +1002,19 @@ MidiClient * Mixer::tryMidiClients() } #endif +#ifdef LMMS_HAVE_SNDIO + if( client_name == MidiSndio::name() || client_name == "" ) + { + MidiSndio * msndio = new MidiSndio; + if( msndio->isRunning() ) + { + m_midiClientName = MidiSndio::name(); + return msndio; + } + delete msndio; + } +#endif + #ifdef LMMS_BUILD_WIN32 if( client_name == MidiWinMM::name() || client_name == "" ) { @@ -999,10 +1095,27 @@ void Mixer::fifoWriter::run() surroundSampleFrame * buffer = new surroundSampleFrame[frames]; const surroundSampleFrame * b = m_mixer->renderNextBuffer(); memcpy( buffer, b, frames * sizeof( surroundSampleFrame ) ); - m_fifo->write( buffer ); + write( buffer ); } - m_fifo->write( NULL ); + write( NULL ); +} + + + + +void Mixer::fifoWriter::write( surroundSampleFrame * buffer ) +{ + m_mixer->m_waitChangesMutex.lock(); + m_mixer->m_waitingForWrite = true; + m_mixer->m_waitChangesMutex.unlock(); + m_mixer->runChangesInModel(); + + m_fifo->write( buffer ); + + m_mixer->m_doChangesMutex.lock(); + m_mixer->m_waitingForWrite = false; + m_mixer->m_doChangesMutex.unlock(); } diff --git a/src/core/Note.cpp b/src/core/Note.cpp index 69497d22a33..674a150eda2 100644 --- a/src/core/Note.cpp +++ b/src/core/Note.cpp @@ -115,7 +115,7 @@ void Note::setPos( const MidiTime & pos ) void Note::setKey( const int key ) { - const int k = qBound( 0, key, NumKeys ); + const int k = qBound( 0, key, NumKeys - 1 ); m_key = k; } diff --git a/src/core/NotePlayHandle.cpp b/src/core/NotePlayHandle.cpp index d027fef1a60..4cd377becbe 100644 --- a/src/core/NotePlayHandle.cpp +++ b/src/core/NotePlayHandle.cpp @@ -31,6 +31,7 @@ #include "Instrument.h" #include "MidiEvent.h" #include "MidiPort.h" +#include "Mixer.h" #include "Song.h" diff --git a/src/core/PresetPreviewPlayHandle.cpp b/src/core/PresetPreviewPlayHandle.cpp index 633f03a3fb6..96f1295837f 100644 --- a/src/core/PresetPreviewPlayHandle.cpp +++ b/src/core/PresetPreviewPlayHandle.cpp @@ -31,6 +31,7 @@ #include "Instrument.h" #include "InstrumentTrack.h" #include "MidiPort.h" +#include "Mixer.h" #include "DataFile.h" #include "NotePlayHandle.h" #include "PluginFactory.h" @@ -276,7 +277,10 @@ ConstNotePlayHandleList PresetPreviewPlayHandle::nphsOfInstrumentTrack( bool PresetPreviewPlayHandle::isPreviewing() { - return s_previewTC->isPreviewing(); + if (s_previewTC) { + return s_previewTC->isPreviewing(); + } + return false; } diff --git a/src/core/ProjectJournal.cpp b/src/core/ProjectJournal.cpp index 4e5c9229b42..bccb1520237 100644 --- a/src/core/ProjectJournal.cpp +++ b/src/core/ProjectJournal.cpp @@ -29,6 +29,8 @@ #include "JournallingObject.h" #include "Song.h" +static const int EO_ID_MSB = 1 << 23; + const int ProjectJournal::MAX_UNDO_STATES = 100; // TODO: make this configurable in settings ProjectJournal::ProjectJournal() : @@ -131,11 +133,9 @@ void ProjectJournal::addJournalCheckPoint( JournallingObject *jo ) 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 ) ) ) + for( jo_id_t tid = rand(); m_joIDs.contains( id = tid % EO_ID_MSB + | EO_ID_MSB ); tid++ ) { } @@ -159,6 +159,14 @@ void ProjectJournal::reallocID( const jo_id_t _id, JournallingObject * _obj ) +jo_id_t ProjectJournal::idToSave( jo_id_t id ) +{ + return id & ~EO_ID_MSB; +} + + + + void ProjectJournal::clearJournal() { m_undoCheckPoints.clear(); diff --git a/src/core/ProjectRenderer.cpp b/src/core/ProjectRenderer.cpp index 6b44a1d6365..f901a938d84 100644 --- a/src/core/ProjectRenderer.cpp +++ b/src/core/ProjectRenderer.cpp @@ -213,6 +213,7 @@ void ProjectRenderer::run() void ProjectRenderer::abortProcessing() { m_abort = true; + wait(); } diff --git a/src/core/ProjectVersion.cpp b/src/core/ProjectVersion.cpp index 111e014a841..18bb98a2d24 100644 --- a/src/core/ProjectVersion.cpp +++ b/src/core/ProjectVersion.cpp @@ -42,14 +42,21 @@ int parseMinor(QString & version) { int parseRelease(QString & version) { - return version.section( '.', 2 ).section( '-', 0, 0 ).toInt(); + return version.section( '.', 2, 2 ).section( '-', 0, 0 ).toInt(); } -QString parseBuild(QString & version) { - return version.section( '.', 2 ).section( '-', 1 ); +QString parseStage(QString & version) { + return version.section( '.', 2, 2 ).section( '-', 1 ); +} + + + + +int parseBuild(QString & version) { + return version.section( '.', 3 ).toInt(); } @@ -59,7 +66,8 @@ ProjectVersion::ProjectVersion(QString version, CompareType c) : m_version(version), m_major(parseMajor(m_version)), m_minor(parseMinor(m_version)), - m_release(parseRelease(m_version)) , + m_release(parseRelease(m_version)), + m_stage(parseStage(m_version)), m_build(parseBuild(m_version)), m_compareType(c) { @@ -73,6 +81,7 @@ ProjectVersion::ProjectVersion(const char* version, CompareType c) : m_major(parseMajor(m_version)), m_minor(parseMinor(m_version)), m_release(parseRelease(m_version)), + m_stage(parseStage(m_version)), m_build(parseBuild(m_version)), m_compareType(c) { @@ -87,8 +96,7 @@ int ProjectVersion::compare(const ProjectVersion & a, const ProjectVersion & b, { return a.getMajor() - b.getMajor(); } - - else if(c == CompareType::Major) + if(c == Major) { return 0; } @@ -97,7 +105,7 @@ int ProjectVersion::compare(const ProjectVersion & a, const ProjectVersion & b, { return a.getMinor() - b.getMinor(); } - else if(c == CompareType::Minor) + if(c == Minor) { return 0; } @@ -106,22 +114,36 @@ int ProjectVersion::compare(const ProjectVersion & a, const ProjectVersion & b, { return a.getRelease() - b.getRelease(); } - else if(c == CompareType::Release) + if(c == Release) { return 0; } - // make sure 0.x.y > 0.x.y-patch - if(a.getBuild().isEmpty()) + if(!(a.getStage().isEmpty() && b.getStage().isEmpty())) { - return 1; + // make sure 0.x.y > 0.x.y-alpha + if(a.getStage().isEmpty()) + { + return 1; + } + if(b.getStage().isEmpty()) + { + return -1; + } + + // 0.x.y-beta > 0.x.y-alpha + int cmp = QString::compare(a.getStage(), b.getStage()); + if(cmp) + { + return cmp; + } } - if(b.getBuild().isEmpty()) + if(c == Stage) { - return -1; + return 0; } - return QString::compare(a.getBuild(), b.getBuild()); + return a.getBuild() - b.getBuild(); } diff --git a/src/core/RemotePlugin.cpp b/src/core/RemotePlugin.cpp index 370c31d43c1..8d7c89c2efd 100644 --- a/src/core/RemotePlugin.cpp +++ b/src/core/RemotePlugin.cpp @@ -40,6 +40,12 @@ #include #endif +#ifndef SYNC_WITH_SHM_FIFO +#include +#include +#include +#endif + // simple helper thread monitoring our RemotePlugin - if process terminates // unexpectedly invalidate plugin so LMMS doesn't lock up @@ -70,7 +76,12 @@ void ProcessWatcher::run() RemotePlugin::RemotePlugin() : + QObject(), +#ifdef SYNC_WITH_SHM_FIFO RemotePluginBase( new shmFifo(), new shmFifo() ), +#else + RemotePluginBase(), +#endif m_failed( true ), m_process(), m_watcher( this ), @@ -86,6 +97,34 @@ RemotePlugin::RemotePlugin() : m_inputCount( DEFAULT_CHANNELS ), m_outputCount( DEFAULT_CHANNELS ) { +#ifndef SYNC_WITH_SHM_FIFO + struct sockaddr_un sa; + sa.sun_family = AF_LOCAL; + + m_socketFile = QDir::tempPath() + QDir::separator() + + QUuid::createUuid().toString(); + const char * path = m_socketFile.toUtf8().constData(); + size_t length = strlen( path ); + if ( length >= sizeof sa.sun_path ) + { + length = sizeof sa.sun_path - 1; + qWarning( "Socket path too long." ); + } + memcpy( sa.sun_path, path, length ); + sa.sun_path[length] = '\0'; + + m_server = socket( PF_LOCAL, SOCK_STREAM, 0 ); + if ( m_server == -1 ) + { + qWarning( "Unable to start the server." ); + } + remove( path ); + int ret = bind( m_server, (struct sockaddr *) &sa, sizeof sa ); + if ( ret == -1 || listen( m_server, 1 ) == -1 ) + { + qWarning( "Unable to start the server." ); + } +#endif } @@ -117,6 +156,14 @@ RemotePlugin::~RemotePlugin() shmctl( m_shmID, IPC_RMID, NULL ); #endif } + +#ifndef SYNC_WITH_SHM_FIFO + if ( close( m_server ) == -1) + { + qWarning( "Error freeing resources." ); + } + remove( m_socketFile.toUtf8().constData() ); +#endif } @@ -128,15 +175,44 @@ bool RemotePlugin::init( const QString &pluginExecutable, lock(); if( m_failed ) { +#ifdef SYNC_WITH_SHM_FIFO reset( new shmFifo(), new shmFifo() ); +#endif m_failed = false; } QString exec = QFileInfo(QDir("plugins:"), pluginExecutable).absoluteFilePath(); +#ifdef LMMS_BUILD_APPLE + // search current directory first + QString curDir = QCoreApplication::applicationDirPath() + "/" + pluginExecutable; + if( QFile( curDir ).exists() ) + { + exec = curDir; + } +#endif +#ifdef LMMS_BUILD_WIN32 + if( ! exec.endsWith( ".exe", Qt::CaseInsensitive ) ) + { + exec += ".exe"; + } +#endif + + if( ! QFile( exec ).exists() ) + { + qWarning( "Remote plugin '%s' not found.", + exec.toUtf8().constData() ); + m_failed = true; + unlock(); + return failed(); + } QStringList args; +#ifdef SYNC_WITH_SHM_FIFO // swap in and out for bidirectional communication args << QString::number( out()->shmKey() ); args << QString::number( in()->shmKey() ); +#else + args << m_socketFile; +#endif #ifndef DEBUG_REMOTE_PLUGIN m_process.setProcessChannelMode( QProcess::ForwardedChannels ); m_process.setWorkingDirectory( QCoreApplication::applicationDirPath() ); @@ -146,6 +222,33 @@ bool RemotePlugin::init( const QString &pluginExecutable, qDebug() << exec << args; #endif + connect( &m_process, SIGNAL( finished( int, QProcess::ExitStatus ) ), + this, SLOT( processFinished( int, QProcess::ExitStatus ) ) ); + +#ifndef SYNC_WITH_SHM_FIFO + struct pollfd pollin; + pollin.fd = m_server; + pollin.events = POLLIN; + + switch ( poll( &pollin, 1, 30000 ) ) + { + case -1: + qWarning( "Unexpected poll error." ); + break; + + case 0: + qWarning( "Remote plugin did not connect." ); + break; + + default: + m_socket = accept( m_server, NULL, NULL ); + if ( m_socket == -1 ) + { + qWarning( "Unexpected socket error." ); + } + } +#endif + resizeSharedProcessingMemory(); if( waitForInitDoneMsg ) @@ -337,6 +440,17 @@ void RemotePlugin::resizeSharedProcessingMemory() +void RemotePlugin::processFinished( int exitCode, + QProcess::ExitStatus exitStatus ) +{ +#ifndef SYNC_WITH_SHM_FIFO + invalidate(); +#endif +} + + + + bool RemotePlugin::processMessage( const message & _m ) { lock(); @@ -345,6 +459,7 @@ bool RemotePlugin::processMessage( const message & _m ) switch( _m.id ) { case IdUndefined: + unlock(); return false; case IdInitDone: diff --git a/src/core/SampleBuffer.cpp b/src/core/SampleBuffer.cpp index 7040babcba0..c0fc2d4d18d 100644 --- a/src/core/SampleBuffer.cpp +++ b/src/core/SampleBuffer.cpp @@ -59,6 +59,7 @@ #include "endian_handling.h" #include "Engine.h" #include "interpolation.h" +#include "Mixer.h" #include "templates.h" #include "FileDialog.h" @@ -150,9 +151,7 @@ SampleBuffer::SampleBuffer( const f_cnt_t _frames ) : SampleBuffer::~SampleBuffer() { - if( m_origData != NULL ) - MM_FREE( m_origData ); - + MM_FREE( m_origData ); MM_FREE( m_data ); } @@ -169,6 +168,7 @@ void SampleBuffer::update( bool _keep_settings ) const bool lock = ( m_data != NULL ); if( lock ) { + Engine::mixer()->requestChangeInModel(); m_varLock.lockForWrite(); MM_FREE( m_data ); } @@ -269,6 +269,7 @@ void SampleBuffer::update( bool _keep_settings ) if( lock ) { m_varLock.unlock(); + Engine::mixer()->doneChangeInModel(); } emit sampleUpdated(); @@ -353,7 +354,7 @@ void SampleBuffer::normalizeSampleRate( const sample_rate_t _src_sr, // do samplerate-conversion to our default-samplerate if( _src_sr != Engine::mixer()->baseSampleRate() ) { - SampleBuffer * resampled = resample( this, _src_sr, + SampleBuffer * resampled = resample( _src_sr, Engine::mixer()->baseSampleRate() ); MM_FREE( m_data ); m_frames = resampled->frames(); @@ -381,6 +382,7 @@ f_cnt_t SampleBuffer::decodeSampleSF( const char * _f, { SNDFILE * snd_file; SF_INFO sf_info; + sf_info.format = 0; f_cnt_t frames = 0; bool sf_rr = false; @@ -596,8 +598,6 @@ bool SampleBuffer::play( sampleFrame * _ab, handleState * _state, const float _freq, const LoopMode _loopmode ) { - QReadLocker readLocker(&m_varLock); - f_cnt_t startFrame = m_startFrame; f_cnt_t endFrame = m_endFrame; f_cnt_t loopStartFrame = m_loopStartFrame; @@ -1146,12 +1146,12 @@ QString & SampleBuffer::toBase64( QString & _dst ) const -SampleBuffer * SampleBuffer::resample( sampleFrame * _data, - const f_cnt_t _frames, - const sample_rate_t _src_sr, +SampleBuffer * SampleBuffer::resample( const sample_rate_t _src_sr, const sample_rate_t _dst_sr ) { - const f_cnt_t dst_frames = static_cast( _frames / + sampleFrame * data = m_data; + const f_cnt_t frames = m_frames; + 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; @@ -1164,9 +1164,9 @@ SampleBuffer * SampleBuffer::resample( sampleFrame * _data, { SRC_DATA src_data; src_data.end_of_input = 1; - src_data.data_in = _data[0]; + src_data.data_in = data[0]; src_data.data_out = dst_buf[0]; - src_data.input_frames = _frames; + 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 ) ) ) @@ -1354,7 +1354,6 @@ void SampleBuffer::loadFromBase64( const QString & _data ) void SampleBuffer::setStartFrame( const f_cnt_t _s ) { - QWriteLocker writeLocker(&m_varLock); m_startFrame = _s; } @@ -1363,7 +1362,6 @@ void SampleBuffer::setStartFrame( const f_cnt_t _s ) void SampleBuffer::setEndFrame( const f_cnt_t _e ) { - QWriteLocker writeLocker(&m_varLock); m_endFrame = _e; } diff --git a/src/core/SamplePlayHandle.cpp b/src/core/SamplePlayHandle.cpp index 1bcf6691ef8..b7bbb036231 100644 --- a/src/core/SamplePlayHandle.cpp +++ b/src/core/SamplePlayHandle.cpp @@ -27,7 +27,7 @@ #include "BBTrack.h" #include "Engine.h" #include "InstrumentTrack.h" -#include "Pattern.h" +#include "Mixer.h" #include "SampleBuffer.h" #include "SampleTrack.h" diff --git a/src/core/SampleRecordHandle.cpp b/src/core/SampleRecordHandle.cpp index a16f5633008..19c840bc192 100644 --- a/src/core/SampleRecordHandle.cpp +++ b/src/core/SampleRecordHandle.cpp @@ -2,7 +2,7 @@ * 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 @@ -27,7 +27,7 @@ #include "BBTrack.h" #include "Engine.h" #include "InstrumentTrack.h" -#include "Pattern.h" +#include "Mixer.h" #include "SampleBuffer.h" #include "SampleTrack.h" #include "debug.h" diff --git a/src/core/Song.cpp b/src/core/Song.cpp index 69694576f9e..10eb827e102 100644 --- a/src/core/Song.cpp +++ b/src/core/Song.cpp @@ -25,6 +25,7 @@ #include "Song.h" #include #include +#include #include #include #include @@ -84,6 +85,7 @@ Song::Song() : m_fileName(), m_oldFileName(), m_modified( false ), + m_loadOnLaunch( true ), m_recording( false ), m_exporting( false ), m_exportLoop( false ), @@ -143,7 +145,7 @@ void Song::masterVolumeChanged() void Song::setTempo() { - Engine::mixer()->lockPlayHandleRemoval(); + Engine::mixer()->requestChangeInModel(); const bpm_t tempo = ( bpm_t ) m_tempoModel.value(); PlayHandleList & playHandles = Engine::mixer()->playHandles(); for( PlayHandleList::Iterator it = playHandles.begin(); @@ -157,7 +159,7 @@ void Song::setTempo() nph->unlock(); } } - Engine::mixer()->unlockPlayHandleRemoval(); + Engine::mixer()->doneChangeInModel(); Engine::updateFramesPerTick(); @@ -610,7 +612,6 @@ void Song::stop() } TimeLineWidget * tl = m_playPos[m_playMode].m_timeLine; - m_playing = false; m_paused = false; m_recording = true; @@ -622,6 +623,11 @@ void Song::stop() case TimeLineWidget::BackToZero: m_playPos[m_playMode].setTicks( 0 ); m_elapsedMilliSeconds = 0; + if( gui && gui->songEditor() && + ( tl->autoScroll() == TimeLineWidget::AutoScrollEnabled ) ) + { + gui->songEditor()->m_editor->updatePosition(0); + } break; case TimeLineWidget::BackToStart: @@ -631,6 +637,11 @@ void Song::stop() m_elapsedMilliSeconds = ( ( ( tl->savedPos().getTicks() ) * 60 * 1000 / 48 ) / getTempo() ); + if( gui && gui->songEditor() && + ( tl->autoScroll() == TimeLineWidget::AutoScrollEnabled ) ) + { + gui->songEditor()->m_editor->updatePosition( MidiTime(tl->savedPos().getTicks() ) ); + } tl->savePos( -1 ); } break; @@ -645,6 +656,7 @@ void Song::stop() m_playPos[m_playMode].setTicks( 0 ); m_elapsedMilliSeconds = 0; } + m_playing = false; m_playPos[m_playMode].setCurrentFrame( 0 ); @@ -780,7 +792,7 @@ void Song::clearProject() } - Engine::mixer()->lock(); + Engine::mixer()->requestChangeInModel(); if( gui && gui->getBBEditor() ) { @@ -821,7 +833,7 @@ void Song::clearProject() AutomationPattern::globalAutomationPattern( &m_masterPitchModel )-> clear(); - Engine::mixer()->unlock(); + Engine::mixer()->doneChangeInModel(); if( gui && gui->getProjectNotes() ) { @@ -900,6 +912,7 @@ void Song::createNewProject() QCoreApplication::sendPostedEvents(); m_modified = false; + m_loadOnLaunch = false; if( gui->mainWindow() ) { @@ -917,11 +930,11 @@ void Song::createNewProjectFromTemplate( const QString & templ ) // saving... m_fileName = m_oldFileName = ""; // update window title + m_loadOnLaunch = false; if( gui->mainWindow() ) { gui->mainWindow()->resetWindowTitle(); } - } @@ -936,24 +949,31 @@ void Song::loadProject( const QString & fileName ) Engine::projectJournal()->setJournalling( false ); + m_oldFileName = m_fileName; m_fileName = fileName; - m_oldFileName = fileName; DataFile dataFile( m_fileName ); // if file could not be opened, head-node is null and we create // new project - if( dataFile.validate( fileName.right( fileName.lastIndexOf(".") ) ) ) + if( dataFile.head().isNull() ) { + if( m_loadOnLaunch ) + { + createNewProject(); + } + m_fileName = m_oldFileName; return; } + m_oldFileName = m_fileName; + clearProject(); clearErrors(); DataFile::LocaleHelper localeHelper( DataFile::LocaleHelper::ModeLoad ); - Engine::mixer()->lock(); + Engine::mixer()->requestChangeInModel(); // get the header information from the DOM m_tempoModel.loadSettings( dataFile.head(), "bpm" ); @@ -1040,7 +1060,7 @@ void Song::loadProject( const QString & fileName ) AutomationPattern::resolveAllIDs(); - Engine::mixer()->unlock(); + Engine::mixer()->doneChangeInModel(); ConfigManager::inst()->addRecentlyOpenedProject( fileName ); @@ -1052,7 +1072,7 @@ void Song::loadProject( const QString & fileName ) { if ( gui ) { - QMessageBox::warning( NULL, "LMMS Error report", *errorSummary(), + QMessageBox::warning( NULL, tr("LMMS Error report"), *errorSummary(), QMessageBox::Ok ); } else @@ -1063,6 +1083,7 @@ void Song::loadProject( const QString & fileName ) m_loadingProject = false; m_modified = false; + m_loadOnLaunch = false; if( gui && gui->mainWindow() ) { @@ -1159,8 +1180,6 @@ void Song::importProject() ConfigManager::inst()->userProjectsDir(), tr("MIDI sequences") + " (*.mid *.midi *.rmi);;" + - tr("FL Studio projects") + - " (*.flp);;" + tr("Hydrogen projects") + " (*.h2song);;" + tr("All file types") + @@ -1171,6 +1190,7 @@ void Song::importProject() { ImportFilter::import( ofd.selectedFiles()[0], this ); } + m_loadOnLaunch = false; } @@ -1208,9 +1228,9 @@ void Song::restoreControllerStates( const QDomElement & element ) void Song::removeAllControllers() { - for (int i = 0; i < m_controllers.size(); ++i) + while (m_controllers.size() != 0) { - removeController(m_controllers.at(i)); + removeController(m_controllers.at(0)); } m_controllers.clear(); diff --git a/src/core/TempoSyncKnobModel.cpp b/src/core/TempoSyncKnobModel.cpp index c3583f88a26..690b230ba11 100644 --- a/src/core/TempoSyncKnobModel.cpp +++ b/src/core/TempoSyncKnobModel.cpp @@ -138,9 +138,9 @@ void TempoSyncKnobModel::saveSettings( QDomDocument & _doc, QDomElement & _this, void TempoSyncKnobModel::loadSettings( const QDomElement & _this, const QString & _name ) { - setSyncMode( ( TempoSyncMode ) _this.attribute( "syncmode" ).toInt() ); - m_custom.loadSettings( _this, _name ); FloatModel::loadSettings( _this, _name ); + m_custom.loadSettings( _this, _name ); + setSyncMode( ( TempoSyncMode ) _this.attribute( "syncmode" ).toInt() ); } diff --git a/src/core/Track.cpp b/src/core/Track.cpp index 56db1923ad6..2f96006b30b 100644 --- a/src/core/Track.cpp +++ b/src/core/Track.cpp @@ -62,6 +62,7 @@ #include "gui_templates.h" #include "InstrumentTrack.h" #include "MainWindow.h" +#include "Mixer.h" #include "DataFile.h" #include "PixmapButton.h" #include "ProjectJournal.h" @@ -256,6 +257,7 @@ TrackContentObjectView::TrackContentObjectView( TrackContentObject * tco, m_selectedColor( 0, 0, 0 ), m_textColor( 0, 0, 0 ), m_textShadowColor( 0, 0, 0 ), + m_BBPatternBackground( 0, 0, 0 ), m_gradient( true ), m_needsUpdate( true ) { @@ -314,6 +316,10 @@ TrackContentObjectView::~TrackContentObjectView() */ void TrackContentObjectView::update() { + if( fixedTCOs() ) + { + updateLength(); + } m_needsUpdate = true; selectableObject::update(); } @@ -352,6 +358,9 @@ QColor TrackContentObjectView::textColor() const QColor TrackContentObjectView::textShadowColor() const { return m_textShadowColor; } +QColor TrackContentObjectView::BBPatternBackground() const +{ return m_BBPatternBackground; } + bool TrackContentObjectView::gradient() const { return m_gradient; } @@ -371,6 +380,9 @@ void TrackContentObjectView::setTextColor( const QColor & c ) void TrackContentObjectView::setTextShadowColor( const QColor & c ) { m_textShadowColor = QColor( c ); } +void TrackContentObjectView::setBBPatternBackground( const QColor & c ) +{ m_BBPatternBackground = QColor( c ); } + void TrackContentObjectView::setGradient( const bool & b ) { m_gradient = b; } @@ -1777,7 +1789,12 @@ void TrackOperationsWidget::cloneTrack() TrackView *newTrackView = tcView->createTrackView( newTrack ); int index = tcView->trackViews().indexOf( m_trackView ); - tcView->moveTrackView( newTrackView, index + 1 ); + int i = tcView->trackViews().size(); + while ( i != index + 1 ) + { + tcView->moveTrackView( newTrackView, i - 1 ); + i--; + } } @@ -1941,6 +1958,8 @@ Track::~Track() */ Track * Track::create( TrackTypes tt, TrackContainer * tc ) { + Engine::mixer()->requestChangeInModel(); + Track * t = NULL; switch( tt ) @@ -1956,8 +1975,16 @@ Track * Track::create( TrackTypes tt, TrackContainer * tc ) default: break; } + if( tc == Engine::getBBTrackContainer() && t ) + { + t->createTCOsForBB( Engine::getBBTrackContainer()->numOfBBs() + - 1 ); + } + tc->updateAfterTrackAdd(); + Engine::mixer()->doneChangeInModel(); + return t; } @@ -1971,6 +1998,8 @@ Track * Track::create( TrackTypes tt, TrackContainer * tc ) */ Track * Track::create( const QDomElement & element, TrackContainer * tc ) { + Engine::mixer()->requestChangeInModel(); + Track * t = create( static_cast( element.attribute( "type" ).toInt() ), tc ); @@ -1978,6 +2007,9 @@ Track * Track::create( const QDomElement & element, TrackContainer * tc ) { t->restoreState( element ); } + + Engine::mixer()->doneChangeInModel(); + return t; } @@ -2314,6 +2346,20 @@ void Track::swapPositionOfTCOs( int tcoNum1, int tcoNum2 ) +void Track::createTCOsForBB( int bb ) +{ + while( numOfTCOs() < bb + 1 ) + { + MidiTime position = MidiTime( numOfTCOs(), 0 ); + TrackContentObject * tco = createTCO( position ); + tco->movePosition( position ); + tco->changeLength( MidiTime( 1, 0 ) ); + } +} + + + + /*! \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. @@ -2616,9 +2662,9 @@ void TrackView::dropEvent( QDropEvent * de ) // value contains our XML-data so simply create a // DataFile which does the rest for us... DataFile dataFile( value.toUtf8() ); - m_track->lock(); + Engine::mixer()->requestChangeInModel(); m_track->restoreState( dataFile.content().firstChild().toElement() ); - m_track->unlock(); + Engine::mixer()->doneChangeInModel(); de->accept(); } } diff --git a/src/core/audio/AudioAlsa.cpp b/src/core/audio/AudioAlsa.cpp index e903b436cb1..996b9faebfa 100644 --- a/src/core/audio/AudioAlsa.cpp +++ b/src/core/audio/AudioAlsa.cpp @@ -34,6 +34,7 @@ #include "ConfigManager.h" #include "Engine.h" #include "LcdSpinBox.h" +#include "Mixer.h" #include "gui_templates.h" #include "templates.h" @@ -244,11 +245,7 @@ void AudioAlsa::startProcessing() void AudioAlsa::stopProcessing() { - if( isRunning() ) - { - wait( 1000 ); - terminate(); - } + stopProcessingThread( this ); } diff --git a/src/core/audio/AudioDevice.cpp b/src/core/audio/AudioDevice.cpp index 7acbdbbf1aa..8bd21ffae35 100644 --- a/src/core/audio/AudioDevice.cpp +++ b/src/core/audio/AudioDevice.cpp @@ -27,6 +27,7 @@ #include "AudioDevice.h" #include "ConfigManager.h" #include "debug.h" +#include "Mixer.h" @@ -130,6 +131,22 @@ void AudioDevice::stopProcessing() +void AudioDevice::stopProcessingThread( QThread * thread ) +{ + if( !thread->wait( 30000 ) ) + { + fprintf( stderr, "Terminating audio device thread\n" ); + thread->terminate(); + if( !thread->wait( 1000 ) ) + { + fprintf( stderr, "Thread not terminated yet\n" ); + } + } +} + + + + void AudioDevice::applyQualitySettings() { src_delete( m_srcState ); diff --git a/src/core/audio/AudioFileOgg.cpp b/src/core/audio/AudioFileOgg.cpp index 798418bf2ac..2df401becf4 100644 --- a/src/core/audio/AudioFileOgg.cpp +++ b/src/core/audio/AudioFileOgg.cpp @@ -34,6 +34,8 @@ #include #include +#include "Mixer.h" + AudioFileOgg::AudioFileOgg( const sample_rate_t _sample_rate, const ch_cnt_t _channels, diff --git a/src/core/audio/AudioFileWave.cpp b/src/core/audio/AudioFileWave.cpp index cbb0d6c5f0a..1c57088a3ee 100644 --- a/src/core/audio/AudioFileWave.cpp +++ b/src/core/audio/AudioFileWave.cpp @@ -25,6 +25,7 @@ #include "AudioFileWave.h" #include "endian_handling.h" +#include "Mixer.h" AudioFileWave::AudioFileWave( const sample_rate_t _sample_rate, diff --git a/src/core/audio/AudioJack.cpp b/src/core/audio/AudioJack.cpp index 75e99c9ff7f..238a6b9c63a 100644 --- a/src/core/audio/AudioJack.cpp +++ b/src/core/audio/AudioJack.cpp @@ -40,6 +40,7 @@ #include "LcdSpinBox.h" #include "AudioPort.h" #include "MainWindow.h" +#include "Mixer.h" #include "MidiJack.h" diff --git a/src/core/audio/AudioOss.cpp b/src/core/audio/AudioOss.cpp index 4a92b3cf5e8..3686088285e 100644 --- a/src/core/audio/AudioOss.cpp +++ b/src/core/audio/AudioOss.cpp @@ -32,6 +32,7 @@ #include "endian_handling.h" #include "LcdSpinBox.h" +#include "Mixer.h" #include "Engine.h" #include "gui_templates.h" #include "templates.h" @@ -254,11 +255,7 @@ void AudioOss::startProcessing() void AudioOss::stopProcessing() { - if( isRunning() ) - { - wait( 1000 ); - terminate(); - } + stopProcessingThread( this ); } diff --git a/src/core/audio/AudioPort.cpp b/src/core/audio/AudioPort.cpp index 7d26bd367bc..5c17c1bbb75 100644 --- a/src/core/audio/AudioPort.cpp +++ b/src/core/audio/AudioPort.cpp @@ -27,6 +27,7 @@ #include "EffectChain.h" #include "FxMixer.h" #include "Engine.h" +#include "Mixer.h" #include "MixHelpers.h" #include "BufferManager.h" #include "ValueBuffer.h" diff --git a/src/core/audio/AudioPortAudio.cpp b/src/core/audio/AudioPortAudio.cpp index b2ddf1d9799..997939ec115 100644 --- a/src/core/audio/AudioPortAudio.cpp +++ b/src/core/audio/AudioPortAudio.cpp @@ -48,6 +48,7 @@ void AudioPortAudioSetupUtil::updateChannels() #include "templates.h" #include "ComboBox.h" #include "LcdSpinBox.h" +#include "Mixer.h" AudioPortAudio::AudioPortAudio( bool & _success_ful, Mixer * _mixer ) : diff --git a/src/core/audio/AudioPulseAudio.cpp b/src/core/audio/AudioPulseAudio.cpp index 4463bab8a6c..b3e438c3765 100644 --- a/src/core/audio/AudioPulseAudio.cpp +++ b/src/core/audio/AudioPulseAudio.cpp @@ -32,6 +32,7 @@ #include "endian_handling.h" #include "ConfigManager.h" #include "LcdSpinBox.h" +#include "Mixer.h" #include "gui_templates.h" #include "templates.h" #include "Engine.h" @@ -104,11 +105,7 @@ void AudioPulseAudio::startProcessing() void AudioPulseAudio::stopProcessing() { - if( isRunning() ) - { - wait( 1000 ); - terminate(); - } + stopProcessingThread( this ); } @@ -190,6 +187,7 @@ static void context_state_callback(pa_context *c, void *userdata) PA_STREAM_ADJUST_LATENCY, NULL, // volume NULL ); + _this->signalConnected( true ); break; } @@ -199,6 +197,7 @@ static void context_state_callback(pa_context *c, void *userdata) case PA_CONTEXT_FAILED: default: qCritical( "Connection failure: %s\n", pa_strerror( pa_context_errno( c ) ) ); + _this->signalConnected( false ); } } @@ -222,19 +221,36 @@ void AudioPulseAudio::run() return; } + m_connected = false; + pa_context_set_state_callback( context, context_state_callback, this ); // connect the context pa_context_connect( context, NULL, (pa_context_flags) 0, NULL ); + m_connectedSemaphore.acquire(); + // run the main loop - int ret = 0; - m_quit = false; - while( m_quit == false && pa_mainloop_iterate( mainLoop, 1, &ret ) >= 0 ) + if( m_connected ) { - } + 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_stream_disconnect( m_s ); + pa_stream_unref( m_s ); + } + else + { + const fpp_t fpp = mixer()->framesPerPeriod(); + surroundSampleFrame * temp = new surroundSampleFrame[fpp]; + while( getNextBuffer( temp ) ) + { + } + delete[] temp; + } pa_context_disconnect( context ); pa_context_unref( context ); @@ -279,6 +295,18 @@ void AudioPulseAudio::streamWriteCallback( pa_stream *s, size_t length ) +void AudioPulseAudio::signalConnected( bool connected ) +{ + if( !m_connected ) + { + m_connected = connected; + m_connectedSemaphore.release(); + } +} + + + + AudioPulseAudio::setupWidget::setupWidget( QWidget * _parent ) : AudioDeviceSetupWidget( AudioPulseAudio::name(), _parent ) { diff --git a/src/core/audio/AudioSdl.cpp b/src/core/audio/AudioSdl.cpp index 4ebd2c878b4..2f0ba0ec20d 100644 --- a/src/core/audio/AudioSdl.cpp +++ b/src/core/audio/AudioSdl.cpp @@ -33,6 +33,7 @@ #include "debug.h" #include "ConfigManager.h" #include "gui_templates.h" +#include "Mixer.h" #include "templates.h" diff --git a/src/core/audio/AudioSndio.cpp b/src/core/audio/AudioSndio.cpp new file mode 100644 index 00000000000..94ed3469031 --- /dev/null +++ b/src/core/audio/AudioSndio.cpp @@ -0,0 +1,204 @@ +#ifndef SINGLE_SOURCE_COMPILE + +/* license */ + +#include "AudioSndio.h" + +#ifdef LMMS_HAVE_SNDIO + +#include +#include +#include + +#include "endian_handling.h" +#include "LcdSpinBox.h" +#include "Mixer.h" +#include "Engine.h" +#include "gui_templates.h" +#include "templates.h" + +#ifdef LMMS_HAVE_UNISTD_H +#include +#endif +#ifdef LMMS_HAVE_STDLIB_H +#include +#endif + +#include "ConfigManager.h" + + + +AudioSndio::AudioSndio(bool & _success_ful, Mixer * _mixer) : + AudioDevice( tLimit( + ConfigManager::inst()->value( "audiosndio", "channels" ).toInt(), + DEFAULT_CHANNELS, SURROUND_CHANNELS ), _mixer ) +{ + _success_ful = FALSE; + + QString dev = ConfigManager::inst()->value( "audiosndio", "device" ); + + if (dev == "") + { + m_hdl = sio_open( NULL, SIO_PLAY, 0 ); + } + else + { + m_hdl = sio_open( dev.toAscii().data(), SIO_PLAY, 0 ); + } + + if( m_hdl == NULL ) + { + printf( "sndio: failed opening audio-device\n" ); + return; + } + + sio_initpar(&m_par); + + m_par.pchan = channels(); + m_par.bits = 16; + m_par.le = SIO_LE_NATIVE; + m_par.rate = sampleRate(); + m_par.round = mixer()->framesPerPeriod(); + m_par.appbufsz = m_par.round * 2; + + struct sio_par reqpar = m_par; + + if (!sio_setpar(m_hdl, &m_par)) + { + printf( "sndio: sio_setpar failed\n" ); + return; + } + if (!sio_getpar(m_hdl, &m_par)) + { + printf( "sndio: sio_getpar failed\n" ); + return; + } + + if (reqpar.pchan != m_par.pchan || + reqpar.bits != m_par.bits || + reqpar.le != m_par.le || + (abs(reqpar.rate - m_par.rate) * 100)/reqpar.rate > 2) + { + printf( "sndio: returned params not as requested\n" ); + return; + } + + if (!sio_start(m_hdl)) + { + printf( "sndio: sio_start failed\n" ); + return; + } + + _success_ful = TRUE; +} + + +AudioSndio::~AudioSndio() +{ + stopProcessing(); + if (m_hdl != NULL) + { + sio_close( m_hdl ); + m_hdl = NULL; + } +} + + +void AudioSndio::startProcessing( void ) +{ + if( !isRunning() ) + { + start( QThread::HighPriority ); + } +} + + +void AudioSndio::stopProcessing( void ) +{ + stopProcessingThread( this ); +} + + +void AudioSndio::applyQualitySettings( void ) +{ + if( hqAudio() ) + { + setSampleRate( Engine::mixer()->processingSampleRate() ); + + /* change sample rate to sampleRate() */ + } + + AudioDevice::applyQualitySettings(); +} + + +void AudioSndio::run( void ) +{ + 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; + } + + uint bytes = convertToS16( temp, frames, + mixer()->masterGain(), outbuf, FALSE ); + if( sio_write( m_hdl, outbuf, bytes ) != bytes ) + { + break; + } + } + + delete[] temp; + delete[] outbuf; +} + + +AudioSndio::setupWidget::setupWidget( QWidget * _parent ) : + AudioDeviceSetupWidget( AudioSndio::name(), _parent ) +{ + m_device = new QLineEdit( "", this ); + m_device->setGeometry( 10, 20, 160, 20 ); + + QLabel * dev_lbl = new QLabel( tr( "DEVICE" ), this ); + dev_lbl->setFont( pointSize<6>( 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( "audiosndio", + "channels" ).toInt() ); + + m_channels = new LcdSpinBox( 1, this ); + m_channels->setModel( m ); + m_channels->setLabel( tr( "CHANNELS" ) ); + m_channels->move( 180, 20 ); + +} + + +AudioSndio::setupWidget::~setupWidget() +{ + +} + + +void AudioSndio::setupWidget::saveSettings( void ) +{ + ConfigManager::inst()->setValue( "audiosndio", "device", + m_device->text() ); + ConfigManager::inst()->setValue( "audiosndio", "channels", + QString::number( m_channels->value() ) ); +} + + +#endif /* LMMS_HAVE_SNDIO */ + +#endif /* SINGLE_SOURCE_COMPILE */ diff --git a/src/core/audio/AudioSoundIo.cpp b/src/core/audio/AudioSoundIo.cpp index 89d21f0a91d..69f1a2183b7 100644 --- a/src/core/audio/AudioSoundIo.cpp +++ b/src/core/audio/AudioSoundIo.cpp @@ -36,6 +36,7 @@ #include "templates.h" #include "ComboBox.h" #include "LcdSpinBox.h" +#include "Mixer.h" AudioSoundIo::AudioSoundIo( bool & outSuccessful, Mixer * _mixer ) : AudioDevice( tLimit( @@ -281,6 +282,10 @@ void AudioSoundIo::writeCallback(int frameCountMin, int frameCountMax) } } +AudioSoundIoSetupUtil::~AudioSoundIoSetupUtil() +{ +} + void AudioSoundIoSetupUtil::reconnectSoundIo() { ((AudioSoundIo::setupWidget *)m_setupWidget)->reconnectSoundIo(); diff --git a/src/core/fft_helpers.cpp b/src/core/fft_helpers.cpp index 4924403c586..c5266afa6d1 100644 --- a/src/core/fft_helpers.cpp +++ b/src/core/fft_helpers.cpp @@ -204,7 +204,7 @@ static const int onethirdoctavecenterfr[] = {20, 25, 31, 40, 50, 63, 80, 100, 12 if ( (j_min<0)||(j_max<0) ) { - fprintf(stderr, "Error: calc13octaveband31() in %s line %d failed.\n", __FILE__, __LINE__); + fprintf(stderr, "Error: calc13octaveband31() in fft_helpers.cpp line %d failed.\n", __LINE__); return -1; } diff --git a/src/core/main.cpp b/src/core/main.cpp index 3faa805847d..686ac2c59a8 100644 --- a/src/core/main.cpp +++ b/src/core/main.cpp @@ -59,6 +59,8 @@ #include #endif +#include + #include "MemoryManager.h" #include "ConfigManager.h" #include "NotePlayHandle.h" @@ -116,45 +118,85 @@ void printHelp() { printf( "LMMS %s\n" "Copyright (c) %s\n\n" - "Usage: lmms [ -r ] [ options ]\n" - " [ -u ]\n" + "Usage: lmms [ -a ]\n" + " [ -b ]\n" + " [ -c ]\n" " [ -d ]\n" + " [ -f ]\n" + " [ --geometry ]\n" " [ -h ]\n" + " [ -i ]\n" + " [ --import [-e]]\n" + " [ -l ]\n" + " [ -o ]\n" + " [ -p ]\n" + " [ -r ] [ options ]\n" + " [ -s ]\n" + " [ -u ]\n" + " [ -v ]\n" + " [ -x ]\n" " [ ]\n\n" - "-r, --render Render given project file\n" - " --rendertracks Render each track to a different file\n" - "-o, --output Render into \n" - " For --render, provide a file path\n" - " For --rendertracks, provide a directory path\n" - "-f, --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 KBit/s\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" - "-a, --float 32bit float bit depth\n" - "-l, --loop Render as a loop\n" - "-u, --upgrade [out] Upgrade file and save as \n" + "-a, --float 32bit float bit depth\n" + "-b, --bitrate Specify output bitrate in KBit/s\n" + " Default: 160.\n" + "-c, --config Get the configuration from \n" + "-d, --dump Dump XML of compressed file \n" + "-f, --format Specify format of render-output where\n" + " Format is either 'wav' or 'ogg'.\n" + " --geometry Specify the size and position of the main window\n" + " geometry is .\n" + "-h, --help Show this usage information and exit.\n" + "-i, --interpolation Specify interpolation method\n" + " Possible values:\n" + " - linear\n" + " - sincfastest (default)\n" + " - sincmedium\n" + " - sincbest\n" + " --import [-e] Import MIDI file .\n" + " If -e is specified lmms exits after importing the file.\n" + "-l, --loop Render as a loop\n" + "-o, --output Render into \n" + " For --render, provide a file path\n" + " For --rendertracks, provide a directory path\n" + "-p, --profile Dump profiling information to file \n" + "-r, --render Render given project file\n" + " --rendertracks Render each track to a different file\n" + "-s, --samplerate Specify output samplerate in Hz\n" + " Range: 44100 (default) to 192000\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" - " --allowroot Bypass root user startup check (use with caution).\n" - "-h, --help Show this usage information and exit.\n\n", + "-v, --version Show version information and exit.\n" + " --allowroot Bypass root user startup check (use with caution).\n" + "-x, --oversampling Specify oversampling\n" + " Possible values: 1, 2, 4, 8\n" + " Default: 2\n\n", LMMS_VERSION, LMMS_PROJECT_COPYRIGHT ); } +void fileCheck( QString &file ) +{ + QFileInfo fileToCheck( file ); + + if( !fileToCheck.size() ) + { + printf( "The file %s does not have any content.\n", + file.toUtf8().constData() ); + exit( EXIT_FAILURE ); + } + else if( fileToCheck.isDir() ) + { + printf( "%s is a directory.\n", + file.toUtf8().constData() ); + exit( EXIT_FAILURE ); + } +} + + + + int main( int argc, char * * argv ) { // initialize memory managers @@ -172,7 +214,7 @@ int main( int argc, char * * argv ) bool allowRoot = false; bool renderLoop = false; bool renderTracks = false; - QString fileToLoad, fileToImport, renderOut, profilerOutputFile; + QString fileToLoad, fileToImport, renderOut, profilerOutputFile, configFile; // first of two command-line parsing stages for( int i = 1; i < argc; ++i ) @@ -194,8 +236,13 @@ int main( int argc, char * * argv ) { allowRoot = true; } - else if( arg == "-geometry" ) + else if( arg == "--geometry" || arg == "-geometry") { + if( arg == "--geometry" ) + { + // Delete the first "-" so Qt recognize the option + strcpy(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 @@ -514,7 +561,20 @@ int main( int argc, char * * argv ) } - profilerOutputFile = QString::fromLocal8Bit( argv[1] ); + profilerOutputFile = QString::fromLocal8Bit( argv[i] ); + } + else if( arg == "--config" || arg == "-c" ) + { + ++i; + + if( i == argc ) + { + printf( "\nNo configuration file specified.\n\n" + "Try \"%s --help\" for more information.\n\n", argv[0] ); + return EXIT_FAILURE; + } + + configFile = QString::fromLocal8Bit( argv[i] ); } else { @@ -528,8 +588,17 @@ int main( int argc, char * * argv ) } } + // Test file argument before continuing + if( !fileToLoad.isEmpty() ) + { + fileCheck( fileToLoad ); + } + else if( !fileToImport.isEmpty() ) + { + fileCheck( fileToImport ); + } - ConfigManager::inst()->loadConfigFile(); + ConfigManager::inst()->loadConfigFile(configFile); // set language QString pos = ConfigManager::inst()->value( "app", "language" ); @@ -574,21 +643,36 @@ int main( int argc, char * * argv ) } #endif +#if _POSIX_C_SOURCE >= 1 || _XOPEN_SOURCE || _POSIX_SOURCE + struct sigaction sa; + sa.sa_handler = SIG_IGN; + sa.sa_flags = SA_SIGINFO; + if ( sigemptyset( &sa.sa_mask ) ) + { + fprintf( stderr, "Signal initialization failed.\n" ); + } + if ( sigaction( SIGPIPE, &sa, NULL ) ) + { + fprintf( stderr, "Signal initialization failed.\n" ); + } +#endif + + bool destroyEngine = false; + // if we have an output file for rendering, just render the song // without starting the GUI if( !renderOut.isEmpty() ) { Engine::init( true ); - - QFileInfo fileInfo( fileToLoad ); - if ( !fileInfo.exists() ) - { - printf("The file %s does not exist!\n", fileToLoad.toStdString().c_str()); - exit( 1 ); - } + destroyEngine = true; printf( "Loading project...\n" ); Engine::getSong()->loadProject( fileToLoad ); + if( Engine::getSong()->isEmpty() ) + { + printf("The project %s is empty, aborting!\n", fileToLoad.toUtf8().constData() ); + exit( EXIT_FAILURE ); + } printf( "Done\n" ); Engine::getSong()->setExportLoop( renderLoop ); @@ -662,10 +746,6 @@ int main( int argc, char * * argv ) " %6" " %7" " " - " " - " %8" - " %9" - " " "" "" ).arg( MainWindow::tr( "There is a recovery file present. " @@ -682,35 +762,49 @@ int main( int argc, char * * argv ) "present recover file from being overwritten." ), MainWindow::tr( "Discard" ), MainWindow::tr( "Launch a default session and delete " - "the restored files. This is not reversible." ), - MainWindow::tr( "Quit" ), - MainWindow::tr( "Shut down LMMS with no further action." ) + "the restored files. This is not reversible." ) ) ); mb.setIcon( QMessageBox::Warning ); mb.setWindowIcon( embed::getIconPixmap( "icon" ) ); + mb.setWindowFlags( Qt::WindowCloseButtonHint ); - mb.setStandardButtons( QMessageBox::Ok | - QMessageBox::Discard ); - - mb.setButtonText( QMessageBox::Ok, - MainWindow::tr( "Recover" ) ); - - QAbstractButton * recover; - QAbstractButton * discard; + QPushButton * recover; + QPushButton * discard; QPushButton * ignore; QPushButton * exit; + + #if QT_VERSION >= 0x050000 + // setting all buttons to the same roles allows us + // to have a custom layout + discard = mb.addButton( MainWindow::tr( "Discard" ), + QMessageBox::AcceptRole ); + ignore = mb.addButton( MainWindow::tr( "Ignore" ), + QMessageBox::AcceptRole ); + recover = mb.addButton( MainWindow::tr( "Recover" ), + QMessageBox::AcceptRole ); + + # else + // in qt4 the button order is reversed + recover = mb.addButton( MainWindow::tr( "Recover" ), + QMessageBox::AcceptRole ); + ignore = mb.addButton( MainWindow::tr( "Ignore" ), + QMessageBox::AcceptRole ); + discard = mb.addButton( MainWindow::tr( "Discard" ), + QMessageBox::AcceptRole ); + + #endif + + // have a hidden exit button + exit = mb.addButton( "", QMessageBox::RejectRole); + exit->setVisible(false); + + // set icons + recover->setIcon( embed::getIconPixmap( "recover" ) ); + discard->setIcon( embed::getIconPixmap( "discard" ) ); + ignore->setIcon( embed::getIconPixmap( "ignore" ) ); - recover = mb.QMessageBox::button( QMessageBox::Ok ); - discard = mb.QMessageBox::button( QMessageBox::Discard ); - ignore = mb.addButton( MainWindow::tr( "Ignore" ), - QMessageBox::NoRole ); - ignore->setIcon( embed::getIconPixmap( "no_entry" ) ); - exit = mb.addButton( MainWindow::tr( "Exit" ), - QMessageBox::RejectRole ); - exit->setIcon( embed::getIconPixmap( "exit" ) ); - - mb.setDefaultButton( QMessageBox::Ok ); + mb.setDefaultButton( recover ); mb.setEscapeButton( exit ); mb.exec(); @@ -718,7 +812,7 @@ int main( int argc, char * * argv ) { gui->mainWindow()->sessionCleanup(); } - else if( mb.clickedButton() == recover ) // ::Recover + else if( mb.clickedButton() == recover ) // Recover { fileToLoad = recoveryFile; gui->mainWindow()->setSession( MainWindow::SessionState::Recover ); @@ -807,6 +901,11 @@ int main( int argc, char * * argv ) const int ret = app->exec(); delete app; + if( destroyEngine ) + { + Engine::destroy(); + } + // cleanup memory managers MemoryManager::cleanup(); diff --git a/src/core/midi/MidiAlsaSeq.cpp b/src/core/midi/MidiAlsaSeq.cpp index 8cfeb587f1e..fdf3d9fdb15 100644 --- a/src/core/midi/MidiAlsaSeq.cpp +++ b/src/core/midi/MidiAlsaSeq.cpp @@ -114,7 +114,7 @@ MidiAlsaSeq::MidiAlsaSeq() : // use a pipe to detect shutdown if( pipe( m_pipe ) == -1 ) { - perror( __FILE__ ": pipe" ); + perror( "MidiAlsaSeq: pipe" ); } start( QThread::IdlePriority ); diff --git a/src/core/midi/MidiPort.cpp b/src/core/midi/MidiPort.cpp index 7185c6dc7e9..4309966c037 100644 --- a/src/core/midi/MidiPort.cpp +++ b/src/core/midi/MidiPort.cpp @@ -27,6 +27,7 @@ #include "MidiPort.h" #include "MidiClient.h" +#include "Note.h" #include "Song.h" @@ -340,7 +341,10 @@ void MidiPort::updateMidiPortMode() emit writablePortsChanged(); emit modeChanged(); - Engine::getSong()->setModified(); + if( Engine::getSong() ) + { + Engine::getSong()->setModified(); + } } diff --git a/src/core/midi/MidiSndio.cpp b/src/core/midi/MidiSndio.cpp new file mode 100644 index 00000000000..e997a851bc3 --- /dev/null +++ b/src/core/midi/MidiSndio.cpp @@ -0,0 +1,101 @@ +#ifndef SINGLE_SOURCE_COMPILE + +/* license */ + +#include "MidiSndio.h" + +#ifdef LMMS_HAVE_SNDIO + +#include +#include + +#ifdef LMMS_HAVE_STDLIB_H +#include +#endif + +#include + +#include "ConfigManager.h" +#include "gui_templates.h" + + +MidiSndio::MidiSndio( void ) : + MidiClientRaw(), + m_quit( FALSE ) +{ + QString dev = probeDevice(); + + if (dev == "") + { + m_hdl = mio_open( NULL, MIO_IN | MIO_OUT, 0 ); + } + else + { + m_hdl = mio_open( dev.toAscii().data(), MIO_IN | MIO_OUT, 0 ); + } + + if( m_hdl == NULL ) + { + printf( "sndio: failed opening sndio midi device\n" ); + return; + } + + start( QThread::LowPriority ); +} + + +MidiSndio::~MidiSndio() +{ + if( isRunning() ) + { + m_quit = TRUE; + wait( 1000 ); + terminate(); + } +} + + +QString MidiSndio::probeDevice( void ) +{ + QString dev = ConfigManager::inst()->value( "MidiSndio", "device" ); + + return dev ; +} + + +void MidiSndio::sendByte( const unsigned char c ) +{ + mio_write( m_hdl, &c, 1 ); +} + + +void MidiSndio::run( void ) +{ + struct pollfd pfd; + nfds_t nfds; + char buf[0x100], *p; + size_t n; + int ret; + while( m_quit == FALSE && m_hdl ) + { + nfds = mio_pollfd( m_hdl, &pfd, POLLIN ); + ret = poll( &pfd, nfds, 100 ); + if ( ret < 0 ) + break; + if ( !ret || !( mio_revents( m_hdl, &pfd ) & POLLIN ) ) + continue; + n = mio_read( m_hdl, buf, sizeof(buf) ); + if ( !n ) + { + break; + } + for (p = buf; n > 0; n--, p++) + { + parseData( *p ); + } + } +} + +#endif /* LMMS_HAVE_SNDIO */ + +#endif /* SINGLE_SOURCE_COMPILE */ diff --git a/src/core/midi/MidiTime.cpp b/src/core/midi/MidiTime.cpp index b80c31b85a3..11c99a0df11 100644 --- a/src/core/midi/MidiTime.cpp +++ b/src/core/midi/MidiTime.cpp @@ -198,3 +198,9 @@ void MidiTime::setTicksPerTact( tick_t tpt ) { s_ticksPerTact = tpt; } + + +MidiTime MidiTime::stepPosition( int step ) +{ + return step * ticksPerTact() / stepsPerTact(); +} diff --git a/src/gui/AutomationPatternView.cpp b/src/gui/AutomationPatternView.cpp index 71fd0d6a422..d2b4382b34d 100644 --- a/src/gui/AutomationPatternView.cpp +++ b/src/gui/AutomationPatternView.cpp @@ -82,19 +82,6 @@ void AutomationPatternView::openInAutomationEditor() - -void AutomationPatternView::update() -{ - if( fixedTCOs() ) - { - m_pat->changeLength( m_pat->length() ); - } - TrackContentObjectView::update(); -} - - - - void AutomationPatternView::resetName() { m_pat->setName( QString::null ); @@ -165,8 +152,7 @@ void AutomationPatternView::flipY() void AutomationPatternView::flipX() { - //m_pat->flipX( m_pat->length() ); - m_pat->flipX( m_pat->TrackContentObject::length() ); + m_pat->flipX( m_pat->length() ); update(); } @@ -282,7 +268,7 @@ void AutomationPatternView::paintEvent( QPaintEvent * ) const float ppt = fixedTCOs() ? ( parentWidget()->width() - 2 * TCO_BORDER_WIDTH ) - / (float) m_pat->length().getTact() : + / (float) m_pat->timeMapLength().getTact() : pixelsPerTact(); const int x_base = TCO_BORDER_WIDTH; @@ -354,7 +340,7 @@ void AutomationPatternView::paintEvent( QPaintEvent * ) const int lineSize = 3; p.setPen( c.darker( 300 ) ); - for( tact_t t = 1; t < m_pat->length().getTact(); ++t ) + for( tact_t t = 1; t < m_pat->timeMapLength().getTact(); ++t ) { const int tx = x_base + static_cast( ppt * t ) - 2; if( tx < ( width() - TCO_BORDER_WIDTH * 2 ) ) diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index 16df0b77b8a..3b1d3197b99 100644 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -25,6 +25,7 @@ SET(LMMS_SRCS gui/PeakControllerDialog.cpp gui/PianoView.cpp gui/PluginBrowser.cpp + gui/RowTableView.cpp gui/SetupDialog.cpp gui/StringPairDrag.cpp gui/SubWindow.cpp diff --git a/src/gui/ControllerConnectionDialog.cpp b/src/gui/ControllerConnectionDialog.cpp index d4485519a2f..1a5faa1b7b9 100644 --- a/src/gui/ControllerConnectionDialog.cpp +++ b/src/gui/ControllerConnectionDialog.cpp @@ -34,6 +34,7 @@ #include "MidiController.h" #include "MidiClient.h" #include "MidiPortMenu.h" +#include "Mixer.h" #include "LcdSpinBox.h" #include "LedCheckbox.h" #include "ComboBox.h" diff --git a/src/gui/EffectSelectDialog.cpp b/src/gui/EffectSelectDialog.cpp index bd45ceae982..addefbb2e0c 100644 --- a/src/gui/EffectSelectDialog.cpp +++ b/src/gui/EffectSelectDialog.cpp @@ -71,24 +71,26 @@ EffectSelectDialog::EffectSelectDialog( QWidget * _parent ) : m_effectKeys += subPluginEffectKeys; // and fill our source model - QStringList pluginNames; - for( EffectKeyList::ConstIterator it = m_effectKeys.begin(); it != m_effectKeys.end(); ++it ) + m_sourceModel.setHorizontalHeaderItem( 0, new QStandardItem( tr( "Name" ) ) ); + m_sourceModel.setHorizontalHeaderItem( 1, new QStandardItem( tr( "Type" ) ) ); + int row = 0; + for( EffectKeyList::ConstIterator it = m_effectKeys.begin(); + it != m_effectKeys.end(); ++it ) { + QString name; + QString type; if( ( *it ).desc->subPluginFeatures ) { - pluginNames += QString( "%1: %2" ).arg( ( *it ).desc->displayName, ( *it ).name ); + name = ( *it ).name; + type = ( *it ).desc->displayName; } else { - pluginNames += ( *it ).desc->displayName; + name = ( *it ).desc->displayName; + type = "LMMS"; } - } - - int row = 0; - for( QStringList::ConstIterator it = pluginNames.begin(); - it != pluginNames.end(); ++it ) - { - m_sourceModel.setItem( row, 0, new QStandardItem( *it ) ); + m_sourceModel.setItem( row, 0, new QStandardItem( name ) ); + m_sourceModel.setItem( row, 1, new QStandardItem( type ) ); ++row; } @@ -100,6 +102,8 @@ EffectSelectDialog::EffectSelectDialog( QWidget * _parent ) : &m_model, SLOT( setFilterFixedString( const QString & ) ) ); connect( ui->filterEdit, SIGNAL( textChanged( const QString & ) ), this, SLOT( updateSelection() ) ); + connect( ui->filterEdit, SIGNAL( textChanged( const QString & ) ), + SLOT( sortAgain() ) ); ui->pluginList->setModel( &m_model ); @@ -115,7 +119,22 @@ EffectSelectDialog::EffectSelectDialog( QWidget * _parent ) : // try to accept current selection when pressing "OK" connect( ui->buttonBox, SIGNAL( accepted() ), this, SLOT( acceptSelection() ) ); - + +#if QT_VERSION >= 0x050000 +#define setResizeMode setSectionResizeMode +#endif + ui->pluginList->verticalHeader()->setResizeMode( + QHeaderView::ResizeToContents ); + ui->pluginList->verticalHeader()->hide(); + ui->pluginList->horizontalHeader()->setResizeMode( 0, + QHeaderView::Stretch ); + ui->pluginList->horizontalHeader()->setResizeMode( 1, + QHeaderView::ResizeToContents ); + ui->pluginList->sortByColumn( 0, Qt::AscendingOrder ); +#if QT_VERSION >= 0x050000 +#undef setResizeMode +#endif + updateSelection(); show(); } @@ -196,18 +215,6 @@ void EffectSelectDialog::rowChanged( const QModelIndex & _idx, textWidgetLayout->setMargin( 4 ); textWidgetLayout->setSpacing( 0 ); - std::string stdName(descriptor.name); - if ( stdName != "ladspaeffect" ) - { - QLabel *label = new QLabel(m_descriptionWidget); - QString labelText = "

    " + tr("Name") + ": " + QString::fromUtf8(descriptor.displayName) + "

    "; - labelText += "

    " + tr("Description") + ": " + qApp->translate( "pluginBrowser", descriptor.description ) + "

    "; - labelText += "

    " + tr("Author") + ": " + QString::fromUtf8(descriptor.author) + "

    "; - - label->setText(labelText); - textWidgetLayout->addWidget(label); - } - if ( m_currentSelection.desc->subPluginFeatures ) { QWidget *subWidget = new QWidget(textualInfoWidget); @@ -226,6 +233,16 @@ void EffectSelectDialog::rowChanged( const QModelIndex & _idx, textWidgetLayout->addWidget(subWidget); } + else + { + QLabel *label = new QLabel(m_descriptionWidget); + QString labelText = "

    " + tr("Name") + ": " + QString::fromUtf8(descriptor.displayName) + "

    "; + labelText += "

    " + tr("Description") + ": " + qApp->translate( "pluginBrowser", descriptor.description ) + "

    "; + labelText += "

    " + tr("Author") + ": " + QString::fromUtf8(descriptor.author) + "

    "; + + label->setText(labelText); + textWidgetLayout->addWidget(label); + } ui->scrollArea->setWidget( m_descriptionWidget ); m_descriptionWidget->show(); @@ -235,6 +252,14 @@ void EffectSelectDialog::rowChanged( const QModelIndex & _idx, +void EffectSelectDialog::sortAgain() +{ + ui->pluginList->setSortingEnabled( ui->pluginList->isSortingEnabled() ); +} + + + + void EffectSelectDialog::updateSelection() { // no valid selection anymore due to changed filter? @@ -242,7 +267,8 @@ void EffectSelectDialog::updateSelection() { // then select our first item ui->pluginList->selectionModel()->select( m_model.index( 0, 0 ), - QItemSelectionModel::ClearAndSelect ); + QItemSelectionModel::ClearAndSelect + | QItemSelectionModel::Rows ); rowChanged( m_model.index( 0, 0 ), QModelIndex() ); } } diff --git a/src/gui/FileBrowser.cpp b/src/gui/FileBrowser.cpp index 828800ba4af..f188dfff02c 100644 --- a/src/gui/FileBrowser.cpp +++ b/src/gui/FileBrowser.cpp @@ -46,6 +46,7 @@ #include "Instrument.h" #include "InstrumentTrack.h" #include "MainWindow.h" +#include "Mixer.h" #include "DataFile.h" #include "PluginFactory.h" #include "PresetPreviewPlayHandle.h" @@ -477,9 +478,6 @@ void FileBrowserTreeWidget::mouseMoveEvent( QMouseEvent * me ) 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; @@ -533,7 +531,7 @@ void FileBrowserTreeWidget::mouseReleaseEvent(QMouseEvent * me ) void FileBrowserTreeWidget::handleFile(FileItem * f, InstrumentTrack * it ) { - Engine::mixer()->lock(); + Engine::mixer()->requestChangeInModel(); switch( f->handling() ) { case FileItem::LoadAsProject: @@ -567,11 +565,6 @@ void FileBrowserTreeWidget::handleFile(FileItem * f, InstrumentTrack * it ) } case FileItem::ImportAsProject: - if( f->type() == FileItem::FlpFile && - !gui->mainWindow()->mayChangeProject(true) ) - { - break; - } ImportFilter::import( f->fullName(), Engine::getSong() ); break; @@ -581,7 +574,7 @@ void FileBrowserTreeWidget::handleFile(FileItem * f, InstrumentTrack * it ) break; } - Engine::mixer()->unlock(); + Engine::mixer()->doneChangeInModel(); } @@ -603,12 +596,10 @@ void FileBrowserTreeWidget::activateListItem(QTreeWidgetItem * item, } 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(); } } @@ -620,11 +611,9 @@ 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(); } } @@ -856,7 +845,6 @@ 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; @@ -921,12 +909,6 @@ void FileItem::initPixmaps( void ) "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( @@ -954,9 +936,6 @@ void FileItem::initPixmaps( void ) case MidiFile: setIcon( 0, *s_midiFilePixmap ); break; - case FlpFile: - setIcon( 0, *s_flpFilePixmap ); - break; case UnknownFile: default: setIcon( 0, *s_unknownFilePixmap ); @@ -1000,11 +979,6 @@ void FileItem::determineFileType( void ) m_type = MidiFile; m_handling = ImportAsProject; } - else if( ext == "flp" ) - { - m_type = FlpFile; - m_handling = ImportAsProject; - } else if( ext == "dll" ) { m_type = VstPluginFile; diff --git a/src/gui/Forms/EffectSelectDialog.ui b/src/gui/Forms/EffectSelectDialog.ui index a19233ac8c3..a9c6de01914 100644 --- a/src/gui/Forms/EffectSelectDialog.ui +++ b/src/gui/Forms/EffectSelectDialog.ui @@ -24,19 +24,31 @@ - + 500 250 + + QAbstractItemView::NoEditTriggers + Qt::ScrollBarAlwaysOff QAbstractItemView::SelectRows + + QAbstractItemView::SingleSelection + + + false + + + true + @@ -87,4 +99,10 @@ + + + RowTableView +
    RowTableView.h
    +
    +
    diff --git a/src/gui/FxMixerView.cpp b/src/gui/FxMixerView.cpp index 5826ed9d4d5..3884e9aff63 100644 --- a/src/gui/FxMixerView.cpp +++ b/src/gui/FxMixerView.cpp @@ -41,12 +41,16 @@ #include "Knob.h" #include "Engine.h" #include "embed.h" +#include "FxLine.h" +#include "FxMixer.h" #include "GuiApplication.h" #include "MainWindow.h" +#include "Mixer.h" #include "gui_templates.h" #include "InstrumentTrack.h" #include "Song.h" #include "BBTrackContainer.h" +#include "lmms_math.h" FxMixerView::FxMixerView() : QWidget(), @@ -69,6 +73,9 @@ FxMixerView::FxMixerView() : // main-layout QHBoxLayout * ml = new QHBoxLayout; + // Set margins + ml->setContentsMargins( 0, 4, 0, 0 ); + // Channel area m_channelAreaWidget = new QWidget; chLayout = new QHBoxLayout( m_channelAreaWidget ); @@ -274,6 +281,11 @@ FxMixerView::FxChannelView::FxChannelView(QWidget * _parent, FxMixerView * _mv, m_fader = new Fader( &fxChannel->m_volumeModel, tr( "FX Fader %1" ).arg( channelIndex ), m_fxLine ); + m_fader->setLevelsDisplayedInDBFS(); + // TODO dbvToAmp is really dBFSToAmp. Rename in later commit. + m_fader->setMinPeak(dbvToAmp(-40)); + m_fader->setMaxPeak(dbvToAmp(12)); + m_fader->move( 16-m_fader->width()/2, m_fxLine->height()- m_fader->height()-5 ); @@ -382,7 +394,9 @@ void FxMixerView::deleteChannel(int index) delete m_fxChannelViews[index]->m_fader; delete m_fxChannelViews[index]->m_muteBtn; delete m_fxChannelViews[index]->m_soloBtn; - delete m_fxChannelViews[index]->m_fxLine; + // delete fxLine later to prevent a crash when deleting from context menu + m_fxChannelViews[index]->m_fxLine->hide(); + m_fxChannelViews[index]->m_fxLine->deleteLater(); delete m_fxChannelViews[index]->m_rackView; delete m_fxChannelViews[index]; m_channelAreaWidget->adjustSize(); diff --git a/src/gui/LfoControllerDialog.cpp b/src/gui/LfoControllerDialog.cpp index f13928969f5..d0282b6551d 100644 --- a/src/gui/LfoControllerDialog.cpp +++ b/src/gui/LfoControllerDialog.cpp @@ -44,19 +44,19 @@ #include "TempoSyncKnob.h" #include "PixmapButton.h" -const int CD_ENV_KNOBS_LBL_Y = 20; +const int CD_ENV_KNOBS_LBL_Y = 11; 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_SHAPES_Y = CD_ENV_KNOBS_LBL_Y + 4; -const int CD_LFO_GRAPH_Y = CD_ENV_KNOBS_LBL_Y+15; +const int CD_LFO_GRAPH_Y = CD_ENV_KNOBS_LBL_Y+3; 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_BASE_CD_KNOB_X = CD_LFO_SHAPES_X + 68; 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; +const int CD_LFO_MULTIPLIER_X = CD_LFO_PHASE_CD_KNOB_X+CD_KNOB_X_SPACING+3; LfoControllerDialog::LfoControllerDialog( Controller * _model, QWidget * _parent ) : ControllerDialog( _model, _parent ) @@ -67,7 +67,7 @@ LfoControllerDialog::LfoControllerDialog( Controller * _model, QWidget * _parent title.append( ")" ); setWindowTitle( title ); setWindowIcon( embed::getIconPixmap( "controller" ) ); - setFixedSize( 240, 80 ); + setFixedSize( 240, 58 ); ToolTip::add( this, tr( "LFO Controller" ) ); @@ -89,7 +89,7 @@ LfoControllerDialog::LfoControllerDialog( Controller * _model, QWidget * _parent m_amountKnob = new Knob( knobBright_26, this ); - m_amountKnob->setLabel( tr( "AMT" ) ); + m_amountKnob->setLabel( tr( "AMNT" ) ); m_amountKnob->move( CD_LFO_AMOUNT_CD_KNOB_X, CD_LFO_CD_KNOB_Y ); m_amountKnob->setHintText( tr( "Modulation amount:" ), "" ); m_amountKnob->setWhatsThis( @@ -201,21 +201,21 @@ LfoControllerDialog::LfoControllerDialog( Controller * _model, QWidget * _parent PixmapButton * x1 = new PixmapButton( this, NULL ); - x1->move( CD_LFO_MULTIPLIER_X, CD_LFO_SHAPES_Y ); + x1->move( CD_LFO_MULTIPLIER_X, CD_LFO_SHAPES_Y +7); 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->move( CD_LFO_MULTIPLIER_X, CD_LFO_SHAPES_Y - 8 ); 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->move( CD_LFO_MULTIPLIER_X, CD_LFO_SHAPES_Y + 22 ); d100->setActiveGraphic( embed::getIconPixmap( "lfo_d100_active" ) ); d100->setInactiveGraphic( embed::getIconPixmap( @@ -231,8 +231,7 @@ LfoControllerDialog::LfoControllerDialog( Controller * _model, QWidget * _parent setAutoFillBackground( true ); QPalette pal; - pal.setBrush( backgroundRole(), - embed::getIconPixmap( "lfo_controller_artwork" ) ); + pal.setBrush( backgroundRole(), embed::getIconPixmap( "lfo_controller_artwork" ) ); setPalette( pal ); } diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp index f6f2ef6637f..b4ece6bde7a 100644 --- a/src/gui/MainWindow.cpp +++ b/src/gui/MainWindow.cpp @@ -108,7 +108,7 @@ MainWindow::MainWindow() : sideBar->appendTab( new FileBrowser( confMgr->userProjectsDir() + "*" + confMgr->factoryProjectsDir(), - "*.mmp *.mmpz *.xml *.mid *.flp", + "*.mmp *.mmpz *.xml *.mid", tr( "My Projects" ), embed::getIconPixmap( "project_file" ).transformed( QTransform().rotate( 90 ) ), splitter, false, true ) ); @@ -128,7 +128,7 @@ MainWindow::MainWindow() : sideBar->appendTab( new FileBrowser( QDir::homePath(), "*", tr( "My Home" ), embed::getIconPixmap( "home" ).transformed( QTransform().rotate( 90 ) ), - splitter, false, true ) ); + splitter, false, false ) ); QStringList root_paths; diff --git a/src/gui/PianoView.cpp b/src/gui/PianoView.cpp index dacaedaa227..e33c417c5fe 100644 --- a/src/gui/PianoView.cpp +++ b/src/gui/PianoView.cpp @@ -207,7 +207,7 @@ int PianoView::getKeyFromKeyEvent( QKeyEvent * _ke ) case 27: return 31; // ] } #endif -#ifdef LMMS_BUILD_LINUX +#if defined(LMMS_BUILD_LINUX) || defined(LMMS_BUILD_OPENBSD) switch( k ) { case 52: return 0; // Z = C @@ -779,15 +779,11 @@ void PianoView::paintEvent( QPaintEvent * ) p.setFont( pointSize( p.font() ) ); - // draw blue bar above the actual keyboard (there will be the labels + // draw bar above the 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 ); + p.fillRect( QRect( 0, 1, width(), PIANO_BASE-2 ), p.background() ); - // draw stuff above the actual keyboard + // draw the line above the keyboard p.setPen( Qt::black ); p.drawLine( 0, 0, width(), 0 ); p.drawLine( 0, PIANO_BASE-1, width(), PIANO_BASE-1 ); @@ -796,21 +792,18 @@ void PianoView::paintEvent( QPaintEvent * ) 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 ) ); + + QColor baseKeyColor = QApplication::palette().color( QPalette::Active, + QPalette::BrightText ); if( Piano::isWhiteKey( base_key ) ) { p.fillRect( QRect( getKeyX( base_key ), 1, PW_WHITE_KEY_WIDTH-1, - PIANO_BASE-2 ), g ); + PIANO_BASE-2 ), baseKeyColor ); } else { p.fillRect( QRect( getKeyX( base_key ) + 1, 1, - PW_BLACK_KEY_WIDTH - 1, PIANO_BASE - 2 ), g ); + PW_BLACK_KEY_WIDTH - 1, PIANO_BASE - 2 ), baseKeyColor); } diff --git a/src/gui/RowTableView.cpp b/src/gui/RowTableView.cpp new file mode 100644 index 00000000000..cbd1bd84941 --- /dev/null +++ b/src/gui/RowTableView.cpp @@ -0,0 +1,139 @@ +/* + * RowTableView.cpp - table with rows that act like single cells + * + * Copyright (c) 2016 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 "RowTableView.h" + +#include +#include +#include + + +class RowDelegate : public QStyledItemDelegate +{ +public: + RowDelegate( QAbstractItemView * table, QObject * parent = 0 ) : + QStyledItemDelegate( parent ), + m_table( table ) + { + } + virtual void paint( QPainter * painter, + const QStyleOptionViewItem & option, + const QModelIndex & index ) const; + + +protected: + virtual void initStyleOption( QStyleOptionViewItem * option, + const QModelIndex & index ) const; + + +private: + QAbstractItemView * m_table; + +} ; + + + + +void RowDelegate::initStyleOption( QStyleOptionViewItem * option, + const QModelIndex & index ) const +{ + QStyledItemDelegate::initStyleOption( option, index ); + option->state &= ~QStyle::State_HasFocus; +} + + + + +void RowDelegate::paint( QPainter * painter, + const QStyleOptionViewItem & option, const QModelIndex & index ) const +{ + QStyledItemDelegate::paint( painter, option, index ); + if ( index.row() == m_table->currentIndex().row() ) + { + const QRect rect( option.rect ); + painter->drawLine( rect.topLeft(), rect.topRight() ); + painter->drawLine( rect.bottomLeft(), rect.bottomRight() ); + if ( index.column() == 0 ) + { + painter->drawLine( rect.topLeft(), rect.bottomLeft() ); + } + if ( index.column() == index.model()->columnCount() - 1 ) + { + painter->drawLine( rect.topRight(), + rect.bottomRight() ); + } + } +} + + + + +RowTableView::RowTableView( QWidget * parent ) : + QTableView( parent ) +{ + m_rowDelegate = new RowDelegate( this, this ); +} + + + + +RowTableView::~RowTableView() +{ + delete m_rowDelegate; +} + + + + +void RowTableView::setModel( QAbstractItemModel * model ) +{ + QTableView::setModel( model ); + for ( int i = 0; i < model->rowCount(); i++ ) + { + setItemDelegateForRow( i, m_rowDelegate ); + } + +} + + + + +void RowTableView::keyPressEvent( QKeyEvent * event ) +{ + switch( event->key() ) + { + case Qt::Key_Tab: + case Qt::Key_Backtab: + for( int i = 0; i < model()->columnCount() - 1; i++ ) + { + QTableView::keyPressEvent( event ); + } + default: + QTableView::keyPressEvent( event ); + } +} + + + + diff --git a/src/gui/SetupDialog.cpp b/src/gui/SetupDialog.cpp index 702fec8f1a8..173e4a718cb 100644 --- a/src/gui/SetupDialog.cpp +++ b/src/gui/SetupDialog.cpp @@ -55,6 +55,7 @@ #include "AudioAlsaSetupWidget.h" #include "AudioJack.h" #include "AudioOss.h" +#include "AudioSndio.h" #include "AudioPortAudio.h" #include "AudioSoundIo.h" #include "AudioPulseAudio.h" @@ -66,6 +67,7 @@ #include "MidiAlsaSeq.h" #include "MidiJack.h" #include "MidiOss.h" +#include "MidiSndio.h" #include "MidiWinMM.h" #include "MidiApple.h" #include "MidiDummy.h" @@ -111,7 +113,6 @@ SetupDialog::SetupDialog( ConfigTabs _tab_to_open ) : m_workingDir( QDir::toNativeSeparators( ConfigManager::inst()->workingDir() ) ), m_vstDir( QDir::toNativeSeparators( ConfigManager::inst()->vstDir() ) ), m_artworkDir( QDir::toNativeSeparators( ConfigManager::inst()->artworkDir() ) ), - m_flDir( QDir::toNativeSeparators( ConfigManager::inst()->flDir() ) ), m_ladDir( QDir::toNativeSeparators( ConfigManager::inst()->ladspaDir() ) ), m_gigDir( QDir::toNativeSeparators( ConfigManager::inst()->gigDir() ) ), m_sf2Dir( QDir::toNativeSeparators( ConfigManager::inst()->sf2Dir() ) ), @@ -481,29 +482,6 @@ SetupDialog::SetupDialog( ConfigTabs _tab_to_open ) : 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, txtLength, 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( btnStart, 16 ); - connect( fldir_select_btn, SIGNAL( clicked() ), this, - SLOT( openFLDir() ) ); - // vst-dir TabWidget * vst_tw = new TabWidget( tr( "VST-plugin directory" ).toUpper(), @@ -643,7 +621,6 @@ SetupDialog::SetupDialog( ConfigTabs _tab_to_open ) : pathSelectorLayout->addSpacing( 10 ); pathSelectorLayout->addWidget( sf_tw ); #endif - pathSelectorLayout->addWidget( fl_tw ); pathSelectorLayout->addSpacing( 10 ); pathSelectorLayout->addWidget( artwork_tw ); pathSelectorLayout->addSpacing( 10 ); @@ -802,6 +779,11 @@ SetupDialog::SetupDialog( ConfigTabs _tab_to_open ) : m_audioIfaceSetupWidgets[AudioOss::name()] = new AudioOss::setupWidget( asw ); #endif + +#ifdef LMMS_HAVE_SNDIO + m_audioIfaceSetupWidgets[AudioSndio::name()] = + new AudioSndio::setupWidget( asw ); +#endif m_audioIfaceSetupWidgets[AudioDummy::name()] = new AudioDummy::setupWidget( asw ); @@ -891,6 +873,11 @@ SetupDialog::SetupDialog( ConfigTabs _tab_to_open ) : MidiSetupWidget::create( msw ); #endif +#ifdef LMMS_HAVE_SNDIO + m_midiIfaceSetupWidgets[MidiSndio::name()] = + MidiSetupWidget::create( msw ); +#endif + #ifdef LMMS_BUILD_WIN32 m_midiIfaceSetupWidgets[MidiWinMM::name()] = MidiSetupWidget::create( msw ); @@ -1056,7 +1043,6 @@ void SetupDialog::accept() ConfigManager::inst()->setGIGDir(QDir::fromNativeSeparators(m_gigDir)); ConfigManager::inst()->setSF2Dir(QDir::fromNativeSeparators(m_sf2Dir)); ConfigManager::inst()->setArtworkDir(QDir::fromNativeSeparators(m_artworkDir)); - ConfigManager::inst()->setFLDir(QDir::fromNativeSeparators(m_flDir)); ConfigManager::inst()->setLADSPADir(QDir::fromNativeSeparators(m_ladDir)); #ifdef LMMS_HAVE_FLUIDSYNTH ConfigManager::inst()->setDefaultSoundfont( m_defaultSoundfont ); @@ -1374,20 +1360,6 @@ void SetupDialog::setArtworkDir( const QString & _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, @@ -1474,14 +1446,6 @@ void SetupDialog::openBackgroundArtwork() -void SetupDialog::setFLDir( const QString & _fd ) -{ - m_flDir = _fd; -} - - - - void SetupDialog::setLADSPADir( const QString & _fd ) { m_ladDir = _fd; diff --git a/src/gui/SubWindow.cpp b/src/gui/SubWindow.cpp index cc29962534b..88eb1489f5e 100644 --- a/src/gui/SubWindow.cpp +++ b/src/gui/SubWindow.cpp @@ -1,4 +1,4 @@ -/* +/* * SubWindow.cpp - Implementation of QMdiSubWindow that correctly tracks * the geometry that windows should be restored to. * Workaround for https://bugreports.qt.io/browse/QTBUG-256 @@ -26,42 +26,267 @@ #include "SubWindow.h" +#include #include #include -#include +#include +#include "embed.h" -SubWindow::SubWindow(QWidget *parent, Qt::WindowFlags windowFlags) - : QMdiSubWindow(parent, windowFlags) + + +SubWindow::SubWindow( QWidget *parent, Qt::WindowFlags windowFlags ) : + QMdiSubWindow( parent, windowFlags ), + m_buttonSize( 17, 17 ), + m_titleBarHeight( 24 ) { // initialize the tracked geometry to whatever Qt thinks the normal geometry currently is. // this should always work, since QMdiSubWindows will not start as maximized m_trackedNormalGeom = normalGeometry(); + + // inits the colors + m_activeColor = Qt::SolidPattern; + m_textShadowColor = Qt::black; + m_borderColor = Qt::black; + + // close, minimize, maximize and restore (after minimizing) buttons + m_closeBtn = new QPushButton( embed::getIconPixmap( "close" ), QString::null, this ); + m_closeBtn->resize( m_buttonSize ); + m_closeBtn->setFocusPolicy( Qt::NoFocus ); + m_closeBtn->setCursor( Qt::ArrowCursor ); + m_closeBtn->setAttribute( Qt::WA_NoMousePropagation ); + m_closeBtn->setToolTip( tr( "Close" ) ); + connect( m_closeBtn, SIGNAL( clicked( bool ) ), this, SLOT( close() ) ); + + m_maximizeBtn = new QPushButton( embed::getIconPixmap( "maximize" ), QString::null, this ); + m_maximizeBtn->resize( m_buttonSize ); + m_maximizeBtn->setFocusPolicy( Qt::NoFocus ); + m_maximizeBtn->setCursor( Qt::ArrowCursor ); + m_maximizeBtn->setAttribute( Qt::WA_NoMousePropagation ); + m_maximizeBtn->setToolTip( tr( "Maximize" ) ); + connect( m_maximizeBtn, SIGNAL( clicked( bool ) ), this, SLOT( showMaximized() ) ); + + m_minimizeBtn = new QPushButton( embed::getIconPixmap( "minimize" ), QString::null, this ); + m_minimizeBtn->resize( m_buttonSize ); + m_minimizeBtn->setFocusPolicy( Qt::NoFocus ); + m_minimizeBtn->setCursor( Qt::ArrowCursor ); + m_minimizeBtn->setAttribute( Qt::WA_NoMousePropagation ); + m_minimizeBtn->setToolTip( tr( "Minimize" ) ); + connect( m_minimizeBtn, SIGNAL( clicked( bool ) ), this, SLOT( showMinimized() ) ); + + m_restoreBtn = new QPushButton( embed::getIconPixmap( "restore" ), QString::null, this ); + m_restoreBtn->resize( m_buttonSize ); + m_restoreBtn->setFocusPolicy( Qt::NoFocus ); + m_restoreBtn->setCursor( Qt::ArrowCursor ); + m_restoreBtn->setAttribute( Qt::WA_NoMousePropagation ); + m_restoreBtn->setToolTip( tr( "Restore" ) ); + connect( m_restoreBtn, SIGNAL( clicked( bool ) ), this, SLOT( showNormal() ) ); + + // QLabel for the window title and the shadow effect + m_shadow = new QGraphicsDropShadowEffect(); + m_shadow->setColor( m_textShadowColor ); + m_shadow->setXOffset( 1 ); + m_shadow->setYOffset( 1 ); + + m_windowTitle = new QLabel( this ); + m_windowTitle->setFocusPolicy( Qt::NoFocus ); + m_windowTitle->setAttribute( Qt::WA_TransparentForMouseEvents, true ); + m_windowTitle->setGraphicsEffect( m_shadow ); +} + + + + +void SubWindow::paintEvent( QPaintEvent * ) +{ + QPainter p( this ); + QRect rect( 0, 0, width(), m_titleBarHeight ); + bool isActive = SubWindow::mdiArea()->activeSubWindow() == this; + + p.fillRect( rect, isActive ? activeColor() : p.pen().brush() ); + + // window border + p.setPen( borderColor() ); + + // bottom, left, and right lines + p.drawLine( 0, height() - 1, width(), height() - 1 ); + p.drawLine( 0, m_titleBarHeight, 0, height() - 1 ); + p.drawLine( width() - 1, m_titleBarHeight, width() - 1, height() - 1 ); + + // window icon + QPixmap winicon( widget()->windowIcon().pixmap( m_buttonSize ) ); + p.drawPixmap( 3, 3, m_buttonSize.width(), m_buttonSize.height(), winicon ); +} + + + + +void SubWindow::elideText( QLabel *label, QString text ) +{ + QFontMetrics metrix( label->font() ); + int width = label->width() - 2; + QString clippedText = metrix.elidedText( text, Qt::ElideRight, width ); + label->setText( clippedText ); +} + + + + +bool SubWindow::isMaximized() +{ +#ifdef LMMS_BUILD_APPLE + // check if subwindow size is identical to the MdiArea size, accounting for scrollbars + int hScrollBarHeight = mdiArea()->horizontalScrollBar()->isVisible() ? mdiArea()->horizontalScrollBar()->size().height() : 0; + int vScrollBarWidth = mdiArea()->verticalScrollBar()->isVisible() ? mdiArea()->verticalScrollBar()->size().width() : 0; + QSize areaSize( this->mdiArea()->size().width() - vScrollBarWidth, this->mdiArea()->size().height() - hScrollBarHeight ); + + return areaSize == this->size(); +#else + return QMdiSubWindow::isMaximized(); +#endif } + + + QRect SubWindow::getTrueNormalGeometry() const { return m_trackedNormalGeom; } -void SubWindow::moveEvent(QMoveEvent * event) + + + +QBrush SubWindow::activeColor() const +{ + return m_activeColor; +} + + + + +QColor SubWindow::textShadowColor() const { - QMdiSubWindow::moveEvent(event); + return m_textShadowColor; +} + + + + +QColor SubWindow::borderColor() const +{ + return m_borderColor; +} + + + + +void SubWindow::setActiveColor( const QBrush & b ) +{ + m_activeColor = b; +} + + + + +void SubWindow::setTextShadowColor( const QColor & c ) +{ + m_textShadowColor = c; +} + + + + +void SubWindow::setBorderColor( const QColor &c ) +{ + m_borderColor = c; +} + + + + +void SubWindow::moveEvent( QMoveEvent * event ) +{ + QMdiSubWindow::moveEvent( event ); // if the window was moved and ISN'T minimized/maximized/fullscreen, - // then save the current position - if (!isMaximized() && !isMinimized() && !isFullScreen()) + // then save the current position + if( !isMaximized() && !isMinimized() && !isFullScreen() ) { - m_trackedNormalGeom.moveTopLeft(event->pos()); + m_trackedNormalGeom.moveTopLeft( event->pos() ); } } -void SubWindow::resizeEvent(QResizeEvent * event) + + + +void SubWindow::resizeEvent( QResizeEvent * event ) { - QMdiSubWindow::resizeEvent(event); + // button adjustments + m_minimizeBtn->hide(); + m_maximizeBtn->hide(); + m_restoreBtn->hide(); + + const bool isMax = isMaximized(); + const bool isMin = isMinimized(); + const int rightSpace = 3; + const int buttonGap = 1; + const int menuButtonSpace = 24; + + QPoint rightButtonPos( width() - rightSpace - m_buttonSize.width(), 3 ); + QPoint middleButtonPos( width() - rightSpace - ( 2 * m_buttonSize.width() ) - buttonGap, 3 ); + QPoint leftButtonPos( width() - rightSpace - ( 3 * m_buttonSize.width() ) - ( 2 * buttonGap ), 3 ); + + // the buttonBarWidth depends on the number of buttons. + // we need it to calculate the width of window title label + int buttonBarWidth = rightSpace + m_buttonSize.width(); + + // set the buttons on their positions. + // the close button is always needed and on the rightButtonPos + m_closeBtn->move( rightButtonPos ); + + // here we ask: is the Subwindow maximizable and/or minimizable + // then we set the buttons and show them if needed + if( windowFlags() & Qt::WindowMaximizeButtonHint ) + { + buttonBarWidth = buttonBarWidth + m_buttonSize.width() + buttonGap; + m_maximizeBtn->move( middleButtonPos ); + m_restoreBtn->move( middleButtonPos ); + m_maximizeBtn->setHidden( isMax ); + } + + if( windowFlags() & Qt::WindowMinimizeButtonHint ) + { + buttonBarWidth = buttonBarWidth + m_buttonSize.width() + buttonGap; + m_minimizeBtn->move( m_maximizeBtn->isHidden() && !isMax ? middleButtonPos : leftButtonPos ); + m_minimizeBtn->setHidden( isMin ); + } + m_restoreBtn->setVisible( isMax || isMin ); + + // title QLabel adjustments + m_windowTitle->setAlignment( Qt::AlignHCenter ); + m_windowTitle->setFixedWidth( widget()->width() - ( menuButtonSpace + buttonBarWidth ) ); + m_windowTitle->move( menuButtonSpace, + ( m_titleBarHeight / 2 ) - ( m_windowTitle->sizeHint().height() / 2 ) - 1 ); + + // if minimized we can't use widget()->width(). We have to hard code the width, + // as the width of all minimized windows is the same. + if( isMin ) + { + m_restoreBtn->move( m_maximizeBtn->isHidden() ? middleButtonPos : leftButtonPos ); + m_windowTitle->setFixedWidth( 120 ); + } + + // truncate the label string if the window is to small. Adds "..." + elideText( m_windowTitle, widget()->windowTitle() ); + m_windowTitle->setTextInteractionFlags( Qt::NoTextInteraction ); + m_windowTitle->adjustSize(); + + QMdiSubWindow::resizeEvent( event ); + // if the window was resized and ISN'T minimized/maximized/fullscreen, - // then save the current size - if (!isMaximized() && !isMinimized() && !isFullScreen()) + // then save the current size + if( !isMax && !isMin && !isFullScreen() ) { - m_trackedNormalGeom.setSize(event->size()); + m_trackedNormalGeom.setSize( event->size() ); } -} \ No newline at end of file +} diff --git a/src/gui/TimeLineWidget.cpp b/src/gui/TimeLineWidget.cpp index a367d2bcfd8..682fb56fd1b 100644 --- a/src/gui/TimeLineWidget.cpp +++ b/src/gui/TimeLineWidget.cpp @@ -48,13 +48,20 @@ QPixmap * TimeLineWidget::s_posMarkerPixmap = NULL; -QPixmap * TimeLineWidget::s_loopPointBeginPixmap = NULL; -QPixmap * TimeLineWidget::s_loopPointEndPixmap = NULL; TimeLineWidget::TimeLineWidget( const int xoff, const int yoff, const float ppt, Song::PlayPos & pos, const MidiTime & begin, QWidget * parent ) : QWidget( parent ), + m_inactiveLoopColor( 52, 63, 53, 64 ), + m_inactiveLoopBrush( QColor( 255, 255, 255, 32 ) ), + m_inactiveLoopInnerColor( 255, 255, 255, 32 ), + m_activeLoopColor( 52, 63, 53, 255 ), + m_activeLoopBrush( QColor( 55, 141, 89 ) ), + m_activeLoopInnerColor( 74, 155, 100, 255 ), + m_loopRectangleVerticalPadding( 1 ), + m_barLineColor( 192, 192, 192 ), + m_barNumberColor( m_barLineColor.darker( 120 ) ), m_autoScroll( AutoScrollEnabled ), m_loopPoints( LoopPointsDisabled ), m_behaviourAtStop( BackToZero ), @@ -77,20 +84,9 @@ TimeLineWidget::TimeLineWidget( const int xoff, const int yoff, const float ppt, 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( 18 ); m_xOffset -= s_posMarkerPixmap->width() / 2; @@ -224,55 +220,71 @@ void TimeLineWidget::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 ); + // Draw background + p.fillRect( 0, 0, width(), height(), p.background() ); + // Clip so that we only draw everything starting from the offset 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 ); + // Draw the loop rectangle + int const & loopRectMargin = getLoopRectangleVerticalPadding(); + int const loopRectHeight = this->height() - 2 * loopRectMargin; + int const loopStart = markerX( loopBegin() ) + 8; + int const loopEndR = markerX( loopEnd() ) + 9; + int const loopRectWidth = loopEndR - loopStart; - 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 ) ); + bool const loopPointsActive = loopPointsEnabled(); - QColor lineColor( 192, 192, 192 ); - QColor tactColor( lineColor.darker( 120 ) ); + // Draw the main rectangle (inner fill only) + QRect outerRectangle( loopStart, loopRectMargin, loopRectWidth - 1, loopRectHeight - 1 ); + p.fillRect( outerRectangle, loopPointsActive ? getActiveLoopBrush() : getInactiveLoopBrush()); - // Set font to half of the widgets size (in pixels) + // Draw the bar lines and numbers + // Activate hinting on the font QFont font = p.font(); - font.setPixelSize( this->height() * 0.5 ); - p.setFont( font ); + font.setHintingPreference( QFont::PreferFullHinting ); + p.setFont(font); + int const fontAscent = p.fontMetrics().ascent(); + int const fontHeight = p.fontMetrics().height(); + + QColor const & barLineColor = getBarLineColor(); + QColor const & barNumberColor = getBarNumberColor(); + + tact_t barNumber = m_begin.getTact(); + int const x = m_xOffset + s_posMarkerPixmap->width() / 2 - + ( ( static_cast( m_begin * m_ppt ) / MidiTime::ticksPerTact() ) % static_cast( m_ppt ) ); for( int i = 0; x + i * m_ppt < width(); ++i ) { - const int cx = x + qRound( i * m_ppt ); - p.setPen( lineColor ); - p.drawLine( cx, 5, cx, height() - 6 ); - ++tact_num; - if( ( tact_num - 1 ) % + ++barNumber; + if( ( barNumber - 1 ) % qMax( 1, qRound( 1.0f / 3.0f * MidiTime::ticksPerTact() / m_ppt ) ) == 0 ) { - const QString s = QString::number( tact_num ); - p.setPen( tactColor ); - p.drawText( cx + qRound( ( m_ppt - p.fontMetrics(). - width( s ) ) / 2 ), - height() - p.fontMetrics().ascent() / 2, s ); + const int cx = x + qRound( i * m_ppt ); + p.setPen( barLineColor ); + p.drawLine( cx, 5, cx, height() - 6 ); + + const QString s = QString::number( barNumber ); + p.setPen( barNumberColor ); + p.drawText( cx + 5, ((height() - fontHeight) / 2) + fontAscent, s ); } } + // Draw the main rectangle (outer border) + p.setPen( loopPointsActive ? getActiveLoopColor() : getInactiveLoopColor() ); + p.setBrush( Qt::NoBrush ); + p.drawRect( outerRectangle ); + + // Draw the inner border outline (no fill) + QRect innerRectangle = outerRectangle.adjusted( 1, 1, -1, -1 ); + p.setPen( loopPointsActive ? getActiveLoopInnerColor() : getInactiveLoopInnerColor() ); + p.setBrush( Qt::NoBrush ); + p.drawRect( innerRectangle ); + + // Draw the position marker p.setOpacity( 0.6 ); - p.drawPixmap( m_posMarkerX, height() - s_posMarkerPixmap->height(), - *s_posMarkerPixmap ); + p.drawPixmap( m_posMarkerX, height() - s_posMarkerPixmap->height(), *s_posMarkerPixmap ); } diff --git a/src/gui/TrackContainerView.cpp b/src/gui/TrackContainerView.cpp index 94f6e0de7c2..61d9e9d9ee5 100644 --- a/src/gui/TrackContainerView.cpp +++ b/src/gui/TrackContainerView.cpp @@ -22,6 +22,8 @@ * */ +#include "TrackContainerView.h" + #include #include @@ -32,10 +34,10 @@ #include -#include "TrackContainerView.h" #include "TrackContainer.h" #include "BBTrack.h" #include "MainWindow.h" +#include "Mixer.h" #include "debug.h" #include "FileBrowser.h" #include "ImportFilter.h" @@ -271,7 +273,9 @@ void TrackContainerView::deleteTrackView( TrackView * _tv ) removeTrackView( _tv ); delete _tv; - t->deleteLater(); + Engine::mixer()->requestChangeInModel(); + delete t; + Engine::mixer()->doneChangeInModel(); } diff --git a/src/gui/editors/AutomationEditor.cpp b/src/gui/editors/AutomationEditor.cpp index b7190632f13..c532d141466 100644 --- a/src/gui/editors/AutomationEditor.cpp +++ b/src/gui/editors/AutomationEditor.cpp @@ -75,6 +75,8 @@ QPixmap * AutomationEditor::s_toolMove = NULL; QPixmap * AutomationEditor::s_toolYFlip = NULL; QPixmap * AutomationEditor::s_toolXFlip = NULL; +const QVector AutomationEditor::m_zoomXLevels = + { 0.125f, 0.25f, 0.5f, 1.0f, 2.0f, 4.0f, 8.0f }; @@ -1491,11 +1493,11 @@ void AutomationEditor::wheelEvent(QWheelEvent * we ) int x = m_zoomingXModel.value(); if( we->delta() > 0 ) { - x++; + x--; } if( we->delta() < 0 ) { - x--; + x++; } x = qBound( 0, x, m_zoomingXModel.size() - 1 ); m_zoomingXModel.setValue( x ); @@ -1917,8 +1919,7 @@ void AutomationEditor::updatePosition(const MidiTime & t ) void AutomationEditor::zoomingXChanged() { - const QString & zfac = m_zoomingXModel.currentText(); - m_ppt = zfac.left( zfac.length() - 1 ).toInt() * DEFAULT_PPT / 100; + m_ppt = m_zoomXLevels[m_zoomingXModel.value()] * DEFAULT_PPT; assert( m_ppt > 0 ); @@ -2208,9 +2209,9 @@ AutomationEditorWindow::AutomationEditorWindow() : m_zoomingXComboBox = new ComboBox( zoomToolBar ); m_zoomingXComboBox->setFixedSize( 80, 22 ); - for( int i = 0; i < 6; ++i ) + for( float const & zoomLevel : m_editor->m_zoomXLevels ) { - m_editor->m_zoomingXModel.addItem( QString::number( 25 << i ) + "%" ); + m_editor->m_zoomingXModel.addItem( QString( "%1\%" ).arg( zoomLevel * 100 ) ); } m_editor->m_zoomingXModel.setValue( m_editor->m_zoomingXModel.findText( "100%" ) ); diff --git a/src/gui/editors/BBEditor.cpp b/src/gui/editors/BBEditor.cpp index 569759562f4..c8d39f22663 100644 --- a/src/gui/editors/BBEditor.cpp +++ b/src/gui/editors/BBEditor.cpp @@ -62,12 +62,12 @@ BBEditor::BBEditor( BBTrackContainer* tc ) : "compacttrackbuttons" ).toInt() ) { setMinimumWidth( TRACK_OP_WIDTH_COMPACT + DEFAULT_SETTINGS_WIDGET_WIDTH_COMPACT - + 2 * TCO_BORDER_WIDTH + 264 ); + + 2 * TCO_BORDER_WIDTH + 384 ); } else { setMinimumWidth( TRACK_OP_WIDTH + DEFAULT_SETTINGS_WIDGET_WIDTH - + 2 * TCO_BORDER_WIDTH + 264 ); + + 2 * TCO_BORDER_WIDTH + 384 ); } @@ -99,6 +99,10 @@ BBEditor::BBEditor( BBTrackContainer* tc ) : trackAndStepActionsToolBar->addAction(embed::getIconPixmap("add_bb_track"), tr("Add beat/bassline"), Engine::getSong(), SLOT(addBBTrack())); + trackAndStepActionsToolBar->addAction( + embed::getIconPixmap("add_sample_track"), + tr("Add sample-track"), m_trackContainerView, + SLOT(addSampleTrack())); trackAndStepActionsToolBar->addAction(embed::getIconPixmap("add_automation"), tr("Add automation-track"), m_trackContainerView, SLOT(addAutomationTrack())); @@ -210,6 +214,14 @@ void BBTrackContainerView::removeSteps() +void BBTrackContainerView::addSampleTrack() +{ + (void) Track::create( Track::SampleTrack, model() ); +} + + + + void BBTrackContainerView::addAutomationTrack() { (void) Track::create( Track::AutomationTrack, model() ); diff --git a/src/gui/editors/PianoRoll.cpp b/src/gui/editors/PianoRoll.cpp index a8c70c6a9ea..9d456476dab 100644 --- a/src/gui/editors/PianoRoll.cpp +++ b/src/gui/editors/PianoRoll.cpp @@ -83,7 +83,7 @@ typedef AutomationPattern::timeMap timeMap; // some constants... const int INITIAL_PIANOROLL_HEIGHT = 480; -const int SCROLLBAR_SIZE = 14; +const int SCROLLBAR_SIZE = 12; const int PIANO_X = 0; const int WHITE_KEY_WIDTH = 64; @@ -152,6 +152,9 @@ PianoRoll::PianoRollKeyTypes PianoRoll::prKeyOrder[] = const int DEFAULT_PR_PPT = KEY_LINE_HEIGHT * DefaultStepsPerTact; +const QVector PianoRoll::m_zoomLevels = + { 0.125f, 0.25f, 0.5f, 1.0f, 2.0f, 4.0f, 8.0f }; + PianoRoll::PianoRoll() : m_nemStr( QVector() ), @@ -190,13 +193,13 @@ PianoRoll::PianoRoll() : m_noteModeColor( 0, 0, 0 ), m_noteColor( 0, 0, 0 ), m_barColor( 0, 0, 0 ), - m_noteBorderRadiusX( 0 ), - m_noteBorderRadiusY( 0 ), m_selectedNoteColor( 0, 0, 0 ), m_textColor( 0, 0, 0 ), m_textColorLight( 0, 0, 0 ), m_textShadow( 0, 0, 0 ), - m_markedSemitoneColor( 0, 0, 0 ) + m_markedSemitoneColor( 0, 0, 0 ), + m_noteOpacity( 255 ), + m_noteBorders( true ) { // gui names of edit modes m_nemStr.push_back( tr( "Note Velocity" ) ); @@ -350,9 +353,9 @@ PianoRoll::PianoRoll() : SLOT( verScrolled( int ) ) ); // setup zooming-stuff - for( int i = 0; i < 6; ++i ) + for( float const & zoomLevel : m_zoomLevels ) { - m_zoomingModel.addItem( QString::number( 25 << i ) + "%" ); + m_zoomingModel.addItem( QString( "%1\%" ).arg( zoomLevel * 100 ) ); } m_zoomingModel.setValue( m_zoomingModel.findText( "100%" ) ); connect( &m_zoomingModel, SIGNAL( dataChanged() ), @@ -746,18 +749,6 @@ QColor PianoRoll::barColor() const void PianoRoll::setBarColor( const QColor & c ) { m_barColor = c; } -float PianoRoll::noteBorderRadiusX() const -{ return m_noteBorderRadiusX; } - -void PianoRoll::setNoteBorderRadiusX( float b ) -{ m_noteBorderRadiusX = b; } - -float PianoRoll::noteBorderRadiusY() const -{ return m_noteBorderRadiusY; } - -void PianoRoll::setNoteBorderRadiusY( float b ) -{ m_noteBorderRadiusY = b; } - QColor PianoRoll::selectedNoteColor() const { return m_selectedNoteColor; } @@ -788,9 +779,25 @@ QColor PianoRoll::markedSemitoneColor() const void PianoRoll::setMarkedSemitoneColor( const QColor & c ) { m_markedSemitoneColor = c; } -void PianoRoll::drawNoteRect(QPainter & p, int x, int y, +int PianoRoll::noteOpacity() const +{ return m_noteOpacity; } + +void PianoRoll::setNoteOpacity( const int i ) +{ m_noteOpacity = i; } + +bool PianoRoll::noteBorders() const +{ return m_noteBorders; } + +void PianoRoll::setNoteBorders( const bool b ) +{ m_noteBorders = b; } + + + + + +void PianoRoll::drawNoteRect( QPainter & p, int x, int y, int width, const Note * n, const QColor & noteCol, - float radiusX, float radiusY, const QColor & selCol ) + const QColor & selCol, const int noteOpc, const bool borders ) { ++x; ++y; @@ -801,8 +808,8 @@ void PianoRoll::drawNoteRect(QPainter & p, int x, int y, width = 2; } - int volVal = qMin( 255, 25 + (int) ( ( (float)( n->getVolume() - MinVolume ) ) / - ( (float)( MaxVolume - MinVolume ) ) * 230.0f) ); + int volVal = qMin( 255, 100 + (int) ( ( (float)( n->getVolume() - MinVolume ) ) / + ( (float)( MaxVolume - MinVolume ) ) * 155.0f) ); float rightPercent = qMin( 1.0f, ( (float)( n->getPanning() - PanningLeft ) ) / ( (float)( PanningRight - PanningLeft ) ) * 2.0f ); @@ -812,37 +819,47 @@ void PianoRoll::drawNoteRect(QPainter & p, int x, int y, ( (float)( PanningRight - PanningLeft ) ) * 2.0f ); QColor col = QColor( noteCol ); + QPen pen; if( n->selected() ) { col = QColor( selCol ); } + const int borderWidth = borders ? 1 : 0; + + const int noteHeight = KEY_LINE_HEIGHT - 1 - borderWidth; + int noteWidth = width + 1 - borderWidth; + // 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 ); + volVal * leftPercent, noteOpc ); QColor rcol = QColor::fromHsv( col.hue(), col.saturation(), - volVal * rightPercent ); + volVal * rightPercent, noteOpc ); - QLinearGradient gradient( x, y, x+width, y+KEY_LINE_HEIGHT ); - gradient.setColorAt( 0, lcol ); - gradient.setColorAt( 1, rcol ); + QLinearGradient gradient( x, y, x, y + noteHeight ); + gradient.setColorAt( 0, rcol ); + gradient.setColorAt( 1, lcol ); p.setBrush( gradient ); - p.setPen( col ); - p.setRenderHint(QPainter::Antialiasing); - p.drawRoundedRect( QRectF ( x + 0.5, y - 0.5, width, KEY_LINE_HEIGHT ), radiusX, radiusY ); + if ( borders ) + { + p.setPen( col ); + } + else + { + p.setPen( Qt::NoPen ); + } - // that little tab thing on the end hinting at the user - // to resize the note - p.setPen( noteCol.lighter( 200 ) ); - p.setBrush( noteCol.lighter( 200 ) ); + p.drawRect( x, y, noteWidth, noteHeight ); + + // draw the note endmark, to hint the user to resize + p.setBrush( col ); if( width > 2 ) { - float leftIndent = 2.5; - float vertIndent = 3.5; - p.drawRect( QRectF (x + width - leftIndent, y + vertIndent, 1, KEY_LINE_HEIGHT - (2*vertIndent + 1) ) ); + const int endmarkWidth = 3 - borderWidth; + p.drawRect( x + noteWidth - endmarkWidth, y, endmarkWidth, noteHeight ); } } @@ -1128,6 +1145,11 @@ void PianoRoll::keyPressEvent(QKeyEvent* ke ) } break; + case Qt::Key_Escape: + // Same as Ctrl + Shift + A + clearSelectedNotes(); + break; + case Qt::Key_Delete: deleteSelectedNotes(); ke->accept(); @@ -1420,7 +1442,6 @@ void PianoRoll::mousePressEvent(QMouseEvent * me ) { is_new_note = true; m_pattern->addJournalCheckPoint(); - m_pattern->setType( Pattern::MelodyPattern ); // then set new note @@ -1605,17 +1626,8 @@ void PianoRoll::mousePressEvent(QMouseEvent * me ) m_mouseDownRight = true; if( it != notes.begin()-1 ) { - Note *note = *it; m_pattern->addJournalCheckPoint(); - if( note->length() > 0 ) - { - m_pattern->removeNote( note ); - } - else - { - note->setLength( 0 ); - m_pattern->dataChanged(); - } + m_pattern->removeNote( *it ); Engine::getSong()->setModified(); } } @@ -2266,19 +2278,8 @@ void PianoRoll::mouseMoveEvent( QMouseEvent * me ) ) { // delete this note - if( it != notes.end() ) - { - if( note->length() > 0 ) - { - m_pattern->removeNote( note ); - } - else - { - note->setLength( 0 ); - m_pattern->dataChanged(); - } - Engine::getSong()->setModified(); - } + m_pattern->removeNote( note ); + Engine::getSong()->setModified(); } else { @@ -2424,7 +2425,18 @@ void PianoRoll::dragNotes( int x, int y, bool alt, bool shift, bool ctrl ) { if( note->selected() ) { - if( ! ( shift && ! m_startedWithShift ) ) + if( shift && ! m_startedWithShift ) + { + // quick resize, toggled by holding shift after starting a note move, but not before + int ticks_new = note->oldLength().getTicks() + off_ticks; + if( ticks_new <= 0 ) + { + ticks_new = 1; + } + note->setLength( MidiTime( ticks_new ) ); + m_lenOfNewNotes = note->length(); + } + else { // moving note int pos_ticks = note->oldPos().getTicks() + off_ticks; @@ -2439,17 +2451,6 @@ void PianoRoll::dragNotes( int x, int y, bool alt, bool shift, bool ctrl ) note->setPos( MidiTime( pos_ticks ) ); note->setKey( key_num ); } - else if( shift && ! m_startedWithShift ) - { - // quick resize, toggled by holding shift after starting a note move, but not before - int ticks_new = note->oldLength().getTicks() + off_ticks; - if( ticks_new <= 0 ) - { - ticks_new = 1; - } - note->setLength( MidiTime( ticks_new ) ); - m_lenOfNewNotes = note->length(); - } } } } @@ -2561,6 +2562,7 @@ void PianoRoll::dragNotes( int x, int y, bool alt, bool shift, bool ctrl ) } } + m_pattern->updateLength(); m_pattern->dataChanged(); Engine::getSong()->setModified(); } @@ -2967,7 +2969,8 @@ void PianoRoll::paintEvent(QPaintEvent * pe ) // note drawNoteRect( p, x + WHITE_KEY_WIDTH, y_base - key * KEY_LINE_HEIGHT, - note_width, note, noteColor(), noteBorderRadiusX(), noteBorderRadiusY(), selectedNoteColor() ); + note_width, note, noteColor(), selectedNoteColor(), + noteOpacity(), noteBorders() ); } // draw note editing stuff @@ -3005,12 +3008,12 @@ void PianoRoll::paintEvent(QPaintEvent * pe ) ( (float)( (PanningRight - PanningLeft ) ) ) * ( (float)( noteEditBottom() - noteEditTop() ) ); - p.drawLine( QLineF( noteEditLeft() + x + 0.5, noteEditTop() + 0.5 + + p.drawLine( QLine( noteEditLeft() + x, noteEditTop() + ( (float)( noteEditBottom() - noteEditTop() ) ) / 2.0f, - noteEditLeft() + x + 0.5, editHandleTop + 0.5 ) ); + noteEditLeft() + x , editHandleTop ) ); } - editHandles << QPointF ( x + noteEditLeft() + 0.5, - editHandleTop + 1.5 ); + editHandles << QPoint ( x + noteEditLeft(), + editHandleTop ); if( note->hasDetuningInfo() ) { @@ -3250,11 +3253,11 @@ void PianoRoll::wheelEvent(QWheelEvent * we ) int z = m_zoomingModel.value(); if( we->delta() > 0 ) { - z++; + z--; } if( we->delta() < 0 ) { - z--; + z++; } z = qBound( 0, z, m_zoomingModel.size() - 1 ); // update combobox with zooming-factor @@ -3408,7 +3411,7 @@ void PianoRoll::stop() { Engine::getSong()->stop(); m_recording = false; - m_scrollBack = true; + m_scrollBack = ( m_timeLine->autoScroll() == TimeLineWidget::AutoScrollEnabled ); } @@ -3510,43 +3513,41 @@ void PianoRoll::selectAll() for( const Note *note : m_pattern->notes() ) { - int len_ticks = note->length(); + int len_ticks = static_cast( note->length() ) > 0 ? + static_cast( note->length() ) : 1; - if( len_ticks > 0 ) - { - const int key = note->key(); + const int key = note->key(); - int pos_ticks = note->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; + int pos_ticks = note->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; } } @@ -3679,7 +3680,7 @@ void PianoRoll::cutSelectedNotes() Engine::getSong()->setModified(); - for( const Note *note : selected_notes ) + for( Note *note : selected_notes ) { // note (the memory of it) is also deleted by // pattern::removeNote(...) so we don't have to do that @@ -3848,8 +3849,7 @@ void PianoRoll::updatePositionAccompany( const MidiTime & t ) void PianoRoll::zoomingChanged() { - const QString & zfac = m_zoomingModel.currentText(); - m_ppt = zfac.left( zfac.length() - 1 ).toInt() * DEFAULT_PR_PPT / 100; + m_ppt = m_zoomLevels[m_zoomingModel.value()] * DEFAULT_PR_PPT; assert( m_ppt > 0 ); @@ -3866,6 +3866,8 @@ void PianoRoll::quantizeChanged() } + + int PianoRoll::quantization() const { if( m_quantizeModel.value() == 0 ) @@ -3885,6 +3887,36 @@ int PianoRoll::quantization() const } +void PianoRoll::quantizeNotes() +{ + NoteVector notes = getSelectedNotes(); + + if (notes.empty()) + { + for (Note* n : m_pattern->notes()) + { + notes.push_back(n); + } + } + + for (Note* n : notes) + { + if (n->length() == MidiTime(0)) + { + continue; + } + + Note copy(*n); + m_pattern->removeNote(n); + copy.quantizePos(quantization()); + m_pattern->addNote(copy); + } + + update(); + gui->songEditor()->update(); +} + + void PianoRoll::updateSemiToneMarkerMenu() @@ -4042,10 +4074,15 @@ PianoRollWindow::PianoRollWindow() : connect(editModeGroup, SIGNAL(triggered(int)), m_editor, SLOT(setEditMode(int))); + QAction* quantizeAction = new QAction(embed::getIconPixmap("quantize"), tr("Quantize"), this); + connect(quantizeAction, SIGNAL(triggered()), m_editor, SLOT(quantizeNotes())); + notesActionsToolBar->addAction( drawAction ); notesActionsToolBar->addAction( eraseAction ); notesActionsToolBar->addAction( selectAction ); notesActionsToolBar->addAction( detuneAction ); + notesActionsToolBar->addSeparator(); + notesActionsToolBar->addAction( quantizeAction ); // Copy + paste actions DropToolBar *copyPasteActionsToolBar = addDropToolBarToTop(tr("Copy paste controls")); diff --git a/src/gui/editors/SongEditor.cpp b/src/gui/editors/SongEditor.cpp index 6d0909ebb73..46253c80802 100644 --- a/src/gui/editors/SongEditor.cpp +++ b/src/gui/editors/SongEditor.cpp @@ -47,6 +47,7 @@ #include "LcdSpinBox.h" #include "MainWindow.h" #include "MeterDialog.h" +#include "Mixer.h" #include "TextFloat.h" #include "TimeLineWidget.h" #include "ToolTip.h" @@ -57,8 +58,8 @@ -positionLine::positionLine( QWidget * _parent ) : - QWidget( _parent ) +positionLine::positionLine( QWidget * parent ) : + QWidget( parent ) { setFixedWidth( 1 ); setAttribute( Qt::WA_NoSystemBackground, true ); @@ -67,18 +68,19 @@ positionLine::positionLine( QWidget * _parent ) : -void positionLine::paintEvent( QPaintEvent * _pe ) +void positionLine::paintEvent( QPaintEvent * pe ) { QPainter p( this ); p.fillRect( rect(), QColor( 255, 255, 255, 153 ) ); } +const QVector SongEditor::m_zoomLevels = + { 0.125f, 0.25f, 0.5f, 1.0f, 2.0f, 4.0f, 8.0f, 16.0f }; - -SongEditor::SongEditor( Song * _song ) : - TrackContainerView( _song ), - m_song( _song ), +SongEditor::SongEditor( Song * song ) : + TrackContainerView( song ), + m_song( song ), m_zoomingModel(new ComboBoxModel()), m_scrollBack( false ), m_smoothScroll( ConfigManager::inst()->value( "ui", "smoothscroll" ).toInt() ), @@ -242,10 +244,9 @@ SongEditor::SongEditor( Song * _song ) : this, SLOT( updateScrollBar( int ) ) ); // Set up zooming model - for( int i = 0; i < 7; ++i ) + for( float const & zoomLevel : m_zoomLevels ) { - m_zoomingModel->addItem( - QString::number( 25 << i ) + "%" ); + m_zoomingModel->addItem( QString( "%1\%" ).arg( zoomLevel * 100 ) ); } m_zoomingModel->setInitValue( m_zoomingModel->findText( "100%" ) ); @@ -276,26 +277,26 @@ void SongEditor::loadSettings( const QDomElement& element ) -void SongEditor::setHighQuality( bool _hq ) +void SongEditor::setHighQuality( bool hq ) { Engine::mixer()->changeQuality( Mixer::qualitySettings( - _hq ? Mixer::qualitySettings::Mode_HighQuality : + hq ? Mixer::qualitySettings::Mode_HighQuality : Mixer::qualitySettings::Mode_Draft ) ); } -void SongEditor::scrolled( int _new_pos ) +void SongEditor::scrolled( int new_pos ) { update(); - emit positionChanged( m_currentPosition = MidiTime( _new_pos, 0 ) ); + emit positionChanged( m_currentPosition = MidiTime( new_pos, 0 ) ); } -void SongEditor::setEditMode(EditMode mode) +void SongEditor::setEditMode( EditMode mode ) { m_mode = mode; } @@ -313,21 +314,21 @@ void SongEditor::setEditModeSelect() -void SongEditor::keyPressEvent( QKeyEvent * _ke ) +void SongEditor::keyPressEvent( QKeyEvent * ke ) { if( /*_ke->modifiers() & Qt::ShiftModifier*/ gui->mainWindow()->isShiftPressed() == true && - _ke->key() == Qt::Key_Insert ) + ke->key() == Qt::Key_Insert ) { m_song->insertBar(); } else if(/* _ke->modifiers() & Qt::ShiftModifier &&*/ gui->mainWindow()->isShiftPressed() == true && - _ke->key() == Qt::Key_Delete ) + ke->key() == Qt::Key_Delete ) { m_song->removeBar(); } - else if( _ke->key() == Qt::Key_Left ) + else if( ke->key() == Qt::Key_Left ) { tick_t t = m_song->currentTick() - MidiTime::ticksPerTact(); if( t >= 0 ) @@ -335,7 +336,7 @@ void SongEditor::keyPressEvent( QKeyEvent * _ke ) m_song->setPlayPos( t, Song::Mode_PlaySong ); } } - else if( _ke->key() == Qt::Key_Right ) + else if( ke->key() == Qt::Key_Right ) { tick_t t = m_song->currentTick() + MidiTime::ticksPerTact(); if( t < MaxSongLength ) @@ -343,61 +344,59 @@ void SongEditor::keyPressEvent( QKeyEvent * _ke ) m_song->setPlayPos( t, Song::Mode_PlaySong ); } } - else if( _ke->key() == Qt::Key_Home ) + else if( ke->key() == Qt::Key_Home ) { m_song->setPlayPos( 0, Song::Mode_PlaySong ); } else { - QWidget::keyPressEvent( _ke ); + QWidget::keyPressEvent( ke ); } } -void SongEditor::wheelEvent( QWheelEvent * _we ) +void SongEditor::wheelEvent( QWheelEvent * we ) { if( gui->mainWindow()->isCtrlPressed() == true ) { - if( _we->delta() > 0 ) + int z = m_zoomingModel->value(); + + if( we->delta() > 0 ) { - setPixelsPerTact( (int) qMin( pixelsPerTact() * 2, - 256.0f ) ); + z--; } - else if( pixelsPerTact() >= 8 ) + if( we->delta() < 0 ) { - setPixelsPerTact( (int) pixelsPerTact() / 2 ); + z++; } + z = qBound( 0, z, m_zoomingModel->size() - 1 ); // update combobox with zooming-factor - m_zoomingModel->setValue( - m_zoomingModel->findText( - QString::number( - static_cast( pixelsPerTact() * - 100 / DEFAULT_PIXELS_PER_TACT ) ) + - "%" ) ); + m_zoomingModel->setValue( z ); + // update timeline m_song->m_playPos[Song::Mode_PlaySong].m_timeLine-> setPixelsPerTact( pixelsPerTact() ); // and make sure, all TCO's are resized and relocated realignTracks(); } - else if( gui->mainWindow()->isShiftPressed() == true || _we->orientation() == Qt::Horizontal ) + else if( gui->mainWindow()->isShiftPressed() == true || we->orientation() == Qt::Horizontal ) { m_leftRightScroll->setValue( m_leftRightScroll->value() - - _we->delta() / 30 ); + we->delta() / 30 ); } else { - _we->ignore(); + we->ignore(); return; } - _we->accept(); + we->accept(); } -void SongEditor::closeEvent( QCloseEvent * _ce ) +void SongEditor::closeEvent( QCloseEvent * ce ) { if( parentWidget() ) { @@ -407,15 +406,15 @@ void SongEditor::closeEvent( QCloseEvent * _ce ) { hide(); } - _ce->ignore(); + ce->ignore(); } -void SongEditor::setMasterVolume( int _new_val ) +void SongEditor::setMasterVolume( int new_val ) { - updateMasterVolumeFloat( _new_val ); + updateMasterVolumeFloat( new_val ); if( !m_mvsStatus->isVisible() && !m_song->m_loadingProject && m_masterVolumeSlider->showStatus() ) @@ -424,7 +423,7 @@ void SongEditor::setMasterVolume( int _new_val ) QPoint( m_masterVolumeSlider->width() + 2, -2 ) ); m_mvsStatus->setVisibilityTimeOut( 1000 ); } - Engine::mixer()->setMasterGain( _new_val / 100.0f ); + Engine::mixer()->setMasterGain( new_val / 100.0f ); } @@ -441,9 +440,9 @@ void SongEditor::showMasterVolumeFloat( void ) -void SongEditor::updateMasterVolumeFloat( int _new_val ) +void SongEditor::updateMasterVolumeFloat( int new_val ) { - m_mvsStatus->setText( tr( "Value: %1%" ).arg( _new_val ) ); + m_mvsStatus->setText( tr( "Value: %1%" ).arg( new_val ) ); } @@ -457,9 +456,9 @@ void SongEditor::hideMasterVolumeFloat( void ) -void SongEditor::setMasterPitch( int _new_val ) +void SongEditor::setMasterPitch( int new_val ) { - updateMasterPitchFloat( _new_val ); + updateMasterPitchFloat( new_val ); if( m_mpsStatus->isVisible() == false && m_song->m_loadingProject == false && m_masterPitchSlider->showStatus() ) { @@ -483,9 +482,9 @@ void SongEditor::showMasterPitchFloat( void ) -void SongEditor::updateMasterPitchFloat( int _new_val ) +void SongEditor::updateMasterPitchFloat( int new_val ) { - m_mpsStatus->setText( tr( "Value: %1 semitones").arg( _new_val ) ); + m_mpsStatus->setText( tr( "Value: %1 semitones").arg( new_val ) ); } @@ -500,9 +499,9 @@ void SongEditor::hideMasterPitchFloat( void ) -void SongEditor::updateScrollBar( int _len ) +void SongEditor::updateScrollBar( int len ) { - m_leftRightScroll->setMaximum( _len ); + m_leftRightScroll->setMaximum( len ); } @@ -539,7 +538,7 @@ static inline void animateScroll( QScrollBar *scrollBar, int newVal, bool smooth -void SongEditor::updatePosition( const MidiTime & _t ) +void SongEditor::updatePosition( const MidiTime & t ) { int widgetWidth, trackOpWidth; if( ConfigManager::inst()->value( "ui", "compacttrackbuttons" ).toInt() ) @@ -561,24 +560,20 @@ void SongEditor::updatePosition( const MidiTime & _t ) const int w = width() - widgetWidth - trackOpWidth - contentWidget()->verticalScrollBar()->width(); // width of right scrollbar - if( _t > m_currentPosition + w * MidiTime::ticksPerTact() / + if( t > m_currentPosition + w * MidiTime::ticksPerTact() / pixelsPerTact() ) { - animateScroll( m_leftRightScroll, _t.getTact(), m_smoothScroll ); + animateScroll( m_leftRightScroll, t.getTact(), m_smoothScroll ); } - else if( _t < m_currentPosition ) + 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_song->m_playPos[Song::Mode_PlaySong].m_timeLine-> - markerX( _t ) + 8; + markerX( t ) + 8; if( x >= trackOpWidth + widgetWidth -1 ) { m_positionLine->show(); @@ -597,9 +592,8 @@ void SongEditor::updatePosition( const MidiTime & _t ) void SongEditor::zoomingChanged() { - const QString & zfac = m_zoomingModel->currentText(); - setPixelsPerTact( zfac.left( zfac.length() - 1 ).toInt() * - DEFAULT_PIXELS_PER_TACT / 100 ); + setPixelsPerTact( m_zoomLevels[m_zoomingModel->value()] * DEFAULT_PIXELS_PER_TACT ); + m_song->m_playPos[Song::Mode_PlaySong].m_timeLine-> setPixelsPerTact( pixelsPerTact() ); realignTracks(); @@ -607,12 +601,15 @@ void SongEditor::zoomingChanged() + bool SongEditor::allowRubberband() const { return m_mode == SelectMode; } + + SongEditorWindow::SongEditorWindow(Song* song) : Editor(Engine::mixer()->audioDev()->supportsCapture()), m_editor(new SongEditor(song)) diff --git a/src/gui/widgets/ControllerView.cpp b/src/gui/widgets/ControllerView.cpp index 4e07907b7f1..0b1d912c465 100644 --- a/src/gui/widgets/ControllerView.cpp +++ b/src/gui/widgets/ControllerView.cpp @@ -143,10 +143,7 @@ void ControllerView::deleteController() emit( deleteController( this ) ); } - - - -void ControllerView::mouseDoubleClickEvent( QMouseEvent * event ) +void ControllerView::renameController() { bool ok; Controller * c = castModel(); @@ -162,6 +159,12 @@ void ControllerView::mouseDoubleClickEvent( QMouseEvent * event ) } +void ControllerView::mouseDoubleClickEvent( QMouseEvent * event ) +{ + renameController(); +} + + void ControllerView::modelChanged() { @@ -173,8 +176,9 @@ void ControllerView::contextMenuEvent( QContextMenuEvent * ) { QPointer contextMenu = new CaptionMenu( model()->displayName(), this ); contextMenu->addAction( embed::getIconPixmap( "cancel" ), - tr( "&Remove this plugin" ), + tr( "&Remove this controller" ), this, SLOT( deleteController() ) ); + contextMenu->addAction( tr("Re&name this controller"), this, SLOT( renameController() )); contextMenu->addSeparator(); contextMenu->addHelpAction(); contextMenu->exec( QCursor::pos() ); @@ -182,7 +186,6 @@ void ControllerView::contextMenuEvent( QContextMenuEvent * ) } - void ControllerView::displayHelp() { QWhatsThis::showText( mapToGlobal( rect().center() ), diff --git a/src/gui/widgets/EffectRackView.cpp b/src/gui/widgets/EffectRackView.cpp index b136b16f752..49be493e713 100644 --- a/src/gui/widgets/EffectRackView.cpp +++ b/src/gui/widgets/EffectRackView.cpp @@ -40,7 +40,7 @@ EffectRackView::EffectRackView( EffectChain* model, QWidget* parent ) : ModelView( NULL, this ) { QVBoxLayout* mainLayout = new QVBoxLayout( this ); - mainLayout->setMargin( 5 ); + mainLayout->setMargin( 0 ); m_effectsGroupBox = new GroupBox( tr( "EFFECTS CHAIN" ) ); mainLayout->addWidget( m_effectsGroupBox ); @@ -84,12 +84,12 @@ EffectRackView::~EffectRackView() void EffectRackView::clearViews() { - for( QVector::Iterator it = m_effectViews.begin(); - it != m_effectViews.end(); ++it ) + while( m_effectViews.size() ) { - delete *it; + EffectView * e = m_effectViews[m_effectViews.size() - 1]; + m_effectViews.pop_back(); + delete e; } - m_effectViews.clear(); } diff --git a/src/gui/widgets/EnvelopeAndLfoView.cpp b/src/gui/widgets/EnvelopeAndLfoView.cpp index 5c364c19bd2..c6598d4f5b3 100644 --- a/src/gui/widgets/EnvelopeAndLfoView.cpp +++ b/src/gui/widgets/EnvelopeAndLfoView.cpp @@ -508,6 +508,8 @@ void EnvelopeAndLfoView::paintEvent( QPaintEvent * ) osc_frames *= 100.0f; } + // userWaveSample() may be used, called out of loop for efficiency + m_params->m_userWave.dataReadLock(); float old_y = 0; for( int x = 0; x <= LFO_GRAPH_W; ++x ) { @@ -558,6 +560,7 @@ void EnvelopeAndLfoView::paintEvent( QPaintEvent * ) graph_y_base + cur_y ) ); old_y = cur_y; } + m_params->m_userWave.dataUnlock(); p.setPen( QColor( 201, 201, 225 ) ); int ms_per_osc = static_cast( SECS_PER_LFO_OSCILLATION * diff --git a/src/gui/widgets/Fader.cpp b/src/gui/widgets/Fader.cpp index d8055f5acdd..2ef4c2e6241 100644 --- a/src/gui/widgets/Fader.cpp +++ b/src/gui/widgets/Fader.cpp @@ -57,6 +57,7 @@ #include "ConfigManager.h" #include "TextFloat.h" #include "MainWindow.h" +#include "lmms_math.h" TextFloat * Fader::s_textFloat = NULL; @@ -74,6 +75,7 @@ Fader::Fader( FloatModel * _model, const QString & _name, QWidget * _parent ) : m_fMinPeak( 0.01f ), m_fMaxPeak( 1.1 ), m_displayConversion( true ), + m_levelsDisplayedInDBFS(false), m_moveStartPoint( -1 ), m_startValue( 0 ), m_peakGreen( 0, 0, 0 ), @@ -100,13 +102,7 @@ Fader::Fader( FloatModel * _model, const QString & _name, QWidget * _parent ) : m_leds = s_leds; m_knob = s_knob; - setWindowTitle( _name ); - setAttribute( Qt::WA_OpaquePaintEvent, false ); - setMinimumSize( 23, 116 ); - setMaximumSize( 23, 116); - resize( 23, 116 ); - setModel( _model ); - setHintText( "Volume:","%"); + init(_model, _name); } @@ -120,6 +116,7 @@ Fader::Fader( FloatModel * model, const QString & name, QWidget * parent, QPixma m_fMinPeak( 0.01f ), m_fMaxPeak( 1.1 ), m_displayConversion( false ), + m_levelsDisplayedInDBFS(false), m_moveStartPoint( -1 ), m_startValue( 0 ), m_peakGreen( 0, 0, 0 ), @@ -134,13 +131,7 @@ Fader::Fader( FloatModel * model, const QString & name, QWidget * parent, QPixma m_leds = leds; m_knob = knob; - setWindowTitle( name ); - setAttribute( Qt::WA_OpaquePaintEvent, false ); - setMinimumSize( m_back->width(), m_back->height() ); - setMaximumSize( m_back->width(), m_back->height() ); - resize( m_back->width(), m_back->height() ); - setModel( model ); - setHintText( "Volume:","%"); + init(model, name); } @@ -149,6 +140,18 @@ Fader::~Fader() } +void Fader::init(FloatModel * model, QString const & name) +{ + setWindowTitle( name ); + setAttribute( Qt::WA_OpaquePaintEvent, false ); + QSize backgroundSize = m_back->size(); + setMinimumSize( backgroundSize ); + setMaximumSize( backgroundSize ); + resize( backgroundSize ); + setModel( model ); + setHintText( "Volume:","%"); +} + void Fader::contextMenuEvent( QContextMenuEvent * _ev ) @@ -337,20 +340,81 @@ inline int Fader::calculateDisplayPeak( float fPeak ) return qMin( peak, m_back->height() ); } + void Fader::paintEvent( QPaintEvent * ev) { QPainter painter(this); - // background + // Draw the background painter.drawPixmap( ev->rect(), *m_back, ev->rect() ); + // Draw the levels with peaks + if (getLevelsDisplayedInDBFS()) + { + paintDBFSLevels(ev, painter); + } + else + { + paintLinearLevels(ev, painter); + } + + // Draw the knob + painter.drawPixmap( 0, knobPosY() - m_knob->height(), *m_knob ); +} + +void Fader::paintDBFSLevels(QPaintEvent * ev, QPainter & painter) +{ + int height = m_back->height(); + int width = m_back->width() / 2; + int center = m_back->width() - width; + + float const maxDB(ampToDbv(m_fMaxPeak)); + float const minDB(ampToDbv(m_fMinPeak)); + + // We will need to divide by the span between min and max several times. It's more + // efficient to calculate the reciprocal once and then to multiply. + float const fullSpanReciprocal = 1 / (maxDB - minDB); + + + // Draw left levels + float const leftSpan = ampToDbv(m_fPeakValue_L) - minDB; + int peak_L = height * leftSpan * fullSpanReciprocal; + QRect drawRectL( 0, height - peak_L, width, peak_L ); // Source and target are identical + painter.drawPixmap( drawRectL, *m_leds, drawRectL ); + + float const persistentLeftPeakDBFS = ampToDbv(m_persistentPeak_L); + int persistentPeak_L = height * (1 - (persistentLeftPeakDBFS - minDB) * fullSpanReciprocal); + if( persistentLeftPeakDBFS > minDB ) + { + QColor const & peakColor = clips(m_persistentPeak_L) ? peakRed() : peakGreen(); + painter.fillRect( QRect( 2, persistentPeak_L, 7, 1 ), peakColor ); + } + + + // Draw right levels + float const rightSpan = ampToDbv(m_fPeakValue_R) - minDB; + int peak_R = height * rightSpan * fullSpanReciprocal; + QRect const drawRectR( center, height - peak_R, width, peak_R ); // Source and target are identical + painter.drawPixmap( drawRectR, *m_leds, drawRectR ); + + float const persistentRightPeakDBFS = ampToDbv(m_persistentPeak_R); + int persistentPeak_R = height * (1 - (persistentRightPeakDBFS - minDB) * fullSpanReciprocal); + if( persistentRightPeakDBFS > minDB ) + { + QColor const & peakColor = clips(m_persistentPeak_R) ? peakRed() : peakGreen(); + painter.fillRect( QRect( 14, persistentPeak_R, 7, 1 ), peakColor ); + } +} + +void Fader::paintLinearLevels(QPaintEvent * ev, QPainter & painter) +{ // peak leds //float fRange = abs( m_fMaxPeak ) + abs( m_fMinPeak ); int height = m_back->height(); int width = m_back->width() / 2; int center = m_back->width() - width; - + 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, width, height - peak_L ), *m_leds, QRect( 0, peak_L, width, height - peak_L ) ); @@ -372,18 +436,15 @@ void Fader::paintEvent( QPaintEvent * ev) ? peakGreen() : peakRed() ); } - - // knob - painter.drawPixmap( 0, knobPosY() - m_knob->height(), *m_knob ); } -QColor Fader::peakGreen() const +QColor const & Fader::peakGreen() const { return m_peakGreen; } -QColor Fader::peakRed() const +QColor const & Fader::peakRed() const { return m_peakRed; } diff --git a/src/gui/widgets/FxLine.cpp b/src/gui/widgets/FxLine.cpp index 249afdf0a91..79be1e45005 100644 --- a/src/gui/widgets/FxLine.cpp +++ b/src/gui/widgets/FxLine.cpp @@ -25,26 +25,28 @@ #include "FxLine.h" -#include -#include +#include +#include #include #include #include -#include "FxMixer.h" -#include "FxMixerView.h" +#include "CaptionMenu.h" #include "embed.h" #include "Engine.h" +#include "FxMixer.h" +#include "FxMixerView.h" +#include "gui_templates.h" #include "GuiApplication.h" #include "SendButtonIndicator.h" -#include "gui_templates.h" -#include "CaptionMenu.h" +#include "Song.h" + const int FxLine::FxLineHeight = 287; QPixmap * FxLine::s_sendBgArrow = NULL; QPixmap * FxLine::s_receiveBgArrow = NULL; -FxLine::FxLine( QWidget * _parent, FxMixerView * _mv, int _channelIndex) : +FxLine::FxLine( QWidget * _parent, FxMixerView * _mv, int _channelIndex ) : QWidget( _parent ), m_mv( _mv ), m_channelIndex( _channelIndex ), @@ -52,13 +54,14 @@ FxLine::FxLine( QWidget * _parent, FxMixerView * _mv, int _channelIndex) : m_strokeOuterActive( 0, 0, 0 ), m_strokeOuterInactive( 0, 0, 0 ), m_strokeInnerActive( 0, 0, 0 ), - m_strokeInnerInactive( 0, 0, 0 ) + m_strokeInnerInactive( 0, 0, 0 ), + m_inRename( false ) { - if( ! s_sendBgArrow ) + if( !s_sendBgArrow ) { s_sendBgArrow = new QPixmap( embed::getIconPixmap( "send_bg_arrow", 29, 56 ) ); } - if( ! s_receiveBgArrow ) + if( !s_receiveBgArrow ) { s_receiveBgArrow = new QPixmap( embed::getIconPixmap( "receive_bg_arrow", 29, 56 ) ); } @@ -68,9 +71,9 @@ FxLine::FxLine( QWidget * _parent, FxMixerView * _mv, int _channelIndex) : setCursor( QCursor( embed::getIconPixmap( "hand" ), 3, 3 ) ); // mixer sends knob - m_sendKnob = new Knob( knobBright_26, this, tr("Channel send amount") ); + m_sendKnob = new Knob( knobBright_26, this, tr( "Channel send amount" ) ); m_sendKnob->move( 3, 22 ); - m_sendKnob->setVisible(false); + m_sendKnob->setVisible( false ); // send button indicator m_sendBtn = new SendButtonIndicator( this, this, m_mv ); @@ -94,13 +97,37 @@ FxLine::FxLine( QWidget * _parent, FxMixerView * _mv, int _channelIndex) : "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") ); + "by right-clicking the FX channel.\n" ) ); + + QString name = Engine::fxMixer()->effectChannel( m_channelIndex )->m_name; + setToolTip( name ); + + m_renameLineEdit = new QLineEdit(); + m_renameLineEdit->setText( name ); + m_renameLineEdit->setFixedWidth( 65 ); + m_renameLineEdit->setFont( pointSizeF( font(), 7.5f ) ); + m_renameLineEdit->setReadOnly( true ); + + QGraphicsScene * scene = new QGraphicsScene(); + scene->setSceneRect( 0, 0, 33, FxLineHeight ); - FxMixer * mix = Engine::fxMixer(); - setToolTip( mix->effectChannel( m_channelIndex )->m_name ); + m_view = new QGraphicsView( this ); + m_view->setStyleSheet( "border-style: none; background: transparent;" ); + m_view->setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); + m_view->setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); + m_view->setAttribute( Qt::WA_TransparentForMouseEvents, true ); + m_view->setScene( scene ); + + QGraphicsProxyWidget * proxyWidget = scene->addWidget( m_renameLineEdit ); + proxyWidget->setRotation( -90 ); + proxyWidget->setPos( 8, 145 ); + + connect( m_renameLineEdit, SIGNAL( editingFinished() ), this, SLOT( renameFinished() ) ); } + + FxLine::~FxLine() { delete m_sendKnob; @@ -109,26 +136,30 @@ FxLine::~FxLine() } -void FxLine::setChannelIndex(int index) { - m_channelIndex = index; + +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 ) + + +void FxLine::drawFxLine( QPainter* p, const FxLine *fxLine, bool isActive, bool sendToThis, bool receiveFromThis ) { + QString name = Engine::fxMixer()->effectChannel( m_channelIndex )->m_name; + QString elidedName = elideName( name ); + if( !m_inRename && m_renameLineEdit->text() != elidedName ) + { + m_renameLineEdit->setText( elidedName ); + } + 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() ); // inner border @@ -148,66 +179,54 @@ void FxLine::drawFxLine( QPainter* p, const FxLine *fxLine, const QString& name, { p->drawPixmap( 2, 0, 29, 56, *s_receiveBgArrow ); } +} - // draw the channel name - if( m_staticTextName.text() != name ) - { - // elide the name of the fxLine when its too long - const int maxTextHeight = 78; - QFontMetrics metrics( fxLine->font() ); - QString elidedName = metrics.elidedText( name, Qt::ElideRight, maxTextHeight ); - m_staticTextName.setText( elidedName ); - } - p->rotate( -90 ); - p->setFont( pointSizeF( fxLine->font(), 7.5f ) ); - // Coordinates of the foreground text - int const textLeft = -145; - int const textTop = 9; - // Draw text shadow - p->setPen( sh_color ); - p->drawStaticText( textLeft - 1, textTop + 1, m_staticTextName ); - - // Draw foreground text - p->setPen( isActive ? bt_color : te_color ); - p->drawStaticText( textLeft, textTop, m_staticTextName ); +QString FxLine::elideName( const QString & name ) +{ + const int maxTextHeight = 70; + QFontMetrics metrics( font() ); + QString elidedName = metrics.elidedText( name, Qt::ElideRight, maxTextHeight ); + return elidedName; } + + 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; + bool sendToThis = Engine::fxMixer()->channelSendModel( m_mv->currentFxLine()->m_channelIndex, m_channelIndex ) != NULL; + bool receiveFromThis = Engine::fxMixer()->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 ); + drawFxLine( &painter, this, 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 ); + QPointer contextMenu = new CaptionMenu( Engine::fxMixer()->effectChannel( m_channelIndex )->m_name, this ); if( m_channelIndex != 0 ) // no move-options in master { contextMenu->addAction( tr( "Move &left" ), this, SLOT( moveChannelLeft() ) ); @@ -218,39 +237,56 @@ void FxLine::contextMenuEvent( QContextMenuEvent * ) if( m_channelIndex != 0 ) // no remove-option in master { - contextMenu->addAction( embed::getIconPixmap( "cancel" ), tr( "R&emove channel" ), - this, SLOT( removeChannel() ) ); + contextMenu->addAction( embed::getIconPixmap( "cancel" ), tr( "R&emove channel" ), this, SLOT( removeChannel() ) ); contextMenu->addSeparator(); } - - contextMenu->addAction( embed::getIconPixmap( "cancel" ), tr( "Remove &unused channels" ), - this, SLOT( removeUnusedChannels() ) ); + contextMenu->addAction( embed::getIconPixmap( "cancel" ), tr( "Remove &unused channels" ), this, SLOT( removeUnusedChannels() ) ); 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() ) + m_inRename = true; + setToolTip( "" ); + m_renameLineEdit->setReadOnly( false ); + m_lcd->hide(); + m_renameLineEdit->setFixedWidth( 135 ); + m_renameLineEdit->setText( Engine::fxMixer()->effectChannel( m_channelIndex )->m_name ); + m_view->setFocus(); + m_renameLineEdit->selectAll(); + m_renameLineEdit->setFocus(); +} + + + + +void FxLine::renameFinished() +{ + m_inRename = false; + m_renameLineEdit->setReadOnly( true ); + m_renameLineEdit->setFixedWidth( 65 ); + m_lcd->show(); + QString newName = m_renameLineEdit->text(); + setFocus(); + if( !newName.isEmpty() && Engine::fxMixer()->effectChannel( m_channelIndex )->m_name != newName ) { - mix->effectChannel( m_channelIndex )->m_name = new_name; - setToolTip( new_name ); - update(); + Engine::fxMixer()->effectChannel( m_channelIndex )->m_name = newName; + m_renameLineEdit->setText( elideName( newName ) ); + Engine::getSong()->setModified(); } + QString name = Engine::fxMixer()->effectChannel( m_channelIndex )->m_name; + setToolTip( name ); } + + void FxLine::removeChannel() { FxMixerView * mix = gui->fxMixerView(); @@ -258,6 +294,8 @@ void FxLine::removeChannel() } + + void FxLine::removeUnusedChannels() { FxMixerView * mix = gui->fxMixerView(); @@ -265,6 +303,8 @@ void FxLine::removeUnusedChannels() } + + void FxLine::moveChannelLeft() { FxMixerView * mix = gui->fxMixerView(); @@ -272,6 +312,8 @@ void FxLine::moveChannelLeft() } + + void FxLine::moveChannelRight() { FxMixerView * mix = gui->fxMixerView(); @@ -279,57 +321,88 @@ void FxLine::moveChannelRight() } + + void FxLine::displayHelp() { - QWhatsThis::showText( mapToGlobal( rect().bottomRight() ), - whatsThis() ); + QWhatsThis::showText( mapToGlobal( rect().bottomRight() ), whatsThis() ); } + + + QBrush FxLine::backgroundActive() const { return m_backgroundActive; } + + + void FxLine::setBackgroundActive( const QBrush & c ) { m_backgroundActive = c; } + + + QColor FxLine::strokeOuterActive() const { return m_strokeOuterActive; } + + + void FxLine::setStrokeOuterActive( const QColor & c ) { m_strokeOuterActive = c; } + + + QColor FxLine::strokeOuterInactive() const { return m_strokeOuterInactive; } + + + void FxLine::setStrokeOuterInactive( const QColor & c ) { m_strokeOuterInactive = c; } + + + QColor FxLine::strokeInnerActive() const { return m_strokeInnerActive; } + + + void FxLine::setStrokeInnerActive( const QColor & c ) { m_strokeInnerActive = c; } + + + QColor FxLine::strokeInnerInactive() const { return m_strokeInnerInactive; } + + + void FxLine::setStrokeInnerInactive( const QColor & c ) { m_strokeInnerInactive = c; diff --git a/src/gui/widgets/Graph.cpp b/src/gui/widgets/Graph.cpp index 3fea035cde1..ead7ee86c59 100644 --- a/src/gui/widgets/Graph.cpp +++ b/src/gui/widgets/Graph.cpp @@ -585,11 +585,13 @@ QString graphModel::setWaveToUser() QString fileName = sampleBuffer->openAndSetWaveformFile(); if( fileName.isEmpty() == false ) { + sampleBuffer->dataReadLock(); for( int i = 0; i < length(); i++ ) { m_samples[i] = sampleBuffer->userWaveSample( i / static_cast( length() ) ); } + sampleBuffer->dataUnlock(); } sharedObject::unref( sampleBuffer ); diff --git a/src/gui/widgets/InstrumentFunctionViews.cpp b/src/gui/widgets/InstrumentFunctionViews.cpp index 632526a25fb..4106f0131d2 100644 --- a/src/gui/widgets/InstrumentFunctionViews.cpp +++ b/src/gui/widgets/InstrumentFunctionViews.cpp @@ -103,6 +103,8 @@ InstrumentFunctionArpeggioView::InstrumentFunctionArpeggioView( InstrumentFuncti m_arpGroupBox( new GroupBox( tr( "ARPEGGIO" ) ) ), m_arpComboBox( new ComboBox() ), m_arpRangeKnob( new Knob( knobBright_26 ) ), + m_arpSkipKnob( new Knob( knobBright_26 ) ), + m_arpMissKnob( new Knob( knobBright_26 ) ), m_arpTimeKnob( new TempoSyncKnob( knobBright_26 ) ), m_arpGateKnob( new Knob( knobBright_26 ) ), m_arpDirectionComboBox( new ComboBox() ), @@ -137,6 +139,22 @@ InstrumentFunctionArpeggioView::InstrumentFunctionArpeggioView( InstrumentFuncti "number of octaves." ) ); + m_arpSkipKnob->setLabel( tr( "SKIP" ) ); + m_arpSkipKnob->setHintText( tr( "Skip rate:" ), tr( "%" ) ); + m_arpSkipKnob->setWhatsThis( + tr( "The skip function will make the arpeggiator pause one step " + "randomly. From its start in full counter clockwise " + "position and no effect it will gradually progress to " + "full amnesia at maximum setting.") ); + + + m_arpMissKnob->setLabel( tr( "MISS" ) ); + m_arpMissKnob->setHintText( tr( "Miss rate:" ), tr( "%" ) ); + m_arpMissKnob->setWhatsThis( + tr( "The miss function will make the arpeggiator miss the " + "intended note.") ); + + m_arpTimeKnob->setLabel( tr( "TIME" ) ); m_arpTimeKnob->setHintText( tr( "Arpeggio time:" ), " " + tr( "ms" ) ); m_arpTimeKnob->setWhatsThis( @@ -153,6 +171,7 @@ InstrumentFunctionArpeggioView::InstrumentFunctionArpeggioView( InstrumentFuncti "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() ) ); @@ -170,8 +189,10 @@ InstrumentFunctionArpeggioView::InstrumentFunctionArpeggioView( InstrumentFuncti 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_arpSkipKnob, 3, 1, 2, 1, Qt::AlignHCenter ); + mainLayout->addWidget( m_arpMissKnob, 3, 2, 2, 1, Qt::AlignHCenter ); mainLayout->addWidget( m_arpGateKnob, 6, 1, 2, 1, Qt::AlignHCenter ); + mainLayout->addWidget( m_arpTimeKnob, 6, 2, 2, 1, Qt::AlignHCenter ); mainLayout->setRowMinimumHeight( 2, 10 ); mainLayout->setRowMinimumHeight( 5, 10 ); @@ -194,6 +215,8 @@ void InstrumentFunctionArpeggioView::modelChanged() m_arpGroupBox->setModel( &m_a->m_arpEnabledModel ); m_arpComboBox->setModel( &m_a->m_arpModel ); m_arpRangeKnob->setModel( &m_a->m_arpRangeModel ); + m_arpSkipKnob->setModel( &m_a->m_arpSkipModel ); + m_arpMissKnob->setModel( &m_a->m_arpMissModel ); m_arpTimeKnob->setModel( &m_a->m_arpTimeModel ); m_arpGateKnob->setModel( &m_a->m_arpGateModel ); m_arpDirectionComboBox->setModel( &m_a->m_arpDirectionModel ); diff --git a/src/gui/widgets/Knob.cpp b/src/gui/widgets/Knob.cpp index 6eb05587f66..42f90f9179a 100644 --- a/src/gui/widgets/Knob.cpp +++ b/src/gui/widgets/Knob.cpp @@ -66,7 +66,8 @@ TextFloat * Knob::s_textFloat = NULL; m_volumeRatio( 100.0, 0.0, 1000000.0 ), \ m_buttonPressed( false ), \ m_angle( -10 ), \ - m_lineWidth(0) + m_lineWidth( 0 ), \ + m_textColor( 255, 255, 255 ) Knob::Knob( knobTypes _knob_num, QWidget * _parent, const QString & _name ) : DEFAULT_KNOB_INITIALIZER_LIST, @@ -173,9 +174,9 @@ Knob::~Knob() -void Knob::setLabel( const QString & _txt ) +void Knob::setLabel( const QString & txt ) { - m_label = _txt; + m_label = txt; if( m_knobPixmap ) { setFixedSize( qMax( m_knobPixmap->width(), @@ -188,15 +189,15 @@ void Knob::setLabel( const QString & _txt ) -void Knob::setTotalAngle( float _angle ) +void Knob::setTotalAngle( float angle ) { - if( _angle < 10.0 ) + if( angle < 10.0 ) { m_totalAngle = 10.0; } else { - m_totalAngle = _angle; + m_totalAngle = angle; } update(); @@ -212,9 +213,9 @@ float Knob::innerRadius() const -void Knob::setInnerRadius( float _r ) +void Knob::setInnerRadius( float r ) { - m_innerRadius = _r; + m_innerRadius = r; } @@ -226,9 +227,9 @@ float Knob::outerRadius() const -void Knob::setOuterRadius( float _r ) +void Knob::setOuterRadius( float r ) { - m_outerRadius = _r; + m_outerRadius = r; } @@ -242,11 +243,11 @@ knobTypes Knob::knobNum() const -void Knob::setknobNum( knobTypes _k ) +void Knob::setknobNum( knobTypes k ) { - if( m_knobNum != _k ) + if( m_knobNum != k ) { - m_knobNum = _k; + m_knobNum = k; onKnobNumUpdated(); } } @@ -268,9 +269,9 @@ float Knob::centerPointX() const -void Knob::setCenterPointX( float _c ) +void Knob::setCenterPointX( float c ) { - m_centerPoint.setX( _c ); + m_centerPoint.setX( c ); } @@ -282,9 +283,9 @@ float Knob::centerPointY() const -void Knob::setCenterPointY( float _c ) +void Knob::setCenterPointY( float c ) { - m_centerPoint.setY( _c ); + m_centerPoint.setY( c ); } @@ -296,9 +297,9 @@ float Knob::lineWidth() const -void Knob::setLineWidth( float _w ) +void Knob::setLineWidth( float w ) { - m_lineWidth = _w; + m_lineWidth = w; } @@ -310,9 +311,9 @@ QColor Knob::outerColor() const -void Knob::setOuterColor( const QColor & _c ) +void Knob::setOuterColor( const QColor & c ) { - m_outerColor = _c; + m_outerColor = c; } @@ -324,9 +325,9 @@ QColor Knob::lineColor() const -void Knob::setlineColor( const QColor & _c ) +void Knob::setlineColor( const QColor & c ) { - m_lineColor = _c; + m_lineColor = c; } @@ -338,14 +339,28 @@ QColor Knob::arcColor() const -void Knob::setarcColor( const QColor & _c ) +void Knob::setarcColor( const QColor & c ) { - m_arcColor = _c; + m_arcColor = c; } +QColor Knob::textColor() const +{ + return m_textColor; +} + + + +void Knob::setTextColor( const QColor & c ) +{ + m_textColor = c; +} + + + QLineF Knob::calculateLine( const QPointF & _mid, float _radius, float _innerRadius ) const { const float rarc = m_angle * F_PI / 180.0; @@ -680,7 +695,7 @@ void Knob::paintEvent( QPaintEvent * _me ) p.drawText( width() / 2 - p.fontMetrics().width( m_label ) / 2 + 1, height() - 1, m_label );*/ - p.setPen( QColor( 255, 255, 255 ) ); + p.setPen( textColor() ); p.drawText( width() / 2 - p.fontMetrics().width( m_label ) / 2, height() - 2, m_label ); diff --git a/src/gui/widgets/LcdWidget.cpp b/src/gui/widgets/LcdWidget.cpp index eab4870f3b0..5b4acf1f76a 100644 --- a/src/gui/widgets/LcdWidget.cpp +++ b/src/gui/widgets/LcdWidget.cpp @@ -44,7 +44,9 @@ //! @todo: in C++11, we can use delegating ctors #define DEFAULT_LCDWIDGET_INITIALIZER_LIST \ QWidget( parent ), \ - m_label() + m_label(), \ + m_textColor( 255, 255, 255 ), \ + m_textShadowColor( 64, 64, 64 ) LcdWidget::LcdWidget( QWidget* parent, const QString& name ) : DEFAULT_LCDWIDGET_INITIALIZER_LIST, @@ -109,6 +111,32 @@ void LcdWidget::setValue( int value ) +QColor LcdWidget::textColor() const +{ + return m_textColor; +} + +void LcdWidget::setTextColor( const QColor & c ) +{ + m_textColor = c; +} + + + + +QColor LcdWidget::textShadowColor() const +{ + return m_textShadowColor; +} + +void LcdWidget::setTextShadowColor( const QColor & c ) +{ + m_textShadowColor = c; +} + + + + void LcdWidget::paintEvent( QPaintEvent* ) { QPainter p( this ); @@ -182,11 +210,11 @@ void LcdWidget::paintEvent( QPaintEvent* ) if( !m_label.isEmpty() ) { p.setFont( pointSizeF( p.font(), 6.5 ) ); - p.setPen( QColor( 64, 64, 64 ) ); + p.setPen( textShadowColor() ); p.drawText( width() / 2 - p.fontMetrics().width( m_label ) / 2 + 1, height(), m_label ); - p.setPen( QColor( 255, 255, 255 ) ); + p.setPen( textColor() ); p.drawText( width() / 2 - p.fontMetrics().width( m_label ) / 2, height() - 1, m_label ); @@ -197,18 +225,18 @@ void LcdWidget::paintEvent( QPaintEvent* ) -void LcdWidget::setLabel( const QString & _txt ) +void LcdWidget::setLabel( const QString& label ) { - m_label = _txt; + m_label = label; updateSize(); } -void LcdWidget::setMarginWidth( int _width ) +void LcdWidget::setMarginWidth( int width ) { - m_marginWidth = _width; + m_marginWidth = width; updateSize(); } diff --git a/src/gui/widgets/TimeDisplayWidget.cpp b/src/gui/widgets/TimeDisplayWidget.cpp index 0d31a30f4a3..6271065a3ef 100644 --- a/src/gui/widgets/TimeDisplayWidget.cpp +++ b/src/gui/widgets/TimeDisplayWidget.cpp @@ -76,15 +76,15 @@ void TimeDisplayWidget::setDisplayMode( DisplayMode displayMode ) switch( m_displayMode ) { case MinutesSeconds: - m_majorLCD.setLabel( "MIN" ); - m_minorLCD.setLabel( "SEC" ); - m_milliSecondsLCD.setLabel( "MSEC" ); + m_majorLCD.setLabel( tr( "MIN" ) ); + m_minorLCD.setLabel( tr( "SEC" ) ); + m_milliSecondsLCD.setLabel( tr( "MSEC" ) ); break; case BarsTicks: - m_majorLCD.setLabel( "BAR" ); - m_minorLCD.setLabel( "BEAT" ); - m_milliSecondsLCD.setLabel( "TICK" ); + m_majorLCD.setLabel( tr( "BAR" ) ); + m_minorLCD.setLabel( tr( "BEAT" ) ); + m_milliSecondsLCD.setLabel( tr( "TICK" ) ); break; default: break; diff --git a/src/gui/widgets/TrackLabelButton.cpp b/src/gui/widgets/TrackLabelButton.cpp index 150300564c7..b466ade89c9 100644 --- a/src/gui/widgets/TrackLabelButton.cpp +++ b/src/gui/widgets/TrackLabelButton.cpp @@ -24,17 +24,18 @@ */ +#include "TrackLabelButton.h" + #include #include - -#include "TrackLabelButton.h" -#include "embed.h" -#include "RenameDialog.h" -#include "InstrumentTrack.h" -#include "Instrument.h" #include "ConfigManager.h" +#include "embed.h" #include "Engine.h" +#include "Instrument.h" +#include "InstrumentTrack.h" +#include "RenameDialog.h" +#include "Song.h" @@ -48,21 +49,23 @@ TrackLabelButton::TrackLabelButton( TrackView * _tv, QWidget * _parent ) : setCursor( QCursor( embed::getIconPixmap( "hand" ), 3, 3 ) ); setToolButtonStyle( Qt::ToolButtonTextBesideIcon ); - if( ConfigManager::inst()->value( "ui", - "compacttrackbuttons" ).toInt() ) + if( ConfigManager::inst()->value( "ui", "compacttrackbuttons" ).toInt() ) { setFixedSize( 32, 29 ); } else { setFixedSize( 160, 29 ); + m_renameLineEdit = new QLineEdit( this ); + m_renameLineEdit->move( 30, ( height() / 2 ) - ( m_renameLineEdit->sizeHint().height() / 2 ) ); + m_renameLineEdit->setFixedWidth( width() - 33 ); + m_renameLineEdit->hide(); + connect( m_renameLineEdit, SIGNAL( editingFinished() ), this, SLOT( renameFinished() ) ); } setIconSize( QSize( 24, 24 ) ); setText( " " ); - - connect( m_trackView->getTrack(), SIGNAL( dataChanged() ), - this, SLOT( update() ) ); + connect( m_trackView->getTrack(), SIGNAL( dataChanged() ), this, SLOT( update() ) ); } @@ -77,12 +80,41 @@ TrackLabelButton::~TrackLabelButton() void TrackLabelButton::rename() { - QString txt = m_trackView->getTrack()->name(); - RenameDialog rename_dlg( txt ); - rename_dlg.exec(); - if( txt != text() ) + if( ConfigManager::inst()->value( "ui", "compacttrackbuttons" ).toInt() ) { - m_trackView->getTrack()->setName( txt ); + QString txt = m_trackView->getTrack()->name(); + RenameDialog rename_dlg( txt ); + rename_dlg.exec(); + if( txt != text() ) + { + m_trackView->getTrack()->setName( txt ); + Engine::getSong()->setModified(); + } + } + else + { + QString txt = m_trackView->getTrack()->name(); + m_renameLineEdit->show(); + m_renameLineEdit->setText( txt ); + m_renameLineEdit->selectAll(); + m_renameLineEdit->setFocus(); + } +} + + + + +void TrackLabelButton::renameFinished() +{ + if( !( ConfigManager::inst()->value( "ui", "compacttrackbuttons" ).toInt() ) ) + { + m_renameLineEdit->hide(); + if( m_renameLineEdit->text() != text() ) + { + setText( m_renameLineEdit->text() ); + m_trackView->getTrack()->setName( m_renameLineEdit->text() ); + Engine::getSong()->setModified(); + } } } @@ -134,8 +166,7 @@ void TrackLabelButton::paintEvent( QPaintEvent * _pe ) if( m_trackView->getTrack()->type() == Track::InstrumentTrack ) { InstrumentTrack * it = - dynamic_cast( - m_trackView->getTrack() ); + dynamic_cast( m_trackView->getTrack() ); const PixmapLoader * pl; if( it && it->instrument() && it->instrument()->descriptor() && @@ -148,11 +179,10 @@ void TrackLabelButton::paintEvent( QPaintEvent * _pe ) } } } - if( ConfigManager::inst()->value( "ui", - "compacttrackbuttons" ).toInt() ) + if( ConfigManager::inst()->value( "ui", "compacttrackbuttons" ).toInt() ) { - setText(""); - setToolTip( m_trackView->getTrack()->displayName() ); + setText( " " ); + setToolTip( m_trackView->getTrack()->displayName() ); } else { @@ -160,8 +190,3 @@ void TrackLabelButton::paintEvent( QPaintEvent * _pe ) } QToolButton::paintEvent( _pe ); } - - - - - diff --git a/src/gui/widgets/VisualizationWidget.cpp b/src/gui/widgets/VisualizationWidget.cpp index a99ec577dcf..042ae8bf007 100644 --- a/src/gui/widgets/VisualizationWidget.cpp +++ b/src/gui/widgets/VisualizationWidget.cpp @@ -30,6 +30,7 @@ #include "GuiApplication.h" #include "gui_templates.h" #include "MainWindow.h" +#include "Mixer.h" #include "embed.h" #include "Engine.h" #include "ToolTip.h" diff --git a/src/lmmsconfig.h.in b/src/lmmsconfig.h.in index 3d48d8372f6..0948d8529e8 100644 --- a/src/lmmsconfig.h.in +++ b/src/lmmsconfig.h.in @@ -2,6 +2,7 @@ #cmakedefine LMMS_BUILD_WIN32 #cmakedefine LMMS_BUILD_WIN64 #cmakedefine LMMS_BUILD_APPLE +#cmakedefine LMMS_BUILD_OPENBSD #cmakedefine LMMS_BUILD_HAIKU #cmakedefine LMMS_HOST_X86 @@ -12,6 +13,7 @@ #cmakedefine LMMS_HAVE_JACK #cmakedefine LMMS_HAVE_OGGVORBIS #cmakedefine LMMS_HAVE_OSS +#cmakedefine LMMS_HAVE_SNDIO #cmakedefine LMMS_HAVE_PORTAUDIO #cmakedefine LMMS_HAVE_SOUNDIO #cmakedefine LMMS_HAVE_PULSEAUDIO diff --git a/src/lmmsversion.h.in b/src/lmmsversion.h.in index 4f575d15421..dc7ae84d050 100644 --- a/src/lmmsversion.h.in +++ b/src/lmmsversion.h.in @@ -1,6 +1,2 @@ -#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@" #define LMMS_PROJECT_COPYRIGHT "@PROJECT_COPYRIGHT@" diff --git a/src/tracks/BBTrack.cpp b/src/tracks/BBTrack.cpp index b8ae5968ac6..fab6425f37c 100644 --- a/src/tracks/BBTrack.cpp +++ b/src/tracks/BBTrack.cpp @@ -412,6 +412,7 @@ BBTrack::BBTrack( TrackContainer* tc ) : s_infoMap[this] = bbNum; setName( tr( "Beat/Bassline %1" ).arg( bbNum ) ); + Engine::getBBTrackContainer()->createTCOsForBB( bbNum ); Engine::getBBTrackContainer()->setCurrentBB( bbNum ); Engine::getBBTrackContainer()->updateComboBox(); @@ -425,8 +426,9 @@ BBTrack::BBTrack( TrackContainer* tc ) : BBTrack::~BBTrack() { Engine::mixer()->removePlayHandlesOfTypes( this, - PlayHandle::TypeNotePlayHandle - | PlayHandle::TypeInstrumentPlayHandle ); + PlayHandle::TypeNotePlayHandle + | PlayHandle::TypeInstrumentPlayHandle + | PlayHandle::TypeSamplePlayHandle ); const int bb = s_infoMap[this]; Engine::getBBTrackContainer()->removeBB( bb ); @@ -548,7 +550,6 @@ void BBTrack::loadTrackSpecificSettings( const QDomElement & _this ) { 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 diff --git a/src/tracks/InstrumentTrack.cpp b/src/tracks/InstrumentTrack.cpp index 2a1790e92e9..b7394bfed72 100644 --- a/src/tracks/InstrumentTrack.cpp +++ b/src/tracks/InstrumentTrack.cpp @@ -69,6 +69,7 @@ #include "MainWindow.h" #include "MidiClient.h" #include "MidiPortMenu.h" +#include "Mixer.h" #include "MixHelpers.h" #include "DataFile.h" #include "NotePlayHandle.h" @@ -93,7 +94,7 @@ const char * volume_help = QT_TRANSLATE_NOOP( "InstrumentTrack", const int INSTRUMENT_WIDTH = 254; const int INSTRUMENT_HEIGHT = INSTRUMENT_WIDTH; -const int PIANO_HEIGHT = 82; +const int PIANO_HEIGHT = 80; const int INSTRUMENT_WINDOW_CACHE_SIZE = 8; @@ -139,6 +140,7 @@ InstrumentTrack::InstrumentTrack( TrackContainer* tc ) : connect( &m_baseNoteModel, SIGNAL( dataChanged() ), this, SLOT( updateBaseNote() ) ); connect( &m_pitchModel, SIGNAL( dataChanged() ), this, SLOT( updatePitch() ) ); connect( &m_pitchRangeModel, SIGNAL( dataChanged() ), this, SLOT( updatePitchRange() ) ); + connect( &m_effectChannelModel, SIGNAL( dataChanged() ), this, SLOT( updateEffectChannel() ) ); } @@ -220,8 +222,6 @@ void InstrumentTrack::processAudioBuffer( sampleFrame* buf, const fpp_t frames, } } } - - m_audioPort.setNextFxChannel( m_effectChannelModel.value() ); } @@ -258,11 +258,11 @@ void InstrumentTrack::processInEvent( const MidiEvent& event, const MidiTime& ti case MidiNoteOn: if( event.velocity() > 0 ) { - NotePlayHandle* nph; - m_notesMutex.lock(); if( m_notes[event.key()] == NULL ) { - nph = NotePlayHandleManager::acquire( this, offset, + NotePlayHandle* nph = + NotePlayHandleManager::acquire( + this, offset, typeInfo::max() / 2, Note( MidiTime(), MidiTime(), event.key(), event.volume( midiPort()->baseVelocity() ) ), NULL, event.channel(), @@ -273,21 +273,20 @@ void InstrumentTrack::processInEvent( const MidiEvent& event, const MidiTime& ti m_notes[event.key()] = NULL; } } - m_notesMutex.unlock(); eventHandled = true; break; } case MidiNoteOff: - m_notesMutex.lock(); if( m_notes[event.key()] != NULL ) { // do actual note off and remove internal reference to NotePlayHandle (which itself will // be deleted later automatically) + Engine::mixer()->requestChangeInModel(); m_notes[event.key()]->noteOff( offset ); m_notes[event.key()] = NULL; + Engine::mixer()->doneChangeInModel(); } - m_notesMutex.unlock(); eventHandled = true; break; @@ -417,14 +416,12 @@ void InstrumentTrack::processOutEvent( const MidiEvent& event, const MidiTime& t void InstrumentTrack::silenceAllNotes( bool removeIPH ) { - m_notesMutex.lock(); m_midiNotesMutex.lock(); for( int i = 0; i < NumKeys; ++i ) { m_notes[i] = NULL; m_runningMidiNotes[i] = 0; } - m_notesMutex.unlock(); m_midiNotesMutex.unlock(); lock(); @@ -558,6 +555,14 @@ void InstrumentTrack::updatePitchRange() +void InstrumentTrack::updateEffectChannel() +{ + m_audioPort.setNextFxChannel( m_effectChannelModel.value() ); +} + + + + int InstrumentTrack::masterKey( int _midi_key ) const { @@ -651,25 +656,21 @@ bool InstrumentTrack::play( const MidiTime & _start, const fpp_t _frames, 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 = NotePlayHandleManager::acquire( 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() ); - } + const f_cnt_t note_frames = + cur_note->length().frames( frames_per_tick ); - Engine::mixer()->addPlayHandle( notePlayHandle ); - played_a_note = true; + NotePlayHandle* notePlayHandle = NotePlayHandleManager::acquire( 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; } } @@ -1574,7 +1575,7 @@ void InstrumentTrackWindow::saveSettingsBtnClicked() sfd.setDirectory( presetRoot + m_track->instrumentName() ); sfd.setFileMode( FileDialog::AnyFile ); QString fname = m_track->name(); - sfd.selectFile(fname.remove(QRegExp("[^a-zA-Z0-9\\d\\s]")).toLower().replace( " ", "_" ) ); + sfd.selectFile( fname.remove(QRegExp("[^a-zA-Z0-9_\\-\\d\\s]")) ); if( sfd.exec() == QDialog::Accepted && !sfd.selectedFiles().isEmpty() && diff --git a/src/tracks/Pattern.cpp b/src/tracks/Pattern.cpp index acae5927040..b8f648a27ee 100644 --- a/src/tracks/Pattern.cpp +++ b/src/tracks/Pattern.cpp @@ -65,6 +65,11 @@ Pattern::Pattern( InstrumentTrack * _instrument_track ) : m_steps( MidiTime::stepsPerTact() ) { setName( _instrument_track->name() ); + if( _instrument_track->trackContainer() + == Engine::getBBTrackContainer() ) + { + resizeToFirstTrack(); + } init(); setAutoResize( true ); } @@ -115,26 +120,51 @@ Pattern::~Pattern() +void Pattern::resizeToFirstTrack() +{ + // Resize this track to be the same as existing tracks in the BB + const TrackContainer::TrackList & tracks = + m_instrumentTrack->trackContainer()->tracks(); + for(unsigned int trackID = 0; trackID < tracks.size(); ++trackID) + { + if(tracks.at(trackID)->type() == Track::InstrumentTrack) + { + if(tracks.at(trackID) != m_instrumentTrack) + { + unsigned int currentTCO = m_instrumentTrack-> + getTCOs().indexOf(this); + m_steps = static_cast + (tracks.at(trackID)->getTCO(currentTCO)) + ->m_steps; + } + break; + } + } +} + + + + void Pattern::init() { connect( Engine::getSong(), SIGNAL( timeSignatureChanged( int, int ) ), this, SLOT( changeTimeSignature() ) ); saveJournallingState( false ); - ensureBeatNotes(); - - changeLength( length() ); + updateLength(); restoreJournallingState(); } -MidiTime Pattern::length() const +void Pattern::updateLength() { if( m_patternType == BeatPattern ) { - return beatPatternLength(); + changeLength( beatPatternLength() ); + updateBBTrack(); + return; } tick_t max_length = MidiTime::ticksPerTact(); @@ -148,8 +178,9 @@ MidiTime Pattern::length() const ( *it )->endPos() ); } } - return MidiTime( max_length ).nextFullTact() * - MidiTime::ticksPerTact(); + changeLength( MidiTime( max_length ).nextFullTact() * + MidiTime::ticksPerTact() ); + updateBBTrack(); } @@ -214,19 +245,17 @@ Note * Pattern::addNote( const Note & _new_note, const bool _quant_pos ) instrumentTrack()->unlock(); checkType(); - changeLength( length() ); + updateLength(); emit dataChanged(); - updateBBTrack(); - return new_note; } -void Pattern::removeNote( const Note * _note_to_del ) +void Pattern::removeNote( Note * _note_to_del ) { instrumentTrack()->lock(); NoteVector::Iterator it = m_notes.begin(); @@ -243,11 +272,9 @@ void Pattern::removeNote( const Note * _note_to_del ) instrumentTrack()->unlock(); checkType(); - changeLength( length() ); + updateLength(); emit dataChanged(); - - updateBBTrack(); } @@ -258,7 +285,8 @@ 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() ) + if( ( *it )->pos() == MidiTime::stepPosition( _step ) + && ( *it )->length() < 0 ) { return *it; } @@ -267,18 +295,6 @@ Note * Pattern::noteAtStep( int _step ) } -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() { @@ -306,17 +322,29 @@ void Pattern::clearNotes() -void Pattern::setStep( int _step, bool _enabled ) +Note * Pattern::addStepNote( int step ) { - for( NoteVector::Iterator it = m_notes.begin(); it != m_notes.end(); - ++it ) + return addNote( Note( MidiTime( -DefaultTicksPerTact ), + MidiTime::stepPosition( step ) ), false ); +} + + + + +void Pattern::setStep( int step, bool enabled ) +{ + if( enabled ) { - if( ( *it )->pos() == ( _step * MidiTime::ticksPerTact() ) / MidiTime::stepsPerTact() && - ( *it )->length() <= 0 ) + if ( !noteAtStep( step ) ) { - ( *it )->setLength( _enabled ? - -DefaultTicksPerTact : 0 ); + addStepNote( step ); } + return; + } + + while( Note * note = noteAtStep( step ) ) + { + removeNote( note ); } } @@ -342,12 +370,12 @@ void Pattern::checkType() { if( ( *it )->length() > 0 ) { - setType( Pattern::MelodyPattern ); + setType( MelodyPattern ); return; } ++it; } - setType( Pattern::BeatPattern ); + setType( BeatPattern ); } @@ -369,7 +397,6 @@ void Pattern::saveSettings( QDomDocument & _doc, QDomElement & _this ) { _this.setAttribute( "pos", startPosition() ); } - _this.setAttribute( "len", length() ); _this.setAttribute( "muted", isMuted() ); _this.setAttribute( "steps", m_steps ); @@ -377,10 +404,7 @@ void Pattern::saveSettings( QDomDocument & _doc, QDomElement & _this ) for( NoteVector::Iterator it = m_notes.begin(); it != m_notes.end(); ++it ) { - if( ( *it )->length() ) - { - ( *it )->saveState( _doc, _this ); - } + ( *it )->saveState( _doc, _this ); } } @@ -396,7 +420,6 @@ void Pattern::loadSettings( const QDomElement & _this ) { movePosition( _this.attribute( "pos" ).toInt() ); } - changeLength( MidiTime( _this.attribute( "len" ).toInt() ) ); if( _this.attribute( "muted" ).toInt() != isMuted() ) { toggleMute(); @@ -423,12 +446,10 @@ void Pattern::loadSettings( const QDomElement & _this ) m_steps = MidiTime::stepsPerTact(); } - ensureBeatNotes(); checkType(); + updateLength(); emit dataChanged(); - - updateBBTrack(); } @@ -464,7 +485,6 @@ void Pattern::clear() { addJournalCheckPoint(); clearNotes(); - ensureBeatNotes(); } @@ -473,17 +493,15 @@ void Pattern::clear() void Pattern::addSteps() { m_steps += MidiTime::stepsPerTact(); - ensureBeatNotes(); + updateLength(); emit dataChanged(); - updateBBTrack(); } void Pattern::cloneSteps() { int oldLength = m_steps; - m_steps += MidiTime::stepsPerTact(); - ensureBeatNotes(); - for(int i = 0; i < MidiTime::stepsPerTact(); ++i ) + m_steps *= 2; // cloning doubles the track + for(int i = 0; i < oldLength; ++i ) { Note *toCopy = noteAtStep( i ); if( toCopy ) @@ -496,9 +514,8 @@ void Pattern::cloneSteps() newNote->setVolume( toCopy->getVolume() ); } } - ensureBeatNotes(); + updateLength(); emit dataChanged(); - updateBBTrack(); } @@ -506,28 +523,17 @@ void Pattern::cloneSteps() void Pattern::removeSteps() { - int _n = MidiTime::stepsPerTact(); - if( _n < m_steps ) + int n = MidiTime::stepsPerTact(); + if( n < m_steps ) { - for( int i = m_steps - _n; i < m_steps; ++i ) + 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; - } - } + setStep( i, false ); } - m_steps -= _n; + m_steps -= n; + updateLength(); emit dataChanged(); } - updateBBTrack(); } @@ -541,66 +547,6 @@ TrackContentObjectView * Pattern::createView( TrackView * _tv ) - -void Pattern::ensureBeatNotes() -{ - // make sure, that all step-note exist - for( int i = 0; i < m_steps; ++i ) - { - bool found = false; - NoteVector::Iterator it; - - for( it = m_notes.begin(); it != m_notes.end(); ++it ) - { - Note *note = *it; - // if a note in this position is the one we want - if( note->pos() == - ( i * MidiTime::ticksPerTact() ) / MidiTime::stepsPerTact() - && note->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; - Note *note = *it; - - for( int i = 0; i < m_steps; ++i ) - { - if( note->pos() == ( i * MidiTime::ticksPerTact() ) / MidiTime::stepsPerTact() - || note->length() != 0 ) - { - needed = true; - break; - } - } - if( needed == false ) - { - delete note; - it = m_notes.erase( it ); - } - else { - ++it; - } - } -} - - - - void Pattern::updateBBTrack() { if( getTrack()->trackContainer() == Engine::getBBTrackContainer() ) @@ -635,7 +581,7 @@ bool Pattern::empty() void Pattern::changeTimeSignature() { - MidiTime last_pos = MidiTime::ticksPerTact(); + MidiTime last_pos = MidiTime::ticksPerTact() - 1; for( NoteVector::ConstIterator cit = m_notes.begin(); cit != m_notes.end(); ++cit ) { @@ -646,24 +592,9 @@ void Pattern::changeTimeSignature() } } 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() ), + m_steps = qMax( MidiTime::stepsPerTact(), last_pos.getTact() * MidiTime::stepsPerTact() ); - ensureBeatNotes(); - updateBBTrack(); + updateLength(); } @@ -722,8 +653,6 @@ PatternView::~PatternView() void PatternView::update() { - m_pat->changeLength( m_pat->length() ); - if ( m_pat->m_patternType == Pattern::BeatPattern ) { ToolTip::add( this, @@ -800,6 +729,8 @@ void PatternView::constructContextMenu( QMenu * _cm ) tr( "Add steps" ), m_pat, SLOT( addSteps() ) ); _cm->addAction( embed::getIconPixmap( "step_btn_remove" ), tr( "Remove steps" ), m_pat, SLOT( removeSteps() ) ); + _cm->addAction( embed::getIconPixmap( "step_btn_duplicate" ), + tr( "Clone Steps" ), m_pat, SLOT( cloneSteps() ) ); } } @@ -835,28 +766,14 @@ void PatternView::mousePressEvent( QMouseEvent * _me ) 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; - } + m_pat->addStepNote( step ); } else // note at step found { m_pat->addJournalCheckPoint(); - if( n->length() < 0 ) - { - n->setLength( 0 ); // set note as enabled beat note - } - else - { - n->setLength( -DefaultTicksPerTact ); // set note as disabled beat note - } + m_pat->setStep( step, false ); } Engine::getSong()->setModified(); @@ -911,21 +828,17 @@ void PatternView::wheelEvent( QWheelEvent * _we ) return; } - int vol = 0; - int len = 0; - Note * n = m_pat->noteAtStep( step ); + if( !n && _we->delta() > 0 ) + { + n = m_pat->addStepNote( step ); + n->setVolume( 0 ); + } if( n != NULL ) { - vol = n->getVolume(); - len = n->length(); + int vol = n->getVolume(); - if( len == 0 && _we->delta() > 0 ) - { - n->setLength( -DefaultTicksPerTact ); - n->setVolume( 5 ); - } - else if( _we->delta() > 0 ) + if( _we->delta() > 0 ) { n->setVolume( qMin( 100, vol + 5 ) ); } @@ -975,9 +888,10 @@ void PatternView::paintEvent( QPaintEvent * ) bool current = gui->pianoRoll()->currentPattern() == m_pat; bool beatPattern = m_pat->m_patternType == Pattern::BeatPattern; - // state: selected, muted, normal + // state: selected, normal, beat pattern, muted c = isSelected() ? selectedColor() : ( ( !muted && !beatPattern ) - ? painter.background().color() : mutedBackgroundColor() ); + ? painter.background().color() : ( beatPattern + ? BBPatternBackground() : mutedBackgroundColor() ) ); // invert the gradient for the background in the B&B editor lingrad.setColorAt( beatPattern ? 0 : 1, c.darker( 300 ) ); @@ -1119,14 +1033,9 @@ void PatternView::paintEvent( QPaintEvent * ) 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 ) + if( n ) { + const int vol = n->getVolume(); p.drawPixmap( x, y, stepoff ); for( int i = 0; i < vol / 5 + 1; ++i ) { @@ -1204,12 +1113,11 @@ void PatternView::paintEvent( QPaintEvent * ) p.setPen( c.lighter( current ? 160 : 130 ) ); p.drawRect( 1, 1, rect().right() - TCO_BORDER_WIDTH, rect().bottom() - TCO_BORDER_WIDTH ); - } // outer border p.setPen( ( current && !beatPattern ) ? c.lighter( 130 ) : c.darker( 300 ) ); p.drawRect( 0, 0, rect().right(), rect().bottom() ); - + } // draw the 'muted' pixmap only if the pattern was manualy muted if( m_pat->isMuted() ) { diff --git a/src/tracks/SampleTrack.cpp b/src/tracks/SampleTrack.cpp index ec9752b4e97..3416c652184 100644 --- a/src/tracks/SampleTrack.cpp +++ b/src/tracks/SampleTrack.cpp @@ -39,16 +39,19 @@ #include "Engine.h" #include "ToolTip.h" #include "AudioPort.h" +#include "BBTrack.h" #include "SamplePlayHandle.h" #include "SampleRecordHandle.h" #include "StringPairDrag.h" #include "Knob.h" #include "MainWindow.h" +#include "Mixer.h" #include "GuiApplication.h" #include "EffectRackView.h" #include "TrackLabelButton.h" #include "ConfigManager.h" #include "panning_constants.h" +#include "volume.h" SampleTCO::SampleTCO( Track * _track ) : @@ -366,14 +369,14 @@ void SampleTCOView::paintEvent( QPaintEvent * pe ) QLinearGradient lingrad( 0, 0, 0, height() ); QColor c; bool muted = m_tco->getTrack()->isMuted() || m_tco->isMuted(); - + // state: selected, muted, normal c = isSelected() ? selectedColor() : ( muted ? mutedBackgroundColor() : painter.background().color() ); lingrad.setColorAt( 1, c.darker( 300 ) ); lingrad.setColorAt( 0, c ); - + if( gradient() ) { p.fillRect( rect(), lingrad ); @@ -384,13 +387,17 @@ void SampleTCOView::paintEvent( QPaintEvent * pe ) } p.setPen( !muted ? painter.pen().brush().color() : mutedColor() ); - + const int spacing = TCO_BORDER_WIDTH + 1; - + const float ppt = fixedTCOs() ? + ( parentWidget()->width() - 2 * TCO_BORDER_WIDTH ) + / (float) m_tco->length().getTact() : + pixelsPerTact(); + QRect r = QRect( TCO_BORDER_WIDTH, spacing, - qMax( static_cast( m_tco->sampleLength() * - pixelsPerTact() / DefaultTicksPerTact ), 1 ), - rect().bottom() - 2 * spacing ); + qMax( static_cast( m_tco->sampleLength() * ppt + / DefaultTicksPerTact ), 1 ), + rect().bottom() - 2 * spacing ); m_tco->m_sampleBuffer->visualize( p, r, pe->rect() ); // disable antialiasing for borders, since its not needed @@ -406,11 +413,11 @@ void SampleTCOView::paintEvent( QPaintEvent * pe ) p.setPen( c.lighter( 160 ) ); p.drawRect( 1, 1, rect().right() - TCO_BORDER_WIDTH, rect().bottom() - TCO_BORDER_WIDTH ); - + // outer border p.setPen( c.darker( 300 ) ); p.drawRect( 0, 0, rect().right(), rect().bottom() ); - + // draw the 'muted' pixmap only if the pattern was manualy muted if( m_tco->isMuted() ) { @@ -419,9 +426,9 @@ void SampleTCOView::paintEvent( QPaintEvent * pe ) p.drawPixmap( spacing, height() - ( size + spacing ), embed::getIconPixmap( "muted", size, size ) ); } - + // recording sample tracks is not possible at the moment - + /* if( m_tco->isRecord() ) { p.setFont( pointSize<7>( p.font() ) ); @@ -434,9 +441,9 @@ void SampleTCOView::paintEvent( QPaintEvent * pe ) p.setBrush( QBrush( textColor() ) ); p.drawEllipse( 4, 5, 4, 4 ); }*/ - + p.end(); - + painter.drawPixmap( 0, 0, m_paintPixmap ); } @@ -469,19 +476,37 @@ SampleTrack::~SampleTrack() bool SampleTrack::play( const MidiTime & _start, const fpp_t _frames, - const f_cnt_t _offset, int /*_tco_num*/ ) + 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 ) + tcoVector tcos; + ::BBTrack * bb_track = NULL; + if( _tco_num >= 0 ) { - TrackContentObject * tco = getTCO( i ); - if( tco->startPosition() != _start ) + if( _start != 0 ) { - continue; + return false; } - SampleTCO * st = dynamic_cast( tco ); + tcos.push_back( getTCO( _tco_num ) ); + bb_track = BBTrack::findBBTrack( _tco_num ); + } + else + { + for( int i = 0; i < numOfTCOs(); ++i ) + { + TrackContentObject * tco = getTCO( i ); + if( tco->startPosition() == _start ) + { + tcos.push_back( tco ); + } + } + } + + for( tcoVector::Iterator it = tcos.begin(); it != tcos.end(); ++it ) + { + SampleTCO * st = dynamic_cast( *it ); if( !st->isMuted() ) { PlayHandle* handle; @@ -498,10 +523,9 @@ bool SampleTrack::play( const MidiTime & _start, const fpp_t _frames, { SamplePlayHandle* smpHandle = new SamplePlayHandle( st ); smpHandle->setVolumeModel( &m_volumeModel ); + smpHandle->setBBTrack( bb_track ); handle = smpHandle; } -//TODO: check whether this works -// handle->setBBTrack( _tco_num ); handle->setOffset( _offset ); // send it to the mixer Engine::mixer()->addPlayHandle( handle ); diff --git a/tests/src/core/ProjectVersionTest.cpp b/tests/src/core/ProjectVersionTest.cpp index f0198ff5e89..879f68a7fd4 100644 --- a/tests/src/core/ProjectVersionTest.cpp +++ b/tests/src/core/ProjectVersionTest.cpp @@ -30,16 +30,19 @@ class ProjectVersionTest : QTestSuite { Q_OBJECT private slots: - void ProjectVersionComparaisonTests() - { - QVERIFY(ProjectVersion("1.1.0", CompareType::Minor) > "1.0.3"); - QVERIFY(ProjectVersion("1.1.0", CompareType::Major) < "2.1.0"); - QVERIFY(ProjectVersion("1.1.0", CompareType::Release) > "0.2.1"); - QVERIFY(ProjectVersion("1.1.4", CompareType::Release) < "1.1.10"); - QVERIFY(ProjectVersion("1.1.0", CompareType::Minor) == "1.1.5"); - QVERIFY( ! ( ProjectVersion("3.1.0", CompareType::Minor) < "2.2.5" ) ); - QVERIFY( ! ( ProjectVersion("2.5.0", CompareType::Release) < "2.2.5" ) ); - } + void ProjectVersionComparisonTests() + { + QVERIFY(ProjectVersion("1.1.0", ProjectVersion::Minor) > "1.0.3"); + QVERIFY(ProjectVersion("1.1.0", ProjectVersion::Major) < "2.1.0"); + QVERIFY(ProjectVersion("1.1.0", ProjectVersion::Release) > "0.2.1"); + QVERIFY(ProjectVersion("1.1.4", ProjectVersion::Release) < "1.1.10"); + QVERIFY(ProjectVersion("1.1.0", ProjectVersion::Minor) == "1.1.5"); + QVERIFY( ! ( ProjectVersion("3.1.0", ProjectVersion::Minor) < "2.2.5" ) ); + QVERIFY( ! ( ProjectVersion("2.5.0", ProjectVersion::Release) < "2.2.5" ) ); + QVERIFY(ProjectVersion("1.1.0") > "1.1.0-alpha"); + QVERIFY(ProjectVersion("1.1.0-alpha") < "1.1.0-beta"); + QVERIFY(ProjectVersion("1.2.0-rc1") < "1.2.0-rc2"); + } } ProjectVersionTests; #include "ProjectVersionTest.moc"