diff -Nru hydrogen-0.9.6.1/build.sh hydrogen-0.9.7/build.sh --- hydrogen-0.9.6.1/build.sh 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/build.sh 2016-11-05 08:22:50.000000000 +0000 @@ -21,6 +21,9 @@ H2FLAGS="-V0xf" BUILD_DIR=./build + +PLATFORM_STR=`uname` + [ -f cmake_opts ] && source cmake_opts function cmake_init() { @@ -51,7 +54,15 @@ else make $MAKE_OPTS || exit 1 fi - cp src/gui/hydrogen .. + + if [[ "$PLATFORM_STR" == 'Linux' ]]; then + cp src/gui/hydrogen .. + elif [[ "$PLATFORM_STR" == *BSD ]]; then + cp src/gui/hydrogen .. + elif [[ "$PLATFORM_STR" == 'Darwin' ]]; then + cp -rf src/gui/hydrogen.app .. + fi + cd .. } diff -Nru hydrogen-0.9.6.1/ChangeLog hydrogen-0.9.7/ChangeLog --- hydrogen-0.9.6.1/ChangeLog 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/ChangeLog 2016-11-05 08:22:50.000000000 +0000 @@ -1,30 +1,47 @@ +2016-11-01 the hydrogen team + * Release 0.9.7 + * The color of the SongEditors squares is now configurable + * Added support for midi cymbal choking + * Added support for midi hihat pressure control + * Added hihat pressure groups + * Added basic non session manager support + * Added instrument components + * Basic lilypond export + * New windows cross compilation script + * Support for soundlibrary images + * Configurable sample selection algorithm + * Support for soundlibraries with images + * Donation dialog +* New midi action: + * SELECT_PREV_PATTERN_RELATIVE + 2014-08-03 the hydrogen team - * Release 0.9.6 - * new build system (cmake) - * add undo for song/pattern editor - * jack-session support + * Release 0.9.6 + * new build system (cmake) + * add undo for song/pattern editor + * jack-session support * jack-midi support - * several bug fixes + * several bug fixes * tabbed interface * several small changes to the GUI - * improve ExportSong add use of TimeLineBPM, - RubberbandBatch processor and different types of resample interpolation + * improve ExportSong add use of TimeLineBPM, + RubberbandBatch processor and different types of resample interpolation 2011-03-15 the hydrogen team - * Release 0.9.5 + * Release 0.9.5 * load playlists at startup - * midi-learn works now with shift-click on some gui elements + * midi-learn works now with shift-click on some gui elements * multi-track export * LADI support * maximum number of bars is now configurable * added czech translation * fixed serveral export song failures - * added ogg, flac, aiff export support + * added ogg, flac, aiff export support * added some new commandline parameter for no_gui version * added rubberband-cli support * several improvements on sample editor - * added NO_GUI_SUPPORT to build a version of hydrogen without a gui + * added NO_GUI_SUPPORT to build a version of hydrogen without a gui * added support for app bundles on OSX * non destructive sample editor * piano roll editor @@ -37,10 +54,10 @@ * and at least several small changes * Xml handling is now done by QtXml instead of TinyXML * improved support for non-ascii filenames / strings - * remove direct dependencies to libflac + * remove direct dependencies to libflac 2009-09-12 the hydrogen team - + * Release 0.9.4 * QT4 port * Autosave @@ -52,13 +69,13 @@ * Beatcounter * Playlist editor * MMC - * Lead / lag (pattern editor) + * Lead / lag (pattern editor) * Audiofilebrowser * midiAutosense * change post masterfader fx_return to pre masterfader fx_return * several new translations * new manual - * switched buildsystem from autotools to scons + * switched buildsystem from autotools to scons * tons of bugfixes * soundlibrary browser diff -Nru hydrogen-0.9.6.1/cmake/FindHelper.cmake hydrogen-0.9.7/cmake/FindHelper.cmake --- hydrogen-0.9.6.1/cmake/FindHelper.cmake 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/cmake/FindHelper.cmake 2016-11-05 08:22:50.000000000 +0000 @@ -23,7 +23,7 @@ FIND_PACKAGE(PkgConfig) endif() if(PKG_CONFIG_FOUND) - pkg_check_modules(${prefix} ${pkg_name}) + pkg_check_modules(PC_${prefix} ${pkg_name}) #MESSAGE(STATUS " LDFLAGS ${${prefix}_LDFLAGS}" ) #MESSAGE(STATUS " CFLAGS ${${prefix}_CFLAGS}" ) #MESSAGE(STATUS " INCLUDEDIRS ${${prefix}_INCLUDE_DIRS}" ) @@ -36,12 +36,14 @@ find_path(${prefix}_INCLUDE_DIR NAMES ${header} - PATHS ${${prefix}_INCLUDE_DIRS} ${${prefix}_INCLUDEDIR} ${${prefix}_INCLUDE_PATHS} ENV ${prefix}_INCLUDE + HINTS ${PC_${prefix}_INCLUDE_DIRS} ${PC_${prefix}_INCLUDEDIR} ${PC_${prefix}_INCLUDE_PATHS} + ENV ${prefix}_INCLUDE ) find_library(${prefix}_LIBRARIES NAMES ${lib} - PATHS ${${prefix}_LIBDIR} ${${prefix}_LIBRARY_DIRS} ${${prefix}_LIB_PATHS} ENV ${prefix}_PATH + HINTS ${PC_${prefix}_LIBDIR} ${PC_${prefix}_LIBRARY_DIRS} ${PC_${prefix}_LIB_PATHS} + ENV ${prefix}_PATH ) endif() diff -Nru hydrogen-0.9.6.1/CMakeLists.txt hydrogen-0.9.7/CMakeLists.txt --- hydrogen-0.9.6.1/CMakeLists.txt 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/CMakeLists.txt 2016-11-05 08:22:50.000000000 +0000 @@ -18,11 +18,11 @@ PROJECT(hydrogen) SET(VERSION_MAJOR "0") SET(VERSION_MINOR "9") -SET(VERSION_PATCH "6") -SET(VERSION_PATCH2 "1") -#SET(VERSION_SUFFIX "RC2") +SET(VERSION_PATCH "7") +#SET(VERSION_SUFFIX "rc1") + +SET(VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}") -SET(VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}.${VERSION_PATCH2}") SET(DISPLAY_VERSION "${VERSION}") #IF(VERSION_SUFFIX) @@ -38,7 +38,7 @@ # CONFIG OPTIONS # SET(WANT_LIBTAR TRUE) -OPTION(WANT_DEBUG "build with debug information" OFF) +OPTION(WANT_DEBUG "Build with debug information" ON) IF(APPLE) OPTION(WANT_SHARED "Build the core library shared." OFF) @@ -46,13 +46,15 @@ OPTION(WANT_SHARED "Build the core library shared." ON) ENDIF() -OPTION(WANT_LIBARCHIVE "Enable use of libarchive instead of libtar" ON) -OPTION(WANT_LADSPA "Enable use of LADSPA plugins" ON) +OPTION(WANT_LIBARCHIVE "Enable use of libarchive instead of libtar" ON) +OPTION(WANT_LADSPA "Enable use of LADSPA plugins" ON) IF(APPLE) + OPTION(WANT_NSMSESSION "Enable NSM Session integration" OFF) OPTION(WANT_JACKSESSION "Enable use of Jack-Session-Handler" OFF) ELSE() OPTION(WANT_JACKSESSION "Enable use of Jack-Session-Handler" ON) + OPTION(WANT_NSMSESSION "Enable NSM Session integration" ON) ENDIF() IF("${CMAKE_SYSTEM_NAME}" MATCHES "NetBSD") @@ -62,19 +64,26 @@ ENDIF() OPTION(WANT_ALSA "Include ALSA (Advanced Linux Sound Architecture) support" ON) -OPTION(WANT_JACK "Include JACK (Jack Audio Connection Kit) support" ON) -OPTION(WANT_PORTAUDIO "Include PortAudio support" OFF) -OPTION(WANT_PORTMIDI "Include PortMidi support" OFF) +IF(MINGW) + OPTION(WANT_JACK "Include JACK (Jack Audio Connection Kit) support" ON) + OPTION(WANT_PORTAUDIO "Include PortAudio support" ON) + OPTION(WANT_PORTMIDI "Include PortMidi support" ON) +ELSE() + OPTION(WANT_JACK "Include JACK (Jack Audio Connection Kit) support" ON) + OPTION(WANT_PORTAUDIO "Include PortAudio support" OFF) + OPTION(WANT_PORTMIDI "Include PortMidi support" OFF) +ENDIF() OPTION(WANT_PULSEAUDIO "Include PulseAudio support" ON) OPTION(WANT_LASH "Include LASH (Linux Audio Session Handler) support" OFF) OPTION(WANT_LRDF "Include LRDF (Lightweight Resource Description Framework with special support for LADSPA plugins) support" OFF) -OPTION(WANT_RUBBERBAND "Include RUbberBand (Audio Time Stretcher Library) support" OFF) +OPTION(WANT_RUBBERBAND "Include RubberBand (Audio Time Stretcher Library) support" OFF) IF(APPLE) OPTION(WANT_COREAUDIO "Include CoreAudio support" ON) OPTION(WANT_COREMIDI "Include CoreMidi support" ON) - OPTION(WANT_BUNDLE "Build a MAC OSX bundle application" ON) + OPTION(WANT_BUNDLE "Build a MAC OSX bundle application" ON) ENDIF() -OPTION(WANT_CPPUNIT "Include CppUnit test suite" ON) + +OPTION(WANT_CPPUNIT "Include CppUnit test suite" ON) IF(WANT_DEBUG) SET(CMAKE_BUILD_TYPE Debug) @@ -97,10 +106,9 @@ ENDIF() #SET(CMAKE_CXX_FLAGS "-fno-implement-inlines -finline-small-functions -findirect-inlining -fpartial-inlining") -IF(APPLE) - SET(CMAKE_CXX_FLAGS "-O2") -ELSE() - SET(CMAKE_CXX_FLAGS "-O2 -fno-implement-inlines") +SET(CMAKE_CXX_FLAGS "-O2 -std=gnu++11 -Wno-deprecated-register") +IF (NOT CMAKE_CXX_COMPILER_ID MATCHES "Clang") + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-implement-inlines") ENDIF() SET(CMAKE_CXX_FLAGS_RELEASE "") @@ -120,24 +128,37 @@ MANDATORY_PKG(Threads) MANDATORY_PKG(LIBSNDFILE) -# TODO remove data from path -SET(SYS_DATA_PATH "${CMAKE_INSTALL_PREFIX}/share/hydrogen/data") -# TODO remove data from path, could be .config/hydrogen -SET(USR_DATA_PATH ".hydrogen/data") -IF(WIN32) - SET(WANT_JACK FALSE) +IF(MINGW) + SET(WANT_JACK TRUE) SET(Threads_PATH "C:/Program Files/GnuWin32") SET(LIBARCHIVE_PATH "C:/Program Files/GnuWin32") SET(LIBSNDFILE_PATH "C:/Program Files/Mega-Nerd/libsndfile") -ELSE(WIN32) +ELSE(MINGW) IF(APPLE) + INCLUDE_DIRECTORIES("/opt/local/include") LINK_DIRECTORIES("/opt/local/lib") + + #Without setting this, installation would go into /usr/local, which does not exist per default + SET(CMAKE_INSTALL_PREFIX "/usr" ) ELSE(APPLE) SET(OSS_LIB_PATHS "/usr/lib${LIB_SUFFIX}/oss/lib" "/usr/local/lib${LIB_SUFFIX}/oss/lib" ) SET(RUBBERBAND_INCLUDE_PATHS "/usr/include/rubberband" ) ENDIF(APPLE) -ENDIF(WIN32) +ENDIF(MINGW) + +#Installation paths +# TODO remove data from path +SET(SYS_DATA_PATH "${CMAKE_INSTALL_PREFIX}/share/hydrogen/data") +# TODO remove data from path, could be .config/hydrogen +SET(USR_DATA_PATH ".hydrogen/data") + +SET(MAX_INSTRUMENTS 1000 CACHE STRING "Maximum number of instruments") +SET(MAX_COMPONENTS 32 CACHE STRING "Maximum number of components") +SET(MAX_NOTES 192 CACHE STRING "Maximum number of notes") +SET(MAX_LAYERS 16 CACHE STRING "Maximum number of layers") +SET(MAX_FX 4 CACHE STRING "Maximum number of effects") +SET(MAX_BUFFER_SIZE 8192 CACHE STRING "Maximum size of buffer") # # HEADER LIBRARY FUNCTIONS @@ -167,7 +188,7 @@ SET(WANT_LIBTAR FALSE) MANDATORY_PKG(LIBARCHIVE) ENDIF() -FIND_HELPER(LIBARCHIVE archive archive.h archive) +FIND_HELPER(LIBARCHIVE libarchive archive.h archive) IF( WANT_LIBARCHIVE AND LIBARCHIVE_FOUND) SET(WANT_LIBTAR FALSE) ENDIF() @@ -175,6 +196,8 @@ FIND_HELPER(ALSA alsa alsa/asoundlib.h asound ) FIND_LADSPA(LADSPA ladspa.h noise) +FIND_HELPER(NSMSESSION liblo lo/lo.h lo) + IF("${CMAKE_SYSTEM_NAME}" MATCHES "NetBSD") FIND_HELPER(OSS oss sys/soundcard.h ossaudio ) ELSE() @@ -182,6 +205,7 @@ ENDIF() FIND_HELPER(JACK jack jack/jack.h jack) +CHECK_LIBRARY_EXISTS(jack jack_port_rename "" HAVE_JACK_PORT_RENAME) FIND_HELPER(JACKSESSION jack jack/session.h jack) IF(APPLE) FIND_LIBRARY(AUDIOUNIT_LIBRARY AudioUnit) @@ -194,10 +218,7 @@ FIND_HELPER(PULSEAUDIO pulseaudio pulse/pulseaudio.h pulse) FIND_HELPER(LASH lash-1.0 lash/lash.h lash) FIND_HELPER(LRDF lrdf lrdf.h lrdf) - -IF(LRDF_FOUND) - include_directories(${LRDF_INCLUDE_DIRS}) # see github issue 194 -ENDIF(LRDF_FOUND) +FIND_HELPER(RAPTOR raptor2 raptor.h raptor) FIND_HELPER(RUBBERBAND rubberband RubberBandStretcher.h rubberband) FIND_HELPER(CPPUNIT cppunit cppunit/TestCase.h cppunit) @@ -222,7 +243,7 @@ # # COMPUTE H2CORE_HAVE_xxx xxx_STATUS_REPORT # -SET(STATUS_LIST LIBSNDFILE LIBTAR LIBARCHIVE LADSPA ALSA OSS JACK JACKSESSION COREAUDIO COREMIDI PORTAUDIO PORTMIDI PULSEAUDIO LASH LRDF RUBBERBAND CPPUNIT ) +SET(STATUS_LIST LIBSNDFILE LIBTAR LIBARCHIVE LADSPA ALSA OSS JACK JACKSESSION NSMSESSION COREAUDIO COREMIDI PORTAUDIO PORTMIDI PULSEAUDIO LASH LRDF RAPTOR RUBBERBAND CPPUNIT ) FOREACH( _pkg ${STATUS_LIST}) COMPUTE_PKGS_FLAGS(${_pkg}) ENDFOREACH() @@ -232,14 +253,14 @@ IF(LIBSNDFILE_VERSION_OK) SET(LIBSNDFILE_MSG "libsndfile supports FLAC and OGG sound file formats") ELSE() - SET(LIBSNDFILE_MSG "libsndfile version must be greater than ${LIBSNDFILE_VERSION_PREV} to support LFAC and OGG sound file formats") + SET(LIBSNDFILE_MSG "libsndfile version must be greater than ${LIBSNDFILE_VERSION_PREV} to support FLAC and OGG sound file formats") ENDIF() # RUBBERBAND information SET(LIBRUBBERBAND_MSG "The use of librubberband2 is marked as experimental. * Because the current implementation produce wrong timing! * So long this bug isn't solved, please disable this option. -* If rubberband-cli is installed, the hydrogen rubberband-fuction +* If rubberband-cli is installed, the hydrogen rubberband-function * will work properly as expected.") # @@ -257,7 +278,8 @@ * System data path : ${SYS_DATA_PATH} * core library build as : ${H2CORE_LIBRARY_TYPE} * debug capabilities : ${H2CORE_HAVE_DEBUG} -* macosx bundle : ${H2CORE_HAVE_BUNDLE}\n" +* macosx bundle : ${H2CORE_HAVE_BUNDLE} +* fat build : ${WANT_FAT_BUILD}\n" ) COLOR_MESSAGE("${cyan}Main librarires${reset} @@ -275,6 +297,7 @@ * ${purple}OSS${reset} : ${OSS_STATUS} * ${purple}JACK${reset} : ${JACK_STATUS} * ${purple}JACKSESSION${reset} : ${JACKSESSION_STATUS} +* ${purple}NSM Session${reset} : ${NSMSESSION_STATUS} * ${purple}CoreAudio${reset} : ${COREAUDIO_STATUS} * ${purple}CoreMidi${reset} : ${COREMIDI_STATUS} * ${purple}PortAudio${reset} : ${PORTAUDIO_STATUS} @@ -327,10 +350,15 @@ ADD_SUBDIRECTORY(src/player) ADD_SUBDIRECTORY(src/synth) ADD_SUBDIRECTORY(src/gui) - -INSTALL(DIRECTORY data DESTINATION ${SYS_DATA_PATH}/.. PATTERN ".git" EXCLUDE) -IF(NOT WIN32 AND NOT APPLE) - INSTALL(FILES ${CMAKE_SOURCE_DIR}/linux/hydrogen.desktop DESTINATION "${CMAKE_INSTALL_PREFIX}/share/applications") +IF (MINGW) + INSTALL(DIRECTORY data DESTINATION . PATTERN ".git" EXCLUDE) +ELSE() + INSTALL(DIRECTORY data DESTINATION ${SYS_DATA_PATH}/.. PATTERN ".git" EXCLUDE) +ENDIF() +IF(NOT MINGW AND NOT APPLE) + INSTALL(FILES ${CMAKE_SOURCE_DIR}/linux/hydrogen.appdata.xml DESTINATION "${CMAKE_INSTALL_PREFIX}/share/appdata") + INSTALL(FILES ${CMAKE_SOURCE_DIR}/linux/hydrogen.desktop DESTINATION "${CMAKE_INSTALL_PREFIX}/share/applications") + INSTALL(FILES ${CMAKE_SOURCE_DIR}/linux/hydrogen.1 DESTINATION "${CMAKE_INSTALL_PREFIX}/man/man1") ENDIF() # @@ -342,35 +370,65 @@ SET(CPACK_PACKAGE_VENDOR "Hydrogen Developers") SET(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_SOURCE_DIR}/README.txt") SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/COPYING") - SET(CPACK_PACKAGE_VERSION_MAJOR "${VERSION_MAJOR}") SET(CPACK_PACKAGE_VERSION_MINOR "${VERSION_MINOR}") SET(CPACK_PACKAGE_VERSION_PATCH "${VERSION_PATCH}") IF(VERSION_SUFFIX) - SET(CPACK_PACKAGE_VERSION_PATCH "${VERSION_PATCH}-${VERSION_SUFFIX}") +SET(CPACK_PACKAGE_VERSION_PATCH "${VERSION_PATCH}-${VERSION_SUFFIX}") ENDIF(VERSION_SUFFIX) +SET(CPACK_PACKAGE_INSTALL_DIRECTORY "Hydrogen") -SET(CPACK_PACKAGE_INSTALL_DIRECTORY "Hydrogen ${VERSION}") - - - -IF(WIN32) - # TODO - #SET(CPACK_PACKAGE_ICON "${CMAKE_SOURCE_DIR}/data\\\\nsis_branding.bmp") - SET(CPACK_NSIS_MUI_ICON "${CMAKE_SOURCE_DIR}/data\\\\hydrogen.ico") +IF(MINGW) + #Set the other files that will be used in CPack + SET(WIN64 "OFF" CACHE BOOL "Windows 64 Bit") + SET(CPACK_STRIP_FILES "${WINDOWS_DIR}/src/cli/h2cli.exe" "${WINDOWS_DIR}/src/gui/hydrogen.exe" "${WINDOWS_DIR}/src/player/h2player.exe" "${WINDOWS_DIR}/src/synth/h2synth.exe") + #Program Files for Hydrogen + SET(WINDOWS_DIR "windows") + INSTALL(FILES "${WINDOWS_DIR}/src/cli/h2cli.exe" "${WINDOWS_DIR}/src/core/libhydrogen-core-${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}.dll" "${WINDOWS_DIR}/src/gui/hydrogen.exe" "${WINDOWS_DIR}/src/player/h2player.exe" "${WINDOWS_DIR}/src/synth/h2synth.exe" DESTINATION ./) + #Install files from the extralibs dir + INSTALL(DIRECTORY ${WINDOWS_DIR}/extralibs/ DESTINATION ./) + + IF(WANT_FAT_BUILD) + INSTALL(DIRECTORY windows/jack_installer DESTINATION ./) + INSTALL(DIRECTORY windows/plugins DESTINATION ./) + ENDIF() + + SET(CPACK_PACKAGE_ICON "${CMAKE_SOURCE_DIR}/data\\\\img\\\\h2-icon.bmp") + #Begin NSIS Customizations + # Installers for 32- vs. 64-bit CMake: + # - Root install directory (displayed to end user at installer-run time) + # - "NSIS package/display name" (text used in the installer GUI) + # - Registry key used to store info about the installation + IF(WIN64) + SET(CPACK_NSIS_INSTALL_ROOT "$PROGRAMFILES64") + SET(CPACK_NSIS_PACKAGE_NAME "Hydrogen - ${DISPLAY_VERSION} 64Bit") + SET(CPACK_PACKAGE_FILE_NAME "Hydrogen-${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}-win64") + #SET(CPACK_PACKAGE_INSTALL_REGISTRY_KEY "${CPACK_PACKAGE_NAME}${CPACK_PACKAGE_VERSION} 64Bit") + ELSE() + SET(CPACK_NSIS_INSTALL_ROOT "$PROGRAMFILES") + SET(CPACK_NSIS_PACKAGE_NAME "Hydrogen - ${DISPLAY_VERSION}") + SET(CPACK_PACKAGE_FILE_NAME "Hydrogen-${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}-win32") + #SET(CPACK_PACKAGE_INSTALL_REGISTRY_KEY "${CPACK_PACKAGE_NAME}${CPACK_PACKAGE_VERSION}") + ENDIF() + + #Need the 2 following lines for the icon to work + SET(CPACK_NSIS_MUI_ICON "${CMAKE_SOURCE_DIR}/data\\\\img\\\\h2-icon.ico") + SET(CPACK_NSIS_MUI_UNIICON "${CMAKE_SOURCE_DIR}/data\\\\img\\\\h2-icon.ico") SET(CPACK_NSIS_INSTALLED_ICON_NAME "hydrogen.exe") SET(CPACK_NSIS_DISPLAY_NAME "Hydrogen (Advanced drum machine for GNU/Linux)") SET(CPACK_NSIS_HELP_LINK "http:\\\\\\\\www.hydrogen-music.org/") SET(CPACK_NSIS_URL_INFO_ABOUT "http:\\\\\\\\www.hydrogen-music.org/") SET(CPACK_NSIS_CONTACT "hydrogen-devel@lists.sourceforge.net") - SET(CPACK_PACKAGE_EXECUTABLES "hydrogen-gui.exe;Advanced drum machine for GNU/Linux") - SET(CPACK_NSIS_MENU_LINKS "hydrogen-gui.exe;Advanced drum machine for GNU/Linux") - SET(CPACK_SOURCE_GENERATOR "ZIP") -ELSE(WIN32) + SET(CPACK_PACKAGE_EXECUTABLES "hydrogen.exe;Hydrogen drum machine") + SET(CPACK_NSIS_MENU_LINKS "hydrogen.exe;Hydrogen drum machine") + SET(CPACK_PACKAGE_INSTALL_REGISTRY_KEY ON) + SET(CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL ON) + #end NSIS customizations +ELSE(MINGW) #apple stuff was moved to src/gui/CMakeLists.txt ENDIF() -SET(CPACK_SOURCE_PACKAGE_FILE_NAME "hydrogen-${VERSION}") +SET(CPACK_SOURCE_PACKAGE_FILE_NAME "hydrogen") SET(CPACK_SOURCE_IGNORE_FILES ".*~;\\\\.git;\\\\.svn;${CMAKE_BINARY_DIR}") #!The following 5 lines are copied from cmake's QtTest example Binary files /tmp/tmpktOUQO/kmAosGw3t1/hydrogen-0.9.6.1/data/doc/img/director.png and /tmp/tmpktOUQO/ALHtWJIToj/hydrogen-0.9.7/data/doc/img/director.png differ Binary files /tmp/tmpktOUQO/kmAosGw3t1/hydrogen-0.9.6.1/data/doc/img/Director.png and /tmp/tmpktOUQO/ALHtWJIToj/hydrogen-0.9.7/data/doc/img/Director.png differ Binary files /tmp/tmpktOUQO/kmAosGw3t1/hydrogen-0.9.6.1/data/doc/infoSplash/aboutLogo.png and /tmp/tmpktOUQO/ALHtWJIToj/hydrogen-0.9.7/data/doc/infoSplash/aboutLogo.png differ diff -Nru hydrogen-0.9.6.1/data/doc/infoSplash/news-070620.html hydrogen-0.9.7/data/doc/infoSplash/news-070620.html --- hydrogen-0.9.6.1/data/doc/infoSplash/news-070620.html 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/data/doc/infoSplash/news-070620.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,68 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  
- -
Development version (0.9.4-SVN)
-
-
- -

News and project status [2007-06-20]

- -

- Many of you thought the project was dead...in fact it was!
- Now I'm back and my plans are to finish the 0.9.4 release and only then start to think about the Hydrogen future. -

- -

- I promised too many things in just one version...that was my fault and the main reason why I "choked" and I give up. - So in order to finish this release I'm going to drop some features and the porting to mac and windows platforms. -

- -
-
-  
-

- - Alessandro "comix" Cominu [comix@users.sf.net]
-
-
- - http://www.hydrogen-music.org - -

-
- - - diff -Nru hydrogen-0.9.6.1/data/doc/infoSplash/news-081104.html hydrogen-0.9.7/data/doc/infoSplash/news-081104.html --- hydrogen-0.9.6.1/data/doc/infoSplash/news-081104.html 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/data/doc/infoSplash/news-081104.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,74 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  
- -
Version 0.9.4 Beta2
-
-
- -

News and project status [2008-11-04]

- -

- Changelog -

- -

- Website -

- -

- Documentation -

- -

- Forums -

- -
-
-  
-

- - Alessandro "comix" Cominu [comix@users.sf.net]
-
-
- - http://www.hydrogen-music.org - -

-
- - - diff -Nru hydrogen-0.9.6.1/data/doc/Makefile hydrogen-0.9.7/data/doc/Makefile --- hydrogen-0.9.6.1/data/doc/Makefile 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/data/doc/Makefile 2016-11-05 08:22:50.000000000 +0000 @@ -19,6 +19,21 @@ manual_ca.html \ manual_nl.html + +ALL_DOCBOOKS = manual_en.docbook \ + manual_es.docbook \ + manual_fr.docbook \ + manual_it.docbook \ + manual_ca.docbook \ + manual_nl.docbook + +ALL_DOCBOOKS_VALIDATED = manual_en.docbook_validated \ + manual_es.docbook_validated \ + manual_fr.docbook_validated \ + manual_it.docbook_validated \ + manual_ca.docbook_validated \ + manual_nl.docbook_validated + ALL_TUTORIALS = tutorial_en.html \ tutorial_fr.html \ tutorial_it.html @@ -46,7 +61,7 @@ $(XML2POT) tutorial.docbook > tutorial.pot clean: - -rm -f $(ALL_MANUALS) $(ALL_TUTORIALS) *_{en,es,it,fr,nl,ca}.docbook *.docbook_validated + -rm -f $(ALL_MANUALS) $(ALL_TUTORIALS) $(ALL_DOCBOOKS) $(ALL_DOCBOOKS_VALIDATED) %.html: %.docbook %.docbook_validated LL=$$(echo -n $< | sed 's/.*_\(..\)\.docbook/\1/') ; \ diff -Nru hydrogen-0.9.6.1/data/doc/manual_ca.html hydrogen-0.9.7/data/doc/manual_ca.html --- hydrogen-0.9.6.1/data/doc/manual_ca.html 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/data/doc/manual_ca.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,37 +0,0 @@ -Manual d'Hydrogen

Manual d'Hydrogen

Piraino, Antonio

Cominu, Alessandro

van Severen, Thijs

Moors, Sebastian

Resum

Hydrogen s un programari sintetitzador que pot ser utilitzat per si sol emulant una caixa de ritmes basada en patrons o mitjanant un teclat MIDI extern o un programa seqenciador. Hydrogen compila en Linux/x86 i Mac OS X, tot i que l'ltim est en fase de proves. Consulta a la llista de correu de l'equip de desenvolupament per ms detalls.


Captol 1. Introducci

1. Descrrega

You can download Hydrogen from http://www.hydrogen-music.org. On the 'Downloads' page you can find several binaries (installers) for Linux, Mac and Windows. (note that some versions may not be available for Windows and Mac)

If you want to compile Hydrogen yourself (see Secci2), you can download the latest source files directly from our subversion server with:

$ svn co http://svn.assembla.com/svn/hydrogen/trunk

A certain release can be fetched with:

$ svn co http://svn.assembla.com/svn/hydrogen/tags/0.9.5

-

La compilaci d'Hydrogen depn de les segents llibreries:

Si us plau, instala-les amb el gestor de paquets de la teva distribuci.Si ests utilitzant un sistema basat en debian, pots instalar les llibreries amb:

$ apt-get install libqt4-dev g++ libasound2-dev \
-        libjack-dev liblrdf0-dev libflac++-dev libtar-dev libsndfile1-dev \
-        liblash-dev libportaudio-dev libportmidi-dev 
-      

2. Munta

Depending on the branch you are compiling you will need to use Scons or Cmake. Check the INSTALL.txt and the README.txt files for more info (located in the top level dir once you downloaded the sources).

2.1. Using scons

Descomprimeix el fitxer tar o ves al directori on la cpia de subversion va ser inicialitzada:

$ cd hydrogen-*
-          $ scons
-          $ su -c "scons install"
-        

Abans de compilar verifica opcions adicionals amb:

$ scons --help
-        

Si vols utilitzar opcions no habilitades per defecte (per exemple PortAudio), les pots habilitar amb:

$ scons portaudio=1
-        

Igualment, si et trobes amb un error a l'utilitzar Hydrogen i vols donar-lo a conixer, recorda configurar hydrogen amb:

$ scons debug=1
-        

Per netejar codi compilat:

$ scons -c
-        

2.2. Using cmake

Compiling with cmake can be done easily by using the make_helper script. Decompress the tarball or go to the directory where the subversion copy was checked out and run the make_helper script without any arguments to display the help :

$ cd hydrogen-*
-          $ ./make_helper
-        

The help is now displayed (and is self-explanatory) :

$ used builder : cmake
-          $ usage ./make_helper [cmds list]
-          $ cmds may be
-          $    r or rm     =
-> all built, temp and cache files
-          $    c or clean  =
-> remove cache files
-          $    m or make   =
-> launch the build process
-          $    d or doc    =
-> build html documentation
-          $    h or help   =
-> show the build options
-          $    x or exec   =
-> execute hydrogen
-        

3. Preferences

First of all you should make sure that the audio engine is configured properly. The preferences dialog can be accessed via the tools menu (tools -> preferences).

3.1. The General tab

On the "General" tab (Figura1.1) you can choose to automatically reopen the last used song and/or playlist. This can save you the trouble of having to reopen the song you are working on every time you open Hydrogen. Auto loading the playlist can come in handy when you are using Hydrogen live.

If you want to use Lash to manage your Jack connections you should enable it here so Hydrogen allows interaction with Lash.

The Beat Counter drift compensation and start offset allow you to compensate for system latency when you are using the Beat Counter function (see Secci3.1)

The Max number of bars in a song can be set here (currently limited to 800) and if you want to use rubberband for sample time-streching you need to enter the path where rubberband is installed on you system here.

Figura 1.1. The General Tab

The General Tab

3.2. La pestanya del Sistema d'udio

From the "Audio System" tab (Figura1.2) it is possible to modify the audio driver being used (OSS, Jack, ALSA, PortAudio) with its buffer and sampling rate (unless you are using JACK, in this case the audio driver configuration should happen before starting the JACK server).

We can set some features of Hydrogen like "Create per-instrument outputs" this will create 1 output per instrument that you can connect to any other Jack enabled application. This can be useful if you want to add effects to a single instrument with jack-rack for example. "Connect to Default Output Pair" connects the output to the default ports: uncheck this if you want to connect the JACK output to other ports without having to disconnect them first.

Also keep an eye on the value of "Polyphony": depending on your CPU you may want to change the max simultaneous notes in order to prevent hydrogen from overrunning the audio driver.

Figura 1.2. La pestanya del sistema d'udio

La pestanya del sistema d'udio

Els controladors disponibles sn els segents:

  • jackd: El controlador Jack s un servidor d'udio professional que permet molt baixa latncia i es comunica amb altres programes d'udio. Recomanem ferventment usar aquest controlador per treure-li tot el suc a Hydrogen. El servidor JACK s'iniciar automticament si no est ja en s.

  • ALSA: El controlador d'udio ms exts en Linux

  • OSS: The Oss audio driver uses /dev/dsp and it's based on the OSS interface which is supported by the vast majority of sound cards available for Linux; this said, the use of this audio driver blocks /dev/dsp until Hydrogen is closed i.e. unusable by any other software. Use it as last resort.

  • PortAudio: an open-source multi platform audio driver

  • CoreAudio: un controlador per a Mac OS X (experimental)

3.3. La pestanya del sistema Midi

The "Midi System" tab (Figura1.3) contains all MIDI settings. Here you can choose the MIDI driver, input, and channel(s) that Hydrogen should respond to. You can also define midi bindings: link a midi note/message to an action. To do this simply press the red 'REC' button left of the 'binding' action line. A popup will inform you that Hydrogen is waiting for your input. Press/hit/turn the key/pad/knob on your midi keyboard (or controller) that you want to link to this action. The popup will close and the Event Param value will now show the midi note value of the key you pressed. Once this is done you can select an Action from the action drop-down list. Note that some actions (like SELECT_NEXT_PATTERN) also require an Action Param that references the pattern you want to select with this midi action.

Figura 1.3. La pestanya del sistema MIDI

La pestanya del sistema MIDI

3.4. La pestanya d'aparna

The "Appearance" tab (Figura1.4) let's you modify Hydrogen look and feel (font settings and interface style). Also the VU meters fall-off speed of the Mixer Window can be changed here.

Figura 1.4. La Pestanya d'Aparena

La Pestanya d'Aparena

3.5. The Audio Engine tab (debug only)

The "Audio Engine" tab (Figura1.5) is a window that shows various stats about Hydrogen and the audio driver. In case JACK is used, buffer and sampling rate should be set before starting Hydrogen (JACK automatically starts when an application tries to connect).

Note that the Audio Engine tab is only available if Hydrogen was complied with debug support.

Figura 1.5. La Pestanya del Motor d'udio

La Pestanya del Motor d'udio

Captol 2. Usant Hydrogen

1. Tipus de fitxers utilitzats

Abans de treballar amb Hydrogen, si us plau, familiaritza't amb els segents tipus de fitxers:

  • *.h2pattern: Fitxer XML que descriu un patr. Els patrons sn un grup de polsacions gestionats per l'etidor de patrons.

  • *.h2song: Fitxer XML que descriu una can (o seqencia). Les canons sn grups de patrons amb les seves propietats, i sn gestionats amb l'editor de canons

  • *.h2playlist: XML file describing a playlist. A Playlist is a (ordered) group of songs.

  • *.h2drumkit: es tracta d'una carpeta comprimida que cont totes les mostres de s que composen un kit de bateria i un fitxer XML de descripci. Els kits de bateria sn bsicament un grup de mostres de s.

2. Men principal

Projectes: aquest men ofereix funcions relacionades amb els fitxers.

  • Nou - Crear una nova can

  • Mostrar informaci - Configurar les propietats generals de la can com ara nom, autor, llicncia i altres notes

  • Obre - Obre una can

  • Obre Demo - Obrir una can de demostraci (les canons de demostraci es troben a INSTALLPATH/share/hydrogen/data/demo_songs)

  • Obre Recent - Obre un men que mostra les canons utilizades recentment

  • Desa - Desa les modificacions fetes a la can actual

  • Desa com a - Desa la can actual especificant-li un nom (directori per defecte: $HOME/.hydrogen/data/songs))

  • Obrir patr - Obre un patr desat que pertany al kit de bateria actual

  • Exportar patr com a - Desa el patr, ser desat a $HOME/.hydrogen/data/patterns/drumkit_name

  • Exportar fitxer MIDI - Exporta la can actual en format MIDI

  • Exportar can - Exporta la can actual en format WAV

  • Sortir - Sortir d'Hydrogen

Instruments: aquest men cont funcions d'instruments i kit de bateria (llibreries de s).

  • Afegir instrument - Afegeix un nou instrument al kit de bateria actualment actiu

  • Neteja-ho tot - Elimina tots els instruments del kit de bateria actual

  • Desar llibreria - Desa tots els instruments, les seves configuracions i mostres de s a $HOME/.hydrogen/data/library_name

  • Exportar llibreria - Comprimir totes les mostres dels instruments i configuracions en un kit de bateria a $HOME/.hydrogen/data/library_name

  • Importar llibreria - Importa un kit de bateria del sistema d'arxius local o el descarrega d'un lloc remot mitjanant alimentaci XML (XML feed). El fitxer XML provet NO compleix els stndards RSS (veure la pgina web d'Hydrogen per a un exemple). Per a carregar un kit de bateria en la sessi de treball actual d'Hydrogen, llegeix Secci7.

Tools: opens the mixer, the director, the playlist editor, the instrument rack and the general preferences window.

  • Editor de llistes de reproducci - Una eina per a gestionar llistes de reproducci.

  • Director - Open the director window.

  • Mesclador - Obre la finestra del mesclador.

  • Banc d'Instruments - Obre el panell del banc d'instruments.

  • Preferncies Obre la finestra principal de preferncies. Llegeix Secci3 per ms informaci sobre la configuraci d'Hydrogen.

Debug: tools mainly for debugging and monitoring Hydrogen (only available when compiled with debug support !).

  • Mostrar informaci del motor d'udio - Obre un monitor amb vries estadstiques

  • acci de depuraci - Inserta una instrucci per a la depuraci.

  • Imprimir Objectes - Imprimir a stdout (sortida per defecte) l'actual mapa d'objectes.

Informaci

  • Manual d'usuari- Obre una finestra amb aquest manual

  • About - The usual window with license information, acknowledgements, etc.

3. La barra d'eines principal

Abans d'analitzar les dues rees principals d'Hydrogen, fem primer una ullada rpida a la barra d'eines principal i als seus components:

  • Pilota la can utilitzant els botons d'inici, aturar, pausa, etc.

  • Escull entre mode "patr" o "can": En mode "patr" noms se sentir el patr seleccionat, mentre que en el mode "can" se sentirn tots els patrons utilitzats.

  • Una funci avanada de toc al tempo: escollir la llargada de la nota i quantes notes han de passar abans de recalcules les PPM, aleshores clica la tecla coma fins que la lletra 'R' aparegui i les PPM siguin actualitzades (veure Secci3.1)

  • Configurar manualment les PPM

  • Administrar el transport JACK

  • Obrir els panells del mesclador i del panell d'instruments

Figura 2.1. La Barra d'ines Principal

La Barra d'ines Principal

  • Main controls to start [Hotkey = Spacebar], stop, record, fast forward, rewind, loop a song or a pattern.

  • Set Pattern/Song Mode. When Song mode is selected Hydrogen will play the complete song. This is the sequence of patterns you have created in the Song Editor (see Secci4). When Pattern mode is selected Hydrogen will play the pattern that is currently selected, and thus displayed in the Pattern Editor (see Secci5).

  • Set measure type and Beat Counter (see Secci3.1).

  • Estableix velocitat de reproducci (rang: 30-400 PPM) [Hotkey = mouse wheel] i bot per habilitar/deshabilitar el metrnom

  • Shows CPU load and MIDI events. The CPU bargraph gives you an indication of the CPU load. The MIDI led lights up every time Hydrogen receives a midi message.

  • Click J. TRANS to enable Jack transport. If the J. MASTER button is pressed Hydrogen will work as 'master', else it will act as 'slave' to another 'master' program (e.g. Ardour). This applet is only available if Jack Audio Driver is selected.

3.1. Polsar Tempo i ComptadorDePolsacions

s possible cambiar el tempo en cualsevol moment utilitzant la funcionalitat polsar-tempo i ComptadorDePolsacions d'Hydrogen. Els pots canviar mentre la can s'est reprodunt o mentre est aturada. Per cambiar el tempo, polsa la tecla , (coma) per a seleccionar el nombre de polsacions en la mesura. Desprs que hagi passat el nombre de polsacions correcte, el tempo canviar cap a la mitjana del que hagis polsat. Si continues polsant, aquestes noves polsacions es convertirn en una part de la mitjana. Si polses per accident, o esperes massa temps entre polsacions, el comptador de tempo per polsacions tornar a comenar.

Polsar Tempo s una part del ComptadorDePolsacions, que s essencialment un polsar tempo tunejat. Per defecte el ComptadorDePolsacions no eś visible. Per veure el ComptadorDePolsacions clica el bot de dalt a la dreta (BC) entre el selector de mode Can/Patr i el selector de PPM. Tamb pot veure's quan es pressiona la tecla coma (,).

El tempo que pressionis ser considerat polsacions parelles del tipus de polsaci. El tipus de polsaci pot ser configurat a 1/8 (per ritmes d'un vuit de nota), 1/4 (per ritmes d'un quart de nota), 1/2 (per ritmes de mitja nota) i 1/1 (per ritmes d'una nota sencera). Per cambiar el tipus de ritme utilitza la tecla fletxa esquerra. Per cambiar el nombre de polsacions comptades, utilitza la tecla fletxa dreta. Pots configurar de 2 a 16 polsacions (P.e., si configures les polsacions a 6, haurs de polsar 6 vegades abans que el nou tempo estigui computat i s'assigni.) Mentre es mostri una R per pantalla el ComptadorDePatrons est apunt per comenar de 0. Cada vegada que pressiones amb la tecla coma, mostrar el nombre de polsacions que has entrat (1, 2, 3...).

El bot del fons a ma dreta controla la funcionalitat comenar-automticament, i s'activa entre S i P. P significa (Reprodur), en aquest estat la can assignar el tempo automticament i es comenar a reprodur quan hagis entrat la quantitat correcta de polsacions (si no s'est ja reprodunt, clar). D'aquesta manera, si tens el ComptadorDePatrons configurat a 4/4, pots polsar 1-2-3-4, i comenar en la prxima polsaci. Quan es mostra S (per Configura PPM), l'auto inici est deshabilitat.

Per exemple: suposem que ests en un grup, Hydrogen, i tens un sintetitzador software controlat per Seq24)... i vols que tot comenci alhora. Configura el tipus de ritme a 1/4 i el nombre de polsacions a 4. Habilita l'auto-inici (mostrant P). Compta al grup 1-2-3-4 (mentre li vas donant a la coma) — i tothom comena a l'1.

Un altre exemple: En la mateixa situaci, per la can no requereix d'Hydrogen o sintetitzadors fins a una estona desprs. Mentrestant, un hum (p.e. el guitarrista) anir configurant el tempo. En la mesura anterior en la que hydrogen se suposa que ha de comenar, polsa la coma 1-2-3-4 amb el ritme... i ja ho tens a la prxima polsaci (amb el tempo correcte).

Si ests utilitzant el transport JACK, el ComptadorDePolsacions continua funcionant. Si algun altre programa s el Mestre del Transport JACK, Hydrogen respondr als events de canvi de tempo des d'aquella aplicaci. Fixa't que en aquesta situaci, Hydrogen se suposa que ha de ser un esclau, pel que la funcionalitat del ComptadorDePatrons sern desactivades o no funcionarn correctament. Si Hydrogen s el mestre del transport JACK, els canvis a Hydrogen es veurn reflectits en altres programes (si ho soporten).

Some of the settings to adjust the BeatCounter's latency compensation, are located on the General tab of the Preferences Dialog (see Secci3.1 ). Here you will finde two spinboxes:

  • Beat counter drift compensation in 1/10ms — adjust to compensate for latency between the keyboard and the program.

  • Beat counter start offset in ms — adjust the time between the BeatCounter's last input stroke and when the song starts playing (if auto-start is activated).

Fixa't que aquests valors poden estar configurats a positiu (+) o negatiu (-). Per tal de trobar valors tils per a aquests, necessitars jugar-hi un temps. Ams, pots voler utilitzar valors diferents depenent de la velocitat del teu maquinari, dispositius d'udio, controladors, etc. Utilitzar el ComptadorDePolsacions b necessita prctica.

4. Editor de Canons

The "Song Editor" (Figura2.2) gives an overview of the whole timeline of the song (e.g. intro, verse, bridge, chorus and so on); each blue colored square on this panel is a complete bar as shown in the underlying "Pattern Editor" panel. Here we have complete freedom to add, remove or move patterns in any order we prefer. We can also copy and paste patterns: use left mouse button to highlight an area and drag it around. Dragging with CTRL key pressed copies the patterns.

L'editor de Canons t 7 botons:

- -

  • Esborrar completament tots els patrons (demana confirmaci!).

  • Crear un nou patr (i demana pel seu nom).

  • Moure el patr seleccionat amunt o avall.

  • Habilitar seleccionar patrons per copiar i enganxar (Mode selecci).

  • Habilitar Mode Dibuix.

  • Cambiar del mode "Noms un patr" al mode "Pila de patrons" i enrere...

Sota aquests botons hi ha una llista de patrons creats i quan ells son premuts (cada requadre == 1 barra). Clica en un requadre per afegir o cancelar un patr. Clicar el bot dret del ratol sobre el nom del patr treu un menu per canviar el nom del patr o permetre copiar-lo/esborrar-lo. No s perms tenir varis patrons amb el mateix nom.

Figura 2.2. L'Editor de Canons

L'Editor de Canons

5. L'Editor de Patrons

The "Pattern Editor" lets us create or modify the pattern (bar) which is currently selected. You can add/remove notes, and tune a number of per-note properties like velocity and pan. The Pattern Editor can be used in 2 modes : 'Drum' mode or 'Piano' mode. You can switch between these modes by clicking the Drum/Piano button (located on the top-right of the Pattern Editor)

First let's take a look at the (classic) 'Drum' mode :

Figura 2.3. Pattern Editor in Drum mode

Pattern Editor in Drum mode


-

5.1. Pattern Editor Controls

The top part of the pattern editor contains a number of controls :

Figura 2.4. Pattern Editor Controls

Pattern Editor Controls

From left to right :

  • SIZE : lets you choose the size of the pattern (the number of bars)

  • RES : this is the current grid resolution (4 through 64)

    Remember this constraint concerning the grid: if you are working with a resolution of 16 you can't go back to 8 and remove a 16th note. On the other hand if you are working with a resolution of 8 and you try to insert a note in the middle of two bars (looking for a 16 bars precision), notes will be placed in the previous or in the following 8th bar. This constraint can be removed if you disable the whole grid resolution (choose "off" from the grid resolution LCD control). Now you'll be able to place notes wherever you prefer.

  • HEAR : when enabled Hydrogen will play the sample as it's being added to the pattern.

  • QUANT : enables/disables quantization. When enabled the beats inserted will automatically respect the grid resolution currently applied.

  • Drumset / Instrument : when set to Drumset the keys on your midi keyboard will map to the instruments in your sound library as described in the instrument mapping table below. If you set it to Instrument the keys of your midi keyboard will trigger the instrument that is currently selected. The pitch of the instrument will follow the key you press on your keyboard. This feature is mainly used for non-drum instruments. An example : if you use a sample of a piano for one of your instruments, you will be able to 'play' that piano instrument using your keyboard just like you are playing a piano synth.

  • Note Length / Note off : these are 2 different ways to define the duration of a note. See Secci5.3 for usage.

  • Drum/Piano : switch Pattern Editor between Drum and Piano mode. (see below)

5.2. Pattern Editor Drumkit

The section on the left shows you what drumkit/library is currently selected (GMkit by default) and below that you can see the instruments that are part of this kit.

- -

Each instrument has its own set of features that are accessible by right-clicking the instrument. From the context menu that pops up you can select

  • Clear notes : to remove all notes for this instrument in this pattern.

  • Fill notes : this allows you to fill up the pattern with notes for the selected instrument. Depending on the choice you make (fill all, fill 1/2, fill 1/4 ...) notes will be placed at all, 1/2, 1/4, etc of the note positions that are allowed by the grid setting. So be careful not to mix up the 'musical' 1/2-note and the 'fill 1/2' note.

  • Randomize velocity : automatically apply a pseudo-random velocity to each note of that instrument in the pattern. The more velocity you set on the instrument, the more hydrogen will hit hard on that instrument when played.

  • Delete Instrument : well, deletes the instrument ;-)

The small red and green buttons right of the instrument names are the mute (red) and solo (green) buttons.

The order of the instruments can be rearranged by simply dragging an instrument up/down in the list and dropping it on a new position within the drumkit/library. Doing so will not change anything to the sequence you have created for that instrument, nor will it change anything to the song or pattern you are working on. It will however, have an impact on the MIDI note mapping : in the table below you can find the link between the instrument position, the MIDI note and the qwerty keyboard keys.

Important Notes :

The name of the instrument depends on the drumkit that is loaded. This list below refers to the GMkit that is loaded by default.

Keep in mind that it is the position of the instrument (within the loaded drumkit) that is linked to a MIDI-note/keyboard-key and not the name of the instrument.

Here's a quick reference of the above bindings for your convenience.

5.3. Pattern Editor Sequence area

This is where it all happens, this is where you can make music :-)

In this area you can see your selected pattern and add notes for any instrument. The simplest way to create a pattern is by adding notes using your mouse (and the 'Fill/Clear notes' function described above). Where you can add notes depends on the used pattern size and resolution.

If you are using Hydrogen as a pure 'drum' you just want Hydrogen to 'hit' the instrument wherever there's a 'dot' in the pattern. If you are using Hydrogen as an 'instrument', the length of the note becomes very important. There are 2 ways to define the length of a note : in 'Note Length' mode you can add a note by left-cliking, and you can 'stretch' that note by right-click-dragging it. This will change the dot into a rectangle that represents the duration of that note. In 'Note Off' mode you can also add a note by left-clicking, but a right-click will now add a blue dot that represents the end of that note.

(Figure above, from left ->right : a 'normal' note, a note in 'note length' mode, a note in 'note off' mode)

So far we have only used the mouse to create a pattern, but you can also record your beats by clicking the Record button (see Secci2) and simply playing your pattern on your MIDI drum or your pc keyboard (see instrument mapping above). This is probably a more musical way of creating a pattern, but it's up to you to decide what works best for you. (Also see Captol3 for a basic walk-through of how the pattern editor works)

5.4. Pattern Editor Note Properties

Clicking on an instrument or adding/removing a note next to it will select this instrument. Once an instrument is selected the note properties for this instrument will be shown in the form of vertical lines in the bottom window. The lines represent the value for the selected property of each note of the selected instrument. You can select another note-property from the note property drop-down list (located bottom-left). There are 4 note properties available :

  • Velocity : how hard the note is played (the volume of the note)

    Note that the color of the note-dot and the vertical bar will change according to the velocity value you have defined. A light shade of gray means a low velocity (low volume) and the higher you set the velocity the darker the color will be, turning red when you reach the point of clipping.

  • Pan : with this parameter you can define the stereo image of the note (how loud it will be in the left/right output)

  • Lead/Lag : Lead and Lag allows a slight note lead or lag in respect of the actual beat. The range is ca. 5 ticks which equals around ca. 10 ms at a tempo of 120bpm. Changing the lead/lag can make a huge difference to the way your pattern sounds and feels. It's a groove thing ;-)

  • Notekey : if you select this note parameter the area where you can modify the parameter will change into a 'piano keyboard'

    The striped black and white area represents a piano keyboard and in the gray area you can choose the octave. By placing a dot on the octave scale and a dot on the 'keyboard' you can choose any note.

-

5.5. Pattern Editor Piano mode

Drum mode (see Figura2.3) focuses on using Hydrogen as a drum machine. If you are using Hydrogen as an instrument there is a big chance that the Piano mode is for you. It gives you a complete 'piano keyboard' so you can easily put down your tunes.

You can compare the Piano mode to the Note properties Notekey (described above), only here you have a complete piano keyboard, so you dont have to select the octave first.

Figura 2.5. Pattern Editor in Piano mode

Pattern Editor in Piano mode

6. Mesclador

Figura 2.6. El Mesclador

El Mesclador

L'rea del mesclador (Figura2.6) s til per afinar el volum global o de cada una de les mostres de l'actual kit de bateria. Mostra el pic actual (clic a per deshabilitar, til per a velles CPU) i et permet habilitar el valor mxim de pic perms (afina-ho amb el bot atenuador de l'instrument), et permet modificar atributs com ara balan, tocar en solitari , silenciar o provar tocar noms aquest instrument ; seleccionant a l'Editor de Patrons un instrument t l'efecte que un LED blau s'encen (aprop del bot d'inici de reproducci). Aprop del bot de volum global, pots habilitar 3 efectes globals com ara swing (canvia unes poques notes enrere o endavant, per no aleatriament), temps (modificar el temps de les notes) i efecte humanitador (edici de la velocitat aleatria).

Ams s possible configurar 4 efectes LADSPA per a cada instrument activant el bot. Veure la prxima secci per a ms detall.

7. Llibreria de S (Gestor del Kit de Bateria)

La llibreria de s t'estalvia temps per gestionar els teus kits de bateria, patrons preferits, i canons preferides. Quan crees canons noves i kits de bateria, la Llibreria de S et facilita reutilitzar i mesclar instruments i patrons des d'altres kits i canons.

7.1. Kits de Bateria del Sistema

Aix llista els kits de bateria que estn instalats en el teu administrador de sistema. Est determinat per un prefix en temps de compilaci. En sistemes operatius tipus-unix aix s normalment /usr/share/hydrogen/data/drumkits, o possiblement /usr/local/share/hydrogen/data/drumkits. Aquests kits estn disponibles per tots els usuaris del sistema, i els usuaris normalment no poden afegir-n'hi.

Per a carregar un kit de bateria des d'aqui, clica amb el bot dret al kit de bateria i selecciona Carregar. Aix canviar el kit de bateria actual amb el que hagis seleccionat. Per carregar un sol instrument del kit, clica amb el bot esquerre mes cap a l'esquerra del nom del kit de bateria per mostrar tots els instruments. Amb el bot esquerre del ratol, clica i arrossega l'instrument al kit actual. L'instrument ser afegit al kit de bateria que hagis carregat.

7.2. Kits de Bateria d'Usuari

Aquests sn els kits de bateria que tu mateix pots gestionar. Normalment es guarden a $HOME/.hydrogen/data/drumkits. Quan crees un nou kit de bateria, pots desar-lo aqui seleccionant InstrumentsDesar Llibreria.

Els kits de bateria es carreguen de la mateixa manera que els kits de bateria del sistema (veure Secci7.1).

7.3. Patrons en la Llibreria de S

Assegura't d'etitar les propietats clicant amb el bot dret i seleccionant Propietats abans de desar els teus patrons preferits a la llibreria de s. Aqu li potd donar ttol i categoria al patr. Pots utilitzar alguna de les categories predeterminades o crear-ne una de nova simplement escrivint el seu nom. El nom de la categoria s important, ja que els patrons es desen per categoria a la Llibreria de S.

Pots desar els teus patrons preferits a la llibreria de s clicant amb el bot dret al ttol del patr dins de l'editor de canons, i seleccionant Desar Patr. Apareixer a la Llibreria de S sota Patrons i la categoria que l'hi hagis assignat.

7.4. Canons en la Llibreria de S

Per desar les canons a la Llibreria de S, posa-les al directori de dades sotta la carpeta canons (normalment $HOME/data/songs). Per esborrar-les, esborra el fitxer del directori.

8. Kits de Bateria i Editant Instruents

Els kits de bateria en Hydrogen es creen amb l'Editor d'Instruments. Amb l'editor d'instruments pots carregar mostres, configurar parmetres d'contorn, configurar el guany i uns quants parmetres ms avanats com ara enmudir grups, filtre de ressonncia passa-baixos, aleatoritzaci del t.

En comptes de crear el teu propi kit de bateria, pots utilitzar o descarregar kits de bateria ja existents utilitzant el Secci7.

8.1. Conceptes

El sintetitzador d'Hydrogen est basat en mostres. Una mostra s un fragment pre-enregistrat de s (normalment entre .1 segons i 3 segons). Per fer una nota, la mostra simplement es torna a tocar en el moment precs. Hi ha uns quants conceptes i termes que hauries d'entendre quan ests creant un kit de bateria. (Veure Glossari per ms detalls.)

Termes de Mostreig del Sintetitzador

Sample

Una grabaci curta d'un s, normalment entre .1 i 3.0 segons de duraci.

Gain

Ajust de volum.

Velocity

La fora amb la que toques la nota.

Generador d'contorns ADSR

Un generador d'contorns per Atac/Decay/Sustain/Release. Una vegada disparada una nota, l'Hydrogen l'ataca incrementant el volum des de 0 fins a la "velocitat" de la nota. Una vegada assolida la velocitat maxima, Decau redunt el volum fins que arriva al nivell de sustain. Una vegada la nota s released, l'Hydrogen reduix el volum des del nivell de sustain fins a 0.

Attack

La quantitat de temps per anar de 0 a velocitat mxima.

Decay

La quantitat de temps per passar de velocitat mxima a volum de sustain.

Sustain

El nivell (com d'alt) que aguanta el volum de la nota entre el sustain i el release. s un tant per cent de la velocitat. No depn del temps.

Release

La quantitat de remps per passar del volum de sustain a 0

Les tpiques mostres que utilitza Hydrogen son: el s d'un tambor de la bateria, el s d'un plat, el s d'una esquella. Quan poses una nota en el patr (o toques una nota utilitzant MIDI), Hydrogen reprodueix qualsevol s que hi hagi carregat. Per tant, per ajuntar un kit de bateria necessites recopilar grabacions curtes del bombo, cada tambor, cada plat, el charles obert i tancat, la caixa (oberta o tancada), tocs al canto de la caixa, etc.

De totes maneres, no hi ha regles en quant a qu pot ser una mostra. No es extrany utilitzar Hydrogen per disparar sons que no son de bateria: clips d'ucio de gent xerrant, un tros d'una can, efectes de s, clips d'udio de pelicul.les, gent famosa parlant... Siques creatiu!

8.2. Creant un nou Kit de Bateria

To start a brand new drum kit, select InstrumentsClear All . This will give you a bank of 32 blank instruments. To delete instruments, right-click on on each instrument and select Delete Instrument. To add more instruments, select InstrumentsAdd instrument .

Selecciona un instrument per comenar a editar-lo. Aix es fa clicant amb el bot esquerre al nom de l'instrument a la llista d'instruments (a l'esquerra). T'adonars que el nom de l'instrument a l'Editor d'Instruments s igual al que has clicat.

After you have your drum kit working the way you want, select InstrumentsSave library . It will ask you for the name of the kit to save. If you wish to overwrite an existing kit, you will need to type in the same name as the kit that you want to replace.

Els Kits de Bateria es guarden automticament al directodi de dades (p.e. $HOME/data/drumkits).

To export a drumkit (for sharing with others), it must first be loaded into your Sound Library. Then, select InstrumentsExport library from the menu. Select the drum kit that you wish to export, and give it a file name to save it to.

8.3. Creant Instruments i Capes

Pots carregar vries mostres i configurar diferents parmetres de sintetitzador per a cada instrument d'un kit de bateria. Aquesta secci et guiar en com crear un nou instrument i carregar les mostres.

To begin creating an instrument, select InstrumentsAdd instrument. This will give you a blank instrument to start from.

Ara necessites dues mostres. Qualsevol fitxer .WAV o .FLAC servir. Hydrogen en proporviona vries al directori data/drumkits.

A l'editor d'instruments, clica a Capes. Pots posar vries mostres com a capes per a l'instrument. Quina s tocada depn de la velocitat de la nota entrant. Clica Carregar Capa i apunta al Navegador de Fitxers d'udio per a carregar la teva mostra. Fixa't que el Navegador de Fitxers d'udio et permetr pre-escoltar la mostra abans de carregar-la. Tamb et permet carregar ms d'una mostra a cada moment. Per de moment noms en carregarem una.

Una vegada carregada la mostra, veurs que ara hi ha un 1 a dalt, i que el rectangle s'ha tornat blau cel. Per carregar una segona mostra, clica la posici just a sota, llavors clica Carregar Capa per posar-hi una nova mostra.

Desprs de portar en ambdues mostres, segurament t'adonars que noms la primera mostra es toca quan dispares l'instrument. Aix s per que has de configurar els rangs de velocitat en les capes. Mou el ratol per les bandes dels rectangles blau cel i veurs que tens un cursor per a arrossegar d'esquerra a dreta. Ara arrossega la mostra cap a l'esquerra o la dreta (com una cortina). Veurs la segona capa aparixer.

La configuraci de velocitat per a una capa de velocitat 0 s a l'esquerra, i velocitat mxima a la dreta. Configura la capa 1 per sonar per les notes fluixes, i la capa 2 per les notes fortes (p.e. capa 1 a l'esquerra i la capa 2 a la dreta.)

Ara, a l'rea de patrons, configura un patr simple que tocar aquest instrument. Ajusta els parmetres de velocitat a cada nota per conseguir que les diferents mostres sonin. Ara configura el patr per repetir-se i fixa't com les mostres es van disparant. (Per apendre com editar un patr, mira Secci5)

Per cada capa, pots configurar el Guany i el T. El t tamb t un bot d'ajustament F.

Ajusta el Guany per controlar el volum de reproducci de la mostra. s necessari ja que s extremament dificil conseguir un conjunt de mostres que sonin exactament al mateix volum. Ajustant-ho aqui, les mostres que s'han enregistrat massa fluixes es poden amplificar per a que sonin igual que les mostres ms altes (que segurament s'han hagut d'atenuar).

Avs

s molt fcil posar el Guany massa alt, provocant que la mostra es saturi. Recorda provar el guany a velocitat mxima. Si satures la senyal aqui, ser pitjor quan Hydrogen ho processi.

El t de la mostra pot ser modificat amb els controls de t. El controlador de T ajusta el t en migs tons misicals. (Per tant, -12 s una octava). El t a la dreta ajusta el t 50 Centssimes. (Mig t sn 100 centssimes)

Nota

El t s'ajusta tocant la mostra ms rpidament o ms lentament. s l'anomenat Efecte Doppler. Per tant, si tens una mostra d'un segon i tires cap a -12 (1 octava), la teva mostra noms durar mig segon.

8.4. Parmetres d'Instruments

A l'editor d'instruments, clica al bot General. Aqui pots ajustar varis partmetres per a tot l'instrument (no per a cada capa per separat). Els parmetres que aqui pots ajustar son:

  • Parmetres d'contorn: Atac, Decay, Sustain, Release. (See Generador de Contorns)

  • Guany: El volum general de l'instrument.

  • Enmudir Grup: Treu el volum del grup del que aquest instrument s membre (veure Enmudir Grup).

  • Parmetres de filtre: Bypass, Cutoff, Ressonncia.

  • T Aleatori

s important que entenguies els Secci8.1 per tal de continuar.

8.4.1. Parmetres d'Envolupant

Quan l'instrument s disparat, el seu volum passa per un contorn ADSR. Els seus parmetres sn els segents:

  • Attack — the amount of time that the volume of the sample goes from 0 to the full velocity of the note. If the value is 0, the sample will play immediately at full velocity. If the value is 1.0, the sample volume will use the maximum time available for the attack parameter. [1] -

  • Decay — the amount of time for the volume of the sample to go from full velocity down to the sustain volume. If the value is 0, the sample will immediately skip from the attack volume to the sustain volume. If the value is 1.0, the sample volume will use the maximum time available for the decay parameter.[1]

  • Sustain — the volume to play the note after the decay phase is over, and until the note is released. If set to 0, the note will be silent. If set to 1.0, the note will play at full velocity.

  • Release — the time to fade out the note from the sustain volume back down to 0 (silent). If set to 0, the note will fade out in the minimum amount of time (about 5 ms). If set to 1, it will fade out for the maximum time available.[1]

Si la mostra s ms curta que els temps especificats, la mostra acabar, sigui quina sigui la fase de l'ADSR en que es trobi. Si la nota est en sustain, no dibuixa la nota mentre l'ests aguantant. Noms aguanta el parmetre guany (volum) durant aquest temps.

8.4.2. Guany i Enmudir Grup

El guany configura el volum general de la mostra. Aquest guany s aplicat desprs del guany aplicat a nivell de capa, i abans del guany seleccionat per al mesclador. Si el Guany s 0, l'instrument no se sentir. Si el guany s 1.0, el volum de les mostres no ser ajustat (p.e. 0 dB). Si el guany s major, les mostres sern amplificades.

Avs

s molt fcil posar el Guany massa alt, provocant que la mostra es saturi. Recorda provar el guany a velocitat mxima. Si satures la senyal aqui, ser pitjor quan Hydrogen ho processi.

Hydrogen proporciona ms grups per a enmudir dels que sabrs qu fer-hi (cap a 256). Un grup per enmudir s una agrupaci d'instruments que sn mutualment exclusius — noms un instrument pot estar-se tocant en un determinat moment. Si un s'est tocant i un altre instrument d'aquest grup s disparat, ser inmediatament silenciat (mut) i comenar a tocar-se l'altre instrument. s til, sobretot per a instruments com ara el charles en els que el s obert i el s tancat sn instruments diferents.

Si el grup d'enmudiment est Desactivat, l'instrument no s una part de cap grup d'enmudiment. Si el grup d'enmudiment est activat a qualsevol nombre, aleshores aquest s el grup al que l'instrument est assignat. Per posar altres instruments en el mateix sac, selecciona que el seu grup d'enmudiment tingui el mateix nombre. (Per exemple, per agrupar tots els charles, pots posar-los el seu grup d'enmudiment a 1. Per tenir la caixa dins d'un altre grup, posa el seu grup a 2.)

8.4.3. Filtre i T Aleatori

El filtre s un filtre passa-baixos ressonant. Si no vols fer-lo servir, clica BYPass per a que es posi el bot vermell. Si no est vermell, el filtre est actiu. El parmetre cutoff ajusta la freqncia de tall pel filtre. El parmetre de ressonncia ajusta com ressonar la freqncia de tall. Si la ressonncia est a 0, el filtre s un simple passa-baixos.

Nota

La freqncia de tall del filtre varia amb la freqncia de mostreig de la teva tarja de s. El rang del bot (de 0 a 1.0) est optimitzat per a una freqncia de mostreig de 48.000 kHz.

The random pitch parameter allows you to randomly vary the pitch of the sample every time it is triggered. The value is set between 0 and 1.0. The pitch change is fairly small: 2 half-steps value. Using this sparingly can help your sequences to sound more like a real drummer.

8.5. Consells a l'Editar Instruments

Amb tots els parmetres que hi ha per configurar, pot ser dificil trobar quelcom que soni b. Aqu tens uns consells per configurar un instrument:

Baixa el guany. Cada cop que tens un selector de guany (p.e. un amplificador), d'aix se'n diu una etapa de guany. Amb cada etapa de guany s fcil saturar la senyal — el que significa que la senyal es distorsiona per retall. Ams, si tens dues mostres que, per elles mateixes, claven els teus indicadors — et pots imaginar que passar quan les combinis? Efectivament, saturars el guany de la senyal.

Si les coses sonen malament i distorsionades, comena baixant el guany a la capa... especialment si s major a 1.0. Llavors passa a baixar el guany de l'instrument, Llavors qualsevol guany en els efectes LADSPA. Llavors a l'atenuador del mesclador. Llavors a l'atenuador del volum de sortida principal.

Prova les mostres a velocitat mxima. La teva mostra ser tocada ms fort si la velocitat s ms alta. Per tant, si ho configures tot per a que soni b a velocitat mxima 0.7, qu passar quan tinguis una velocitat mxima d'1.0? (Pista: retall...)

Intenta utilitzar mostres de com a mxim -6 dB Visualment, aix vol dir que les mostres arribarn com a mxim a mitja escala. D'una altra manera, canvia el guany de la capa aproximadament a .5.

Treu qualsevol compensaci de DC de la mostra. En un edotor de mostres, normalment hi ha una linea cap al mig de l'ona de la mostra. Aquesta s la lnea de zero. El comenament de la teva mostra hauria de ser en aquest lnea. El final de la teva mostra tamb hauria d'estar en aquesta lnea. De totes manesre, si la teva senyal est una mica pe sota o per sobre de la linea, sentirs un clic al comenament i al final de qualsevol mostra tocada. Si el teu editor de mostres no t cap eina per a arreglar un problema de compensaci de DC, pots eliminar el soroll posant un lleugera atenuaci a l'inici i final de la mostra.

L'ADSR no ha de ser ms llarg que la teva mostra. Si tens una mostra curta, no importa quant posis a l'atac i decay — la mostra acabar igual.

Les coses canvien amb la freqncia de mostreig. Si tens un setup ben posat amb tots els teus parmetres ben configurats... les coses cambiarn si canvies la freqncia de mostreig de la tarja de s. Alguns dels parmetre interns de l'Hydrogen estan fets i basats en quantes mostres tens, i no quants segons passen. Les coses que poden canviar son: qualsevol cosa basada en el temps (com ara atac i release) i qualsevol cosa basada en la freqncia (com ara la freqncia de tall).

9. Plugins LADSPA

Hydrogen tamb afecta als sons fent servir qualsevol plugin LADSPA. Has de tenir instalades les fonts de LADSPA (disponibles a http://www.ladspa.org) i mentre aix et donar una idea genrica de com funciona, hauries de provar el tema instalant algun plugin, s tan fcil com scons && scons install. Aqui hi ha alguns llocs d'on descarregar plugins:

Matar Plugins

A LADSPA plugin is compiled, executable code. It is capable of hanging, crashing, freezing, screeching, overflowing buffers, and even phoning home. If you start having issues with Hydrogen, disable your plugins and see if things improve. Some plugins are not designed for real-time use, and some are just plain better than others.

Un cop hagis instalat uns quants plugins, obre una can'a la que t'agradaria afegir-li un efecte i selecciona un instrument que estigui en algun par. Clica a en el mesclador, selecciona una de les quatre linies d'efectes i clicaal bot Editar ( ), a Seleccionar l'efecte: aix obrir una nova finestra (Figura2.7) que permet escollir un efecte entre els instalats, estan ordenats alfabticament i categoritzats. Una vegada fet, ajusta el nivell del mesclador i dona-li a tocar. Cada selector de la part de l'efecte controla el nivell pel seu efecte. Si vols habilitar/deshabilitar rpidament, clica a Bypass ( ).

Figura 2.7. Selecciona un Efecte

Selecciona un Efecte



[1] Els parmetres d'atac, decay i release es configuren tots a partir del nombre de mostres d'udio. Aix significa que el temps canvia segons la freqncia de mostreig de la teva tarja de s. El mxim de temps s 100.000 mostres d'ucio (tpicament, 2,27 segons a 44.1 kHz).

Captol 3. Una nova can

1. Mode "Can" i mode "Patr"

Aix s una passada rpida per Hydrogen. Mira't el tutorial per a ms detalls.

Hydrogen has 2 main modes: "Pattern" mode and "Song" mode (refer to Secci3 for the buttons to activate). When "Pattern" mode is activated the current pattern is continuously repeated. This mode is very well suited to tweak your pattern untill it's just right, since the pattern you are working on is constantly repeated. This way you can immediately hear the changes you have made. In "Song" mode the whole song is played. This is useful when putting together the patterns, to create the structure of the song.

2. Un nou patr

We'll start from an empty song with an empty pattern, as created by default: "pattern" mode should be selected now. It is also possible to change name of the pattern. Now let's click on the Play button and while the pattern is playing let's add notes in the grid of the Song Editor (Figura3.1) simply left_mouse_clicking on it: adjust grid resolution and BPM speed if needed. Remember some constraints of the grid: if you are working with a resolution of 16 you can't go back to 8 and remove a 16th note; same thing happens if you are working with a resolution of 8 and you try to insert a note in the middle of two bars (looking for a 16 bars precision): they will be placed on the previous or on the following 8th bar (unless you choose off from the Grid Resolution LCD, in this case you're free to place notes wherever you prefer). Be sure to select the correct pattern in the Song Editor before adding notes in the Pattern Editor!

Figura 3.1. L'Editor de Patrons

L'Editor de Patrons

3. Una nova seqncia

Una vegada creats els patrons (Figura3.2), es poden copiar/enganxar/esborrar arrossegant-les amb el ratol (ha d'estar seleccionat el mode de selecci en l'Editor de Canons i tenir apretat el bot dret del ratol per a seleccionar la zona que vols moure o copiar).

Figura 3.2. Afegir Notes a un Patr

Afegir Notes a un Patr

4. Ajustar al mesclador

Per descomptat sempre es pot utililtzar la finestra del mesclador, tant mentre estem creant els patrons com quan s'estan reprodunt.

The Mixer frame (Figura3.3) is made of 32 independent tracks, each of these is binded to an instrument, plus a "Master Output" line to adjust general output volume and a "FX" button to set effects. Every line features 3 buttons ( ), pan adjust ( ), current maximum peak, volume fader and name of the track. Clicking on will play the selected instrument, cutting the others. The "Mute" button , simply mute that instrument. The maximum peak indicates the maximum volume reached from the instrument; the peak must be in a range of 0.0 and 1.0 (in Figura3.3 you can see a few volumes too loud), otherwise it will get distorted producing a weird sound (especially with OSS audio driver), in this case it's better to set volume down; keep an eye on each vu-meter.

Figura 3.3. El Mesclador

El Mesclador

Captol 4. Shortcut lists

  • [CTRL + N] = New Project

  • [CTRL + O] = Obrir fitxer

  • [CTRL + D] = Open Demo

  • [CTRL + S] = Desar fitxer

  • [CTRL + SHIFT + S] = Save File as

  • [CTRL + P] = Export Pattern as

  • [CTRL + M] = Export MIDI file

  • [CTRL + E] = Export Song

  • [CTRL + Q] = Quit Hydrogen

  • [ALT + B] = Show Director window

  • [ALT + M] = Show Mixer window

  • [ALT + I] = Show Instrument rack

  • [ALT + P] = Show Preferences window

  • [CTRL + ?] = Show manual

  • [Backspace] = Reinicia can o patr des de l'inici

  • [spacebar] = Play / Pause

  • [,] (comma key) = Tap tempo (beatcounter)

Glossari

Aquest s un glossari dels termes generals ms utilitzats en Hydrogen, sintetitzadors, bateries o samplers. Les definicions en aquest text estn simplificades, per les definicions d'aqui sn mes generals i tenen ms explicacions. Per exemple, el text del manual et pot donar la idea que ADSR s l'unic tipus de generador d'contorns, i que noms pot controlar el volum. Aix s simple i convenient per als nous usuaris, per no s ben ben correcte.

ADSR

Un tipus de generador d'contorns que et permet controlar l'Arac, Decay, Sustain, i Release. Generalment, els parmetres sn propircionals a la velocitat.

A Hydrogen, el generador d'contorns ADSR noms control el volum (atenuaci).

Llegeix ms sobre el tema a l'article de la Wikipedia ADSR Envelope

Veure tamb Generador de Contorns, Attack, Decay, Sustain, Release.

Attack

Aquesta s la primera fase d'un contorn ADSR, i s la quantitat de temps per actirav el parmetre des de 0 a velocitat mxima un cop disparada la nota.

Veure tamb ADSR.

Atenuaci

En filtres i mescladors, la quantitat en que s reduda una senyal (volum).

Veure tamb Roll-off.

Filtre passa-bandes

A filter that preserves a certain band of frequencies, and attenuates (silences) all others. This is often done by combining a high-pass and a low-pass filter.

Veure tamb Filtre, Filtre Passa Alts, Filtre Passa Baixos.

Retall

Un fenmen que li passa a una senyal quan aquesta s massa gran per al receptor. El pic de la senyal (que normalment es una corva suau) s tallat al volum mxim (tall). Aix distorsiona el s i acostuma a ser indesitjable.

Un exemple de retall s quan toques msica ms alt del que el teu altaveu pot suportar. Parts de la msica sonen distorsionats.

Freqncia de tall

Als filtres passa-alts i passa-baixos, s la freqncia que divideix les freqncies que passen i les que son atenuades (silenciades). En un filtre ressonant passa alts, o en un filtre passa-baixos ressonant, la freqncia de tall s tamb la zona de freqncia que s amplificada.

Per exemple, si tens un filtre passa-baixos i configures la freqncia de tall alta (p.e. 20kHz)... el filtre no afectar al s. Totes les freqncies audibles passarn sense modificaci. Si baixes la freqncia de tall cap a 40 Hz (la corda gruixuda d'un baix), sona com alg tapant un altaveu. Les freqncies ms altes atenuades estn per sobre 30 Hz.

Veure tamb Filtre, Filtre Passa Alts, Filtre Passa Baixos, Filtre de ressonncia.

Decay

Un cop assolida la velocitat mxima de l'atac, s la quantitat de temps per baixar de nivell de mxima velocitat a nivell de sustain.

Veure tamb ADSR.

Generador de Contorns

Una manera de controlar (canviar) el parmetre durant el temps com a resposta a disparar, i aguantar una nota.

Se t'han muntat els ulls? Tornem-ho a provar:

Imagina't que ests tocant una nota amb un teclat i tens l'altra m a un bot (volum, freq. de tall del filtre, etc.). Mentre toques la nota, mous el bot (a vegades amunt, a vegades avall... o avall, llavors amunt). Fas el mateix en cada nota. Aix s el que un generador de contorns. Mira tamb ADSR

Atenuador

Un control per a ajustar la atenuaci (volum) en un mesclador. Els atenuadors sempre tenen reductor d'"audio", el que vol dir que la quantitat en l'atenuaci canvia en una escala exponencial.

Filtre

Un dispositiu que canvia el s atenuant certes freqncies. Un bot de t s un exemple d'un filtre passa baixos.

Veure tamb Filtre passa-bandes, Filtre Passa Alts, Filtre Passa Baixos, Filtre de ressonncia.

Gain

En un amplificador, ajusta quant (o quan poc) una senyal s amplificada (volum). Un guany ms alt dna una senyal ms alta.

Filtre Passa Alts

Un filtre que atenua (silencia) les freqncies baixes, i deixa passar les freqncies altes.

Veure tamb Filtre, Freqncia de tall.

Instrument

A Hydrogen un instrument s un generador de s (com un bombo o un tambor).

Capa

En un instrument pots carregar vries mostres (cada una anomenada capa), i tenir una mostra diferent depenent de la velocitat de la nota. Noms una mostra es tocar a la vegada.

Suposem que tens una mostra d'un tambor tocat fluix. Si simplement toques la mostra ms fort —no sonar igual que si el tambor s'ha tocat ben fort. Si vols que aix sigui igual al teu instrument, pots carregar una mostra per notes fluixes i una mostra diferent per a tocar fort.

Veure tamb Instrument.

Filtre Passa Baixos

A filter that attenuates (silences) high frequencies, but allows low frequencies to pass through.

Veure tamb Filtre, Freqncia de tall.

Enmudir

Per fer un soroll. Una configuraci en un instrument que no deixa que hi hagi sortida d'udio.

Enmudir Grup

Un grup d'instruments (mostres) que s'han d'enmudir (deixar de reprodur) inmediatament un cop un altre instrument del mateix grup s disparat.

Aix normalment es fa servir en el charles, on hi ha un instrument diferent (mostra) per quan est obert o tancat. Amb un charles real el s de l'obert deixar de sonar quan es tanca. De totes maneres, si fas servir dues mostres — el s obert continuar sonant fins i tot desprs que hagis disparat el s tancat. Posant els dos intruments al mateix grup d'enmudiment (grup #1, per exemple)... disparar una nota de tancat aturar inmediatament el s de l'obert (i vicevrsa)

Octava

Un rang de freqncies en el que la freqncia ms alta s exactament el doble de la freqncia ms baixa.

Per exemple, el rang de 20 Hz a 40 Hz s una octava. Igual que de 120 Hz a 240 Hz, i 575 Hza a 1150 Hz. Mentre les diferncies de freqncies sn molt diferents (10 Hz, 120 Hz i 575 Hz, respectivament), per a l'oida humana sonen a la mateixa distncia.

Release

Un cop la nota s'ha alliberat, s la quantitat de temps per passar del nivell de sustain a zero.

Veure tamb ADSR.

Ressonncia

Quan ens referim a un filtre de ressonncia, aquest parmetre determina quant s'amplificar (guany) a les freqncies a la zona de tall.

Veure tamb Filtre de ressonncia.

Filtre de ressonncia

Un filtre que amplifica un rang de freqncies molt petit. Tpicament ser part d'un filtre passa alts o passa baixos, en el que les freqncies amplificades estn entrades a la freqncia de tall.

Veure tamb Filtre, Freqncia de tall, Ressonncia.

Roll-off

s la quantitat de freqncies que sn atenuades (suprimides) quan la freqncia canvia (tipicament mesurat en dB per octava).

For example, in a low-pass filter the frequencies below the cutoff frequency are not attenuated (they pass-through with the same volume). Same with the cutoff frequency. As you go above the cutoff frequency, the frequencies that are near the cutoff frequency are not attenuated very much at all. However, the frequencies that are much higher than the cutoff are attenuated (suppressed) a lot. This is usually approximated by a straight line (on a log scale) and measured in in dB of attenuation per octave of frequency.

Veure tamb Atenuaci, Filtre.

Sample

Una grabaci curta d'un s, normalment entre .1 i 3.0 segons de duraci.

Sustain

El nivell en que es mant la nota desprs de passat el temps de decay. Aquest nivell es mant fins que es deixa anar.

Veure tamb ADSR.

Velocity

La fora amb la que toques la nota.

Els dispositius MIDI sn requerits per a enviar aquesta informaci al llarg de la nota. Els sintetitzadors utilitzen informaci per a ajustar varis parmetres de la mostra (tpicament el volum). A Hydrogen, noms s'utilitza per ajustar el volum de la mostra reproduda.

diff -Nru hydrogen-0.9.6.1/data/doc/manual.docbook hydrogen-0.9.7/data/doc/manual.docbook --- hydrogen-0.9.6.1/data/doc/manual.docbook 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/data/doc/manual.docbook 2016-11-05 08:22:50.000000000 +0000 @@ -26,14 +26,12 @@ - 22/may/2005 + 06/september/2016 Hydrogen is a software synthesizer which can be used alone, emulating a drum machine based on patterns, or via an external MIDI - keyboard/sequencer software. Hydrogen compiles on Linux/x86 and Mac OS X, - although the latter is still experimental, so ask in the developers - mailing list for further details. + keyboard/sequencer software. Hydrogen compiles on Linux, Mac OS X and Windows. @@ -51,7 +49,7 @@ You can download Hydrogen from - http://www.hydrogen-music.org. + http://www.hydrogen-music.org. On the 'Downloads' page you can find several binaries (installers) for Linux, Mac and Windows. (note that some versions may not be available for Windows and Mac) @@ -63,14 +61,14 @@ A certain release can be fetched with: - $ git checkout tags/0.9.5 + $ git checkout tags/0.9.6 Compiling Hydrogen depends on the following libraries: - qt (>= 4.0) at http://www.trolltech.com + qt (>= 4.3) at http://www.qt.io libsndfile at http://www.mega-nerd.com/libsndfile/ @@ -89,6 +87,10 @@ (only if you wish to use PortAudio as audio driver) + PulseAudio at http://www.pulseaudio.org + (only if you wish to use PulseAudio as audio driver) + + Flac at http://flac.sf.net (only if you wish to use flac samples) @@ -112,7 +114,7 @@ $ apt-get install libqt4-dev g++ libasound2-dev \ libjack-dev liblrdf0-dev libflac++-dev libtar-dev libsndfile1-dev \ - liblash-dev libportaudio-dev libportmidi-dev + liblash-dev libportaudio-dev libportmidi-dev libpulse-dev @@ -122,50 +124,8 @@
Build - Depending on the branch you are compiling you will need to use Scons or Cmake. Check the INSTALL.txt and the README.txt files for more info (located in the top level dir once you downloaded the sources). + Depending on the branch you are compiling you will need to use cmake. Check the INSTALL.txt and the README.txt files for more info (located in the top level dir once you downloaded the sources). -
- Using scons (pre-0.9.6) - - Decompress the tarball or go to the directory where the git repository - was cloned: - - - $ cd hydrogen-* - $ scons - $ su -c "scons install" - - - Before compiling, check for additional options with: - - - $ scons --help - - - If you want to use features which are not enabled by default (for - instance PortAudio), you can enable them with: - - - $ scons portaudio=1 - - - Namely, if you get some error while running Hydrogen and you want - to report it remember to configure hydrogen with: - - - $ scons debug=1 - - - To clean up compiled code: - - - $ scons -c - -
- - -
- Using cmake (0.9.6 and up) Compiling with cmake can be done easily by using the build.sh script. Go to the directory where the git repository was cloned and run the build.sh script without any arguments to display the help : @@ -195,24 +155,7 @@ $ ./build.sh m - - - - - - -
- +
@@ -257,7 +200,7 @@ From the "Audio System" tab () it is possible to modify the - audio driver being used (OSS, Jack, ALSA, PortAudio) with its buffer and + audio driver being used (OSS, Jack, ALSA, PortAudio, PulseAudio, CoreAudio) with its buffer and sampling rate (unless you are using JACK, in this case the audio driver configuration should happen before starting the JACK server). @@ -319,7 +262,14 @@ CoreAudio: a driver for Mac OS X (experimental) - + + + + PulseAudio: a driver for the cross platform + PulseAudio sound server. + + +
@@ -928,8 +878,8 @@ Enable Select Mode. This mode allows you to select a part of the song and delete/move/copy it. - Once you have selected a part of your song you can delete it by pressing the Delete button. You can Once you have selected a part of your song you can delete + it by pressing the Delete button. You can move it by simply dragging your selection to another location, and you can also copy you selection by Ctrl-dragging it to a new location. @@ -1745,9 +1695,7 @@ will enable/disable the VU meters. - The VU meter fall off speed can be configured in the preferences window (see - ) - + The VU meter fall off speed can be configured in the preferences window (see ) diff -Nru hydrogen-0.9.6.1/data/doc/manual_en.html hydrogen-0.9.7/data/doc/manual_en.html --- hydrogen-0.9.6.1/data/doc/manual_en.html 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/data/doc/manual_en.html 2016-11-05 08:22:50.000000000 +0000 @@ -1,13 +1,13 @@ -Hydrogen Manual

Hydrogen Manual

Antonio Piraino

Alessandro Cominu

Thijs Van Severen

Sebastian Moors

Abstract

Hydrogen is a software synthesizer which can be used alone, +Hydrogen Manual

Hydrogen Manual

Antonio Piraino

Alessandro Cominu

Thijs Van Severen

Sebastian Moors

Abstract

Hydrogen is a software synthesizer which can be used alone, emulating a drum machine based on patterns, or via an external MIDI keyboard/sequencer software. Hydrogen compiles on Linux/x86 and Mac OS X, although the latter is still experimental, so ask in the developers - mailing list for further details.



Chapter1.Introduction

1.Download

You can download Hydrogen from http://www.hydrogen-music.org. On the 'Downloads' page you can find several binaries (installers) for Linux, Mac and Windows. (note that some versions may not be available for Windows and Mac)

- If you want to compile Hydrogen yourself (see the section called “Build”), you can download the latest source files directly from our + If you want to compile Hydrogen yourself (see Section2), you can download the latest source files directly from our git repository with:

$ git clone git://github.com/hydrogen-music/hydrogen.git

@@ -15,7 +15,7 @@ A certain release can be fetched with:

$ git checkout tags/0.9.5

-

Compiling Hydrogen depends on the following libraries:

  • qt (>= 4.0) at http://www.trolltech.com

  • libsndfile at http://www.mega-nerd.com/libsndfile/

  • ALSA (>= 1.x) at http://www.alsa-project.org +

    Compiling Hydrogen depends on the following libraries:

    Build

    Depending on the branch you are compiling you will need to use Scons or Cmake. Check the INSTALL.txt and the README.txt files for more info (located in the top level dir once you downloaded the sources).

    Using scons (pre-0.9.6)

    Decompress the tarball or go to the directory where the git repository +

    2.Build

    Depending on the branch you are compiling you will need to use Scons or Cmake. Check the INSTALL.txt and the README.txt files for more info (located in the top level dir once you downloaded the sources).

    2.1.Using scons (pre-0.9.6)

    Decompress the tarball or go to the directory where the git repository was cloned:

               $ cd hydrogen-*
               $ scons
    @@ -43,7 +43,7 @@
               $ scons debug=1
             

    To clean up compiled code:

               $ scons -c
    -        

    Using cmake (0.9.6 and up)

    Compiling with cmake can be done easily by using the build.sh script. Go to the directory where the git repository +

    2.2.Using cmake (0.9.6 and up)

    Compiling with cmake can be done easily by using the build.sh script. Go to the directory where the git repository was cloned and run the build.sh script without any arguments to display the help :

                $ ./build.sh
             

    The help is now displayed (and is self-explanatory) : @@ -61,18 +61,18 @@

    To build Hydrogen run the build script with the 'm' option :

                $ ./build.sh m
    -        

    Preferences

    First of all you should make sure that the audio engine is +

    3.Preferences

    First of all you should make sure that the audio engine is configured properly. The preferences dialog can be accessed via the tools - menu (tools -> preferences).

    The General tab

    On the "General" tab (Figure1.1, “The General Tab”) you can + menu (tools -> preferences).

    3.1.The General tab

    On the "General" tab (Figure1.1) you can choose to automatically reopen the last used song and/or playlist. This can save you the trouble of having to reopen the song you are working on every time you open Hydrogen. Auto loading the playlist can come in handy when you are using Hydrogen live.

    If you want to use Lash for session management you should enable it here so Hydrogen allows interaction with Lash. If jou are using Jack Session for session management you have to option to let Hydrogen automatically save the song file in the Jack Session Directory.

    The Beat Counter drift compensation and start offset allow you to compensate - for system latency when you are using the Beat Counter function (see the section called “Tap Tempo and BeatCounter”)

    The Max number of bars in a song can be set here (currently limited to 800) - and if you want to use rubberband for sample time-streching (see the section called “Sample Editor rubberband”) - you need to enter the path where rubberband is installed on you system here.

    Figure1.1.The General Tab

    The General Tab

    The Audio System tab

    From the "Audio System" tab (Figure1.2, “The Audio System Tab”) it is possible to modify the - audio driver being used (OSS, Jack, ALSA, PortAudio) with its buffer and + for system latency when you are using the Beat Counter function (see Section4.1)

    The Max number of bars in a song can be set here (currently limited to 800) + and if you want to use rubberband for sample time-streching (see Section9.5.2) + you need to enter the path where rubberband is installed on you system here.

    Figure1.1.The General Tab

    The General Tab

    3.2.The Audio System tab

    From the "Audio System" tab (Figure1.2) it is possible to modify the + audio driver being used (OSS, Jack, ALSA, PortAudio, PulseAudio, CoreAudio) with its buffer and sampling rate (unless you are using JACK, in this case the audio driver configuration should happen before starting the JACK server).

    We can set some features of Hydrogen like "Create per-instrument outputs" this will create 1 output per instrument that you can connect to any other Jack enabled application. @@ -81,9 +81,10 @@ default ports: uncheck this if you want to connect the JACK output to other ports without having to disconnect them first.

    Also keep an eye on the value of "Polyphony": depending on your CPU you may want to change the max simultaneous notes in order to - prevent hydrogen from overrunning the audio driver.

    Figure1.2.The Audio System Tab

    The Audio System Tab

    + prevent hydrogen from overrunning the audio driver.

    The "Interpolate resampling" parameter allows you to select your preferred + interpolation methode.

    Figure1.2.The Audio System Tab

    The Audio System Tab

    The following drivers are available: -

    • jackd: The Jack driver is a +

      • jackd: The Jack driver is a professional audio server which permits very low lag and exchanges with other audio software. We strongly recommend using this driver to have the best out of Hydrogen. JACK @@ -95,10 +96,11 @@ closed i.e. unusable by any other software. Use it as last resort.

      • PortAudio: an open-source multi platform audio driver

      • CoreAudio: a driver for Mac - OS X (experimental)

    The Midi System tab

    The "Midi System" tab (Figure1.3, “The MIDI System Tab”) + OS X (experimental)

  • PulseAudio: a driver for the cross platform + PulseAudio sound server.

3.3.The Midi System tab

The "Midi System" tab (Figure1.3) contains all MIDI settings. Here you can choose the MIDI driver (ALSA, PortMidi, CoreMidi or JackMidi) input, and channel(s) that Hydrogen should respond to. -

Note

If you want to use Jack Session management you should select the +

Note

If you want to use Jack Session management you should select the JackMidi driver. Jack Session management can only (re)store Jack midi connections.

You can also define midi bindings: link a midi note/message to an action. To do this simply press the red 'REC' button left of the event-action binding line. @@ -107,17 +109,17 @@ this action. The popup will close and the Event Param value will now show the midi note value of the key you pressed. Once this is done you can select an Action from the action drop-down list. Note that some actions (like SELECT_NEXT_PATTERN) - also require an Action Param that references the pattern you want to select with this midi action.

See the section called “Midi” for more info on Midi actions.

Figure1.3.The MIDI System Tab

The MIDI System Tab

The Appearance tab

The "Appearance" tab (Figure1.4, “The Appearance Tab”) let's you modify Hydrogen look + also require an Action Param that references the pattern you want to select with this midi action.

See Section10 for more info on Midi actions.

Figure1.3.The MIDI System Tab

The MIDI System Tab

3.4.The Appearance tab

The "Appearance" tab (Figure1.4) let's you modify Hydrogen look and feel (font settings and interface style). On this tab you can also change the VU meters fall-off speed and switch between Single pane and Tabbed interface - mode (see the section called “The main User Interface : an overview”) -

Figure1.4.The Appearance Tab

The Appearance Tab

The Audio Engine tab (debug only)

The "Audio Engine" tab (Figure1.5, “The Audio Engine tab”) + mode (see Section2) +

Figure1.4.The Appearance Tab

The Appearance Tab

3.5.The Audio Engine tab (debug only)

The "Audio Engine" tab (Figure1.5) is a window that shows various stats about Hydrogen and the audio driver. In case JACK is used, buffer and sampling rate should be set before starting Hydrogen (JACK automatically starts when an application tries to connect).

Note that the Audio Engine tab is only available if Hydrogen was complied with - debug support.

Figure1.5.The Audio Engine tab

The Audio Engine tab

Chapter2.Using Hydrogen

1.Used Filetypes

Before working with Hydrogen, please familiarize with these + filetypes:

  • *.h2pattern: XML file describing a single pattern. Patterns are group of beats and are managed in the pattern editor.

  • *.h2song: XML file describing the whole song (or sequence). Songs are group of patterns with their @@ -125,14 +127,14 @@ describing a playlist. A Playlist is a (ordered) group of songs.

  • *.h2drumkit: a compressed and archived folder containing all sound samples composing a drumkit and a description XML file. Drumkits are basically group of sound - samples.

The main User Interface : an overview

The Main UI comes in 2 flavors : the (classic) Single Pane mode (ideal for + samples.

2.The main User Interface : an overview

The Main UI comes in 2 flavors : the (classic) Single Pane mode (ideal for large- and medium size screens), and the Tabbed mode (optimized for netbook screen sizes).

Below you can see the main UI split up in 5 parts : the Main Menu, Main Toolbar, Song Editor, Pattern Editor and the Instrument and Sound Library Editor. - These sections will be explained in detail further down in this manual.

Figure2.1.The Main UI in Single Pane mode

The Main UI in Single Pane mode

Figure2.2.The Main UI in Tabbed mode

The Main UI in Tabbed mode

Main menu

Projects: this menu offers file - related functions.

  • New - Create a new song

  • Show Info - Set general properties of the + These sections will be explained in detail further down in this manual.

    Figure2.1.The Main UI in Single Pane mode

    The Main UI in Single Pane mode

    Figure2.2.The Main UI in Tabbed mode

    The Main UI in Tabbed mode

3.Main menu

Projects: this menu offers file + related functions.

  • New - Create a new song

  • Show Info - Set general properties of the song such as name, author, license and generic notes

  • Open - Open a song

  • Open Demo - Open a demo song (demo songs are stored in $INSTALLPATH/share/hydrogen/data/demo_songs)

  • Open recent - Open a menu showing last used @@ -143,9 +145,9 @@ pattern. It will be stored in $HOME/.hydrogen/data/patterns/drumkit_name

  • Export MIDI file - Export current song in MIDI format

  • Export song - Export current song in WAV - format (see the section called “Exporting your song”)

  • Quit - Quit Hydrogen

Undo: Undo/Redo functions.

  • Undo - Lets you undo your last action

  • Redo - Lets you redo the last undone action

  • Command History - Gives you an overview of your previous + format (see Section5.4)

  • Quit - Quit Hydrogen

Undo: Undo/Redo functions.

  • Undo - Lets you undo your last action

  • Redo - Lets you redo the last undone action

  • Command History - Gives you an overview of your previous actions

Instruments: this menu offers - instruments and drumkit (sound libraries) functions.

  • Add instrument - Add a new instrument to + instruments and drumkit (sound libraries) functions.

    • Add instrument - Add a new instrument to your current drumkit

    • Clear all - Delete all instruments from the current drumkit

    • Save library - Saves all instruments settings (and their sound samples) in @@ -155,38 +157,38 @@ from the local filesystem or download it from a remote location through an XML feed. The XML file that should be provided is NOT RSS compliant (see Hydrogen website for an example). To load another drumkit in your - current working session of Hydrogen, read the section called “Sound Library (Drumkit/Pattern/Song Manager)”.

    Tools: opens the mixer, the director, the + current working session of Hydrogen, read Section8.

Tools: opens the mixer, the director, the playlist editor, the instrument rack and the general preferences - window.

  • Playlist editor - A tool to manage + window.

    • Playlist editor - A tool to manage playlists.

    • Director - Open the director window.

    • Mixer - Open the mixer window.

    • Instrument rack - Open the instrument rack panel.

    • Preferences - Open the main preferences - window. Read the section called “Preferences” on how to configure + window. Read Section3 on how to configure Hydrogen.

    Debug: tools mainly for debugging and monitoring Hydrogen (only available when compiled with debug - support !).

    • Show audio engine info - Open a monitor - with various stats

    • debug action - Insert debug + support !).

      • Show audio engine info - Open a monitor + with various stats

      • debug action - Insert debug commands.

      • Print Objects - Print on stdout current - objects map.

      Info

      • User manual - Open a window with this + objects map.

      Info

      • User manual - Open a window with this manual :)

      • About - The usual window with license - information, acknowledgements, etc.

    The main toolbar

    Before analyzing the two main frames of Hydrogen, let's take a quick - look at the main toolbar and its components:

    • Pilot the song using the start, stop, pause, etc. buttons

    • Choose between "pattern" or "song" mode: in "pattern" mode only + information, acknowledgements, etc.

    4.The main toolbar

    Before analyzing the two main frames of Hydrogen, let's take a quick + look at the main toolbar and its components:

    • Pilot the song using the start, stop, pause, etc. buttons

    • Choose between "pattern" or "song" mode: in "pattern" mode only the currently selected pattern will play, while in "song" mode all patterns inserted will be played.

    • An advanced tap tempo function: choose note length and how many notes to wait before recalculating BPM, then hit the comma key repeatedly until the 'R' letter appears and then the BPM will be - updated. (see the section called “Tap Tempo and BeatCounter”)

    • Manually set BPM

    • Manage JACK transport

    • Open the mixer and the instrument rack panels

    Figure2.3.The Main Toolbar

    The Main Toolbar

    • Main controls to start [Hotkey = + updated. (see Section4.1)

    • Manually set BPM

    • Manage JACK transport

    • Open the mixer and the instrument rack panels

    Figure2.3.The Main Toolbar

    The Main Toolbar

    • Main controls to start [Hotkey = Spacebar], stop, record, fast forward, rewind, loop a song or a pattern.

    • Set Pattern/Song Mode. When Song mode is selected Hydrogen will play the complete song. This is the sequence of patterns you have created in the Song - Editor (see the section called “Song Editor”). When Pattern mode is selected + Editor (see Section5). When Pattern mode is selected Hydrogen will play the pattern that is currently selected, and thus displayed - in the Pattern Editor (see the section called “Pattern Editor”).

    • Set measure type and Beat Counter (see the section called “Tap Tempo and BeatCounter”).

    • Set speed of playing (range: 30-400 bpm) [Hotkey = mouse wheel] and button to + in the Pattern Editor (see Section6).

    • Set measure type and Beat Counter (see Section4.1).

    • Set speed of playing (range: 30-400 bpm) [Hotkey = mouse wheel] and button to enable/disable metronome

    • Shows CPU load and MIDI events. The CPU bargraph gives you an indication of the CPU load. The MIDI led lights up every time Hydrogen receives a midi message.

    • Click J. TRANS to enable Jack transport. If the J. MASTER button is pressed Hydrogen will work as 'master', else it will act as 'slave' to another 'master' program (e.g. Ardour). Note that this applet is only available if Jack Audio Driver is selected, NOT when the Audio driver is set to 'Auto'.

    • The last section gives you quick access to the Mixer window and the Instrument Rack. The LCD screen displays what Hydrogen is up to. -

    Tap Tempo and BeatCounter

    It is possible to change the tempo at any time using the tap-tempo and +

4.1.Tap Tempo and BeatCounter

It is possible to change the tempo at any time using the tap-tempo and BeatCounter features of Hydrogen. You can do this while the song is playing or while the song is stopped. To change the tempo, hit the , (comma) key in the tempo you want. @@ -236,8 +238,8 @@ Hydrogen will be reflected in those programs (if they support it).

Some of the settings to adjust the BeatCounter's latency compensation, are located on the General tab of the Preferences Dialog - (see the section called “The General tab” - ). Here you will finde two spinboxes:

  • Beat counter drift + (see Section3.1 + ). Here you will finde two spinboxes:

    • Beat counter drift compensation in 1/10ms — adjust to compensate for latency between the keyboard and the program.

    • Beat counter start @@ -247,7 +249,7 @@ In order to find useful values for these, you will need to take some time to play with it. Also, you may want different values depending on the speed of your hardware, audio devices, drivers, etc. Using the - BeatCounter effectively requires practice.

Song Editor

The "Song Editor" (Figure2.4, “The Song Editor”) gives an + BeatCounter effectively requires practice.

5.Song Editor

The "Song Editor" (Figure2.4) gives an overview of the whole timeline of the song (e.g. intro, verse, bridge, chorus and so on); each blue colored square on this panel represents a complete bar as shown in the underlying "Pattern Editor" panel. The song editor gives @@ -256,9 +258,9 @@

Figure2.4.The Song Editor

The Song Editor


-

Main controls

+

5.1.Main controls

-

  • Completely delete all patterns +

    • Completely delete all patterns (asks for confirmation!).

    • Create a new pattern (and asks for a name). @@ -272,8 +274,8 @@ will turn blue), clicking it again will remove that pattern from the song.

    • set Hydrogen to "Single pattern mode" - or to "Stacked pattern mode".

      For more info on this see the SELECT_NEXT_PATTERN midi action in the section called “Midi”. -

Tempo markers and song Tags

This section describes how you can define tempo changes and + or to "Stacked pattern mode".

For more info on this see the SELECT_NEXT_PATTERN midi action in Section10. +

5.2.Tempo markers and song Tags

This section describes how you can define tempo changes and how you can add tags to your song.

The majority of songs consist of several parts (intro, verse, chorus ...) and often these parts will have a different tempo. Hydrogen provides an easy way to let you change the tempo of a song at any given moment in the song. This is @@ -320,8 +322,8 @@ the next upcoming tag. This way you have a nice overview of what is going on, and what is about to happen in the song -

Patterns options

Right-clicking the name of a pattern will show you a menu - where you can change a number of things :

Figure2.5.The Pattern Options menu

The Pattern Options menu

  • Edit : will open the selected pattern in the Pattern Editor. +

5.3.Patterns options

Right-clicking the name of a pattern will show you a menu + where you can change a number of things :

Figure2.5.The Pattern Options menu

The Pattern Options menu

  • Edit : will open the selected pattern in the Pattern Editor.

  • Copy : will copy the selected pattern to a new pattern in your song.

    Note that patterns with the same name are not allowed.

  • Delete : will completely remove the selected pattern from the song.

  • Fill/Clear : will open a window that allows you to fill/clear a @@ -350,14 +352,14 @@ patterns into this new one. However, the advantage that virtual patterns provide is that if one of the original three patterns changes, the virtual pattern automatically inherits the change. A virtual pattern can also invoke other virtual patterns. -

Exporting your song

Once your song is finished you can export it to an audio file. +

5.4.Exporting your song

Once your song is finished you can export it to an audio file. This audio file can then be played on your favorite media player or imported in an other audio application.

To do this, go to Project - "Export song" and the following window will pop up:

Figure2.6.Export a song

Export a song


To export a song you need to do 3 things: -

  • Enter a name and location for the export file in the 'Export filename' field +

    • Enter a name and location for the export file in the 'Export filename' field

    • Select one of the available templates (e.g. CD, DAT ...) according to your needs: each template has a specific bitrate, resolution, and audio format (WAV, AIFF, FLAC or OGG). You can tweak the selected template using the samplerate/sampledepth dropdown boxes @@ -370,20 +372,20 @@

    Once all these settings have been configured all you need to do is click the 'Export' button and Hydrogen will generate the requested files. -

    Note

    - If you have tempo changes in your song (see the section called “Tempo markers and song Tags”) +

    Note

    + If you have tempo changes in your song (see Section5.2) these tempo changes will not be exported. This is a know limitation of the current versions (including 0.9.6)

    As a workaround you can record the output of Hydrogen with an audio recording application (like Ardour, Qtractor ...) -

Pattern Editor

The "Pattern Editor" +

6.Pattern Editor

The "Pattern Editor" allows you to create or modify the selected pattern by adding/removing notes and tunning a number of per-note properties like velocity and pan. The Pattern Editor can be used in 2 modes : 'Drum' mode or 'Piano' mode. You can switch between these modes by clicking the Drum/Piano button (located on the top-right of the Pattern Editor) -

Note

  • +

    Note

    • If you are editing a pattern in Single Pattern Mode you will always hear the pattern you are editing when you press play.

    • If you are working in Stacked Pattern Mode you will hear the active pattern(s), not necessarily the pattern you are currently editing. @@ -392,7 +394,7 @@

      First let's take a look at the (classic) 'Drum' mode :

      Figure2.7.Pattern Editor in Drum mode

      Pattern Editor in Drum mode


      -

      Pattern Editor Controls

      The top part of the pattern editor contains a number of controls :

      Figure2.8.Pattern Editor Controls

      Pattern Editor Controls

      From left to right :

      • SIZE : lets you choose the size of the pattern (the number of bars)

      • +

        6.1.Pattern Editor Controls

        The top part of the pattern editor contains a number of controls :

        Figure2.8.Pattern Editor Controls

        Pattern Editor Controls

        From left to right :

        • SIZE : lets you choose the size of the pattern (the number of bars)

        • RES : this is the current grid resolution (4 through 64)

          Remember this constraint concerning the grid: if you are working @@ -412,12 +414,12 @@ the key you press on your keyboard. This feature is mainly used for non-drum instruments. An example : if you use a sample of a piano for one of your instruments, you will be able to 'play' that piano instrument using your keyboard just like you are playing a piano synth.

        • Note Length / Note off : these are 2 different - ways to define the duration of a note. See the section called “Pattern Editor Sequence area” for usage.

        • Drum/Piano : switch Pattern Editor - between Drum and Piano mode. (see below)

        Pattern Editor Drumkit

        The section on the left shows you what drumkit is currently selected (GMkit by default) and below that you can see + ways to define the duration of a note. See Section6.3 for usage.

      • Drum/Piano : switch Pattern Editor + between Drum and Piano mode. (see below)

      6.2.Pattern Editor Drumkit

      The section on the left shows you what drumkit is currently selected (GMkit by default) and below that you can see the instruments that are part of this kit.

      Each instrument has its own set of features that are accessible by - right-clicking the instrument. From the context menu that pops up you can select

      • Clear notes : to remove all notes for this instrument in this pattern.

      • Fill notes : this allows you to fill + right-clicking the instrument. From the context menu that pops up you can select

        • Clear notes : to remove all notes for this instrument in this pattern.

        • Fill notes : this allows you to fill up the pattern with notes for the selected instrument. Depending on the choice you make (fill all, fill 1/2, fill 1/4 ...) notes will be placed at all, 1/2, 1/4, etc of the note positions that are allowed by the grid setting. So be careful not to mix up the 'musical' 1/2-note and the 'fill 1/2' note.

        • Randomize velocity @@ -440,7 +442,7 @@ Keep in mind that it is the position of the instrument (within the loaded drumkit) that is linked to a MIDI-note/keyboard-key and not the name of the instrument.

          Here's a quick reference of the above bindings for your - convenience.

        Pattern Editor Sequence area

        This is where it all happens, this is where you can make music :-)

        In this area you can see your selected pattern and add notes for any instrument. + convenience.

        6.3.Pattern Editor Sequence area

        This is where it all happens, this is where you can make music :-)

        In this area you can see your selected pattern and add notes for any instrument. The simplest way to create a pattern is by adding notes using your mouse (and the 'Fill/Clear notes' function described above). Where you can add notes depends on the used pattern size and resolution.

        If you are using Hydrogen as a pure 'drum' you just want Hydrogen to 'hit' @@ -453,18 +455,18 @@ (Figure above, from left>right : a 'normal' note, a note in 'note length' mode, a note in 'note off' mode)

        So far we have only used the mouse to create a pattern, but you can also record your beats by clicking the Record button - (see the section called “Main menu”) and simply playing your pattern on your + (see Section3) and simply playing your pattern on your MIDI drum or your pc keyboard (see instrument mapping above). This is probably a more musical way of creating a pattern, but it's up to you to decide what works best for you. - (Also see Chapter3, A new song for a basic - walk-through of how the pattern editor works)

        Pattern Editor Note Properties

        Clicking on an instrument or adding/removing a note next to it + (Also see Chapter3 for a basic + walk-through of how the pattern editor works)

        6.4.Pattern Editor Note Properties

        Clicking on an instrument or adding/removing a note next to it will select this instrument. Once an instrument is selected the note properties for this instrument will be shown in the form of vertical lines in the bottom window. The lines represent the value for the selected property of each note of the selected instrument. You can select another note-property from the note property drop-down list (located bottom-left). There are 4 note properties available : -

        • Velocity : how hard the note is played (the volume of the note)

          +

          • Velocity : how hard the note is played (the volume of the note)

            Note that the color of the note-dot and the vertical bar will change according to the velocity value you have defined. A light shade of gray means a low velocity (low volume) and the higher you set the velocity the darker the color will be, turning red when you reach the point of clipping. @@ -480,10 +482,10 @@

            The striped black and white area represents a piano keyboard and in the gray area you can choose the octave. By placing a dot on the octave scale and a dot on the 'keyboard' you can choose any note.

          -

        Pattern Editor Piano mode

        Drum mode (see Figure2.7, “Pattern Editor in Drum mode”) focuses on using Hydrogen as a drum machine. +

        6.5.Pattern Editor Piano mode

        Drum mode (see Figure2.7) focuses on using Hydrogen as a drum machine. If you are using Hydrogen as an instrument there is a big chance that the Piano mode is for you. It gives you a complete 'piano keyboard' so you can easily put down your tunes.

        You can compare the Piano mode to the Note properties Notekey (described above), only here you have a - complete piano keyboard, so you dont have to select the octave first.

        Figure2.9.Pattern Editor in Piano mode

        Pattern Editor in Piano mode

        Mixer

        The Mixer window can be opened by pressing Alt+M, by clicking + complete piano keyboard, so you dont have to select the octave first.

        Figure2.9.Pattern Editor in Piano mode

        Pattern Editor in Piano mode

      7.Mixer

      The Mixer window can be opened by pressing Alt+M, by clicking Mixer in the Tools menu, or by clicking the Mixer button on the main toolbar.

      The Mixer consists of 3 sections (left>right) : the instrument channel strips, the FX plugin rack and the master fader section. The Hydrogen Mixer works very @@ -491,7 +493,7 @@ other things for every instrument.

      Figure2.10.The Mixer

      The Mixer


      -

      Instrument channel strips

      From top to bottom : the 2 top elements on the strip are a 'play' button / 'trig' led combination. +

      7.1.Instrument channel strips

      From top to bottom : the 2 top elements on the strip are a 'play' button / 'trig' led combination. ( ) @@ -519,12 +521,12 @@ Just below that you can find an LCD peak-value display, and finally the volume fader and VU meter for that instrument.

      IMPORTANT NOTE : keep in mind that the volume and pan settings that you find on the Mixer are global settings. The per-note velocity and pan settings in the Pattern editor - are settings that are relative to the settings in the Mixer window !

      FX rack and LADSPA plugins

      The FX rack has 4 bays where you can load a LADSPA effect plugin, but before + are settings that are relative to the settings in the Mixer window !

      7.2.FX rack and LADSPA plugins

      The FX rack has 4 bays where you can load a LADSPA effect plugin, but before you can load any plugins these must be installed (surprised ? ;-)

      There are dozens of plugins available for download from various sources : -

      • SWH-Plugins available at http://plugin.org.uk.

        (Note : if you want to compile these plugins +

        -

        Plugins Kill

        A badly designed LADSPA plugin is capable of +

        Plugins Kill

        A badly designed LADSPA plugin is capable of hanging, crashing, freezing, screeching, overflowing buffers, and even phoning home. If you start having issues with Hydrogen, disable your plugins and see if things improve. Some plugins are not designed for @@ -554,17 +556,17 @@ ) button in the FX rack). This can be handy for a quick A/B comparison.

        After you have selected the FX and tweaked it's parameters you can use the - FX return knob to increase/decrease how much of this FX will be returned to the master output.

        Master section

        + FX return knob to increase/decrease how much of this FX will be returned to the master output.

        7.3.Master section

        The Master section contains the Master volume fader with VU meters and three global Humanize settings for Velocity, Timing and Swing (in order to add a 'human feel' to the song): -

        • Velocity : adds a certain randomness to the note velocity. +

          • Velocity : adds a certain randomness to the note velocity. The higher you turn this knob, the more the velocity will be randomized.

          • Timing : adds a certain randomness to the note timing (lead/lag). The higher you turn this knob, the more the timing will be randomized.

          • Swing : this knob will add a certain amount of swing to the song.

          - Note that Hydrogen can also be switched to 'per instrument output' mode (see the section called “The Audio System tab”), + Note that Hydrogen can also be switched to 'per instrument output' mode (see Section3.2), and in this mode all channel strip outputs will be available in Jack (not just the Master output). This allows you to route the individual instruments directly into any other Jack enabled application (eg Ardour) and gives you a lot more flexibility.

          On the bottom-right of the Master section the 'FX' button @@ -574,17 +576,17 @@ will enable/disable the VU meters. -

          Note

          The VU meter fall off speed can be configured in the preferences window (see - the section called “The Appearance tab”) +

          Note

          The VU meter fall off speed can be configured in the preferences window (see + Section3.4)

          -

        Sound Library (Drumkit/Pattern/Song Manager)

        First of all a little history on the Sound library and Drumkits. Hydrogen began as a +

        8.Sound Library (Drumkit/Pattern/Song Manager)

        First of all a little history on the Sound library and Drumkits. Hydrogen began as a dedicated drum machine but has evolved into a versatile sound synthesizer/sequencer that is capable of generating and manipulating all sorts of sounds. Hence the original "Drumkit" terminology is slightly misleading. You can load any kind of sound into a "Drumkit" and manipulate that sound just like playing a regular synthesizer. This is also the main reason why the Piano mode was added to the pattern editor - (see the section called “Pattern Editor Piano mode”).

        In this manual (and in other documentation) "Drumkit" and "Soundlibrary" + (see Section6.5).

        In this manual (and in other documentation) "Drumkit" and "Soundlibrary" frequently mean the same thing, but not always. The diagram below shows the actual relation between the Soundlibrary and Drumkits:

        Figure2.12.Soundlibrary/Drumkit hierarchy

        Soundlibrary/Drumkit hierarchy


        @@ -597,7 +599,7 @@ kits, it allows you to reuse and mix the instruments and patterns from other kits and songs.

        Figure2.13.The Soundlibrary

        The Soundlibrary


        -

        System Drumkits

        This lists the drumkits that were installed by your system +

        8.1.System Drumkits

        This lists the drumkits that were installed by your system administrator. The location of these System Drumkits is determined by the compile-time prefix. On Unix-like operating systems, this is usually /usr/share/hydrogen/data/drumkits, or possibly /usr/local/share/hydrogen/data/drumkits. @@ -609,7 +611,7 @@ drumkit's name to show all the instruments. With your left mouse button, click and drag the instrument into your current kit. The instrument will be added to the drumkit that you currently have - loaded.

        (Adding) User Drumkits

        These are your own drum kits that you can manage yourself. They + loaded.

        8.2.(Adding) User Drumkits

        These are your own drum kits that you can manage yourself. They are usually stored in $HOME/.hydrogen/data/drumkits. When you are creating a new drumkit, you can save it here by selecting InstrumentsSave @@ -625,7 +627,7 @@ If you select one of the drumkits you will see info about this kit in the right pane of the Import window: name, description, author and also the license type. -

        Warning

        If you are using Hydrogen for commercial purposes, (creating songs and +

        Warning

        If you are using Hydrogen for commercial purposes, (creating songs and selling these on-line or in any other way) you need to pay special attention to the license type of the drumkit(s) you are using.

        @@ -645,10 +647,10 @@ Once the kit has been downloaded it will be available in the Sound Library under "User drumkits". -

        Songs in the Sound Library

        To save songs in the Sound Library, put them in your data +

        8.3.Songs in the Sound Library

        To save songs in the Sound Library, put them in your data directory underneath the songs folder (usually $HOME/.hydrogen/data/songs). - To remove them, remove the file from that folder.

        Patterns in the Sound Library

        Before you save a pattern to the sound library, be + To remove them, remove the file from that folder.

        8.4.Patterns in the Sound Library

        Before you save a pattern to the sound library, be sure to give it a title and a category. Right-click on the pattern, select "Properties" and enter the details. You can use one of the categories already @@ -658,14 +660,14 @@ clicking the title of the pattern in the song editor, and selecting "Save Pattern". It will now appear in the Sound Library underneath "Patterns" and the category that - you assigned to the pattern.

        Drumkits and Instrument Editing

        Concepts

        + you assigned to the pattern.

        9.Drumkits and Instrument Editing

        9.1.Concepts

        The synthesizer in Hydrogen is a sample-based synthesizer. A sample is a piece of pre-recorded audio (usually between 0.1 sec and 3 sec). To play a note, the sample is simply played back at the right time. There are a few concepts and terms that you should understand when you are putting together a drumkit. (See Glossary for more detailed explanations.) -

        Sampling Synthesizer Terms

        Sample

        A short recording of a sound, +

        Sampling Synthesizer Terms

        Sample

        A short recording of a sound, typically between 0.1 and 3.0 seconds long.

        Gain

        Volume adjustment.

        Velocity

        How hard you hit a note.

        ADSR Envelope Generator

        An @@ -696,14 +698,14 @@ uncommon to use Hydrogen to trigger non-drum sounds like: audio clips of people talking, a clip from a song, sound effects, audio clips from movies, and famous people speaking. Be creative! -

        Creating a New Drumkit

        In the next paragraphs we will show you how to create a complete drumkit. - Keeping in mind the 'Soundlibrary hierarchy' (see Figure2.12, “Soundlibrary/Drumkit hierarchy”) +

        9.2.Creating a New Drumkit

        In the next paragraphs we will show you how to create a complete drumkit. + Keeping in mind the 'Soundlibrary hierarchy' (see Figure2.12) we will use a top-down approach, so we will start at the Drumkit level and work our way down to the samples.

        Creating a new drumkit with Hydrogen is done with the Instrument Editor. You can load samples, set envelope parameters, set the gain, and other advanced features like mute groups, a low-pass resonance filter, and pitch randomization.

        TIP : Instead of creating your own drumkit, you can also use or download - existing drumkits using the the section called “Sound Library (Drumkit/Pattern/Song Manager)”.

        Lets make a brand new drum kit :

        • select + existing drumkits using the Section8.

          Lets make a brand new drum kit :

          • select Instruments"Clear All" . This will give you a bank of 32 blank instruments. To delete @@ -727,13 +729,13 @@ Instruments"Export library" from the menu. Select the drum kit that you wish to export, and give it - a file name to save it to.

        Instrument Parameters

        In the instrument editor, click on the + a file name to save it to.

      9.3.Instrument Parameters

      In the instrument editor, click on the General button. Here you can adjust several parameters that apply to the instrument (applies to all layers as well).

      Figure2.15.The Instrument editor General view

      The Instrument editor General view


      - The parameters are:

      • Envelope parameters: + The parameters are:

        • Envelope parameters: Attack, Decay, Sustain, Release. (See Envelope Generator)

        • Gain: @@ -742,21 +744,21 @@ member of (see Mute Group).

        • Filter Parameters: Bypass, Cutoff, Resonance.

        • Random - Pitch

        • Midi out Channel and Note

        • Auto Stop-Note

        It's important that you understand the section called “Concepts” in order to continue - on.

        Envelope Parameters

        When the instrument is triggered, its volume is run through an - ADSR Envelope. The parameters operate as follows:

        • Attack — the amount + Pitch

        • Midi out Channel and Note

        • Auto Stop-Note

        It's important that you understand Section9.1 in order to continue + on.

        9.3.1.Envelope Parameters

        When the instrument is triggered, its volume is run through an + ADSR Envelope. The parameters operate as follows:

        • Attack — the amount of time that the volume of the sample goes from 0 to the full velocity of the note. If the value is 0, the sample will play immediately at full velocity. If the value is 1.0, the sample volume will use the maximum time available for the attack parameter. - [1] + [1]

        • Decay — the amount of time for the volume of the sample to go from full velocity down to the sustain volume. If the value is 0, the sample will immediately skip from the attack volume to the sustain volume. If the value is 1.0, the sample volume will use the - maximum time available for the decay parameter.[1]

        • Sustain — the + maximum time available for the decay parameter.[1]

        • Sustain — the volume to play the note after the decay phase is over, and until the note is released. If set to 0, the note will be silent. If set to 1.0, the note will play at full @@ -764,16 +766,16 @@ time to fade out the note from the sustain volume back down to 0 (silent). If set to 0, the note will fade out in the minimum amount of time (about 5 ms). If set to 1, it - will fade out for the maximum time available.[1]

        If the sample is shorter than the times that you specify, the + will fade out for the maximum time available.[1]

      If the sample is shorter than the times that you specify, the sample will end, regardless of which phase of the ADSR it is in. If the note is sustained, it does not draw out the note while you are holding it. It only holds the gain (volume) - parameter during that time.

      Gain and Mute Group

      The gain sets the overall volume for the sample. This gain is + parameter during that time.

      9.3.2.Gain and Mute Group

      The gain sets the overall volume for the sample. This gain is applied after the gain that you set for the layer, and before the gain that is set for the mixer. If the Gain is 0, the instrument will be silent. If the gain is 1.0 the volume of the samples will not be adjusted (i.e. 0 dB). If the gain is set higher, the samples will be - amplified.

      Warning

      It is very easy to set the Gain too + amplified.

      Warning

      It is very easy to set the Gain too high, causing your sample to clip. Remember to test the gain with full-velocity notes. If you clip your signal here, it will only get worse as Hydrogen processes it.

      Hydrogen provides more mute groups than you know what to do with @@ -790,19 +792,19 @@ group parameter to the same number. (For example, to group all the high-hat instruments, you can set all their mute group parameters to 1. To have a snare drum mute group, set their mute group parameters - to 2.)

      Filter and Random Pitch

      The filter is a low-pass resonance filter. If you don't wish to + to 2.)

      9.3.3.Filter and Random Pitch

      The filter is a low-pass resonance filter. If you don't wish to use is, click the BYPass button so that it's red. If it's not red, then the filter is active. The cutoff parameter adjusts the cutoff frequency for the filter. The resonance parameter adjusts how much to resonate the cutoff frequency. If the resonance is set to 0, then the filter is just a simple low-pass - filter.

      Note

      The cutoff frequency of the filter varies with the sample rate + filter.

      Note

      The cutoff frequency of the filter varies with the sample rate of your audio card. The range of the knob (0 to 1.0) is optimized for a 48,000 kHz sample rate.

      The random pitch parameter allows you to randomly vary the pitch of the sample every time it is triggered. The value is set between 0 and 1.0. The pitch change is fairly small: 2 half-steps value. Using this sparingly can help your sequences to sound - more like a real drummer.

      Midi out settings

      Hydrogen is capable of generating midi messages that you can use + more like a real drummer.

      9.3.4.Midi out settings

      Hydrogen is capable of generating midi messages that you can use to trigger any external midi device or application. To do this you simply need to configure the Midi out channel and Note for every instrument. As you can see this is a very flexible approach that enables you to trigger samples or sounds @@ -811,7 +813,7 @@

      From now on every time a note is played for that instrument (in the Hydrogen sequencer) a midi message will be sent to your external app/device and trigger a sound. This way you can use Hydrogen as a pure sequencer for other apps, or combine the - internal Hydrogen sampler with multiple external apps/devices.

      Auto Stop-Note

      If this box is checked Hydrogen will immediately stop any playing sample that + internal Hydrogen sampler with multiple external apps/devices.

      9.3.5.Auto Stop-Note

      If this box is checked Hydrogen will immediately stop any playing sample that belongs to this instrument whenever the instrument is re-triggered.

      This option is particularly useful when you are using long samples like a crash or some existing audio that you have sampled (like a looped voice in a dance/electro song) For the crash you will need to use the Auto Stop-Note when @@ -820,7 +822,7 @@ instead of only one (since the sample of each individual hit will be played completely). For the voice sample this option is useful if you are trying to get that 'stuttering' effect. -

      Creating an Instrument and Layers

      For each instrument in a drum kit, you can load several samples +

      9.4.Creating an Instrument and Layers

      For each instrument in a drum kit, you can load several samples and set different synthesizer parameters. This section will step you through how to create a new instrument and load the samples.

      To begin creating an instrument, select InstrumentsAdd instrument. This will give you a blank @@ -849,26 +851,26 @@ instrument. Adjust the velocity settings on each note so that you can get the different samples to sound. Now set the pattern to loop and notice how your different samples are getting triggered. (To learn - about editing a pattern, see the section called “Pattern Editor”)

      For each layer, you can set the Gain and + about editing a pattern, see Section6)

      For each layer, you can set the Gain and the Pitch. The pitch also has a Fine adjustment.

      Use the Gain adjustment to control how loud the sample will play. This is necessary because it's extremely difficult to get a set of samples that all sound at about the same volume. By adjusting here, the samples that were recorded too quietly can be turned up to match your loud samples (that had to be turned - down).

      Warning

      It is very easy to set the Gain too high, + down).

      Warning

      It is very easy to set the Gain too high, causing your sample to clip. Remember to test the gain with full-velocity notes. If you clip your signal here, it will only get worse as Hydrogen processes it.

      The pitch of the sample can be modified with the pitch controls. The Pitch knob adjust the pitch in musical half-steps. (So, -12 is down 1 octave). The pitch on the right adjusts - the pitch 50 cents. (One half-step is 100 cents.)

      Note

      The pitch is adjusted by playing the sample back faster or + the pitch 50 cents. (One half-step is 100 cents.)

      Note

      The pitch is adjusted by playing the sample back faster or slower. This is called the Doppler Effect. So, if you have a 1-second sample that you turn down -12 (1 octave), your sample will only last for .5-seconds. If you do not want this to happen you should - use rubberband instead (see the section called “Sample Editor rubberband”)

      You can hear the sample in a layer by clicking the layer id (just + use rubberband instead (see Section9.5.2)

      You can hear the sample in a layer by clicking the layer id (just below the 'General' and 'Layers' buttons) and the 'Delete Layer' button - will delete the currently selected layer.

      Sample Editor

      So far we have created a multilayered Drumkit, set a number of + will delete the currently selected layer.

      9.5.Sample Editor

      So far we have created a multilayered Drumkit, set a number of instrument parameters, played with velocity settings and so on. Now it's time to go one step deeper and edit the samples using one of the newest Hydrogen features: the Sample Editor.

      The Sample Editor allows you to tweak and manipulate your samples. @@ -878,15 +880,15 @@ import the sample in Hydrogen, test it, go back to the audio editor, import again, test ... The sample editor allows you to do most of the sample manipulation within Hydrogen. This mean less switching between Hydrogen and your audio editor - and more time to make music !

      Note

      The changes you make to + and more time to make music !

      Note

      The changes you make to your samples in the Sample Editor are non-destructive and are saved per song. So the original sample will not be changed, and you can reuse the same sample in multiple songs with different Sample Editor - settings.

      Figure2.17.The Sample Editor

      The Sample Editor

      The Sample Editor consists of 3 sections (as indicated in the figure above):

      Sample Editor in/out points

      + settings.

      Figure2.17.The Sample Editor

      The Sample Editor

      The Sample Editor consists of 3 sections (as indicated in the figure above):

      9.5.1.Sample Editor in/out points

      In this section you can set the start, stop and loop points for the sample by dragging the the 3 markers: -

      • S-marker (green) : indicates the Start-point (in-point) of the sample.

      • E-marker (red) : indicates the End-point (out-point) of the sample.

      • L-marker (blue) : determines the loop-in point of your sample

      +

      • S-marker (green) : indicates the Start-point (in-point) of the sample.

      • E-marker (red) : indicates the End-point (out-point) of the sample.

      • L-marker (blue) : determines the loop-in point of your sample

      You can easily move one of the markers by grabbing them close to the letter that marks them. Whenever you grab one of the markers you will see a detail view of the position of that marker on the second (smaller) window on the right, making it easy to @@ -906,26 +908,26 @@ (forward, revers or ping-pong) and the number of times it is looped is determined by the Loop number.

      If you want to hear a preview of the tweaking you have done so far, you first need to press the 'Apply Changes' button (@ the bottom of section 3) and then the Play button to - hear the result.

      Sample Editor rubberband

      This section of the Sample Editor allows you to control the Rubberband settings. + hear the result.

      9.5.2.Sample Editor rubberband

      This section of the Sample Editor allows you to control the Rubberband settings. Rubberband is a tool that can change the tempo of a sample without changing the sample's pitch (and vice versa).

      If you are using Ubuntu you can install rubberband from the Software Center (rubberband-cli). For other linux distros check your package manager. For other platforms please check the rubberband site . After installing rubberband you should check if the path to the rubberband cli is - configured correctly (see the section called “The General tab”).

      If rubberband is installed correctly you will have access to the rubberband + configured correctly (see Section3.1).

      If rubberband is installed correctly you will have access to the rubberband settings, and an extra button named 'RUB' will be available in the Main Toolbar, right of the BPM LCD display:

      Back to the rubberband settings : -

      • Sample length to beat : when set to 'off', rubberband functionality is disabled. +

        • Sample length to beat : when set to 'off', rubberband functionality is disabled. Normally this parameter should be set to the length of the part of the sample between the Start and End marker, expressed in number of beats.

        • Pitch : this setting allows you to change the pitch of the sample, expressed in semitones,cent.

        • Crispness : this setting does not affect tempo or pitch, but changes the way the sample sounds.

        Note: If you want Hydrogen to recalculate the sample length on the fly (using rubberband) - you must enable the 'RUB' button (see figure above).

      Sample Editor volume/pan

      In the bottom section of the Sample Editor you can see the end result + you must enable the 'RUB' button (see figure above).

      9.5.3.Sample Editor volume/pan

      In the bottom section of the Sample Editor you can see the end result of the tweaks you have made by pressing the Apply Changes button. You can also change the the Volume and Panorama (Pan) of your sample here. This is done by creating 'envelopes' like the @@ -934,7 +936,7 @@ corner of section 3. The Volume envelope is blue, and the pan envelope is yellow. Left clicking in the bottom window will ad a node to an envelope and also allows you to drag an existing node. Right-clicking a node will delete it. - Don't forget to Apply Changes before you play your tweaked sample.

      Tips on Editing Instruments

      With all of the different parameters available to tweak, it can be + Don't forget to Apply Changes before you play your tweaked sample.

      9.6.Tips on Editing Instruments

      With all of the different parameters available to tweak, it can be difficult to set up something that sounds nice when you're done. Here are a few tips on setting up an instrument:

      Turn down the gain. Every gain knob (i.e. an amplifier), this is a gain stage. @@ -970,15 +972,15 @@ Hydrogen's internal settings and parameters are based on how many samples go by, not on how many seconds go by. The sorts of things that change are: anything time-base (like attack and release) and - anything frequency based (like the cutoff frequency).

      Midi

      In this section you can find more info about defining MIDI actions + anything frequency based (like the cutoff frequency).

      10.Midi

      In this section you can find more info about defining MIDI actions and how they can be useful for you. Before you can work with midi actions you should have your Midi devices, drivers and connections configured - correctly (see the section called “The Midi System tab”). + correctly (see Section3.3).

      Lets take a look at the available options :

      -

      Midi Events

      An Event is an incoming Midi message, coming from a MIDI controller or +

      10.1.Midi Events

      An Event is an incoming Midi message, coming from a MIDI controller or an external sequencer.

      If you look at the Events list you will see that there are 3 types of Events - available (as described in the Midi standard):

      • + available (as described in the Midi standard):

        • NOTE: input coming from a regular black/white key of a keyboard or a drumpad

        • CC: controller commands coming from faders or rotary controllers @@ -988,17 +990,17 @@

        The Param. (parameter) value to the right of the Event is the identifier of the note/button/controller that is linked to this Action. This parameter can be entered manually, or automatically by - using the Midi learn function (see the section called “The Midi System tab”). -

        Note

        You can also activate the Midi learn function by Shift-clicking most of the gui elements. + using the Midi learn function (see Section3.3). +

        Note

        You can also activate the Midi learn function by Shift-clicking most of the gui elements. A 'Waiting for Midi input...' popup informs you that Hydrogen is now waiting for you to press a key or turn/move a controller.

        If you Shift-click on a gui element that does not support Midi automation a popup will inform you. -

        Midi Actions

        Next is a list of the available Actions: an Action describes what Hydrogen should do - when a specific Midi Event is detected.

        Note

        ** Some of the Midi Actions require that the Action Parameter is configured. The +

        10.2.Midi Actions

        Next is a list of the available Actions: an Action describes what Hydrogen should do + when a specific Midi Event is detected.

        Note

        ** Some of the Midi Actions require that the Action Parameter is configured. The Parameter usually references a specific channel, instrument, FXsend... Keep in mind that the Parameter value is zero-based. So if you want to reference channel 1 you - have to enter '0' in the Parameter field (1 for channel 2, 2 for channel 3 ...)

        • + have to enter '0' in the Parameter field (1 for channel 2, 2 for channel 3 ...)



      [1] The attack, decay, and release parameters are all set by +



[1] The attack, decay, and release parameters are all set by the number of audio samples. This means that the time changes depending on the sample rate of your sound card. The max time for each of them is 100,000 audio samples - (typ. 2.27 sec at 44.1 kHz).

Chapter3.A new song

"Song" mode and "Pattern" mode

This section is a quick-and-dirty walkthrough to Hydrogen. Refer to the + (typ. 2.27 sec at 44.1 kHz).

Chapter3.A new song

1."Song" mode and "Pattern" mode

This section is a quick-and-dirty walkthrough to Hydrogen. Refer to the tutorial for a more detailed overview.

Hydrogen has 2 main modes: "Pattern" mode and "Song" mode (refer to - the section called “The main toolbar” for the buttons that activate each mode). When + Section4 for the buttons that activate each mode). When "Pattern" mode is activated the current pattern is continuously repeated. This mode is very well suited to tweak your pattern until it's just right, since the pattern you are working on is constantly repeated. This way you can immediately hear the changes you have made. In "Song" mode the whole song is played. - This is useful when putting together the patterns to create the structure of the song.

A new pattern

We'll start from the empty song with an empty pattern created when + This is useful when putting together the patterns to create the structure of the song.

2.A new pattern

We'll start from the empty song with an empty pattern created when Hydrogen starts up: "pattern" mode should be selected by default. Now let's click on the Playbutton, and while the pattern is playing let's add notes by left_mouse_clicking in the grid of the Song Editor - (Figure3.1, “The Pattern Editor”). Adjust the grid resolution and BPM + (Figure3.1). Adjust the grid resolution and BPM speed if needed. Remember some constraints of the grid: if you are working with a resolution of 16 you can't go back to 8 and remove a 16th note; same thing happens if you are working with a resolution of @@ -1081,10 +1083,10 @@ following 8th bar (unless you choose off from the Grid Resolution LCD in which case you're free to place notes wherever you prefer). Be sure to select the correct pattern in the Song Editor before adding notes - in the Pattern Editor!

Figure3.1.The Pattern Editor

The Pattern Editor

A new sequence

Once patterns are created (Figure3.2, “Inserting Notes in a Pattern”), we - can copy/paste/delete them using the Select Mode (see the section called “Main controls”). -

Figure3.2.Inserting Notes in a Pattern

Inserting Notes in a Pattern

Adjust from the mixer

Of course we can always use the mixer window, either when creating - or playing patterns.

The Mixer frame (Figure3.3, “The Mixer”) is made of 32 + in the Pattern Editor!

Figure3.1.The Pattern Editor

The Pattern Editor

3.A new sequence

Once patterns are created (Figure3.2), we + can copy/paste/delete them using the Select Mode (see Section5.1). +

Figure3.2.Inserting Notes in a Pattern

Inserting Notes in a Pattern

4.Adjust from the mixer

Of course we can always use the mixer window, either when creating + or playing patterns.

The Mixer frame (Figure3.3) is made of 32 independent tracks, each of these is bound to an instrument, plus a "Master Output" control and a "FX" button to show and hide the effects panel. @@ -1110,11 +1112,11 @@ , simply mute that instrument. The maximum peak indicates the maximum volume reached from the instrument. The peak must - be in a range of 0.0 and 1.0 (in Figure3.3, “The Mixer” you can + be in a range of 0.0 and 1.0 (in Figure3.3 you can see a few volumes too loud). Peaks outside that range will get distorted (especially with OSS audio driver). Keep an eye on each vu-meter and if distortion appears, turn the volume down for that instrument. -

Figure3.3.The Mixer

The Mixer

Chapter4.Shortcut lists

  • +

    Figure3.3.The Mixer

    The Mixer

Chapter4.Shortcut lists

  • [CTRL + N] = New Project

  • [CTRL + O] = Open File @@ -1160,13 +1162,13 @@

  • [F12] = Panic button (stops the song and mutes all playing sounds) -

Glossary

This is a glossary of general terms encountered when using Hydrogen, +

Glossary

This is a glossary of general terms encountered when using Hydrogen, synthesizers, drums, or samplers. The definitions here provide more detail and explanation than the simplified ones in the text. For example, the text of the manual would have you believe that an ADSR is the only kind of envelope generator and could only ever control the volume. While the simplified definitions help new users start using - Hydrogen quickly, they can lack the nuances presented here.

ADSR

A type of envelope generator that allows you to control the + Hydrogen quickly, they can lack the nuances presented here.

ADSR

A type of envelope generator that allows you to control the Attack, Decay, Sustain, and @@ -1176,16 +1178,16 @@ the velocity.

In Hydrogen, the ADSR envelope generator only controls the volume (attenuation).

Read more about this in the Wikipedia Article ADSR - Envelope

See Also Envelope Generator, Attack, Decay, Sustain, Release.

Attack

This is the first phase of an ADSR envelope, and is the amount + Envelope

See Also Envelope Generator, Attack, Decay, Sustain, Release.

Attack

This is the first phase of an ADSR envelope, and is the amount of time to turn the parameter up from - 0 to full velocity after triggering the note.

See Also ADSR.

Attenuation

In filters and mixers, this the amount that a signal is reduced - (volume).

See Also Roll-off.

Band-Pass Filter

A filter that preserves a certain band of frequencies, and + 0 to full velocity after triggering the note.

See Also ADSR.

Attenuation

In filters and mixers, this the amount that a signal is reduced + (volume).

See Also Roll-off.

Band-Pass Filter

A filter that preserves a certain band of frequencies, and attenuates (silences) all others. This is often done by combining a - high-pass and a low-pass filter.

See Also Filter, High-Pass Filter, Low-Pass Filter.

Clipping

A phenomenon that happens to a signal when the signal is too large + high-pass and a low-pass filter.

See Also Filter, High-Pass Filter, Low-Pass Filter.

Clipping

A phenomenon that happens to a signal when the signal is too large for whatever is receiving it. The peaks of the signal (which are normally smooth curves) get cut off straight at the max volume (clipped). This distorts the sound and is usually undesirable.

An example of clipping is when you play music louder than your - speaker can handle. Parts of the music sound harsh and fuzzy.

Cutoff Frequency

On high-pass and low-pass filters, this is the frequency that + speaker can handle. Parts of the music sound harsh and fuzzy.

Cutoff Frequency

On high-pass and low-pass filters, this is the frequency that divides between those that pass, and those that are attenuated (silenced). In a high-pass resonance filter, or a low-pass resonance filter, the cutoff is also the frequency zone that gets boosted.

For example, if you have a low-pass filter and you set the cutoff @@ -1193,25 +1195,25 @@ All the audible frequencies will pass through undisturbed. As you lower the cutoff frequency to something like 40 Hz (the low string on a bass guitar), it sounds like someone is putting a blanket over the speaker. - The higher frequencies are being attenuated above 30 Hz.

See Also Filter, High-Pass Filter, Low-Pass Filter, Resonance Filter.

Decay

After reaching full velocity from the attack, this is the amount + The higher frequencies are being attenuated above 30 Hz.

See Also Filter, High-Pass Filter, Low-Pass Filter, Resonance Filter.

Decay

After reaching full velocity from the attack, this is the amount of time to turn the parameter down from full - velocity to the sustain level.

See Also ADSR.

DC-offsety

DC offset, or DC coefficient is the mean value of the wavefor.m

DC offset is usually undesirable. For example, in audio processing, a + velocity to the sustain level.

See Also ADSR.

DC-offsety

DC offset, or DC coefficient is the mean value of the wavefor.m

DC offset is usually undesirable. For example, in audio processing, a sound that has DC offset will not be at its loudest possible volume when normalized (because the offset consumes headroom), and this problem can possibly extend to the mix as a whole, since a sound with DC offset and a sound without DC offset will have DC offset when mixed. It may also cause other artifacts - depending on what is being done with the signal.

Envelope Generator

A way to control (change) a parameter over time as a response to + depending on what is being done with the signal.

Envelope Generator

A way to control (change) a parameter over time as a response to triggering, holding, and releasing a note.

Did your eyes just glaze over? Let's try again:

Imagine that you're playing a note on the keyboard and you have your other hand on a knob (volume, filter cutoff, etc.). As you play the note, you twist the knob (often up, then down... or down, then up). You do the same thing on each note. That's what an envelope generator - does. See also ADSR

Fader

A slider control used to adjust the attenuation (volume) in a + does. See also ADSR

Fader

A slider control used to adjust the attenuation (volume) in a mixer. Faders always have an "audio" taper, which means that the - attenuation amount changes on an exponential scale.

Filter

A device that changes a sound by attenuating specific frequencies. - A tone knob is an example of a simple, low-pass filter.

See Also Band-Pass Filter, High-Pass Filter, Low-Pass Filter, Resonance Filter.

Gain

In an amplifier, this adjust how much (or how little) a signal is - amplified (volume). A higher gain value is a louder signal.

High-Pass Filter

A filter that attenuates (silences) low frequencies, but allows - high frequencies to pass through.

See Also Filter, Cutoff Frequency.

Instrument

In Hydrogen, an instrument is a single noise-maker (like a bass - drum kick, or a tom).

Layer

In an instrument you can load several different samples (each one + attenuation amount changes on an exponential scale.

Filter

A device that changes a sound by attenuating specific frequencies. + A tone knob is an example of a simple, low-pass filter.

See Also Band-Pass Filter, High-Pass Filter, Low-Pass Filter, Resonance Filter.

Gain

In an amplifier, this adjust how much (or how little) a signal is + amplified (volume). A higher gain value is a louder signal.

High-Pass Filter

A filter that attenuates (silences) low frequencies, but allows + high frequencies to pass through.

See Also Filter, Cutoff Frequency.

Instrument

In Hydrogen, an instrument is a single noise-maker (like a bass + drum kick, or a tom).

Layer

In an instrument you can load several different samples (each one called a layer), and have a different sample play depending on the velocity of the note. Only one sample at a time will play.

Suppose you have a sample of a floor tom being struck softly. If @@ -1219,9 +1221,9 @@ not sound the same as a real tom that has been struck very hard. If you wish to mimic this in your instrument, you can load one sample for soft playing, and a different sample for loud - playing.

See Also Instrument.

Low-Pass Filter

A filter that attenuates (silences) high frequencies, but allows - low frequencies to pass through.

See Also Filter, Cutoff Frequency.

Mute

To make no noise. A setting on an instrument that prevents any - audio output.

Mute Group

A group of instruments (samples) that should mute (stop playing) + playing.

See Also Instrument.

Low-Pass Filter

A filter that attenuates (silences) high frequencies, but allows + low frequencies to pass through.

See Also Filter, Cutoff Frequency.

Mute

To make no noise. A setting on an instrument that prevents any + audio output.

Mute Group

A group of instruments (samples) that should mute (stop playing) immediately after another instrument in the group is triggered.

This is typically used in hi-hats, where there's a different instrument (sample) for when the hi-hat is open or closed. With a real hi-hat, the sound of the open hi-hat will stop as soon as you close it. @@ -1229,18 +1231,18 @@ even after you have triggered the closed sound. By placing both instruments in the same mute group (group #1, for example)... triggering closed sound will immediately stop the open sound (and vice - versa).

Octave

A span of frequencies where the top-most frequency is exactly + versa).

Octave

A span of frequencies where the top-most frequency is exactly twice the frequency of the bottom frequency.

For example, the range 20 Hz to 40 Hz is an octave. So is 120 Hz to 240 Hz, and 575 Hz to 1150 Hz. While the frequency differences are very different (20 Hz, 120 Hz, and 575 Hz, respectively), to the human - ear they sound like the same distance.

Release

After the note is released, this is the amount of + ear they sound like the same distance.

Release

After the note is released, this is the amount of time to reduce the parameter from the sustain level - to 0.

See Also ADSR.

Resonance

When referring to a resonance filter, this is the parameter that + to 0.

See Also ADSR.

Resonance

When referring to a resonance filter, this is the parameter that determines how much of a boost (gain) to give the frequencies at the - cutoff.

See Also Resonance Filter.

Resonance Filter

A filter that gives a large boost to a very narrow range of + cutoff.

See Also Resonance Filter.

Resonance Filter

A filter that gives a large boost to a very narrow range of frequencies. Typically it will be part of a high-pass or a low-pass filter, where the boosted frequencies are centered on the cut-off - frequency.

See Also Filter, Cutoff Frequency, Resonance.

Roll-off

This is the amount that frequencies are attenuated (suppressed) as + frequency.

See Also Filter, Cutoff Frequency, Resonance.

Roll-off

This is the amount that frequencies are attenuated (suppressed) as the frequency changes (typically measured in dB/octave).

For example, in a low-pass filter the frequencies below the cutoff frequency are not attenuated (they pass-through with the same volume). Same with the cutoff frequency. As you go above the cutoff frequency, @@ -1248,10 +1250,10 @@ very much at all. However, the frequencies that are much higher than the cutoff are attenuated (suppressed) a lot. This is usually approximated by a straight line (on a log scale) and measured in in dB - of attenuation per octave of frequency.

See Also Attenuation, Filter.

Sample

A short recording of a sound, typically between .1 and 3.0 seconds - long.

Sustain

The level to hold the parameter after + of attenuation per octave of frequency.

See Also Attenuation, Filter.

Sample

A short recording of a sound, typically between .1 and 3.0 seconds + long.

Sustain

The level to hold the parameter after finishing the decay time. This level will be maintained until the not - is released.

See Also ADSR.

Velocity

How hard you hit a note.

MIDI devices are required to send this information along with the + is released.

See Also ADSR.

Velocity

How hard you hit a note.

MIDI devices are required to send this information along with the note. Synthesizers use this information to adjust several parameters on the sample (typically the volume). In Hydrogen, it is only used to adjust how loud the sample is played back.

diff -Nru hydrogen-0.9.6.1/data/doc/manual_es.html hydrogen-0.9.7/data/doc/manual_es.html --- hydrogen-0.9.6.1/data/doc/manual_es.html 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/data/doc/manual_es.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,20 +0,0 @@ -Manual de Hydrogen

Manual de Hydrogen

Antonio Piraino

Alessandro Cominu

Thijs van Severen

Sebastian Moors

Resumen

Hydrogen es un sintetizador de software que puede usarse solo, emulando una caja de ritmos basado en patrones, o a travs de un teclado MIDI/secuenciador de software. Hydrogen compila en Linux/x86 y Mac OS X, aunque este ltimo an es experimental, as que pregunta en la lista de correo de desarrolladores para ms detalles.


Captulo 1. Introduccin

1. Descarga

You can download Hydrogen from http://www.hydrogen-music.org. On the 'Downloads' page you can find several binaries (installers) for Linux, Mac and Windows. (note that some versions may not be available for Windows and Mac)

If you want to compile Hydrogen yourself (see Seccin2), you can download the latest source files directly from our subversion server with:

$ svn co http://svn.assembla.com/svn/hydrogen/trunk

A certain release can be fetched with:

$ svn co http://svn.assembla.com/svn/hydrogen/tags/0.9.5

-

La compilacin de Hydrogen depende de las siguientes libreras:

Por favor instlalos con el gestor de paquetes de tu distribucin. Si utilizas un sistema basado en debian, puedes instalar las libreras con:

$ apt-get install libqt4-dev g++ libasound2-dev \
-        libjack-dev liblrdf0-dev libflac++-dev libtar-dev libsndfile1-dev \
-        liblash-dev libportaudio-dev libportmidi-dev 
-      

2. Compilacin

Depending on the branch you are compiling you will need to use Scons or Cmake. Check the INSTALL.txt and the README.txt files for more info (located in the top level dir once you downloaded the sources).

2.1. Using scons

Descomprime el tarball o ve al directorio donde se haya descargado la copia desde subversion:

$ cd hydrogen-*
-          $ scons
-          $ su -c "scons install"
-        

Antes de compilar, consulta ms opciones con:

$ scons --help
-        

Si quieres usar opciones que no estn activadas por defecto (por ejemplo PortAudio), puedes activarlas con:

$ scons portaudio=1
-        

Si encuentras algn error al ejecutar Hydrogen y quieres comunicarlo, acurdate de configurar Hydrogen con:

$ scons debug=1
-        

Para limpiar el cdigo compilado:

$ scons -c
-        

3. Preferences

First of all you should make sure that the audio engine is configured properly. The preferences dialog can be accessed via the tools menu (tools -> preferences).

3.1. The General tab

On the "General" tab (Figura1.1) you can choose to automatically reopen the last used song and/or playlist. This can save you the trouble of having to reopen the song you are working on every time you open Hydrogen. Auto loading the playlist can come in handy when you are using Hydrogen live.

If you want to use Lash to manage your Jack connections you should enable it here so Hydrogen allows interaction with Lash.

The Beat Counter drift compensation and start offset allow you to compensate for system latency when you are using the Beat Counter function (see Seccin3.1)

The Max number of bars in a song can be set here (currently limited to 800) and if you want to use rubberband for sample time-streching you need to enter the path where rubberband is installed on you system here.

Figura 1.1. The General Tab

The General Tab

3.2. La pestaa de Sistema de Audio

From the "Audio System" tab (Figura1.2) it is possible to modify the audio driver being used (OSS, Jack, ALSA, PortAudio) with its buffer and sampling rate (unless you are using JACK, in this case the audio driver configuration should happen before starting the JACK server).

We can set some features of Hydrogen like "Create per-instrument outputs" this will create 1 output per instrument that you can connect to any other Jack enabled application. This can be useful if you want to add effects to a single instrument with jack-rack for example. "Connect to Default Output Pair" connects the output to the default ports: uncheck this if you want to connect the JACK output to other ports without having to disconnect them first.

Also keep an eye on the value of "Polyphony": depending on your CPU you may want to change the max simultaneous notes in order to prevent hydrogen from overrunning the audio driver.

Figura 1.2. La pestaa de Sistema de Audio

La pestaa de Sistema de Audio

Estn disponibles los siguientes drivers:

  • jackd: El driver Jack es un servidor de audio profesional que permite una latencia muy baja e intercambios con otros software de audio. Recomendamos encarecidamente el uso de este driver para sacar lo mejor de Hydrogen. El servidor JACK arrancar automticamente si no lo estaba ya.

  • ALSA: los drivers estndares de Linux ampliamente adoptados

  • OSS: The Oss audio driver uses /dev/dsp and it's based on the OSS interface which is supported by the vast majority of sound cards available for Linux; this said, the use of this audio driver blocks /dev/dsp until Hydrogen is closed i.e. unusable by any other software. Use it as last resort.

  • PortAudio: an open-source multi platform audio driver

  • CoreAudio: un driver para Mac OS X (experimental)

3.3. La pestaa de Sistema Midi

The "Midi System" tab (Figura1.3) contains all MIDI settings. Here you can choose the MIDI driver, input, and channel(s) that Hydrogen should respond to. You can also define midi bindings: link a midi note/message to an action. To do this simply press the red 'REC' button left of the 'binding' action line. A popup will inform you that Hydrogen is waiting for your input. Press/hit/turn the key/pad/knob on your midi keyboard (or controller) that you want to link to this action. The popup will close and the Event Param value will now show the midi note value of the key you pressed. Once this is done you can select an Action from the action drop-down list. Note that some actions (like SELECT_NEXT_PATTERN) also require an Action Param that references the pattern you want to select with this midi action.

Figura 1.3. La pestaa de Sistema Midi

La pestaa de Sistema Midi

3.4. La pestaa de Apariencia

The "Appearance" tab (Figura1.4) let's you modify Hydrogen look and feel (font settings and interface style). Also the VU meters fall-off speed of the Mixer Window can be changed here.

Figura 1.4. La pestaa de Apariencia

La pestaa de Apariencia

3.5. The Audio Engine tab (debug only)

The "Audio Engine" tab (Figura1.5) is a window that shows various stats about Hydrogen and the audio driver. In case JACK is used, buffer and sampling rate should be set before starting Hydrogen (JACK automatically starts when an application tries to connect).

Note that the Audio Engine tab is only available if Hydrogen was complied with debug support.

Figura 1.5. La pestaa de Motor de Audio

La pestaa de Motor de Audio

Captulo 2. Utilizar Hydrogen

1. Tipos de Archivo

Antes de trabajar con Hydrogen, por favor familiarzate con estos archivos:

  • *.h2pattern: Archivo XML que describe un slo patrn. Los patrones son conjuntos de golpes y se gestionan en el editor de patrones.

  • *.h2song: Archivo XML que describe la cancin entera (o secuencia). Las canciones son conjuntos de patrones con sus propiedades y se gestionan utilizando el editor de canciones

  • *.h2playlist: XML file describing a playlist. A Playlist is a (ordered) group of songs.

  • *.h2drumkit: Una carpeta comprimida y archivada que contiene todos los samples de sonidos que componen un "drumkit" (una batera) y un archivo XML de descripcin. Los drumkits son bsicamente un conjunto de samples.

2. Men principal

Proyectos: este men ofrece funciones relacionados con archivos.

  • Nuevo - Crear una cancin nueva

  • Mostrar Info - Configurar propiedades generales de la cancin como el nombre, autor, licencia y notas genricas

  • Abrir - Abrir una cancin

  • Abrir Demo - Abrir una cancin demo (las demos se guardan en $INSTALLPATH/share/hydrogen/data/demo_songs)

  • Abrir reciente - Abrir un men mostrando las ltimas canciones utilizadas

  • Guardar - Guardar cambios a la cancin actual

  • Guardar como - Guardar cancin actual especificando un nombre (ruta por defecto: $HOME/.hydrogen/data/songs)

  • Abrir patrn - Abrir un patrn guardado perteneciente al drumkit actual

  • Exportar patrn como - Guarda el patrn. Se guardar en $HOME/.hydrogen/data/patterns/nombre_drumkit

  • Exportar archivo MIDI - Exportar cancin actual en formato MIDI

  • Exportar cancin - Exportar cancin actual en formato WAV

  • Salir - Salir de Hydrogen

Instrumentos: este men ofrece funciones de instrumentos y drumkit (libreras de sonidos).

  • Aadir instrumento - Aade un nuevo instrumento a tu drumkit actual

  • Limpiar todo - Borra todos los instrumentos del drumkit actual

  • Guardar librera - Guarda todas las configuraciones de instrumentos (y sus samples) en $HOME/.hydrogen/data/nombre_librera

  • Exportar librera - Comprime todos los samples de instrumentos y configuraciones de un drumkit en $HOME/.hydrogen/data/nombre_librera

  • Importar librera - Importa otro drumkit del sistema local de archivos or descrgalo de una ubicacin remota a travs de un flujo XML. El archivo XML que debera suministrarse NO es compatible con RSS (ver Hydrogen website para un ejemplo). Para cargar otro drumkit en tu sesin actual de Hydrogen, lee Seccin7.

Tools: opens the mixer, the director, the playlist editor, the instrument rack and the general preferences window.

  • Editor de lista de reproduccin - Una herramienta para gestionar listas de reproduccin.

  • Director - Open the director window.

  • Mezclador - Abre la ventana del mezclador.

  • Rack de instrumentos - Abre el panel del rack de instrumentos.

  • Preferencias - Abre la ventana principal de preferencias. Lee Seccin3 para ver cmo configurar Hydrogen.

Debug: tools mainly for debugging and monitoring Hydrogen (only available when compiled with debug support !).

  • Mostrar info del motor de audio - Abre un monitor con varias estadsticas

  • accin de depuracin - Inserta comandos de depuracin.

  • Imprime objetos - Imprime el actual mapa de objetos en stdout.

Info

  • Manual del usuario - Abre una ventana con este manual :)

  • About - The usual window with license information, acknowledgements, etc.

3. Barra de herramientas principal

Antes de analizar los dos marcos principales de Hydrogen, vamos a echar un rpido vistazo a la barra principal y sus componentes:

  • PIlota la cancin usando inicio, parada, pausa, etc. botones

  • Escoge entre modo "patrn" o modo "cancin": en modo "patrn", slo se reproducir el patrn seleccionado, mientras que en modo "cancin", se reproducirn todos los patrones insertados.

  • Funcin avanzada para marcar el tempo (Tap Tempo): determina la longitud de nota y el nmero de notas a esperar antes de recalcular las PPM; luego pulsa la tecla de coma repetidamente hasta que aparece la letra 'R' y se actualizan las PPM. (ver Seccin3.1)

  • Fijar PPM manualmente

  • Gestionar transporte JACK

  • Abre el mezclador y los paneles del rack de instrumentos

Figura 2.1. Barra de Herramientas Principal

Barra de Herramientas Principal

  • Main controls to start [Hotkey = Spacebar], stop, record, fast forward, rewind, loop a song or a pattern.

  • Set Pattern/Song Mode. When Song mode is selected Hydrogen will play the complete song. This is the sequence of patterns you have created in the Song Editor (see Seccin4). When Pattern mode is selected Hydrogen will play the pattern that is currently selected, and thus displayed in the Pattern Editor (see Seccin5).

  • Set measure type and Beat Counter (see Seccin3.1).

  • Configuracin de la velocidad de reproduccin (rango: 30-400 ppm) [Tecla acceso rpido = rueda del ratn] y botn para activar/desactivar el metrnomo

  • Shows CPU load and MIDI events. The CPU bargraph gives you an indication of the CPU load. The MIDI led lights up every time Hydrogen receives a midi message.

  • Click J. TRANS to enable Jack transport. If the J. MASTER button is pressed Hydrogen will work as 'master', else it will act as 'slave' to another 'master' program (e.g. Ardour). This applet is only available if Jack Audio Driver is selected.

3.1. Tap Tempo y Contador de Pulsaciones (BeatCounter)

Es posible cambiar el tempo en cualquier momento utilizando las funciones de Tap Tempo y Contador de Pulsaciones de Hydrogen. Puedes cambiarlos durante la reproduccin o con la cancin parada. Para cambiar el tempo, pulsa la tecla , (coma) siguiendo un tempo para el nmero de pulsaciones en el comps. Cuando se realiza el nmero correcto de pulsaciones, el tempo cambiar al tempo medio que has pulsado. Si sigues pulsando, estas nuevas pulsaciones formarn parte de una media contnua. Si pulsas la tecla accidentalmente, o esperas demasiado entre pulsaciones, el contador de tempo empezar de nuevo.

El Tap Tempo es parte del Contador de Pulsaciones, que es esencialmente un Tap Tempo a lo bestia. Por defecto el Contador de Pulsaciones no est visible. Para ver el widget del Contador de Pulsaciones haz clic en el botn vertical (BC) entre el selector de modo Cancin/Patrn y el widget de PPM. O se puede mostrar pulsando la tecla de coma (,).

El tempo que teclees se considerar como golpes pares del tipo de comps. El tipo de comps se puede fijar como 1/8 (para compases de ocho negras), 1/4 (para compases de cuatro negras), 1/2 (para compases de dos negras), y 1/1 (para compases de una blanca). Para cambiar el tipo de comps usa la tecla de flecha izquierda. Para contar el nmero de pulsaciones contadas, usa la tecla de flecha derecha. Puedes fijar de 2 a 16 pulsaciones. (Por ej. si fijas las pulsaciones en 6, tendrs que pulsar la tecla 6 veces antes de que compute y fije el nuevo tempo). Cuando la pantalla muestra una R, significa que el Contador de Pulsaciones est preparado para comenzar de 0. Cada vez que pulsas la tecla de coma, mostrar el nmero de pulsaciones que has realizado (1, 2, 3...).

El botn de la parte inferior derecha controla la funcin de auto-arranque, y cambia entre S y P. Cuando muestra la P de (Play), la cancin fijar el nuevo tempo y automticamente empezar a reproducir despus de que pulses el nmero correcto de pulsaciones (si no est reproduciendo ya, claro). De este modo, si tienes el Contador de Pulsaciones fijado para 4/4, puedes pulsar 1-2-3-4, y comenzar a reproducir en el siguiente comps. Cuando muestra la S (de Set BPM), (fijar PPM) el auto-arranque est desactivado.

Por ejemplo: Supn que tienes una banda en directo, Hydrogen, y un sintetizador de software controlado por Seq24... y quieres que todos arranquen a la vez. Fija el tipo de comps en 1/4 y el nmero de golpes en 4. Activa el auto-arranque (el botn muestra una P). Cuenta 1-2-3-4 para la banda (dando a la tecla de coma) — y todos empiezan a la de 1.

Otro ejemplo: La misma situacin, pero la cancin no necesita de Hydrogen ni sintetizadores hasta ms tarde. Durante ese tiempo, un humano (por ej. el guitarrista) fijar el tempo. En el comps antes de que Hydrogen debe tocar, pulsa la tecla de coma 1-2-3-4 con el ritmo... y entras en el siguiente comps (con el tempo correcto).

Si utilizas Transporte JACK, el Contador de Pulsaciones sigue funcionando. Si otro programa es el Maestro del Transporte JACK, Hydrogen responder al cambio de tempo de esa aplicacin. Ntese que en esta situacin, Hydrogen funciona como esclavo, as que algunas funciones del Contador de Pulsaciones estarn desactivadas o no funcionarn correctamente. Si Hydrogen es el Maestro del Transporte JACK, los cambios de tempo de Hydrogen se vern reflejados en los dems programas (suponiendo que lo soportan).

Some of the settings to adjust the BeatCounter's latency compensation, are located on the General tab of the Preferences Dialog (see Seccin3.1 ). Here you will finde two spinboxes:

  • Compensacin de desajuste del Contador de Pulsaciones en 1/10ms — ajusta esto para compensar la latencia entre el teclado y el programa.

  • Compensacin para el inicio del Contador de Pulsaciones en ms — ajusta el tiempo entre el ltimo golpe tecleado en el Contador de Pulsaciones y el momento en que se inicia la cancin (si est activado el auto-arranque).

Ntese que estos valores pueden ser positivos (+) o negativos (-). Para encontrar valores tiles, tendrs que tomarte tu tiempo para hacer pruebas. Adems, puede que requieras diferentes valores dependiendo de la velocidad de tu hardware, dispositivo de audio, drivers, etc. La utilizacin del Contador de Pulsaciones require prctica.

4. Editor de Canciones

The "Song Editor" (Figura2.2) gives an overview of the whole timeline of the song (e.g. intro, verse, bridge, chorus and so on); each blue colored square on this panel is a complete bar as shown in the underlying "Pattern Editor" panel. Here we have complete freedom to add, remove or move patterns in any order we prefer. We can also copy and paste patterns: use left mouse button to highlight an area and drag it around. Dragging with CTRL key pressed copies the patterns.

El Editor de Canciones viene con 7 botones:

- -

  • Borrar completamente todos los patrones (pide confirmacin!).

  • Crear un patrn nuevo (y pide un nombre).

  • Mover el patrn seleccionado hacia arriba o abajo.

  • Activar seleccin de patrones para copiar & pegar (Seleccionar Modo).

  • Activar Modo Dibujo.

  • Cambiar de "Modo patrn nico" a "Modo patrones apilados" y viceversa.

Debajo de estos botones hay una lista de patrones creados y cundo se reproducir cada uno (cada cuadrado == 1 comps). Haz clic en un cuadrado para aadir o quitar el patrn. Al pulsar el botn derecho del ratn sobre el nombre de un patrn, se mostrar un men para cambiar el nombre del patrn o para copiar/borrarlo. No se permite ms de un patrn con el mismo nombre.

Figura 2.2. El Editor de Canciones

El Editor de Canciones

4.1. Virtual patterns

Virtual patterns are a convenient way of grouping patterns together. For example, say you have a song in which three patterns are always played together at the start of each bar. Previously, the way to do this in the pattern matrix was to explicitly enable the three patterns at each bar.

With virtual patterns we can assign a pattern to be a sort of meta-pattern that implicitly invokes these three patterns together when the new virtual pattern is enabled in the pattern matrix. This way, we only need to set one pattern every bar, instead of three.

Virtual patterns provide a function that's similar to the regular pattern editor, and one could argue that since a virtual pattern is also a regular pattern, we could have just merged the three patterns into this new one. However, the advantage that virtual patterns provide is that if one of the original three patterns changes, the virtual pattern automatically inherits the change. A virtual pattern can also invoke other virtual patterns.

To access virtual patterns, right click (bring up the context menu) on the label of an existing pattern and there select “Virtual Pattern”. This will bring up a small dialog that allows one to toggle which patterns are in the virtual pattern set.

5. Editor de Patrones

The "Pattern Editor" lets us create or modify the pattern (bar) which is currently selected. You can add/remove notes, and tune a number of per-note properties like velocity and pan. The Pattern Editor can be used in 2 modes : 'Drum' mode or 'Piano' mode. You can switch between these modes by clicking the Drum/Piano button (located on the top-right of the Pattern Editor)

First let's take a look at the (classic) 'Drum' mode :

Figura 2.3. Pattern Editor in Drum mode

Pattern Editor in Drum mode


-

5.1. Pattern Editor Controls

The top part of the pattern editor contains a number of controls :

Figura 2.4. Pattern Editor Controls

Pattern Editor Controls

From left to right :

  • SIZE : lets you choose the size of the pattern (the number of bars)

  • RES : this is the current grid resolution (4 through 64)

    Remember this constraint concerning the grid: if you are working with a resolution of 16 you can't go back to 8 and remove a 16th note. On the other hand if you are working with a resolution of 8 and you try to insert a note in the middle of two bars (looking for a 16 bars precision), notes will be placed in the previous or in the following 8th bar. This constraint can be removed if you disable the whole grid resolution (choose "off" from the grid resolution LCD control). Now you'll be able to place notes wherever you prefer.

  • HEAR : when enabled Hydrogen will play the sample as it's being added to the pattern.

  • QUANT : enables/disables quantization. When enabled the beats inserted will automatically respect the grid resolution currently applied.

  • Drumset / Instrument : when set to Drumset the keys on your midi keyboard will map to the instruments in your sound library as described in the instrument mapping table below. If you set it to Instrument the keys of your midi keyboard will trigger the instrument that is currently selected. The pitch of the instrument will follow the key you press on your keyboard. This feature is mainly used for non-drum instruments. An example : if you use a sample of a piano for one of your instruments, you will be able to 'play' that piano instrument using your keyboard just like you are playing a piano synth.

  • Note Length / Note off : these are 2 different ways to define the duration of a note. See Seccin5.3 for usage.

  • Drum/Piano : switch Pattern Editor between Drum and Piano mode. (see below)

5.2. Pattern Editor Drumkit

The section on the left shows you what drumkit/library is currently selected (GMkit by default) and below that you can see the instruments that are part of this kit.

- -

Each instrument has its own set of features that are accessible by right-clicking the instrument. From the context menu that pops up you can select

  • Clear notes : to remove all notes for this instrument in this pattern.

  • Fill notes : this allows you to fill up the pattern with notes for the selected instrument. Depending on the choice you make (fill all, fill 1/2, fill 1/4 ...) notes will be placed at all, 1/2, 1/4, etc of the note positions that are allowed by the grid setting. So be careful not to mix up the 'musical' 1/2-note and the 'fill 1/2' note.

  • Randomize velocity : automatically apply a pseudo-random velocity to each note of that instrument in the pattern. The more velocity you set on the instrument, the more hydrogen will hit hard on that instrument when played.

  • Delete Instrument : well, deletes the instrument ;-)

The small red and green buttons right of the instrument names are the mute (red) and solo (green) buttons.

The order of the instruments can be rearranged by simply dragging an instrument up/down in the list and dropping it on a new position within the drumkit/library. Doing so will not change anything to the sequence you have created for that instrument, nor will it change anything to the song or pattern you are working on. It will however, have an impact on the MIDI note mapping : in the table below you can find the link between the instrument position, the MIDI note and the qwerty keyboard keys.

Important Notes :

The name of the instrument depends on the drumkit that is loaded. This list below refers to the GMkit that is loaded by default.

Keep in mind that it is the position of the instrument (within the loaded drumkit) that is linked to a MIDI-note/keyboard-key and not the name of the instrument.

Here's a quick reference of the above bindings for your convenience.

5.3. Pattern Editor Sequence area

This is where it all happens, this is where you can make music :-)

In this area you can see your selected pattern and add notes for any instrument. The simplest way to create a pattern is by adding notes using your mouse (and the 'Fill/Clear notes' function described above). Where you can add notes depends on the used pattern size and resolution.

If you are using Hydrogen as a pure 'drum' you just want Hydrogen to 'hit' the instrument wherever there's a 'dot' in the pattern. If you are using Hydrogen as an 'instrument', the length of the note becomes very important. There are 2 ways to define the length of a note : in 'Note Length' mode you can add a note by left-cliking, and you can 'stretch' that note by right-click-dragging it. This will change the dot into a rectangle that represents the duration of that note. In 'Note Off' mode you can also add a note by left-clicking, but a right-click will now add a blue dot that represents the end of that note.

(Figure above, from left ->right : a 'normal' note, a note in 'note length' mode, a note in 'note off' mode)

So far we have only used the mouse to create a pattern, but you can also record your beats by clicking the Record button (see Seccin2) and simply playing your pattern on your MIDI drum or your pc keyboard (see instrument mapping above). This is probably a more musical way of creating a pattern, but it's up to you to decide what works best for you. (Also see Captulo3 for a basic walk-through of how the pattern editor works)

5.4. Pattern Editor Note Properties

Clicking on an instrument or adding/removing a note next to it will select this instrument. Once an instrument is selected the note properties for this instrument will be shown in the form of vertical lines in the bottom window. The lines represent the value for the selected property of each note of the selected instrument. You can select another note-property from the note property drop-down list (located bottom-left). There are 4 note properties available :

  • Velocity : how hard the note is played (the volume of the note)

    Note that the color of the note-dot and the vertical bar will change according to the velocity value you have defined. A light shade of gray means a low velocity (low volume) and the higher you set the velocity the darker the color will be, turning red when you reach the point of clipping.

  • Pan : with this parameter you can define the stereo image of the note (how loud it will be in the left/right output)

  • Lead/Lag : Lead and Lag allows a slight note lead or lag in respect of the actual beat. The range is ca. 5 ticks which equals around ca. 10 ms at a tempo of 120bpm. Changing the lead/lag can make a huge difference to the way your pattern sounds and feels. It's a groove thing ;-)

  • Notekey : if you select this note parameter the area where you can modify the parameter will change into a 'piano keyboard'

    The striped black and white area represents a piano keyboard and in the gray area you can choose the octave. By placing a dot on the octave scale and a dot on the 'keyboard' you can choose any note.

-

5.5. Pattern Editor Piano mode

Drum mode (see Figura2.3) focuses on using Hydrogen as a drum machine. If you are using Hydrogen as an instrument there is a big chance that the Piano mode is for you. It gives you a complete 'piano keyboard' so you can easily put down your tunes.

You can compare the Piano mode to the Note properties Notekey (described above), only here you have a complete piano keyboard, so you dont have to select the octave first.

Figura 2.5. Pattern Editor in Piano mode

Pattern Editor in Piano mode

6. Mezclador

Figura 2.6. El Mezclador

El Mezclador

El marco del Mezclador (Figura2.6) es til para ajustar el volumen global o de un solo instrumento en el drumkit actual. Muestra el pico actual (haz clic en para desactivarlo, til para CPUs viejas) y te permite determinar el pico mximo permitido (ajstalo con el fader del instrumento), modificar atributos como paneo, reproduccin solo , silencio o probar slo ese instrumento ; al elegir un instrumento en el Editor de Patrones se enciende un LED azul (cerca del botn de reproducir). Cerca del control global de volumen, puedes configurar 3 efectos globales como swing (mueve algunas notas hacia atrs o adelante no aleatoriamente), tiempo (humaniza el tiempo de las notas) y humanizar (edita la intensidad aleatoriamente).

Adems, puedes configurar hasta 4 efectos especiales LADSPA para cada instrumento pulsando el botn de . Consulta la siguiente seccin para una descripcin detallada.

7. Biblioteca de Sonidos (Gestor de Drumkits)

La Biblioteca de Sonidos te ahorra tiempo al gestionar tus drumkits, patrones favoritos y canciones favoritas. Al hacer nuevas canciones y drumkits, la Biblioteca de Sonidos te facilita el reutilizar y mezclar los instrumentos y patrones de otros drumkits y patrones.

7.1. Drumkits del sistema

Esto enumera los drumkits instalados por tu administrador de sistemas. Se determina mediante el prefijo de tiempo de compilacin (compile-time). En sistemas operativos tipo Unix, esto normalmente es /usr/share/hydrogen/data/drumkits, o posiblemente /usr/local/share/hydrogen/data/drumkits. Estos drumkits estn disponibles para cualquier usuario, y stos normalmente no pueden hacer aadidos.

Para cargar un drumkit desde aqu, haz clic derecho sobre el drumkit y selecciona Cargar. Esto reemplazar el drumkit actual con el que has seleccionado. Para cargar slo un instrumento de ese drumkit, haz clic izquierdo sobre el plus a la izquierda del nombre del drumkit para mostrar todos los instrumentos. Con el botn izquierdo del ratn, haz clic y arrastra los instrumentos al drumkit actual. El instrumento se aadir al drumkit que tienes cargado actualmente.

7.2. Drumkits del usuario

Estos son tus propios drumkits que puedes gestionar t mismo. Normalmente se guardan en $HOME/.hydrogen/data/drumkits. Cuando ests creando un nuevo drumkit, puedes guardarlo aqu seleccionando InstrumentosGuardar biblioteca .

El procedimiento para cargar drumkits e instrumentos es el mismo que para los drumkits del sistema (ver Seccin7.1).

7.3. Patrones en la Biblioteca de Sonidos

Antes de guardar tus patrones en la biblioteca de sonidos asegrate de editar sus propiedades haciendo clic derecho y seleccionando Propiedades. Aqu puedes asignar un ttulo y una categora al patrn. Puedes utilizar una de las categoras ya proporcionadas, o crear tu propia categora simplemente tecleando un nombre de categora. El nombre de la categora es importante, porque los patrones se archivarn por categoras en la Biblioteca de Sonidos.

Puedes guardar tus patrones favoritos en la biblioteca de sonidos haciendo clic derecho sobre el ttulo del patrn en el editor de canciones y seleccionando Guardar Patrn. Aparecer en la Biblioteca de Sonidos bajo Patrones y la categora que has asignado al patrn.

7.4. Canciones en la Biblioteca de Sonidos

Para guardar canciones en la Biblioteca de Sonidos, colcalos en tu directorio de datos en la carpeta de songs (normalmente $HOME/data/songs. Para eliminarlas, quita el archivo de esa carpeta.

8. Edicin de Drumkits e Instrumentos

La creacin de un nuevo drumkit con Hydrogen se realiza con el Editor de Instrumentos. Usando el editor de instrumentos puedes cargar samples, configurar parmetros de la envolvente (envelope), configurar la ganancia (gain), y algunas funciones avanzadas ms como grupos de silencio (mute groups), filtro de resonancia low-pass (low-pass resonance filter) y altura tonal aleatoria (pitch randomization).

En lugar de crear tu propio drumkit, tambin puedes utilizar or descargar drumkits existentes utilizando Seccin7.

8.1. Conceptos

El sintetizador de Hydrogen es un sintetizador basado en samples. Un sample es un trozo de audio pregrabado (normalmente entre .1 seg. y 3 seg.). Para reproducir una nota, el sample simplemente se reproduce en el momento preciso. Existen algunos conceptos y trminos que debers entender a la hora de confeccionar un drumkit. (Ver Glosario para una explicacin ms detallada.)

Trminos del Sintetizador de Samples

Sample

Una corta grabacin de un sonido, tpicamente con entre .1 y 3.0 segundos de duracin.

Ganancia (Gain)

Ajuste de volumen.

Intensidad

La fuerza con la que golpeas una nota.

ADSR Envelope Generator (Generador de Envolventes ADSR)

Un generador de envolventes de Attack (Ataque)/Decay (Decaimiento)/Sustain/Release. Tras disparar una nota, Hydrogen atacar la nota incrementando su volumen de 0 hasta la plena intensidad de la nota. Tras llegar a la mxima intensidad, decaer la nota bajando el volumen hasta que alcanza el nivel del sustain. Cuando la nota se suelta, (release) Hydrogen vuelve a reducir el volumen desde el nivel de sustain hasta 0.

Attack (Ataque)

La cantidad de tiempo para ir de 0 hasta la intensidad mxima.

Decay (decaimiento)

La cantidad de tiempo para ir de la intensidad mxima al volumen de sustain.

Sustain

El nivel (el volumen) en el que la nota se sostiene entre el sustain y el release. Es un porcentaje de la intensidad. No depende del tiempo.

Release

La cantidad de tiempo para ir del volumen de sustain de vuelta a 0.

Los samples tpicos utilizados en Hydrogen son: el sonido de un golpe simple de batera, el sonido de un golpe simple de plato, el sonido de un golpe simple de cencerro. Cuando metes una nota en el patrn (o reproduces una nota usando MIDI), Hydrogen reproducir el sonido que hayas cargado. As que para crear un drumkit tienes que reunir grabaciones cortas del bombo, cada tom, cada plato, el hi hat abierto, el hi hat cerrado, la caja (con bordonero y sin bordonero), golpes del borde, etc.

Sin embargo, no hay reglas en cuanto a qu puede ser un sample. Es comn utilizar Hydrogen para disparar sonidos que no son de batera, tales como: clips de audio de personas hablando, un clip de una cancin, efectos de sonido, clips de audio de pelculas, personas famosas hablando. Se creativo!

8.2. Crear un Nuevo Drumkit

Para empezar con un nuevo drumkit de cero, selecciona InstrumentosBorrar Todos . Esto te deja un banco de 32 instrumentos vacos. Para borrar instrumentos, haz clic derecho sobre cada instrumento y selecciona Borrar Instrumento. Para aadir ms instrumentos, selecciona InstrumentosAadir Instrumento .

Selecciona un instrumento para empezar a editarlo. Esto se hace haciendo clic izquierdo sobre el nombre del instrumento en la lista de instrumentos (a la izquierda). Vers que el nombre del instrumento en el Editor de Instrumentos coincide con el que has seleccionado.

Cuando el drumkit funciona tal como queras, selecciona InstrumentosGuardar biblioteca . Te pedir que le des un nombre al drumkit para guardarlo. Si quieres sobreescribir un drumkit ya existente, tendrs que teclear el mismo nombre que el kit que quieres reemplazar.

Los drumkits se archivan automticamente en el directorio data (por ej. $HOME/data/drumkits).

Para exportar un drumkit (para compartirlo con otros), hay que cargarlo primero en la Biblioteca de Sonidos. Despus, selecciona InstrumentosExportar biblioteca en el men. Selecciona el drumkit que deseas exportar y dale un nombre de archivo para guardarlo.

8.3. Crear un Instrumento y Capas

Para cada instrumento en un drumkit, puedes cargar varios samples y configurar diferentes parmetros del sintetizador. Esta seccin te ayudar paso a paso para crear un nuevo instrumento y cargar los samples.

Para empezar a crear un instrumento, selecciona InstrumentosAadir instrumento. Esto te da un instrumento en blanco para comenzar.

Ahora, necesitas dos samples. Cualquier archivo .WAV o .FLAC servir. Hydrogen proporciona varios en el directorio data/drumkits .

En el editor de instrumentos, haz clic en Capas. Puedes cargar varias capas en el instrumento. Cul se reproduce depende de la intensidad de la nota entrante. Haz clic en Cargar Capa y dirige el Navegador de Archivos de Audio a tu sample. Fjate que el Navegador de Archivos de Audio te permitir una vista previa del sample antes de cargarlo. Tambin te permitir cargar ms de un sample a la vez. Pero por ahora, slo carga uno.

Tras cargar el sample, vers que ahora hay un 1 arriba, y que el rectngulo de ms arriba se ha vuelto azul claro. Para cargar un segundo sample, haz clic en la ranura justo debajo, y luego haz clic en Cargar Capa para meter otro sample.

Tras insertar los dos samples, probablemente vers que slo el primer sample se reproduce cuando disparas el instrumento. Esto es porque tienes que configurar los rangos de intensidad para las capas. Mueve el ratn hacia los laterales de los rectngulos azul claro y vers que sale un cursor para arrastrar hacia la derecha o la izquierda. Ahora arrastra el sample hacia la derecha o la izquierda (como una cortina). Ahora vers cmo aparece la Capa 2.

La configuracin de intensidad para la capa es intensidad-0 a la izquierda, e intensidad mxima a la derecha. Configura la Capa 1 para las notas suaves y la Capa 2 para las notas fuertes. (Por ej. la Capa 1 a la izquierda y la Capa 2 a la derecha).

Ahora, en la zona de patrones, configura un patrn simple que reproduce este instrumento. Ajusta las configuraciones de intensidad en cada nota para que puedan sonar los diferentes samples. Ahora pon el patrn en modo bucle y notars la diferencia entre los samples. (Para aprender sobre cmo editar un patrn, consulta Seccin5)

Para cada capa puedes configurar la Ganancia y la Altura tonal. La altura tonal tambin tiene un ajuste Fino.

Usa el ajuste de Ganancia para controlar el volumen del sample. Esto es necesario porque es muy difcil tener un conjunto de samples que suenen al mismo volumen. Al ajustar esto, los samples que estaban grabados demasiado bajo se pueden subir para igualarlos a los samples altos (que has tenido que bajar).

Aviso

Es muy fcil poner el mando de Ganancia demasiado alto, haciendo que el sample quede clipeado (distorsionado). Acurdate de probar la ganancia con notas de intensidad mxima. Si aqu se te clipea la seal, seguramente empeorar segn lo procesa Hydrogen.

La altura tonal (pitch) del sample se puede modificar con los controles correspondientes. El mando de Altura Tonal (Pitch) ajusta la altura tonal en semitonos. (As que -12 baja 1 octava). El mando a la derecha ajusta la altura 50 cents. (Un semitono son 100 cents.)

Nota

La altura se ajusta reproduciendo el sample ms rpido o ms despacio. Esto se llama el Efecto Doppler. As que si tienes un sample de 1 segundo y lo bajas -12 (1 octava), tu sample slo durar 0.5-segundoss.

8.4. Parmetros de Instrumentos

En el editor de instrumentos, haz clic en el botn General. Aqu puedes configurar varios parmetros que son para el instrumento en su conjunto (no para cada capa). Los parmetros que puedes configurar son:

  • Parmetros de la envolvente (envelope): Attack, Decay, Sustain, Release. (Ver Generador de la Envolvente (Envelope Generator))

  • Ganancia (Gain): El volumen general del instrumento.

  • Grupo de silencio (Mute Group): El grupo de silencio al que pertenece este instrumento (ver Grupo de Silencio (Mute Group)).

  • Parmetros de Filtro: Circunvalar (Bypass), Corte (Cutoff), Resonancia (Resonance).

  • Altura Tonal Aleatoria (Random Pitch)

Es importante que entiendas Seccin8.1 para poder continuar.

8.4.1. Parmetros de la Envolvente (Envelope)

Cuando se dispara el instrumento, su volumen pasa por una Envolvente ADSR (de aqu en adelante, ADSR envelope). Los parmetros funcionan de la siguiente manera:

  • Attack — the amount of time that the volume of the sample goes from 0 to the full velocity of the note. If the value is 0, the sample will play immediately at full velocity. If the value is 1.0, the sample volume will use the maximum time available for the attack parameter. [1] -

  • Decay — la cantidad de tiempo para que el volumen del sample baje de la intensidad mxima hasta el volumen de sustain. Si el valor es 0, el sample inmediatamente saltar del volumen de attack al volumen de sustain. Si el valor es 1, el volumen del sample utilizar el mximo tiempo disponible para el parmetro de decay.[1]

  • Sustain — el volumen reproducido para la nota tras terminar la fase de decay, y hasta que la nota se "libera" (release). Si se configura a 0, la nota estar silenciada. Si se configura a 1.0, la nota sonar a la intensidad mxima.

  • Release — el tiempo necesario para apagar la nota desde el volumen de sustain hasta 0 (silencio). Si se deja en 0, la nota se silenciar en el tiempo mnimo (unos 5 ms). Si se deja en 1, se reducir en el tiempo mximo disponible.[1]

Si el sample es ms corto que los tiempos especificados, terminar sin importar la fase de ADSR en el que se encuentre. Si la nota es sostenida, no silenciar la nota mientras lo sostengas. Slo sostiene el parmetro de ganancia (volumen) durante ese tiempo.

8.4.2. Ganancia y Grupo de Silencio (Mute Group)

La ganancia determina el volumen general del sample. Esta ganancia se aplica despus de la ganancia que has configurado para la capa, y antes de la ganancia configurada para el mezclador. Con la ganancia a 0, el instrumento estar silenciado. Con la ganancia a 1.0, el volumen de los samples no se ajustar (por ej. 0 dB). Si la ganancia se configura a ms, los samples se amplificarn.

Aviso

Es muy fcil poner el mando de Ganancia demasiado alto, haciendo que el sample quede clipeado (distorsionado). Acurdate de probar la ganancia con notas de intensidad mxima. Si aqu se te clipea la seal, seguramente empeorar segn lo procesa Hydrogen.

Hydrogen proporciona ms grupos de silencio de los necesitars jams (ms de 256). Un grupo de silencio es un agrupamiento de instrumentos que son mtuamente exclusivos — slo puede sonar un instrumento en un momento dado. Si un instrumento est sonando y otro del grupo se dispara, el primero se silenciar inmediatamente y sonar el segundo instrumento. Esto es til sobre todo para instrumentos como el hi hat, donde el sonido abierto y el cerrado son instrumentos diferentes.

Si el grupo de silencio est en Off, el instrumento no forma parte de ningn grupo. Si se especifica un nmero, entonces el instrumento pertenece al grupo denominado con ese nmero. Para meter otros instrumentos en el mismo grupo, configura el parmetro del grupo de silencio con el mismo nmero. (Por ejemplo, para agrupar todos los hi hats, puedes configurar el parmetro del grupo de silencio de todos ellos en el 1. Para tener un grupo de silencio para la caja, configura su parmetro para utilizar el 2.)

8.4.3. Filtro y Altura Tonal Aleatorio

El filtro es un low-pass resonance filter. Si no deseas usarlo, haz clic en el botn de BYP para que se ponga rojo. Si no est rojo el filtro se encuentra activo. El parmetro de corte (cutoff) determina la frecuencia de corte para el filtro. El parmetro de resonancia determina cunta resonancia tiene la frecuencia de corte. Si la resonancia se deja en 0, el filtro no es ms que un simple low-pass filter.

Nota

La frecuencia de corte del filtro vara con la tasa de muestreo de tu tarjeta de sonido. El rango del mando (0 a 1.0) est optimizado para una tasa de muestreo de 48,000 kHz.

The random pitch parameter allows you to randomly vary the pitch of the sample every time it is triggered. The value is set between 0 and 1.0. The pitch change is fairly small: 2 half-steps value. Using this sparingly can help your sequences to sound more like a real drummer.

8.5. Consejos a la hora de Editar Instrumentos

Con todos los parmetros que hay disponibles, puede resultar difcil conseguir algo que suene bien cuando acabes. Aqu van algunos consejos para configurar un instrumento:

Baja la ganancia. Cada vez que tienes un control de ganancia (por ej. un amplificador), esto se llama una etapa de potencia. Con cada etapa de potencia adicional que tengas, es fcil que satures la seal — lo cual significa que la seal se distorsiona debido al clipeo. Adems, si tienes dos samples que, por s solos, ya llegan al lmite — qu crees que pasar cuando los combines? Est claro, vuelves a saturar la seal.

Si las cosas suenan mal y distorsionadas, empieza por bajar la ganancia de la capa... sobre todo si es mayor de 1.0. Luego baja la ganancia del instrumento. Luego cualquier ganancia de los efectos LADSPA. Luego el fader del mezclador. Luego el fader de la salida master.

Prueba los samples a la mxima intensidad. El sample sonar ms alto si la intensidad es mayor. As que si lo configuras todo para que suene bien con una intensidad de 0.7, qu pasar cuando tengas una intensidad mxima de 1.0? (Una pista: saturacin.)

Intenta usar samples con -6 dB mx. Visualmente, esto son samples que llegan a su pico mximo slo a la mitad del rango completo. Si no, deja la ganancia en aproximadamente 0.5.

Quita todas las desviaciones de CD (DC offset) del sample. En un editor simple de samples, normalmente hay una lnea que atraviesa el centro de la onda. Esta es la lnea "cero". El inicio de tu sample debera de estar sobre esta lnea. El final del sample tambin debera de estar sobre esta lnea. Sin embargo, si la seal est un poco por encima o debajo de esta lnea, oirs un 'clic' al comienzo y al final del sample cada vez que sea reproducido. Si tu editor de samples no tiene herramientas para arreglar un problema de desviacin de CD, puedes eliminarlo poniendo un ligero fundido de entrada y salida en los extremos del sample.

El ADSR no ser ms largo que tu sample. Si tienes un sample corto, no importa cmo configures el attack y el delay — el sample dejar de reproducirse.

Las cosas cambian con la tasa de muestreo. Si tienes una configuracin realmente buena con todos los parmetros ajustados con esmero... las cosas cambiarn si modificas la tasa de muestreo de tu tarjeta de sonido. Muchas de las funcionalidades y los parmetros internos de Hydrogen estn basados en el nmero de samples que procesa, y no en el nmero de segundos. El tipo de cosas que cambian son: cualquier cosa basada en el tiempo (como el attack y el release) y cualquier cosa basada en la frecuencia (como la frecuencia de corte).

9. Plugins LADSPA

Hydrogen tambin puede aadir efectos a los sonidos usando cualquier librera de efectos LADSPA. Tienes que instalar las fuentes de LADSPA (disponibles en http://www.ladspa.org) y mientras que esto te ofrece una idea aproximada de cmo funciona, en realidad deberas probarlo de verdad instalndote una o ms libreras de plugins, que es tan simple como scons && scons install. Estos son algunos sitios donde puedes descargarte libreras de plugins:

Los Plugins Matan

A LADSPA plugin is compiled, executable code. It is capable of hanging, crashing, freezing, screeching, overflowing buffers, and even phoning home. If you start having issues with Hydrogen, disable your plugins and see if things improve. Some plugins are not designed for real-time use, and some are just plain better than others.

Una vez que has instalado algunos plugins abre una cancin a la que quieres aadir un efecto y selecciona un instrumento que tiene unos cuantos golpes en el patrn. En el mezclador haz clic en y selecciona una de las lneas disponibles para plugins. Haz clic en el botn de Editar ( ), luego en Seleccionar el Efecto: esto abrir otra ventana (Figura2.7) que te permitir elegir un efecto de entre los que tienes instalados, que estn ordenados alfabticamente y por categoras. Cuando acabes, ajusta el nivel en el mezclador y empieza a tocar. Cada control redondo en la parte de efectos (FX) controla el nivel del efecto correspondiente. Si quieres activar/desactivar rpidamente el efecto, haz clic en el botn de Bypass ( ).

Figura 2.7. Selecciona un Efecto

Selecciona un Efecto



[1] Los parmetros de ataque, decaimiento (decay) y release ("liberacin") estn determinados por el nmero de samples de audio. Esto significa que los cambios de tiempo dependen de la tasa de muestreo de tu tarjeta de sonido. El tiempo mximo para cada uno de ellos es de 100,000 samples de audio (normalmente 2.27 seg a 44.1 kHz).

Captulo 3. Una nueva cancin

1. Modo "Cancin" y modo "Patrn"

Esto no es ms que una gua rpida de Hydrogen. Consulta el tutorial para una descripcin ms detallada.

Hydrogen has 2 main modes: "Pattern" mode and "Song" mode (refer to Seccin3 for the buttons to activate). When "Pattern" mode is activated the current pattern is continuously repeated. This mode is very well suited to tweak your pattern untill it's just right, since the pattern you are working on is constantly repeated. This way you can immediately hear the changes you have made. In "Song" mode the whole song is played. This is useful when putting together the patterns, to create the structure of the song.

2. Un nuevo patrn

We'll start from an empty song with an empty pattern, as created by default: "pattern" mode should be selected now. It is also possible to change name of the pattern. Now let's click on the Play button and while the pattern is playing let's add notes in the grid of the Song Editor (Figura3.1) simply left_mouse_clicking on it: adjust grid resolution and BPM speed if needed. Remember some constraints of the grid: if you are working with a resolution of 16 you can't go back to 8 and remove a 16th note; same thing happens if you are working with a resolution of 8 and you try to insert a note in the middle of two bars (looking for a 16 bars precision): they will be placed on the previous or on the following 8th bar (unless you choose off from the Grid Resolution LCD, in this case you're free to place notes wherever you prefer). Be sure to select the correct pattern in the Song Editor before adding notes in the Pattern Editor!

Figura 3.1. El Editor de Patrones

El Editor de Patrones

3. Una nueva secuencia

Una vez que hemos creado los patrones (Figura3.2), podemos copiar/pegar/eliminarlos simplemente arrastrndolos con el ratn (activa 'modo seleccin' en el Editor de Canciones y mantn pulsado el botn izquierdo del ratn para seleccionar los que quieres mover o copiar).

Figura 3.2. Insertar Notas en un Patrn

Insertar Notas en un Patrn

4. Configura desde el mezclador

Por supuesto siempre podemos utilizar la ventana del mezclador, bien a la hora de crear o reproducir patrones.

The Mixer frame (Figura3.3) is made of 32 independent tracks, each of these is binded to an instrument, plus a "Master Output" line to adjust general output volume and a "FX" button to set effects. Every line features 3 buttons ( ), pan adjust ( ), current maximum peak, volume fader and name of the track. Clicking on will play the selected instrument, cutting the others. The "Mute" button , simply mute that instrument. The maximum peak indicates the maximum volume reached from the instrument; the peak must be in a range of 0.0 and 1.0 (in Figura3.3 you can see a few volumes too loud), otherwise it will get distorted producing a weird sound (especially with OSS audio driver), in this case it's better to set volume down; keep an eye on each vu-meter.

Figura 3.3. El Mezclador

El Mezclador

Captulo 4. Shortcut lists

  • [CTRL + N] = New Project

  • [CTRL + O] = Abrir Archivo

  • [CTRL + D] = Open Demo

  • [CTRL + S] = Guardar Archivo

  • [CTRL + SHIFT + S] = Save File as

  • [CTRL + P] = Export Pattern as

  • [CTRL + M] = Export MIDI file

  • [CTRL + E] = Export Song

  • [CTRL + Q] = Quit Hydrogen

  • [ALT + B] = Show Director window

  • [ALT + M] = Show Mixer window

  • [ALT + I] = Show Instrument rack

  • [ALT + P] = Show Preferences window

  • [CTRL + ?] = Show manual

  • [Retroceso] = Volver al principio de una cancin o un patrn

  • [spacebar] = Play / Pause

  • [,] (comma key) = Tap tempo (beatcounter)

Glosario

Esto es un glosario de trminos generales que se encuentran al utilizar Hydrogen, sintetizadores, bateras o samplers. Las definiciones del texto estn simplificadas, pero las definiciones aqu son ms generales y estn ms explicadas. Por ejemplo, el texto del manual te llevara a creer que un ADSR es el nico tipo de generador de envolventes (envelope generator), y que slo controla el volumen. Mientras que sirve para nuevos usuarios, no es del todo correcto.

ADSR

Un tipo de generador de envolventes que te permite controlar los parmetros de Attack, Decay, Sustain, y Release. Generalmente, los parmetros son proporcionales a la intensidad.

En Hydrogen, el 'ADSR envelope generator' slo controla el volumen (atenuacin).

Lee ms sobre esto en el Artculo de Wikipedia (en ingls) ADSR Envelope

Ver tambin Generador de la Envolvente (Envelope Generator), Attack, Decay, Sustain, Liberacin (Release).

Attack

Esta es la primera fase de un 'ADSR envelope', y es la cantidad de tiempo necesario para subir el parmetro de 0 a la mxima intensidad tras disparar la nota.

Ver tambin ADSR.

Atenuacin

En filtros y mezcladores, esto es la reduccin de la seal (volumen).

Ver tambin Roll-off.

Band-Pass Filter

A filter that preserves a certain band of frequencies, and attenuates (silences) all others. This is often done by combining a high-pass and a low-pass filter.

Ver tambin Filtro, Filtro 'High-Pass', Filtro Low-Pass.

Saturacin (Clipping)

Un fenmeno que afecta a una seal cuando es demasiado grande para lo que sea que lo recibe. Los picos de la seal (que normalmente son curvas redondeadas) se cortan al mximo volumen (clipeados). Esto distorsiona el sonido y normalmente no es deseable.

Un ejemplo de saturacin es cuando reproduces msica a un volumen mayor de lo que puede soportar el altavoz. Algunas partes de la msica suenan desgarradas y borrosas.

Frecuencia de Corte (Cutoff Frequency)

En los filtros high-pass y low-pass, esta es la frecuencia que divide entre entre aquellas que pasan, y aquellas que se atenan (silenciadas). En un filtro de 'high-pass resonance', o uno de 'low-pass resonance', el corte es tambin la zona de frecuencias que se amplifican.

Por ejemplo, si tienes un filtro low-pass y configuras una frecuencia de corte alta (por ej. 20kHz)... el filtro no afectar al sonido. Todas las frecuencias audibles pasarn sin modificarse. Al bajar la frecuencia de corte a algo como 40 Hz (la cuerda gruesa de un bajo), suena como si alguien tapara el altavoz con una manta. Las frecuencias altas se estn atenuando por encima de los 30 Hz.

Ver tambin Filtro, Filtro 'High-Pass', Filtro Low-Pass, Filtro de Resonancia.

Decay

Tras alcanzar la mxima intensidad del 'attack', esto es la cantidad de tiempo necesario para bajar el parmetro hasta el nivel del sustain.

Ver tambin ADSR.

Generador de la Envolvente (Envelope Generator)

Una manera de controlar (cambiar) un parmetro a lo largo del tiempo como respuesta al disparo, sostenimiento y liberacin de una nota.

Se te acaba de nublar la vista? Intentmoslo de nuevo:

Imagina que ests tocando una nota en el teclado y tienes la otra mano en un mando (volumen, filtro de corte, etc.). Segn tocas la nota, giras e mando (hacia arriba, luego abajo... o viceversa). Haces lo mismo con cada nota. Esto es lo que hace el 'envelope generator'. Consulta tambin ADSR

Fader

Un control deslizante utilizado para ajustar la atenuacin (volumen) en un mezclador. Los faders siempre tienen un potencimetro de "audio", lo que significa que los cambios de atenuacin tienen lugar en una escala exponencial.

Filtro

Un dispositivo que cambia un sonido atenuando frecuencias especficas. Un control de tono es un ejemplo de un filtro simple de 'low pass'.

Ver tambin Band-Pass Filter, Filtro 'High-Pass', Filtro Low-Pass, Filtro de Resonancia.

Ganancia

En un amplificador, determina cunto se amplifica una seal (volumen). A mayor valor de ganancia, ms volumen.

Filtro 'High-Pass'

Un filtro que atena (silencia) frecuencias bajas, pero que permite el paso de frecuencias altas.

Ver tambin Filtro, Frecuencia de Corte (Cutoff Frequency).

Instrumento

En Hydrogen, un instrumento es un nico generador de ruido (como puede ser un bombo o un tom).

Capa

En un instrumento, puedes cargar varios samples diferentes capa), y hacer que suene un sample diferente dependiendo de la intensidad de la nota. Slo sonar un sample a la vez.

Supn que tienes un sample de un golpe suave de timbal base. Si simplemente reproduces el sample ms alto — no sonar igual que un golpe fuerte en un tom de verdad. Si quieres imitar esto en tu instrumento, puedes cargar un sample par los golpes suaves, y otro sample para los fuertes.

Ver tambin Instrumento.

Filtro Low-Pass

A filter that attenuates (silences) high frequencies, but allows low frequencies to pass through.

Ver tambin Filtro, Frecuencia de Corte (Cutoff Frequency).

Silencio (Mute)

Para no hacer sonido. Una funcin del instrumento que evita cualquier salida de audio.

Grupo de Silencio (Mute Group)

Un grupo de instrumentos (samples) que debera silenciarse inmediatamente cuando se dispara otro instrumento del mismo grupo.

Esto se utiliza normalmente para los hi-hats, donde hay un instrumento (sample) diferente para cuando est abierto y cerrado. Con un hi-hat real, el sonido abierto parar en cuanto lo cierres. Sin embargo, si utilizas dos samples — el sonido de abierto continuar an despus de disparar el sonido de cerrado. Al colocar ambos instrumentos en el mismo grupo (grupo #1, por ejemplo)... al disparar el sonido de cerrado el de abierto se parar automticamente (y vice versa).

Octava

Un rango de frecuencias donde la ms alta es exctamente el doble de la ms baja.

Por ejemplo, el rango de 20 Hz a 40 Hz es una octava. Como lo es de 120 Hz a 240 Hz, y de 575 Hz a 1150 Hz. Mientras que las diferencias de frecuencia son muy variadas (20 Hz, 120 Hz, y 575 Hz, respectivamente), para el odo humano suenan como si les separara la misma distancia.

Liberacin (Release)

Tras soltar/liberar la nota, esto es la cantidad de tiempo necesario para reducir el parmetro del nivel de sustain a 0.

Ver tambin ADSR.

Resonancia

Al referirnos al filtro de resonancia, esto es el parmetro que determina cunta ganancia se da a las frecuencias en el corte.

Ver tambin Filtro de Resonancia.

Filtro de Resonancia

Un filtro que amplifica un estrecho rango de frecuencias. Tpicamente formar parte de un filtro high-pass o low-pass, donde las frecuencias amplificadas se centran en la frecuencia de corte.

Ver tambin Filtro, Frecuencia de Corte (Cutoff Frequency), Resonancia.

Roll-off

Esta es la cantidad de atenuacin (supresin) aplicada a las frecuencias segn cambia la frecuencia (normalmente medido en dB/octava).

For example, in a low-pass filter the frequencies below the cutoff frequency are not attenuated (they pass-through with the same volume). Same with the cutoff frequency. As you go above the cutoff frequency, the frequencies that are near the cutoff frequency are not attenuated very much at all. However, the frequencies that are much higher than the cutoff are attenuated (suppressed) a lot. This is usually approximated by a straight line (on a log scale) and measured in in dB of attenuation per octave of frequency.

Ver tambin Atenuacin, Filtro.

Sample

Una corta grabacin de un sonido, tpicamente con entre .1 y 3.0 segundos de duracin.

Sustain

El nivel en el que se sostiene el parmetro tras terminar el tiempo de decay. Este nivel se mantendr hasta que la nota se suelta.

Ver tambin ADSR.

Intensidad

La fuerza con la que golpeas una nota.

Los dispositivos MIDI deben enviar esta informacin junto con la nota. Los sintetizadores utilizan esta informacin para ajustar varios parmetros en el sample (normalmente el volumen). En Hydrogen, slo se utiliza para determinar el volumen al que se reproduce el sample.

diff -Nru hydrogen-0.9.6.1/data/doc/manual_fr.html hydrogen-0.9.7/data/doc/manual_fr.html --- hydrogen-0.9.6.1/data/doc/manual_fr.html 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/data/doc/manual_fr.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,20 +0,0 @@ -Manuel de Hydrogen

Manuel de Hydrogen

Antonio Piraino

Alessandro Cominu

Thijs van Severen

Sebastian Moors

Rsum

Hydrogen is a software synthesizer which can be used alone, emulating a drum machine based on patterns, or via an external MIDI keyboard/sequencer software. Hydrogen compiles on Linux/x86 and Mac OS X, although the latter is still experimental, so ask in the developers mailing list for further details.


Chapitre1.Introduction

1.Tlchargement

You can download Hydrogen from http://www.hydrogen-music.org. On the 'Downloads' page you can find several binaries (installers) for Linux, Mac and Windows. (note that some versions may not be available for Windows and Mac)

If you want to compile Hydrogen yourself (see Section2), you can download the latest source files directly from our subversion server with:

$ svn co http://svn.assembla.com/svn/hydrogen/trunk

A certain release can be fetched with:

$ svn co http://svn.assembla.com/svn/hydrogen/tags/0.9.5

-

Compiling Hydrogen depends on the following libraries:

Please install them with your distribution's package manager. If you're running a debian-based system, you can install the libraries with:

$ apt-get install libqt4-dev g++ libasound2-dev \
-        libjack-dev liblrdf0-dev libflac++-dev libtar-dev libsndfile1-dev \
-        liblash-dev libportaudio-dev libportmidi-dev 
-      

2.Compilation

Depending on the branch you are compiling you will need to use Scons or Cmake. Check the INSTALL.txt and the README.txt files for more info (located in the top level dir once you downloaded the sources).

2.1.Using scons

Decompress the tarball or go to the directory where the subversion copy was checked out:

$ cd hydrogen-*
-          $ scons
-          $ su -c "scons install"
-        

Before compiling, check for additional options with:

$ scons --help
-        

If you want to use features which are not enabled by default (for instance PortAudio), you can enable them with:

$ scons portaudio=1
-        

Namely, if you get some error while running Hydrogen and you want to report it remember to configure hydrogen with:

$ scons debug=1
-        

To clean up compiled code:

$ scons -c
-        

3.Preferences

First of all you should make sure that the audio engine is configured properly. The preferences dialog can be accessed via the tools menu (tools -> preferences).

3.1.The General tab

On the "General" tab (Figure1.1) you can choose to automatically reopen the last used song and/or playlist. This can save you the trouble of having to reopen the song you are working on every time you open Hydrogen. Auto loading the playlist can come in handy when you are using Hydrogen live.

If you want to use Lash to manage your Jack connections you should enable it here so Hydrogen allows interaction with Lash.

The Beat Counter drift compensation and start offset allow you to compensate for system latency when you are using the Beat Counter function (see Section3.1)

The Max number of bars in a song can be set here (currently limited to 800) and if you want to use rubberband for sample time-streching you need to enter the path where rubberband is installed on you system here.

Figure1.1.The General Tab

The General Tab

3.2.The Audio System tab

From the "Audio System" tab (Figure1.2) it is possible to modify the audio driver being used (OSS, Jack, ALSA, PortAudio) with its buffer and sampling rate (unless you are using JACK, in this case the audio driver configuration should happen before starting the JACK server).

We can set some features of Hydrogen like "Create per-instrument outputs" this will create 1 output per instrument that you can connect to any other Jack enabled application. This can be useful if you want to add effects to a single instrument with jack-rack for example. "Connect to Default Output Pair" connects the output to the default ports: uncheck this if you want to connect the JACK output to other ports without having to disconnect them first.

Also keep an eye on the value of "Polyphony": depending on your CPU you may want to change the max simultaneous notes in order to prevent hydrogen from overrunning the audio driver.

Figure1.2.The Audio System Tab

The Audio System Tab

The following drivers are available:

  • jackd: The Jack driver is a professional audio server which permits very low lag and exchanges with other audio software. We strongly recommend using this driver to have the best out of Hydrogen. JACK server will start automatically if not already running.

  • ALSA: the widely adopted Linux standard audio drivers

  • OSS: The Oss audio driver uses /dev/dsp and it's based on the OSS interface which is supported by the vast majority of sound cards available for Linux; this said, the use of this audio driver blocks /dev/dsp until Hydrogen is closed i.e. unusable by any other software. Use it as last resort.

  • PortAudio: an open-source multi platform audio driver

  • CoreAudio: a driver for Mac OS X (experimental)

3.3.The Midi System tab

The "Midi System" tab (Figure1.3) contains all MIDI settings. Here you can choose the MIDI driver, input, and channel(s) that Hydrogen should respond to. You can also define midi bindings: link a midi note/message to an action. To do this simply press the red 'REC' button left of the 'binding' action line. A popup will inform you that Hydrogen is waiting for your input. Press/hit/turn the key/pad/knob on your midi keyboard (or controller) that you want to link to this action. The popup will close and the Event Param value will now show the midi note value of the key you pressed. Once this is done you can select an Action from the action drop-down list. Note that some actions (like SELECT_NEXT_PATTERN) also require an Action Param that references the pattern you want to select with this midi action.

Figure1.3.The MIDI System Tab

The MIDI System Tab

3.4.The Appearance tab

The "Appearance" tab (Figure1.4) let's you modify Hydrogen look and feel (font settings and interface style). Also the VU meters fall-off speed of the Mixer Window can be changed here.

Figure1.4.The Appearance Tab

The Appearance Tab

3.5.The Audio Engine tab (debug only)

The "Audio Engine" tab (Figure1.5) is a window that shows various stats about Hydrogen and the audio driver. In case JACK is used, buffer and sampling rate should be set before starting Hydrogen (JACK automatically starts when an application tries to connect).

Note that the Audio Engine tab is only available if Hydrogen was complied with debug support.

Figure1.5.The Audio Engine tab

The Audio Engine tab

Chapitre2.Using Hydrogen

1.Used Filetypes

Before working with Hydrogen, please familiarize with these filetypes:

  • *.h2pattern: XML file describing a single pattern. Patterns are group of beats and are managed in the pattern editor.

  • *.h2song: XML file describing the whole song (or sequence). Songs are group of patterns with their properties and are manager using the song editor

  • *.h2playlist: XML file describing a playlist. A Playlist is a (ordered) group of songs.

  • *.h2drumkit: a compressed and archived folder containing all sound samples composing a drumkit and a description XML file. Drumkits are basically group of sound samples.

2.Main menu

Projects: this menu offers file related functions.

  • New - Create a new song

  • Show Info - Set general properties of the song such as name, author, license and generic notes

  • Open - Open a song

  • Open Demo - Open a demo song (demo songs are stored in $INSTALLPATH/share/hydrogen/data/demo_songs)

  • Open recent - Open a menu showing last used songs

  • Save - Save changes to current song

  • Save as - Save current song specifying a name (default path: $HOME/.hydrogen/data/songs)

  • Open pattern - Open a saved pattern belonging to the current drumkit

  • Export pattern as - Saves a pattern. It will be stored in $HOME/.hydrogen/data/patterns/drumkit_name

  • Export MIDI file - Export current song in MIDI format

  • Export song - Export current song in WAV format

  • Quit - Quit Hydrogen

Instruments: this menu offers instruments and drumkit (sound libraries) functions.

  • Add instrument - Add a new instrument to your current drumkit

  • Clear all - Delete all instruments from the current drumkit

  • Save library - Saves all instruments settings (and their sound samples) in $HOME/.hydrogen/data/library_name

  • Export library - Compress all instruments samples and settings in a drumkit in $HOME/.hydrogen/data/library_name

  • Import library - Imports another drumkit from the local filesystem or download it from a remote location through an XML feed. The XML file that should be provided is NOT RSS compliant (see Hydrogen website for an example). To load another drumkit in your current working session of Hydrogen, read Section7.

Tools: opens the mixer, the director, the playlist editor, the instrument rack and the general preferences window.

  • Playlist editor - A tool to manage playlists.

  • Director - Open the director window.

  • Mixer - Open the mixer window.

  • Instrument rack - Open the instrument rack panel.

  • Preferences - Open the main preferences window. Read Section3 on how to configure Hydrogen.

Debug: tools mainly for debugging and monitoring Hydrogen (only available when compiled with debug support !).

  • Show audio engine info - Open a monitor with various stats

  • debug action - Insert debug commands.

  • Print Objects - Print on stdout current objects map.

Info

  • User manual - Open a window with this manual :)

  • About - The usual window with license information, acknowledgements, etc.

3.La bare d'outils principale

Before analyzing the two main frames of Hydrogen, let's take a quick look at the main toolbar and its components:

  • Pilot the song using the start, stop, pause, etc. buttons

  • Choose between "pattern" or "song" mode: in "pattern" mode only the currently selected pattern will play, while in "song" mode all patterns inserted will be played.

  • An advanced tap tempo function: choose note length and how many notes to wait before recalculating BPM, then click the comma key repeatedly until the 'R' letter will appear and the BPM will be updated. (see Section3.1)

  • Manually set BPM

  • Manage JACK transport

  • Open the mixer and the instrument rack panels

Figure2.1.The Main Toolbar

The Main Toolbar

  • Main controls to start [Hotkey = Spacebar], stop, record, fast forward, rewind, loop a song or a pattern.

  • Set Pattern/Song Mode. When Song mode is selected Hydrogen will play the complete song. This is the sequence of patterns you have created in the Song Editor (see Section4). When Pattern mode is selected Hydrogen will play the pattern that is currently selected, and thus displayed in the Pattern Editor (see Section5).

  • Set measure type and Beat Counter (see Section3.1).

  • XXX

  • Shows CPU load and MIDI events. The CPU bargraph gives you an indication of the CPU load. The MIDI led lights up every time Hydrogen receives a midi message.

  • Click J. TRANS to enable Jack transport. If the J. MASTER button is pressed Hydrogen will work as 'master', else it will act as 'slave' to another 'master' program (e.g. Ardour). This applet is only available if Jack Audio Driver is selected.

3.1.Tap Tempo and BeatCounter

It is possible to change tempo at any time using the tap-tempo and BeatCounter features of Hydrogen. You can change these while playing or while the song is stopped. To change the tempo, hit the , (comma) key in tempo for the number of beats in the measure. After the correct number of beats are met, the tempo will change to the average tempo that you tapped in. If you continue to tap, these new taps will become a part of a rolling average. If you tap accidentally, or if you wait too long between taps, the tap tempo counter will start over.

The Tap Tempo is a part of the BeatCounter, which is essentially a Tap Tempo on steroids. By default the BeatCounter display is not visible. To see the BeatCounter widget click the upright button (BC) between Song/Pattern mode selector and the BPM-widget. Or, it can be shown by pressing the comma key (,).

The tempo that you tap will be considered even beats of the beat type. The beat type can be set to 1/8 (for eight-note beats), 1/4 (for quarter-note beats), 1/2 (for half-note beats), and 1/1 (for whole-note beats). To change the beat type use the left arrow buttons. To change the number of beats that are counted, use the right arrow button. You can set from 2 to 16 beats. (I.e. if you set the beat to 6, you will have to tap 6 times before the new tempo is computed and set.) When the display shows an R, it means that the BeatCounter is ready to start from 0. Every time you tap with the comma key, it will show the number of taps that you have entered (1, 2, 3...).

The button in the bottom right-hand controls the auto-start feature, and it toggles between S and P. When it shows P for (Play), the song will set the new tempo and automatically start to play after you tap the right number of beats (if it's not already playing, of course). This way, if you have the BeatCounter set up for 4/4, you can tap 1-2-3-4, and start playing on the next beat. When it shows S (for Set BPM), the auto-start is disabled.

For example: Suppose you have a live band, Hydrogen, and a softsynth that is controlled by Seq24)... and you want them all to start at the same time. Set the beat type to 1/4 and the number of beats to 4. Enable auto-start (button shows P). Count off the band 1-2-3-4 (while tapping the comma key) — and everyone starts on 1.

Another example: Same situation, but the song doesn't require Hydrogen or synths until some point later. During that time, a human (e.g. guitar player) will be setting the tempo. On the measure before Hydrogen is supposed to play, tap the comma key 1-2-3-4 with the beat... and you're in on the next beat (at the right tempo).

If you are using the JACK Transport, the BeatCounter continues to work. If another program is the JACK Transport Master, Hydrogen will respond to tempo change events from that application. Note that in this situation, Hydrogen is supposed to be a slave, so some of the BeatCounter features will be disabled or will not work properly. If Hydrogen is the JACK Transport Master, tempo changes from Hydrogen will be reflected in those programs (if they support it).

Some of the settings to adjust the BeatCounter's latency compensation, are located on the General tab of the Preferences Dialog (see Section3.1 ). Here you will finde two spinboxes:

  • Beat counter drift compensation in 1/10ms — adjust to compensate for latency between the keyboard and the program.

  • Beat counter start offset in ms — adjust the time between the BeatCounter's last input stroke and when the song starts playing (if auto-start is activated).

Note that these can be set to positive (+) or negative (-) values. In order to find useful values for these, you will need to take some time to play with it. Also, you may want different values depending on the speed of your hardware, audio devices, drivers, etc. Using the BeatCounter effectively requires practice.

4.Editeur de Morceau

The "Song Editor" (Figure2.2) gives an overview of the whole timeline of the song (e.g. intro, verse, bridge, chorus and so on); each blue colored square on this panel is a complete bar as shown in the underlying "Pattern Editor" panel. Here we have complete freedom to add, remove or move patterns in any order we prefer. We can also copy and paste patterns: use left mouse button to highlight an area and drag it around. Dragging with CTRL key pressed copies the patterns.

The Song Editor comes with 7 buttons:

- -

  • Completely delete all patterns (asks for confirmation!).

  • Create a new pattern (and asks for a name).

  • Move currently selected pattern up or down.

  • Enable selecting patterns for copy & paste (Select Mode).

  • Enable Draw Mode.

  • Switch from "Single pattern mode" to "Stacked pattern mode" and back..

Sous ces boutons, vous trouverez une liste des motifs crs et quand ils seront jous. Cliquez sur une case vide pour jouer le motif (apparition d'une croix) ou sur une case contenant une croix pour l'effacer. Cliquer avec le bouton droit de la souris sur un motif ouvrira un menu permettant de modifier son nom, de le copier ou de le supprimer. Notez qu'il est impossible de crer deux motifs portant le mme nom !

Figure2.2.The Song Editor

The Song Editor

4.1.Virtual patterns

Virtual patterns are a convenient way of grouping patterns together. For example, say you have a song in which three patterns are always played together at the start of each bar. Previously, the way to do this in the pattern matrix was to explicitly enable the three patterns at each bar.

With virtual patterns we can assign a pattern to be a sort of meta-pattern that implicitly invokes these three patterns together when the new virtual pattern is enabled in the pattern matrix. This way, we only need to set one pattern every bar, instead of three.

Virtual patterns provide a function that's similar to the regular pattern editor, and one could argue that since a virtual pattern is also a regular pattern, we could have just merged the three patterns into this new one. However, the advantage that virtual patterns provide is that if one of the original three patterns changes, the virtual pattern automatically inherits the change. A virtual pattern can also invoke other virtual patterns.

To access virtual patterns, right click (bring up the context menu) on the label of an existing pattern and there select “Virtual Pattern”. This will bring up a small dialog that allows one to toggle which patterns are in the virtual pattern set.

5.Editeur de motif

The "Pattern Editor" lets us create or modify the pattern (bar) which is currently selected. You can add/remove notes, and tune a number of per-note properties like velocity and pan. The Pattern Editor can be used in 2 modes : 'Drum' mode or 'Piano' mode. You can switch between these modes by clicking the Drum/Piano button (located on the top-right of the Pattern Editor)

First let's take a look at the (classic) 'Drum' mode :

Figure2.3.Pattern Editor in Drum mode

Pattern Editor in Drum mode


-

5.1.Pattern Editor Controls

The top part of the pattern editor contains a number of controls :

Figure2.4.Pattern Editor Controls

Pattern Editor Controls

From left to right :

  • SIZE : lets you choose the size of the pattern (the number of bars)

  • RES : this is the current grid resolution (4 through 64)

    Remember this constraint concerning the grid: if you are working with a resolution of 16 you can't go back to 8 and remove a 16th note. On the other hand if you are working with a resolution of 8 and you try to insert a note in the middle of two bars (looking for a 16 bars precision), notes will be placed in the previous or in the following 8th bar. This constraint can be removed if you disable the whole grid resolution (choose "off" from the grid resolution LCD control). Now you'll be able to place notes wherever you prefer.

  • HEAR : when enabled Hydrogen will play the sample as it's being added to the pattern.

  • QUANT : enables/disables quantization. When enabled the beats inserted will automatically respect the grid resolution currently applied.

  • Drumset / Instrument : when set to Drumset the keys on your midi keyboard will map to the instruments in your sound library as described in the instrument mapping table below. If you set it to Instrument the keys of your midi keyboard will trigger the instrument that is currently selected. The pitch of the instrument will follow the key you press on your keyboard. This feature is mainly used for non-drum instruments. An example : if you use a sample of a piano for one of your instruments, you will be able to 'play' that piano instrument using your keyboard just like you are playing a piano synth.

  • Note Length / Note off : these are 2 different ways to define the duration of a note. See Section5.3 for usage.

  • Drum/Piano : switch Pattern Editor between Drum and Piano mode. (see below)

5.2.Pattern Editor Drumkit

The section on the left shows you what drumkit/library is currently selected (GMkit by default) and below that you can see the instruments that are part of this kit.

- -

Each instrument has its own set of features that are accessible by right-clicking the instrument. From the context menu that pops up you can select

  • Clear notes : to remove all notes for this instrument in this pattern.

  • Fill notes : this allows you to fill up the pattern with notes for the selected instrument. Depending on the choice you make (fill all, fill 1/2, fill 1/4 ...) notes will be placed at all, 1/2, 1/4, etc of the note positions that are allowed by the grid setting. So be careful not to mix up the 'musical' 1/2-note and the 'fill 1/2' note.

  • Randomize velocity : automatically apply a pseudo-random velocity to each note of that instrument in the pattern. The more velocity you set on the instrument, the more hydrogen will hit hard on that instrument when played.

  • Delete Instrument : well, deletes the instrument ;-)

The small red and green buttons right of the instrument names are the mute (red) and solo (green) buttons.

The order of the instruments can be rearranged by simply dragging an instrument up/down in the list and dropping it on a new position within the drumkit/library. Doing so will not change anything to the sequence you have created for that instrument, nor will it change anything to the song or pattern you are working on. It will however, have an impact on the MIDI note mapping : in the table below you can find the link between the instrument position, the MIDI note and the qwerty keyboard keys.

Important Notes :

The name of the instrument depends on the drumkit that is loaded. This list below refers to the GMkit that is loaded by default.

Keep in mind that it is the position of the instrument (within the loaded drumkit) that is linked to a MIDI-note/keyboard-key and not the name of the instrument.

Here's a quick reference of the above bindings for your convenience.

5.3.Pattern Editor Sequence area

This is where it all happens, this is where you can make music :-)

In this area you can see your selected pattern and add notes for any instrument. The simplest way to create a pattern is by adding notes using your mouse (and the 'Fill/Clear notes' function described above). Where you can add notes depends on the used pattern size and resolution.

If you are using Hydrogen as a pure 'drum' you just want Hydrogen to 'hit' the instrument wherever there's a 'dot' in the pattern. If you are using Hydrogen as an 'instrument', the length of the note becomes very important. There are 2 ways to define the length of a note : in 'Note Length' mode you can add a note by left-cliking, and you can 'stretch' that note by right-click-dragging it. This will change the dot into a rectangle that represents the duration of that note. In 'Note Off' mode you can also add a note by left-clicking, but a right-click will now add a blue dot that represents the end of that note.

(Figure above, from left ->right : a 'normal' note, a note in 'note length' mode, a note in 'note off' mode)

So far we have only used the mouse to create a pattern, but you can also record your beats by clicking the Record button (see Section2) and simply playing your pattern on your MIDI drum or your pc keyboard (see instrument mapping above). This is probably a more musical way of creating a pattern, but it's up to you to decide what works best for you. (Also see Chapitre3 for a basic walk-through of how the pattern editor works)

5.4.Pattern Editor Note Properties

Clicking on an instrument or adding/removing a note next to it will select this instrument. Once an instrument is selected the note properties for this instrument will be shown in the form of vertical lines in the bottom window. The lines represent the value for the selected property of each note of the selected instrument. You can select another note-property from the note property drop-down list (located bottom-left). There are 4 note properties available :

  • Velocity : how hard the note is played (the volume of the note)

    Note that the color of the note-dot and the vertical bar will change according to the velocity value you have defined. A light shade of gray means a low velocity (low volume) and the higher you set the velocity the darker the color will be, turning red when you reach the point of clipping.

  • Pan : with this parameter you can define the stereo image of the note (how loud it will be in the left/right output)

  • Lead/Lag : Lead and Lag allows a slight note lead or lag in respect of the actual beat. The range is ca. 5 ticks which equals around ca. 10 ms at a tempo of 120bpm. Changing the lead/lag can make a huge difference to the way your pattern sounds and feels. It's a groove thing ;-)

  • Notekey : if you select this note parameter the area where you can modify the parameter will change into a 'piano keyboard'

    The striped black and white area represents a piano keyboard and in the gray area you can choose the octave. By placing a dot on the octave scale and a dot on the 'keyboard' you can choose any note.

-

5.5.Pattern Editor Piano mode

Drum mode (see Figure2.3) focuses on using Hydrogen as a drum machine. If you are using Hydrogen as an instrument there is a big chance that the Piano mode is for you. It gives you a complete 'piano keyboard' so you can easily put down your tunes.

You can compare the Piano mode to the Note properties Notekey (described above), only here you have a complete piano keyboard, so you dont have to select the octave first.

Figure2.5.Pattern Editor in Piano mode

Pattern Editor in Piano mode

6.Table de mixage

Figure2.6.The Mixer

The Mixer

The Mixer frame (Figure2.6) is useful for tuning a global or single volume of the current drumkit. It shows the current peak (click on to disable, useful on old CPUs) and let you set the maximum peak allowed (tune with the fader knob of the instrument), lets you modify attributes like pan, play solo , mute or test play only that instrument ; selecting in the Pattern Editor an instrument causes a blue LED to light on (near the play button). Near the global volume knob, you can set 3 global effect such a swing (shifts a few notes back or forward not randomly), timing (modify timings of the notes) and humanize effect (random velocity editing).

In addition to all this you can set up to 4 special LADSPA effects for each instrument switching the button. See next section for a detailed overview.

7.Sound Library (Drumkit Manager)

The Sound Library saves you time in managing your drum kits, favorite patterns, and favorite songs. When making new songs and drum kits, the Sound Library makes it easier for you to reuse and mix the instruments and patterns from other kits and songs.

7.1.System Drumkits

This lists the drumkits that were installed by your system administrator. It was determined by the compile-time prefix. On Unix-like operating systems, this is usually /usr/share/hydrogen/data/drumkits, or possibly /usr/local/share/hydrogen/data/drumkits. These kits are available to all users on the system, and users are usually not able to add to them.

To load a drumkit from here, right-click the drumkit and select Load. This will replace your current drumkit with the one that you selected. To load a single instrument from that kit, left-click the plus to the left of the drumkit's name to show all the instruments. With your left mouse button, click and drag the instrument into your current kit. The instrument will be added to the drumkit that you currently have loaded.

7.2.User Drumkits

These are your own drum kits that you can manage yourself. They are usually stored in $HOME/.hydrogen/data/drumkits. When you are creating a new drumkit, you can save it here by selecting InstrumentsSave library.

Loading drumkits and instruments to use is the same as for the System Drumkits (see Section7.1).

7.3.Patterns in the Sound Library

Before you save your favorite patterns to the sound library, be sure to edit it's properties by right-clicking and selecting Properties. There, you can give the pattern a title and a category. You can use one of the categories already provided, or create your own categories by simply typing in a category name. The category name is important, because the patterns will be filed by category in the Sound Library.

You can save your favorite patterns in the sound library by right clicking the title of the pattern in the song editor, and selecting Save Pattern. It will appear in the Sound Library underneath Patterns and the category that you assigned to the pattern.

7.4.Songs in the Sound Library

To save songs in the Sound Library, put them in your data directory underneath the songs folder (usually $HOME/data/songs. To remove them, remove the file from that folder.

8.Drumkits and Instrument Editing

Creating a new drumkit with Hydrogen is done with the Instrument Editor. Using the instrument editor you can load samples, set envelope parameters, set the gain, and a few other advanced features like mute groups, low-pass resonance filter, and pitch randomization.

Instead of creating your own drumkit, you can also use or download existing drumkits using the Section7.

8.1.Concepts

The synthesizer in Hydrogen is a sample-based synthesizer. A sample is a piece of pre-recorded audio (usually between .1 sec and 3 sec). To play a note, the sample is simply played back at the right time. There's a few concepts and terms that you should understand when you are putting together a drumkit. (See Glossary for more detailed explanations.)

Sampling Synthesizer Terms

Sample

A short recording of a sound, typically between .1 and 3.0 seconds long.

Gain

Volume adjustment.

Velocity

How hard you hit a note.

ADSR Envelope Generator

An Attack/Decay/Sustain/Release envelope generator. After you trigger a note, Hydrogen will attack the note by increasing its volume from 0 to the full velocity of the note. After reaching full velocity, it will decay the note by lowering the volume until it reaches the sustain level. When the note is released, Hydrogen reduces the volume from the sustain level back down to 0.

Attack

The amount of time to go from 0 to full velocity.

Decay

The amount of time to go from full velocity to the sustain volume.

Sustain

The level (how loud) to hold the note between the sustain and the release. It is a percentage of the velocity. It does not depend on time.

Release

The amount of time to go from the sustain volume back down to 0.

Typical samples that are used in Hydrogen are: the sound of a single drum hit, the sound of a single cymbal hit, the sound of a single cowbell hit. Whenever you put a note in the pattern (or play a note using MIDI), Hydrogen will play whatever sound you have loaded. So, to put together a drum kit you need to gather short recordings of the bass drum, each tom, each cymbal, the high hat open, the high hat closed, the snare drum (snare on), the snare drum (snare off), rim shots, etc.

However, there are no rules about what a sample can be. It's not uncommon to use Hydrogen to trigger non-drum sounds like: audio clips of people talking, a clip from a song, sound effects, audio clips from movies, and famous people speaking. Be creative!

8.2.Creating a New Drumkit

To start a brand new drum kit, select InstrumentsClear All . This will give you a bank of 32 blank instruments. To delete instruments, right-click on on each instrument and select Delete Instrument. To add more instruments, select InstrumentsAdd instrument .

Select an instrument to start editing it. This is done by left-clicking on the name of the instrument in the instrument list (at the left). You will notice that the name of the instrument in the Instrument Editor matches the one that you clicked.

After you have your drum kit working the way you want, select InstrumentsSave library . It will ask you for the name of the kit to save. If you wish to overwrite an existing kit, you will need to type in the same name as the kit that you want to replace.

Drumkits are automatically stored in the data directory (i.e. $HOME/data/drumkits).

To export a drumkit (for sharing with others), it must first be loaded into your Sound Library. Then, select InstrumentsExport library from the menu. Select the drum kit that you wish to export, and give it a file name to save it to.

8.3.Creating an Instrument and Layers

For each instrument in a drum kit, you can load several samples and set different synthesizer parameters. This section will step you through how to create a new instrument and load the samples.

To begin creating an instrument, select InstrumentsAdd instrument. This will give you a blank instrument to start from.

Now, you need two samples. Any .WAV or .FLAC file will do. Hydrogen provides several in the data/drumkits directory.

In the instrument editor, click on Layers. You can layer several samples into the instrument. Which one is played depends on the velocity of the incoming note. Click Load Layer and point the Audio File Browser to your sample. Note that the Audio File Browser will allow you to preview the sample before you load it. It will also allow you to load more than one sample at a time. But for now, only load one.

After you load the sample, you'll see that there is now a 1 at the top, and the topmost rectangle has turned light blue. To load a second sample, click the slot just below it, and then click Load Layer to bring in another sample.

After bringing in both samples, you'll probably notice that only the first sample is being played whenever you trigger the instrument. This is because you need to set the velocity ranges for the layers. Move your mouse to the sides of the light blue rectangles and you see that you get a left-right drag cursor. Now drag the sample to the left or right (like a curtain). You will now see Layer 2 appear.

The velocity setting for the layer is 0-velocity on the left, and full velocity on the right. Set up Layer 1 to sound for soft notes, and Layer 2 to sound for hard notes. (I.e. Layer 1 on the left and Layer 2 on the right.)

Now, in the pattern area, set up a simple pattern that plays this instrument. Adjust the velocity settings on each note so that you can get the different samples to sound. Now set the pattern to loop and notice how your different samples are getting triggered. (To learn about editing a pattern, see Section5)

For each layer, you can set the Gain and the Pitch. The pitch also has a Fine adjustment.

Use the Gain adjustment to control how loud the sample will play. This is necessary because it's extremely difficult to get a set of samples that all sound at about the same volume. By adjusting here, the samples that were recorded too quietly can be turned up to match your loud samples (that had to be turned down).

Avertissement

It is very easy to set the Gain too high, causing your sample to clip. Remember to test the gain with full-velocity notes. If you clip your signal here, it will only get worse as Hydrogen processes it.

The pitch of the sample can be modified with the pitch controls. The Pitch knob adjust the pitch in musical half-steps. (So, -12 is down 1 octave). The pitch on the right adjusts the pitch 50 cents. (One half-step is 100 cents.)

Note

The pitch is adjusted by playing the sample back faster or slower. This is called the Dopplar Effect. So, if you have a 1-second sample that you turn down -12 (1 octave), you sample will only last for .5-seconds.

8.4.Instrument Parameters

In the instrument editor, click on the General button. Here you can adjust several parameters that are for the whole instrument (not for each layer). The parameters that you can adjust are:

  • Envelope parameters: Attack, Decay, Sustain, Release. (See Envelope Generator)

  • Gain: The overall volume of the instrument.

  • Mute Group: Which mute group this instrument is a member of (see Mute Group).

  • Filter Parameters: Bypass, Cutoff, Resonance.

  • Random Pitch

It's important that you understand Section8.1 in order to continue on.

8.4.1.Envelope Parameters

When the instrument is triggered, its volume is run through an ADSR Envelope. The parameters operate as follows:

  • Attack — the amount of time that the volume of the sample goes from 0 to the full velocity of the note. If the value is 0, the sample will play immediately at full velocity. If the value is 1.0, the sample volume will use the maximum time available for the attack parameter. [1] -

  • Decay — the amount of time for the volume of the sample to go from full velocity down to the sustain volume. If the value is 0, the sample will immediately skip from the attack volume to the sustain volume. If the value is 1.0, the sample volume will use the maximum time available for the decay parameter.[1]

  • Sustain — the volume to play the note after the decay phase is over, and until the note is released. If set to 0, the note will be silent. If set to 1.0, the note will play at full velocity.

  • Release — the time to fade out the note from the sustain volume back down to 0 (silent). If set to 0, the note will fade out in the minimum amount of time (about 5 ms). If set to 1, it will fade out for the maximum time available.[1]

If the sample is shorter than the times that you specify, the sample will end, regardless of which phase of the ADSR it is in. If the note is sustained, it does not draw out the note while you are holding it. It only holds the gain (volume) parameter during that time.

8.4.2.Gain and Mute Group

The gain sets the overall volume for the sample. This gain is applied after the gain that you set for the layer, and before the gain that is set for the mixer. If the Gain is 0, the instrument will be silent. If the gain is 1.0 the volume of the samples will not be adjusted (i.e. 0 dB). If the gain is set higher, the samples will be amplified.

Avertissement

It is very easy to set the Gain too high, causing your sample to clip. Remember to test the gain with full-velocity notes. If you clip your signal here, it will only get worse as Hydrogen processes it.

Hydrogen provides more mute groups than you know what to do with (over 256). A mute group is a grouping of instruments that are mutually exclusive — only one instrument may be playing at any time. If one is playing and another instrument in the group is triggered, it will immediately silence (mute) and start playing the other instrument. This is useful, especially, for instruments like hi-hats where the open sound and the closed sound are different instruments.

If the mute group is set to Off, then the instrument is not part of any mute grouping. If the mute group is set to any number, then that is the group that the instrument is a part of. To set other instruments into the same grouping, set their mute group parameter to the same number. (For example, to group all the high-hat instruments, you can set all their mute group parameters to 1. To have a snare drum mute group, set their mute group parameters to 2.)

8.4.3.Filter and Random Pitch

The filter is a low-pass resonance filter. If you don't wish to use is, click the BYPass button so that it's red. If it's not red, then the filter is active. The cutoff parameter adjusts the cutoff frequency for the filter. The resonance parameter adjusts how much to resonate the cutoff frequency. If the resonance is set to 0, then the filter is just a simple low-pass filter.

Note

The cutoff frequency of the filter varies with the sample rate of your audio card. The range of the knob (0 to 1.0) is optimized for a 48,000 kHz sample rate.

The random pitch parameter allows you to randomly vary the pitch of the sample every time it is triggered. The value is set between 0 and 1.0. The pitch change is fairly small: 2 half-steps value. Using this sparingly can help your sequences to sound more like a real drummer.

8.5.Tips on Editing Instruments

With all of the different parameters available to tweak, it can be difficult to set up something that sounds nice when you're done. Here's a few tips on setting up an instrument:

Turn down the gain. Every time you have a gain knob (i.e. an amplifier), this is called a gain stage. With every gain stage you have, it's easy to overdrive your signal — which means the signal gets distorted by clipping. In addition, if you have two samples that, by themselves, peg your meters — what do you think happens when you combine them? That's right, you overdrive the signal again.

If things sound bad and distorted, start by turning down the gain setting on the layer... especially if it's larger than 1.0. Then turn down the instrument gain. Then any gain on a LADSPA effect. Then the fader on the mixer. Then the master output fader.

Test samples at full velocity. Your sample will be played louder if the velocity is higher. So, if you set everything to sound nice and full with velocity at 0.7, what will happen when you get a full velocity of 1.0? (Hint: clipping.)

Try to use samples that are -6 dB max. Visually, this means samples that peak at only 1/2 of full scale. Otherwise, turn your layer gain to about .5.

Remove all DC offsets from the sample. In a sample editor, there is usually a line down the center of your sample's waveform. This is the zero-line. The beginning of your sample should be on this line. The end of your sample should also be on this line. However, if your signal is a little above or a little below this line, you will hear a click at the beginning and the end of your sample whenever it is played. If your sample editor doesn't provide any tools to fix a DC Offset problem, you can eliminate the noise by putting a slight fade-in/out at the ends of your sample.

The ADSR will not be longer than your sample. If you have a short sample, it doesn't matter how long you set the attack and delay — the sample will stop playing at the end.

Things change with the sample rate. If you have a really nice setup with all your parameters painstakenly tweaked... things will change if you change the sample rate of your audio card. Many of Hydrogens internal settings and parameters are done based on how many samples go by, and not on how many seconds go by. The sort of things that change are: anything time-base (like attack and release) and anything frequency based (like the cutoff frequency).

9.Les plug-ins LADSPA

Hydrogen can also add effects to sounds using any LADSPA plugin library. You need to have installed the LADSPA sources (available from http://www.ladspa.org) and while this will give a rough idea of how it works you should really have a taste of the real thing installing one or more plugin libraries, it's as simple as a scons && scons install. Here are a few places to download plugin libraries:

Plugins Kill

A LADSPA plugin is compiled, executable code. It is capable of hanging, crashing, freezing, screeching, overflowing buffers, and even phoning home. If you start having issues with Hydrogen, disable your plugins and see if things improve. Some plugins are not designed for real-time use, and some are just plain better than others.

Once you have installed a few plugins open a song you'd like add an effect to and select an instrument that has a few beats in the pattern. In the Mixer click on and select one of the four available effect line Click on the Edit button ( ), than on Select the FX: this will bring up another window (Figure2.7) that lets you choose an effect amongst those installed, they are alphabetically sorted and categorized. Once you're done, adjust the level from the mixer and start playing. Each round knob in the FX part controls the level of its effect. If you want to quickly enable/disable the effect click the Bypass ( ) button.

Figure2.7.Select an Effect

Select an Effect



[1] The attack, decay, and release parameters are all set by the number of audio samples. This means that the time changes depending on the sample rate of your sound card. The max time for each of them is 100,000 audio samples (typ. 2.27 sec at 44.1 kHz).

Chapitre3.Crer un nouveau morceau

1.Mode "Morceau" contre mode "Motif"

This is just a quick-and-dirty walkthrough to Hydrogen. Refer to the tutorial for a more detailed overview.

Hydrogen has 2 main modes: "Pattern" mode and "Song" mode (refer to Section3 for the buttons to activate). When "Pattern" mode is activated the current pattern is continuously repeated. This mode is very well suited to tweak your pattern untill it's just right, since the pattern you are working on is constantly repeated. This way you can immediately hear the changes you have made. In "Song" mode the whole song is played. This is useful when putting together the patterns, to create the structure of the song.

2.Un nouveau motif

We'll start from an empty song with an empty pattern, as created by default: "pattern" mode should be selected now. It is also possible to change name of the pattern. Now let's click on the Play button and while the pattern is playing let's add notes in the grid of the Song Editor (Figure3.1) simply left_mouse_clicking on it: adjust grid resolution and BPM speed if needed. Remember some constraints of the grid: if you are working with a resolution of 16 you can't go back to 8 and remove a 16th note; same thing happens if you are working with a resolution of 8 and you try to insert a note in the middle of two bars (looking for a 16 bars precision): they will be placed on the previous or on the following 8th bar (unless you choose off from the Grid Resolution LCD, in this case you're free to place notes wherever you prefer). Be sure to select the correct pattern in the Song Editor before adding notes in the Pattern Editor!

Figure3.1.The Pattern Editor

The Pattern Editor

3.Un nouveau morceau

Once patterns are created (Figure3.2), we can copy/paste/delete them simply dragging with the mouse (activate the select mode for the Song Editor and keep pressed left mouse button to select those you want to move or copy).

Figure3.2.Inserting Notes in a Pattern

Inserting Notes in a Pattern

4.Utiliser la table de mixage

Il est toujours possible de se servit de la table de mixage, mme lors de la cration ou de la lecture de motifs.

The Mixer frame (Figure3.3) is made of 32 independent tracks, each of these is binded to an instrument, plus a "Master Output" line to adjust general output volume and a "FX" button to set effects. Every line features 3 buttons ( ), pan adjust ( ), current maximum peak, volume fader and name of the track. Clicking on will play the selected instrument, cutting the others. The "Mute" button , simply mute that instrument. The maximum peak indicates the maximum volume reached from the instrument; the peak must be in a range of 0.0 and 1.0 (in Figure3.3 you can see a few volumes too loud), otherwise it will get distorted producing a weird sound (especially with OSS audio driver), in this case it's better to set volume down; keep an eye on each vu-meter.

Figure3.3.The Mixer

The Mixer

Chapitre4.Shortcut lists

  • [CTRL + N] = New Project

  • [CTRL + O] = Ouvrir un morceau

  • [CTRL + D] = Open Demo

  • [CTRL + S] = Enregistrer un morceau

  • [CTRL + SHIFT + S] = Save File as

  • [CTRL + P] = Export Pattern as

  • [CTRL + M] = Export MIDI file

  • [CTRL + E] = Export Song

  • [CTRL + Q] = Quit Hydrogen

  • [ALT + B] = Show Director window

  • [ALT + M] = Show Mixer window

  • [ALT + I] = Show Instrument rack

  • [ALT + P] = Show Preferences window

  • [CTRL + ?] = Show manual

  • [Backspace] = Relancer le morceau (ou motif) depuis le dbut.

  • [spacebar] = Play / Pause

  • [,] (comma key) = Tap tempo (beatcounter)

Glossary

This is a glossary of general terms encountered when using Hydrogen, synthesizers, drums, or samplers. The definitions in the text are simplified, but the definitions here are more general and have more explanation. For example, the text of the manual would have you believe that an ADSR is the only kind of envelope generator, and could only ever control the volume. While it's simple for new users, it's not quite right.

ADSR

A type of envelope generator that allows you to control the Attack, Decay, Sustain, and Release parameters. Generally, the parameters are proportional to the velocity.

In Hydrogen, the ADSR envelope generator only controls the volume (attenuation).

Read more about this in the Wikipedia Article ADSR Envelope

Voir aussi Envelope Generator, Attack, Decay, Sustain, Release.

Attack

This is the first phase of an ADSR envelope, and is the amount of time to turn the parameter up from 0 to full velocity after triggering the note.

Voir aussi ADSR.

Attenuation

In filters and mixers, this the amount that a signal is reduced (volume).

Voir aussi Roll-off.

Band-Pass Filter

A filter that preserves a certain band of frequencies, and attenuates (silences) all others. This is often done by combining a high-pass and a low-pass filter.

Voir aussi Filter, High-Pass Filter, Low-Pass Filter.

Clipping

A phenomenon that happens to a signal when the signal is too large for whatever is receiving it. The peaks of the signal (which are normally smooth curves) get cut off straight at the max volume (clipped). This distorts the sound and is usually undesirable.

An example of clipping is when you play music louder than your speaker can handle. Parts of the music sound harsh and fuzzy.

Cutoff Frequency

On high-pass and low-pass filters, this is the frequency that divides between those that pass, and those that are attenuated (silenced). In a high-pass resonance filter, or a low-pass resonance filter, the cutoff is also the frequency zone that gets boosted.

For example, if you have a low-pass filter and you set the cutoff frequency high (i.e. 20kHz)... the filter will not affect the sound. All the audible frequencies will pass through undisturbed. As you lower the cutoff frequency to something like 40 Hz (the low string on a bass guitar), it sounds like someone is putting a blanket over the speaker. The higher frequencies are being attenuated above 30 Hz.

Voir aussi Filter, High-Pass Filter, Low-Pass Filter, Resonance Filter.

Decay

After reaching full velocity from the attack, this is the amount of time to turn the parameter down from full velocity to the sustain level.

Voir aussi ADSR.

Envelope Generator

A way to control (change) a parameter over time as a response to triggering, holding, and releasing a note.

Did your eyes just glaze over? Let's try again:

Imagine that you're playing a note on the keyboard and you have your other hand on a knob (volume, filter cutoff, etc.). As you play the note, you twist the knob (often up, then down... or down, then up). You do the same thing on each note. That's what an envelope generator does. See also ADSR

Fader

A slider control used to adjust the attenuation (volume) in a mixer. Faders always have an "audio" taper, which means that the attenuation amount changes on an exponential scale.

Filter

A device that changes a sound by attenuating specific frequencies. A tone knob is an example of a simple, low-pass filter.

Voir aussi Band-Pass Filter, High-Pass Filter, Low-Pass Filter, Resonance Filter.

Gain

In an amplifier, this adjust how much (or how little) a signal is amplified (volume). A higher gain value is a louder signal.

High-Pass Filter

A filter that attenuates (silences) low frequencies, but allows high frequencies to pass through.

Voir aussi Filter, Cutoff Frequency.

Instrument

In Hydrogen, an instrument is a single noise-maker (like a bass drum kick, or a tom).

Layer

In an instrument you can load several different samples (each one called a layer), and have a different sample play depending on the velocity of the note. Only one sample at a time will play.

Suppose you have a sample of a floor tom being struck softly. If you simply play the sample louder — it will not sound the same as a real tom that has been struck very hard. If you wish to mimic this in your instrument, you can load one sample for soft playing, and a different sample for loud playing.

Voir aussi Instrument.

Low-Pass Filter

A filter that attenuates (silences) high frequencies, but allows low frequencies to pass through.

Voir aussi Filter, Cutoff Frequency.

Mute

To make no noise. A setting on an instrument that prevents any audio output.

Mute Group

A group of instruments (samples) that should mute (stop playing) immediately after another instrument in the group is triggered.

This is typically used in hi-hats, where there's a different instrument (sample) for when the hi-hat is open or closed. With a real hi-hat, the sound of the open hi-hat will stop as soon as you close it. However, if you use two samples — the open sound will continue even after you have triggered the closed sound. By placing both instruments in the same mute group (group #1, for example)... triggering closed sound will immediately stop the open sound (and vice versa).

Octave

A span of frequencies where the top-most frequency is exactly twice the frequency of the bottom frequency.

For example, the range 20 Hz to 40 Hz is an octave. So is 120 Hz to 240 Hz, and 575 Hz to 1150 Hz. While the frequency differences are very different (20 Hz, 120 Hz, and 575 Hz, respectively), to the human ear they sound like the same distance.

Release

After the note is released, this is the amount of time to reduce the parameter from the sustain level to 0.

Voir aussi ADSR.

Resonance

When referring to a resonance filter, this is the parameter that determines how much of a boost (gain) to give the frequencies at the cutoff.

Voir aussi Resonance Filter.

Resonance Filter

A filter that gives a large boost to a very narrow range of frequencies. Typically it will be part of a high-pass or a low-pass filter, where the boosted frequencies are centered on the cut-off frequency.

Voir aussi Filter, Cutoff Frequency, Resonance.

Roll-off

This is the amount that frequencies are attenuated (suppressed) as the frequency changes (typically measured in dB/octave).

For example, in a low-pass filter the frequencies below the cutoff frequency are not attenuated (they pass-through with the same volume). Same with the cutoff frequency. As you go above the cutoff frequency, the frequencies that are near the cutoff frequency are not attenuated very much at all. However, the frequencies that are much higher than the cutoff are attenuated (suppressed) a lot. This is usually approximated by a straight line (on a log scale) and measured in in dB of attenuation per octave of frequency.

Voir aussi Attenuation, Filter.

Sample

A short recording of a sound, typically between .1 and 3.0 seconds long.

Sustain

The level to hold the parameter after finishing the decay time. This level will be maintained until the not is released.

Voir aussi ADSR.

Velocity

How hard you hit a note.

MIDI devices are required to send this information along with the note. Synthesizers use this information to adjust several parameters on the sample (typically the volume). In Hydrogen, it is only used to adjust how loud the sample is played back.

diff -Nru hydrogen-0.9.6.1/data/doc/manual_fr.po hydrogen-0.9.7/data/doc/manual_fr.po --- hydrogen-0.9.6.1/data/doc/manual_fr.po 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/data/doc/manual_fr.po 2016-11-05 08:22:50.000000000 +0000 @@ -366,7 +366,7 @@ msgstr "" "La compiation avec cmake peut être réalisée facilement en utilsant le script " "make_helper. Décompressez le tarball ou allez au répertoire où la copie " -"subversion a été vérifiée et lancer le script make_helper sans aucun argumen " +"subversion a été vérifiée et lancer le script make_helper sans aucun argument " "pour afficher l'aide :" #. Tag: screen @@ -543,8 +543,8 @@ "Nous pouvons sélectionner certaines fonctionnalités d'Hydrogen comme \"Créer " "une sortie par instrument\", ceci créera 1 sortie par instrument que vous " "pourrez connecter à n'importe quelle autre application compatible JACK. Ceci " -"peut être utile si vous voulez ajouter des effets à une seul instrument avec " -"Jack-rack par exemple. 'Connecter à la paire de sortie par défaut' connecte " +"peut être utile si vous voulez ajouter des effets à un seul instrument avec " +"Jack-rack par exemple. \"Connecter à la paire de sortie par défaut\" connecte " "la sortie aux ports par défaut : désélectionnez-la si vous voulez connecter " "les sorties JACK vers d'autres ports sans avoir à les déconnecter avant." @@ -734,7 +734,7 @@ "Note that the Audio Engine tab is only available if Hydrogen was complied " "with debug support." msgstr "" -"Notez que l'onglet \"Moteur Audio\" est disponible seulement si Hydrogen a " +"Notez que l'onglet Moteur Audio est disponible seulement si Hydrogen a " "été compilé avec le support debug." #. Tag: title @@ -839,7 +839,7 @@ "name, author, license and generic notes" msgstr "" "Propriétés - Paramétrer les propriétés générales du " -"morceau comme le nom, l'autheur, licence et des notes générales" +"morceau comme le nom, l'auteur, licence et des notes générales" #. Tag: para #: manual.docbook:393 @@ -937,7 +937,7 @@ "and drumkit (sound libraries) functions." msgstr "" "Instruments: ce menu offre des fonctions " -"d'instruments et des kit de batterie (bibliothèques de sons)." +"d'instruments et des kits de batterie (bibliothèques de sons)." #. Tag: para #: manual.docbook:439 @@ -980,7 +980,7 @@ "$HOME/.hydrogen/data/library_name" msgstr "" "Exporter la bibliothèque - Compresse tous les " -"échantillons d'instruments et les paramètres dans un kit de batterie dans in " +"échantillons d'instruments et les paramètres dans un kit de batterie dans " "$HOME/.hydrogen/data/library_name" #. Tag: para @@ -1362,8 +1362,8 @@ "(Play, NdT : Jouer), le morceau va paramétrer le " "nouveau tempo et démarrera la lecture automatiquement après que vous ayez " "tapé le bon nombre de pulsation (s'il n'est pas déjà démarré, bien sûr). Ce " -"faisant, si votr Compteur de Tempo est sélectionné à 4/4, vous pouvez taper " -"1-2-3-4, et démarrer à la prochaine pulsation Lorsqu'il affiche " +"faisant, si votre Compteur de Tempo est paramétré à 4/4, vous pouvez taper " +"1-2-3-4, et démarrer à la prochaine pulsation. Lorsqu'il affiche " "S (pour Set BPM, NdT : Paramétrer " "le BPM), le démarrage automatique est désactivé." @@ -1549,7 +1549,7 @@ msgid "" "Switch from \"Single pattern mode\" to \"Stacked pattern mode\" and back.." msgstr "" -"Bascule du \"mode à un motif\" versle \"mode en pile de motif\" et " +"Bascule du \"mode à un motif\" vers le \"mode en pile de motif\" et " "inversement.." #. Tag: para diff -Nru hydrogen-0.9.6.1/data/doc/manual.html hydrogen-0.9.7/data/doc/manual.html --- hydrogen-0.9.6.1/data/doc/manual.html 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/data/doc/manual.html 2016-11-05 08:22:50.000000000 +0000 @@ -1,66 +1,1242 @@ - - - Hydrogen user manual - - - - - - - - - - - - - - - - - - - - - - - - -
-

Hydrogen

-
-
  • English manual -
  • -
  • Manuale in italiano -
  • -
  • Manual en español -
  • -
  • Deutsche Anleitung -
  • -
  • French manual -
  • -
  • Nederlandse handleiding -
  • - -
      -
      - - - - - - - - - - - -
    -
  • English tutorial -
  • -
  • Tutorial in italiano -
  • -
  • French tutorial -
  • +Hydrogen Manual

    Hydrogen Manual

    Antonio Piraino

    Alessandro Cominu

    Thijs Van Severen

    Sebastian Moors

    Abstract

    Hydrogen is a software synthesizer which can be used alone, + emulating a drum machine based on patterns, or via an external MIDI + keyboard/sequencer software. Hydrogen compiles on Linux, Mac OS X and Windows.


    Chapter1.Introduction

    1.Download

    + You can download Hydrogen from + http://www.hydrogen-music.org. + On the 'Downloads' page you can find several binaries (installers) for Linux, Mac and Windows. (note that some versions may not be available for Windows and Mac) +

    + If you want to compile Hydrogen yourself (see Section2), you can download the latest source files directly from our + git repository with: - - +

    $ git clone git://github.com/hydrogen-music/hydrogen.git

    + + A certain release can be fetched with: + +

    $ git checkout tags/0.9.6

    +

    Compiling Hydrogen depends on the following libraries:

    Please install them with your distribution's package manager. If + you're running a debian-based system, you can install the libraries + with:

    +        $ apt-get install libqt4-dev g++ libasound2-dev \
    +        libjack-dev liblrdf0-dev libflac++-dev libtar-dev libsndfile1-dev \
    +        liblash-dev libportaudio-dev libportmidi-dev libpulse-dev
    +      

    2.Build

    Depending on the branch you are compiling you will need to use cmake. Check the INSTALL.txt and the README.txt files for more info (located in the top level dir once you downloaded the sources).

    Compiling with cmake can be done easily by using the build.sh script. Go to the directory where the git repository + was cloned and run the build.sh script without any arguments to display the help :

    +           $ ./build.sh
    +        

    The help is now displayed (and is self-explanatory) : +

    +             r[m]     => all built, temp and cache files
    +             c[lean]  => remove cache files
    +             m[ake]   => launch the build process
    +             d[oc]    => build html documentation
    +             g[raph]  => draw a dependecies graph
    +             h[elp]   => show the build options
    +             x|exec   => execute hydrogen
    +             t[ests]  => execute tests
    +             p[kg]    => build source package
    +          ex: ./build.sh r m pkg x
    +        

    To build Hydrogen run the build script with the 'm' option : +

    +           $ ./build.sh m
    +        

    3.Preferences

    First of all you should make sure that the audio engine is + configured properly. The preferences dialog can be accessed via the tools + menu (tools -> preferences).

    3.1.The General tab

    On the "General" tab (Figure1.1) you can + choose to automatically reopen the last used song and/or playlist. This can save you + the trouble of having to reopen the song you are working on every time you open + Hydrogen. Auto loading the playlist can come in handy when you are using Hydrogen live.

    If you want to use Lash for session management you should enable + it here so Hydrogen allows interaction with Lash. If jou are using Jack Session for session management + you have to option to let Hydrogen automatically save the song file in the Jack Session Directory.

    The Beat Counter drift compensation and start offset allow you to compensate + for system latency when you are using the Beat Counter function (see Section4.1)

    The Max number of bars in a song can be set here (currently limited to 800) + and if you want to use rubberband for sample time-streching (see Section9.5.2) + you need to enter the path where rubberband is installed on you system here.

    Figure1.1.The General Tab

    The General Tab

    3.2.The Audio System tab

    From the "Audio System" tab (Figure1.2) it is possible to modify the + audio driver being used (OSS, Jack, ALSA, PortAudio, PulseAudio, CoreAudio) with its buffer and + sampling rate (unless you are using JACK, in this case the audio driver + configuration should happen before starting the JACK server).

    We can set some features of Hydrogen like "Create per-instrument outputs" + this will create 1 output per instrument that you can connect to any other Jack enabled application. + This can be useful if you want to add effects to a single instrument with + jack-rack for example. "Connect to Default Output Pair" connects the output to the + default ports: uncheck this if you want to connect the JACK output to other + ports without having to disconnect them first.

    Also keep an eye on the value of "Polyphony": depending on your + CPU you may want to change the max simultaneous notes in order to + prevent hydrogen from overrunning the audio driver.

    The "Interpolate resampling" parameter allows you to select your preferred + interpolation methode.

    Figure1.2.The Audio System Tab

    The Audio System Tab

    + The following drivers are available: +

    • jackd: The Jack driver is a + professional audio server which permits very low lag and exchanges + with other audio software. We strongly recommend using + this driver to have the best out of Hydrogen. JACK + server will start automatically if not already running.

    • ALSA: the widely adopted + Linux standard audio drivers

    • OSS: The Oss audio driver + uses /dev/dsp and it's based on the OSS interface which is supported + by the vast majority of sound cards available for Linux; this said, + the use of this audio driver blocks /dev/dsp until Hydrogen is + closed i.e. unusable by any other software. Use it as last + resort.

    • PortAudio: an open-source + multi platform audio driver

    • CoreAudio: a driver for Mac + OS X (experimental)

    • PulseAudio: a driver for the cross platform + PulseAudio sound server.

    3.3.The Midi System tab

    The "Midi System" tab (Figure1.3) + contains all MIDI settings. Here you can choose the MIDI driver (ALSA, PortMidi, + CoreMidi or JackMidi) input, and channel(s) that Hydrogen should respond to. +

    Note

    If you want to use Jack Session management you should select the + JackMidi driver. Jack Session management can only (re)store Jack midi connections.

    + You can also define midi bindings: link a midi note/message to an action. + To do this simply press the red 'REC' button left of the event-action binding line. + A popup will inform you that Hydrogen is waiting for your input. Press/hit/turn + the key/pad/knob on your midi keyboard (or controller) that you want to link to + this action. The popup will close and the Event Param value will now show the + midi note value of the key you pressed. Once this is done you can select an Action + from the action drop-down list. Note that some actions (like SELECT_NEXT_PATTERN) + also require an Action Param that references the pattern you want to select with this midi action.

    See Section10 for more info on Midi actions.

    Figure1.3.The MIDI System Tab

    The MIDI System Tab

    3.4.The Appearance tab

    The "Appearance" tab (Figure1.4) let's you modify Hydrogen look + and feel (font settings and interface style). On this tab you can also change the + VU meters fall-off speed and switch between Single pane and Tabbed interface + mode (see Section2) +

    Figure1.4.The Appearance Tab

    The Appearance Tab

    3.5.The Audio Engine tab (debug only)

    The "Audio Engine" tab (Figure1.5) + is a window that shows various stats about + Hydrogen and the audio driver. In case JACK is used, buffer and sampling + rate should be set before starting Hydrogen (JACK automatically starts + when an application tries to connect).

    Note that the Audio Engine tab is only available if Hydrogen was complied with + debug support.

    Figure1.5.The Audio Engine tab

    The Audio Engine tab

    Chapter2.Using Hydrogen

    1.Used Filetypes

    Before working with Hydrogen, please familiarize with these + filetypes:

    • *.h2pattern: XML file + describing a single pattern. Patterns are group of beats and are + managed in the pattern editor.

    • *.h2song: XML file describing + the whole song (or sequence). Songs are group of patterns with their + properties and are manager using the song editor

    • *.h2playlist: XML file + describing a playlist. A Playlist is a (ordered) group of songs.

    • *.h2drumkit: a compressed and + archived folder containing all sound samples composing a drumkit and a + description XML file. Drumkits are basically group of sound + samples.

    2.The main User Interface : an overview

    The Main UI comes in 2 flavors : the (classic) Single Pane mode (ideal for + large- and medium size screens), and the Tabbed mode (optimized for netbook screen + sizes). +

    + Below you can see the main UI split up in 5 parts : the Main Menu, Main + Toolbar, Song Editor, Pattern Editor and the Instrument and Sound Library Editor. + These sections will be explained in detail further down in this manual.

    Figure2.1.The Main UI in Single Pane mode

    The Main UI in Single Pane mode

    Figure2.2.The Main UI in Tabbed mode

    The Main UI in Tabbed mode

    3.Main menu

    Projects: this menu offers file + related functions.

    • New - Create a new song

    • Show Info - Set general properties of the + song such as name, author, license and generic notes

    • Open - Open a song

    • Open Demo - Open a demo song (demo songs + are stored in + $INSTALLPATH/share/hydrogen/data/demo_songs)

    • Open recent - Open a menu showing last used + songs

    • Save - Save changes to current song

    • Save as - Save current song specifying a + name (default path: + $HOME/.hydrogen/data/songs)

    • Open pattern - Open a saved pattern + belonging to the current drumkit

    • Export pattern as - Saves a + pattern. It will be stored in + $HOME/.hydrogen/data/patterns/drumkit_name

    • Export MIDI file - Export current song in + MIDI format

    • Export song - Export current song in WAV + format (see Section5.4)

    • Quit - Quit Hydrogen

    Undo: Undo/Redo functions.

    • Undo - Lets you undo your last action

    • Redo - Lets you redo the last undone action

    • Command History - Gives you an overview of your previous + actions

    Instruments: this menu offers + instruments and drumkit (sound libraries) functions.

    • Add instrument - Add a new instrument to + your current drumkit

    • Clear all - Delete all instruments from the + current drumkit

    • Save library - Saves all instruments + settings (and their sound samples) in + $HOME/.hydrogen/data/library_name

    • Export library - Compress all instruments + samples and settings in a drumkit in + $HOME/.hydrogen/data/library_name

    • Import library - Imports another drumkit + from the local filesystem or download it from a remote location + through an XML feed. The XML file that should be provided is NOT RSS compliant (see Hydrogen + website for an example). To load another drumkit in your + current working session of Hydrogen, read Section8.

    Tools: opens the mixer, the director, the + playlist editor, the instrument rack and the general preferences + window.

    • Playlist editor - A tool to manage + playlists.

    • Director - Open the director window.

    • Mixer - Open the mixer window.

    • Instrument rack - Open the instrument rack + panel.

    • Preferences - Open the main preferences + window. Read Section3 on how to configure + Hydrogen.

    Debug: tools mainly for debugging + and monitoring Hydrogen (only available when compiled with debug + support !).

    • Show audio engine info - Open a monitor + with various stats

    • debug action - Insert debug + commands.

    • Print Objects - Print on stdout current + objects map.

    Info

    • User manual - Open a window with this + manual :)

    • About - The usual window with license + information, acknowledgements, etc.

    4.The main toolbar

    Before analyzing the two main frames of Hydrogen, let's take a quick + look at the main toolbar and its components:

    • Pilot the song using the start, stop, pause, etc. buttons

    • Choose between "pattern" or "song" mode: in "pattern" mode only + the currently selected pattern will play, while in "song" mode all + patterns inserted will be played.

    • An advanced tap tempo function: choose note length and how many + notes to wait before recalculating BPM, then hit the comma key + repeatedly until the 'R' letter appears and then the BPM will be + updated. (see Section4.1)

    • Manually set BPM

    • Manage JACK transport

    • Open the mixer and the instrument rack panels

    Figure2.3.The Main Toolbar

    The Main Toolbar

    • Main controls to start [Hotkey = + Spacebar], stop, record, fast forward, rewind, loop a song or a + pattern.

    • Set Pattern/Song Mode. When Song mode is selected Hydrogen will play + the complete song. This is the sequence of patterns you have created in the Song + Editor (see Section5). When Pattern mode is selected + Hydrogen will play the pattern that is currently selected, and thus displayed + in the Pattern Editor (see Section6).

    • Set measure type and Beat Counter (see Section4.1).

    • Set speed of playing (range: 30-400 bpm) [Hotkey = mouse wheel] and button to + enable/disable metronome

    • Shows CPU load and MIDI events. The CPU bargraph gives you an indication of the CPU load. The MIDI led lights up every time Hydrogen receives a midi message.

    • Click J. TRANS to enable Jack transport. If the J. MASTER button is pressed Hydrogen will work as 'master', else it will act as 'slave' + to another 'master' program (e.g. Ardour). Note that this applet is only + available if Jack Audio Driver is selected, NOT when the Audio driver is set to 'Auto'.

    • + The last section gives you quick access to the Mixer window and the Instrument Rack. + The LCD screen displays what Hydrogen is up to. +

    4.1.Tap Tempo and BeatCounter

    It is possible to change the tempo at any time using the tap-tempo and + BeatCounter features of Hydrogen. You can do this while the song is playing or + while the song is stopped. To change the tempo, hit the + , (comma) key in the tempo you want. + After the correct number of keystrokes have been detected (see + below for details), the tempo will change to the average tempo + you tapped the comma key. If you continue to tap, + these new taps will become a part of a rolling average. If you tap + accidentally, or if you wait too long between taps, the tap tempo + counter will start over.

    The Tap Tempo is a part of the BeatCounter, which is essentially a + Tap Tempo on steroids. By default the BeatCounter display is not + visible. To see the BeatCounter widget click the upright button + (BC) between Song/Pattern mode selector and the + BPM-widget, or, simply press the comma key. + (,).

    The tempo that you tap will be considered even beats of the song's + beat type. The beat type can be set to 1/8 (for eight-note beats), 1/4 (for + quarter-note beats), 1/2 (for half-note beats), and 1/1 (for whole-note + beats). To change the beat type use the left +/- buttons. To change + the Countdown Counter value, use the right +/- buttons. The Countdown + Counter value can be set between 2 and 16 beats. (I.e. if you set the beat to 6, you will + have to tap 6 times before the new tempo is computed and set.) When the + display shows an R, it means that the BeatCounter + is ready to start from 0. When you tap the comma key, the R will change to + 1, and will increment with every keystroke until it reaches the Countdown + Counter value (shown just below the 'R').

    The button in the bottom right-hand controls the auto-start + feature, and it toggles between S and + P. When it shows P for + (Play), the song will set the new tempo and + automatically start to play after you tap the right number of beats (if + it's not already playing, of course). This way, if you have the + BeatCounter set up for 4/4, you can tap 1-2-3-4, and start playing on + the next beat. When it shows S (for Set + BPM), the auto-start is disabled.

    For example: Suppose you have a live band, Hydrogen, and a + softsynth that is controlled by Seq24)... and you want them all to start + at the same time. Set the beat type to 1/4 and the number of beats to + 4. Enable auto-start (button shows P). Count off + the band 1-2-3-4 (while tapping the comma key) — and everyone + starts on 1.

    Another example: Same situation, but the song doesn't require + Hydrogen or synths until some point later. During that time, a human + (e.g. guitar player) will be setting the tempo. On the measure before + Hydrogen is supposed to play, tap the comma key 1-2-3-4 with the + beat... and you're in on the next beat (at the right tempo).

    If you are using the JACK Transport, the BeatCounter continues to + work. If another program is the JACK Transport Master, Hydrogen will + respond to tempo change events from that application. Note that in this + situation, Hydrogen is supposed to be a slave, so + some of the BeatCounter features will be disabled or will not work + properly. If Hydrogen is the JACK Transport Master, tempo changes from + Hydrogen will be reflected in those programs (if they support + it).

    Some of the settings to adjust the BeatCounter's latency + compensation, are located on the General tab of the Preferences Dialog + (see Section3.1 + ). Here you will finde two spinboxes:

    • Beat counter drift + compensation in 1/10ms — adjust to + compensate for latency between the keyboard and the + program.

    • Beat counter start + offset in ms — adjust the time between the + BeatCounter's last input stroke and when the song starts playing (if + auto-start is activated).

    Note that these can be set to positive (+) or negative (-) values. + In order to find useful values for these, you will need to take some + time to play with it. Also, you may want different values depending on + the speed of your hardware, audio devices, drivers, etc. Using the + BeatCounter effectively requires practice.

    5.Song Editor

    The "Song Editor" (Figure2.4) gives an + overview of the whole timeline of the song (e.g. intro, verse, bridge, + chorus and so on); each blue colored square on this panel represents a complete + bar as shown in the underlying "Pattern Editor" panel. The song editor gives + you complete freedom to add/remove patterns to the song and to move or + copy any part of your song. + + +

    Figure2.4.The Song Editor

    The Song Editor


    +

    5.1.Main controls

    + +

    • Completely delete all patterns + (asks for confirmation!). +

    • Create a new pattern (and asks + for a name). +

    • Move currently selected pattern + up or down.

      Note that you can also just drag-and-drop a pattern up/down in the pattern list.

    • Enable Select Mode. This mode allows + you to select a part of the song and delete/move/copy it.

      Once you have selected a part of your song you can delete + it by pressing the Delete button. You can move it by simply dragging your selection + to another location, and you can also copy + you selection by Ctrl-dragging it to a new location. +

    • Enable Draw Mode. This mode allows + you to create a song by drawing blocks on the song canvas.

      Clicking a square on the song canvas will add a pattern (the square + will turn blue), clicking it again will remove that pattern from the song. +

    • set Hydrogen to "Single pattern mode" + + or to "Stacked pattern mode".

      For more info on this see the SELECT_NEXT_PATTERN midi action in Section10. +

    5.2.Tempo markers and song Tags

    This section describes how you can define tempo changes and + how you can add tags to your song.

    The majority of songs consist of several parts (intro, verse, chorus ...) and + often these parts will have a different tempo. Hydrogen provides an easy way + to let you change the tempo of a song at any given moment in the song. This is + done by adding Tempo change Markers to your song.

    To add a Tempo change marker to your song you first need to enable the 'BPM' option + (the BPM button is located just above the Song editors main controls). Once this is done + the horizontal bar next to the BPM button changes to a ruler with marks at every bar. + Now simply left-click this ruler at the bar you want the tempo to change and a + window will pop up where you can enter the new tempo. + +

    + + Once you have entered the new tempo and clicked OK, the tempo change will + show up on the tempo ruler. If you click the Tempo marker again you can edit + the tempo, change the bar or delete the tempo marker. + +

    + +

    + In addidtion to changing the tempo when the song switches from intro > verse, + it is also very handy to have a clear indication of this tempo switch (or any other + event in the song). For this purpose you can also ad Tags markers to the song. + These Tags are short text messages you can add to your song at any given + moment that will be displayed whenever the song playhead passes by that Tag.

    + To add a Tag to your song simply middle-click on the song ruler (just below the + tempo ruler) and a window will pop up where that allows you to add text for any bar. + +

    + + Once you are done you will see a small blue 'T' in the song ruler for every tag + you have entered. Middle-click anywhere on the song ruler to edit the tags. + +

    +

    + Now all we need is a way to see the tags we have entered. This can be done + using the Director window. Open the Director by pressing Alt-D, or Tools- Director : + +

    + + The Director is your best friend when you need a quick overview of what Hydrogen + is currently doing. This comes in very handy when you are recording a song, or + if you are using Hydrogen live on stage.

    + The Director shows you the song name, a visual metronome and of course the + song Tags. Just below the metronome you can see the latest tag, and below that + the next upcoming tag. This way you have a nice overview of what is going on, + and what is about to happen in the song + +

    5.3.Patterns options

    Right-clicking the name of a pattern will show you a menu + where you can change a number of things :

    Figure2.5.The Pattern Options menu

    The Pattern Options menu

    • Edit : will open the selected pattern in the Pattern Editor. +

    • Copy : will copy the selected pattern to a new pattern in your song. +

      Note that patterns with the same name are not allowed.

    • Delete : will completely remove the selected pattern from the song. +

    • Fill/Clear : will open a window that allows you to fill/clear a + part of the song with the selected pattern by entering the start- and end bar. +

      +

    • Properties : will open a window where you can change + the name of the pattern and also assign it to a certain category. +

      +

      Note that you can choose one of the existing categories from the dropdown list, + but you can also enter a new category name in the Pattern Category box.

    • Load Pattern : will open the selected pattern in the Pattern Editor. +

    • Save Pattern : will open the selected pattern in the Pattern Editor. +

    • Virtual Pattern : will open the selected pattern in the Pattern Editor. +

      + Virtual patterns are a convenient way of grouping patterns together. + For example, say you have a song in which three patterns are always + played together at the start of each bar. Previously, the way to do this + in the pattern matrix was to explicitly enable the three patterns at each bar. +

      + With virtual patterns we can assign a pattern to be a sort of meta-pattern + that implicitly invokes these three patterns together when the new virtual pattern + is enabled in the pattern matrix. This way, we only need to set one pattern every + bar, instead of three. +

      + Virtual patterns provide a function that's similar to the regular pattern editor, and one could argue that + since a virtual pattern is also a regular pattern, we could have just merged the three + patterns into this new one. However, the advantage that virtual patterns provide is that + if one of the original three patterns changes, the virtual pattern automatically inherits + the change. A virtual pattern can also invoke other virtual patterns. +

    5.4.Exporting your song

    Once your song is finished you can export it to an audio file. + This audio file can then be played on your favorite media player or imported + in an other audio application.

    + To do this, go to Project - "Export song" and the following window will pop up: +

    Figure2.6.Export a song

    Export a song


    + To export a song you need to do 3 things: + +

    • Enter a name and location for the export file in the 'Export filename' field +

    • Select one of the available templates (e.g. CD, DAT ...) according to your needs: + each template has a specific bitrate, resolution, and audio format (WAV, AIFF, FLAC or OGG). + You can tweak the selected template using the samplerate/sampledepth dropdown boxes + underneath the template field. + +

    • Export mode: 'Export to a single track' will export 1 stereo downmix of your + song (= the master output). 'Export to separate tracks' will create files for each + instrument/track. 'Both' will create a stereo downmix + audio files for all individual + instruments. +

    + Once all these settings have been configured all you need to do is click the 'Export' + button and Hydrogen will generate the requested files. +

    Note

    + If you have tempo changes in your song (see Section5.2) + these tempo changes will not be exported. This is a know limitation of the current versions + (including 0.9.6) +

    + As a workaround you can record the output of Hydrogen with an audio recording + application (like Ardour, Qtractor ...) +

    6.Pattern Editor

    The "Pattern Editor" + allows you to create or modify the selected pattern by adding/removing notes and tunning + a number of per-note properties like velocity and pan. + The Pattern Editor + can be used in 2 modes : 'Drum' mode or 'Piano' mode. You can switch between these + modes by clicking the Drum/Piano button (located on the top-right of the Pattern Editor) +

    Note

    • + If you are editing a pattern in Single Pattern Mode you will always hear the pattern you are + editing when you press play.

    • If you are working in Stacked Pattern Mode you will hear the active pattern(s), + not necessarily the pattern you are currently editing. + (The active patterns have a small triangle next to the pattern name in the Song Editor). +

    + +

    First let's take a look at the (classic) 'Drum' mode : +

    Figure2.7.Pattern Editor in Drum mode

    Pattern Editor in Drum mode


    +

    6.1.Pattern Editor Controls

    The top part of the pattern editor contains a number of controls :

    Figure2.8.Pattern Editor Controls

    Pattern Editor Controls

    From left to right :

    • SIZE : lets you choose the size of the pattern (the number of bars)

    • + RES : this is the current grid resolution (4 through 64) +

      + Remember this constraint concerning the grid: if you are working + with a resolution of 16 you can't go back to 8 and remove a 16th note. On + the other hand if you are working with a resolution of 8 and you try to + insert a note in the middle of two bars (looking for a 16 bars precision), + notes will be placed in the previous or in the following 8th bar. This + constraint can be removed if you disable the whole grid resolution (choose + "off" from the grid resolution LCD control). Now you'll be able to place + notes wherever you prefer.

    • HEAR : when enabled Hydrogen + will play the sample as it's being added to the pattern.

    • QUANT : enables/disables quantization. + When enabled the beats inserted + will automatically respect the grid resolution currently applied.

    • Drumset / Instrument : + when set to Drumset the keys on your midi keyboard will map to the instruments in your drumkit as + described in the instrument mapping table below. If you set it to Instrument the keys of your midi + keyboard will trigger the instrument that is currently selected. The pitch of the instrument will follow + the key you press on your keyboard. This feature is mainly used for non-drum instruments. An example : + if you use a sample of a piano for one of your instruments, you will be able to 'play' that piano instrument + using your keyboard just like you are playing a piano synth.

    • Note Length / Note off : these are 2 different + ways to define the duration of a note. See Section6.3 for usage.

    • Drum/Piano : switch Pattern Editor + between Drum and Piano mode. (see below)

    6.2.Pattern Editor Drumkit

    The section on the left shows you what drumkit is currently selected (GMkit by default) and below that you can see + the instruments that are part of this kit.

    + +

    Each instrument has its own set of features that are accessible by + right-clicking the instrument. From the context menu that pops up you can select

    • Clear notes : to remove all notes for this instrument in this pattern.

    • Fill notes : this allows you to fill + up the pattern with notes for the selected instrument. Depending on the choice you make (fill all, fill 1/2, fill 1/4 ...) + notes will be placed at all, 1/2, 1/4, etc of the note positions that are allowed by + the grid setting. So be careful not to mix up the 'musical' 1/2-note and the 'fill 1/2' note.

    • Randomize velocity + : automatically apply a pseudo-random velocity to each note of that + instrument in the pattern. The more velocity you set on the instrument, + the more hydrogen will hit hard on that instrument when + played. +

    • Delete Instrument : well, deletes the instrument ;-)

    The small red and green buttons right of the instrument names are the + mute (red) and solo (green) buttons.

    The order of the instruments can be rearranged by simply dragging an instrument + up/down in the list and dropping it on a new position within the drumkit. Doing so + will not change anything to the sequence you have created for that instrument, nor will + it change anything to the song or pattern you are working on. It + will however, have an impact on the MIDI note + mapping : in the table below you can find the link between the instrument + position, the MIDI note and the qwerty keyboard keys.

    Important Notes :

    The name of the instrument depends on the + drumkit that is loaded. This list below refers to the GMkit that is loaded by default. +

    Try to follow the GM midi standard as accurately as possible. This will ensure that switching between + drumkits goes smoothly. You are of course free to place your instruments anywhere in your drumkit, and + sometimes it isn't even possible to follow the GM standard, but it makes life a lot easier if you do.

    + Keep in mind that it is the position of the instrument (within the loaded drumkit) that + is linked to a MIDI-note/keyboard-key and not the name of the instrument. +

    Here's a quick reference of the above bindings for your + convenience.

    6.3.Pattern Editor Sequence area

    This is where it all happens, this is where you can make music :-)

    In this area you can see your selected pattern and add notes for any instrument. + The simplest way to create a pattern is by adding notes using your mouse + (and the 'Fill/Clear notes' function described above). Where you can add notes + depends on the used pattern size and resolution.

    If you are using Hydrogen as a pure 'drum' you just want Hydrogen to 'hit' + the instrument wherever there's a 'dot' in the pattern. If you are using Hydrogen as an 'instrument', the + length of the note becomes very important. There are 2 ways to define the length of + a note : in 'Note Length' mode you can add a note by left-cliking, and you can 'stretch' that note by right-click-dragging it. + This will change the dot into a rectangle that represents the duration of that note. In 'Note Off' mode you can also add a + note by left-clicking, but a right-click will now add a blue dot that represents the end of that note. +

    + (Figure above, from left>right : a 'normal' note, a note in 'note length' mode, a note in 'note off' mode) +

    So far we have only used the mouse to create a pattern, but you can also record your beats by clicking the Record button + + (see Section3) and simply playing your pattern on your + MIDI drum or your pc keyboard (see instrument mapping above). This is probably + a more musical way of creating a pattern, but it's up to you to decide what works best for you. + (Also see Chapter3 for a basic + walk-through of how the pattern editor works)

    6.4.Pattern Editor Note Properties

    Clicking on an instrument or adding/removing a note next to it + will select this instrument. Once an instrument is selected the note properties + for this instrument will be shown in the form of vertical lines in the bottom window. + The lines represent the value for the selected property of each note of the selected instrument. + You can select another note-property from the note property drop-down list (located bottom-left). + There are 4 note properties available : + +

    • Velocity : how hard the note is played (the volume of the note)

      + Note that the color of the note-dot and the vertical bar will change according to the velocity value you have defined. + A light shade of gray means a low velocity (low volume) and the higher you set the velocity the darker the color will be, + turning red when you reach the point of clipping. +

    • Pan : with this parameter you can define + the stereo image of the note (how loud it will be in the left/right output)

    • + Lead/Lag : Lead and Lag allows a slight note + lead or lag in respect of the actual beat. The range is ca. 5 ticks which + equals around ca. 10 ms at a tempo of 120bpm. Changing the lead/lag can make a huge + difference to the way your pattern sounds and feels. It's a groove thing ;-) +

    • + Notekey : if you select this note parameter the + area where you can modify the parameter will change into a 'piano keyboard' +

      The striped black and white area represents a piano keyboard and in the gray + area you can choose the octave. By placing a dot on the octave scale and a dot on the + 'keyboard' you can choose any note.

    +

    6.5.Pattern Editor Piano mode

    Drum mode (see Figure2.7) focuses on using Hydrogen as a drum machine. + If you are using Hydrogen as an instrument there is a big chance that the Piano mode is for you. + It gives you a complete 'piano keyboard' so you can easily put down your tunes.

    You can compare the Piano mode to the Note properties Notekey (described above), only here you have a + complete piano keyboard, so you dont have to select the octave first.

    Figure2.9.Pattern Editor in Piano mode

    Pattern Editor in Piano mode

    7.Mixer

    The Mixer window can be opened by pressing Alt+M, by clicking + Mixer in the Tools menu, or by clicking the Mixer button on the main toolbar. +

    The Mixer consists of 3 sections (left>right) : the instrument channel strips, + the FX plugin rack and the master fader section. The Hydrogen Mixer works very + much like a hardware mixer does : it lets you set the volume, pan, FX and several + other things for every instrument. + +

    Figure2.10.The Mixer

    The Mixer


    +

    7.1.Instrument channel strips

    From top to bottom : the 2 top elements on the strip are a 'play' button / 'trig' led combination. + ( + + ) + The play button lets you trigger the instrument at maximum velocity (handy for checking clipping), + and the trig led lights up whenever this instrument is triggered (from the song sequence, + or by an external midi controller). Right of this button/led you will find another led that shows + you what instrument is currently selected. This is also the instrument that is selected in the pattern editor. + As soon as you change one of the settings of a channel strip the instrument will be selected.

    Just below you can find the Mute + + + + and Solo + + + + buttons and the Pan(orama) knob. + Note that the Mute and Solo states are also reflected in the Song editor.

    + Next are 4 pre-fader FX send knobs that determine how much of this instrument will be sent to + the effect plugins in the FX rack. + +

    + + + + Just below that you can find an LCD peak-value display, + and finally the volume fader and VU meter for that instrument.

    IMPORTANT NOTE : keep in mind that the volume and pan settings that you + find on the Mixer are global settings. The per-note velocity and pan settings in the Pattern editor + are settings that are relative to the settings in the Mixer window !

    7.2.FX rack and LADSPA plugins

    The FX rack has 4 bays where you can load a LADSPA effect plugin, but before + you can load any plugins these must be installed (surprised ? ;-)

    There are dozens of plugins available for download from various sources : + +

    +

    Plugins Kill

    A badly designed LADSPA plugin is capable of + hanging, crashing, freezing, screeching, overflowing buffers, and even + phoning home. If you start having issues with Hydrogen, disable your + plugins and see if things improve. Some plugins are not designed for + real-time use, and some are just plain better than others.

    Once you have installed some plugins you can select one by clicking the + + + + + button. (if you do not see the FX rack, make sure that the + + + + button (in the Master section) is enabled)

    Now the FX selector window will pop up : + +

    Figure2.11.Select an Effect

    Select an Effect


    + + Once you have selected a plugin you will immediately have access + to its parameters: + + +

    + + + You can select another plugin by clicking the 'Select FX' button. If you quickly want to + enable/disable the effect click the 'Deactivate' button (or the Bypass ( + + ) + + button in the FX rack). This can be handy for a quick A/B comparison.

    After you have selected the FX and tweaked it's parameters you can use the + FX return knob to increase/decrease how much of this FX will be returned to the master output.

    7.3.Master section

    + + The Master section contains the Master volume fader with VU meters and three global Humanize + settings for Velocity, Timing and Swing (in order to add a 'human feel' to the song): + +

    • Velocity : adds a certain randomness to the note velocity. + The higher you turn this knob, the more the velocity will be randomized. +

    • Timing : adds a certain randomness to the note timing (lead/lag). + The higher you turn this knob, the more the timing will be randomized.

    • Swing : this knob will add a certain amount of swing to the song.

    + + Note that Hydrogen can also be switched to 'per instrument output' mode (see Section3.2), + and in this mode all channel strip outputs will be available in Jack (not just the Master output). + This allows you to route the individual instruments directly into any other Jack enabled application (eg Ardour) and gives you + a lot more flexibility.

    On the bottom-right of the Master section the 'FX' button + + will show/hide the FX rack, and the 'Peak' button + + + will enable/disable the VU meters. + +

    Note

    The VU meter fall off speed can be configured in the preferences window (see Section3.4)

    + +

    8.Sound Library (Drumkit/Pattern/Song Manager)

    First of all a little history on the Sound library and Drumkits. Hydrogen began as a + dedicated drum machine but has evolved into a versatile sound synthesizer/sequencer + that is capable of generating and manipulating all sorts of sounds. Hence the original + "Drumkit" terminology is slightly misleading. You can load any kind of sound into a + "Drumkit" and manipulate that sound just like playing a regular synthesizer. This is + also the main reason why the Piano mode was added to the pattern editor + (see Section6.5).

    In this manual (and in other documentation) "Drumkit" and "Soundlibrary" + frequently mean the same thing, but not always. The diagram below shows the actual + relation between the Soundlibrary and Drumkits: +

    Figure2.12.Soundlibrary/Drumkit hierarchy

    Soundlibrary/Drumkit hierarchy


    + + As you can see the Soundlibrary contains all Drumkits (System and User drumkits), + your saved Patterns and your saved Songs. Each Drumkit is a collection of a number + of instruments (snare, kick, sampled voice, bass sound ...) and in its turn an instrument can consist of multiple + layered samples. Note that every block has a number of parameters (continue reading for more details).

    This said. let's take a look at the Soundlibrary interface and see what it can do for you:

    The Sound Library saves you time in managing your drum kits, + favourite patterns, and favourite songs. When making new songs and new drum + kits, it allows you to reuse and mix the instruments and patterns from other kits and songs. + +

    Figure2.13.The Soundlibrary

    The Soundlibrary


    +

    8.1.System Drumkits

    This lists the drumkits that were installed by your system + administrator. The location of these System Drumkits is determined by the compile-time prefix. On + Unix-like operating systems, this is usually /usr/share/hydrogen/data/drumkits, or + possibly /usr/local/share/hydrogen/data/drumkits. + These kits are available to all users on the system, and users are + usually not able to add to them.

    To load a drumkit from here, right-click the drumkit and select + Load. This will replace your current drumkit + with the one that you selected. To load a single instrument from that + kit, left-click the plus to the left of the + drumkit's name to show all the instruments. With your left mouse + button, click and drag the instrument into your current kit. The + instrument will be added to the drumkit that you currently have + loaded.

    8.2.(Adding) User Drumkits

    These are your own drum kits that you can manage yourself. They + are usually stored in $HOME/.hydrogen/data/drumkits. When you are + creating a new drumkit, you can save it here by selecting + InstrumentsSave + library.

    + You can import existing drumkits from other users via InstrumentsImport library. The Import window will pop up with the Internet tab selected. + By default the link to the drumkit list (on hydrogen-music.org) will be filled in, + and after pressing the 'Update list' button you will get a complete list of all + drumkits that are available for download. In the status column you can see + if a kit is installed or not. + +

    Figure2.14.Import Drumkit

    Import Drumkit


    + + If you select one of the drumkits you will see info about this kit in the right + pane of the Import window: name, description, author and also the license type. + +

    Warning

    If you are using Hydrogen for commercial purposes, (creating songs and + selling these on-line or in any other way) you need to pay special attention to the + license type of the drumkit(s) you are using. +

    + If the exact license is not available for a drumkit, do _NOT_ assume that it is a CC (or + other open and free license type). +

    + Even if the kit is CC licensed you should always check with the author before using + the kit in your songs. +

    DISCLAIMER : hydrogen is not responsible for the drumkits that are + made available for download by our users, either via the hydrogen-music.org site or + via any other channel.

    + + + You can install a drumkit by selecting it and clicking 'Download and Install'. + +

    + + Once the kit has been downloaded it will be available in the Sound Library under "User drumkits". + +

    8.3.Songs in the Sound Library

    To save songs in the Sound Library, put them in your data + directory underneath the songs + folder (usually $HOME/.hydrogen/data/songs). + To remove them, remove the file from that folder.

    8.4.Patterns in the Sound Library

    Before you save a pattern to the sound library, be + sure to give it a title and a category. Right-click on the pattern, select + "Properties" and enter the details. + You can use one of the categories already + provided, or create your own categories by simply typing in a category + name. The category name is important, because the patterns will be + filed by category in the Sound Library.

    You can add a pattern to the sound library by right + clicking the title of the pattern in the song editor, and selecting + "Save Pattern". It will now appear in the Sound + Library underneath "Patterns" and the category that + you assigned to the pattern.

    9.Drumkits and Instrument Editing

    9.1.Concepts

    + The synthesizer in Hydrogen is a sample-based synthesizer. A sample + is a piece of pre-recorded audio (usually between 0.1 sec and 3 sec). + To play a note, the sample is simply played back at the right time. + There are a few concepts and terms that you should understand when you + are putting together a drumkit. (See Glossary for + more detailed explanations.) +

    Sampling Synthesizer Terms

    Sample

    A short recording of a sound, + typically between 0.1 and 3.0 seconds long.

    Gain

    Volume + adjustment.

    Velocity

    How hard you hit a + note.

    ADSR Envelope Generator

    An + Attack/Decay/Sustain/Release envelope generator. After you trigger + a note, Hydrogen will attack the note by + increasing its volume from 0 to the full velocity of the note. + After reaching full velocity, it will decay the + note by lowering the volume until it reaches the + sustain level. When the note is + released, Hydrogen reduces the volume from the + sustain level back down to 0. See ADSR + Envelope for more info

    Attack

    The amount of time to go from 0 to full + velocity.

    Decay

    The amount of time to go from full velocity to the sustain + volume.

    Sustain

    The level (how loud) to hold the note between the + sustain and the release. It is a percentage of the velocity. It + does not depend on time.

    Release

    The amount of time to go from the sustain volume back down + to 0.

    + Typical samples that are used in Hydrogen are: the sound of a single + drum hit, the sound of a single cymbal hit, the sound of a single + cowbell hit. Whenever you put a note in the pattern (or play a note + using MIDI), Hydrogen will play whatever sound you have loaded. So, + to put together a drum kit you need to gather short recordings of the + bass drum, each tom, each cymbal, the high hat open, the high hat + closed, the snare drum (snare on), the snare drum (snare off), rim + shots, etc. +

    + However, there are no rules about what a sample can be. It's not + uncommon to use Hydrogen to trigger non-drum sounds like: audio clips + of people talking, a clip from a song, sound effects, audio clips from + movies, and famous people speaking. Be creative! +

    9.2.Creating a New Drumkit

    In the next paragraphs we will show you how to create a complete drumkit. + Keeping in mind the 'Soundlibrary hierarchy' (see Figure2.12) + we will use a top-down approach, so we will start at the Drumkit level and work our way + down to the samples.

    Creating a new drumkit with Hydrogen is done with the Instrument + Editor. You can load samples, set envelope + parameters, set the gain, and other advanced features like mute + groups, a low-pass resonance filter, and pitch randomization.

    TIP : Instead of creating your own drumkit, you can also use or download + existing drumkits using the Section8.

    Lets make a brand new drum kit :

    • select + Instruments"Clear All" + + . This will give you a bank of 32 blank instruments. To delete + instruments, right-click on on each instrument and select + "Delete Instrument". To add more instruments, + select + + Instruments"Add instrument" + .

    • Select an instrument to start editing it. This is done by + left-clicking on the name of the instrument in the instrument list (at + the left). You will notice that the name of the instrument in the + Instrument Editor matches the one that you clicked.

    • Once you have your drum kit working the way you want, select + + Instruments"Save library" + + . You will be prompted for the name of the kit to save. If you wish to + overwrite an existing kit, you will need to type in + the same name as the kit that you want to replace.

    • Drumkits are automatically stored in the data directory (i.e. $HOME/.hydrogen/data/drumkits).

    • To export a drumkit (for sharing with others), it must first be + loaded into your Sound Library. Then, select + + Instruments"Export library" + + from the menu. Select the drum kit that you wish to export, and give it + a file name to save it to.

    9.3.Instrument Parameters

    In the instrument editor, click on the + General button. Here you can adjust several + parameters that apply to the instrument (applies to all layers as well). + +

    Figure2.15.The Instrument editor General view

    The Instrument editor General view


    + + The parameters are:

    • Envelope parameters: + Attack, Decay, + Sustain, Release. + (See Envelope Generator)

    • Gain: + The overall volume of the instrument.

    • Mute + Group: Which mute group this instrument is a + member of (see Mute Group).

    • Filter Parameters: + Bypass, Cutoff, + Resonance.

    • Random + Pitch

    • Midi out Channel and Note

    • Auto Stop-Note

    It's important that you understand Section9.1 in order to continue + on.

    9.3.1.Envelope Parameters

    When the instrument is triggered, its volume is run through an + ADSR Envelope. The parameters operate as follows:

    • Attack — the amount + of time that the volume of the sample goes + from 0 to the full velocity of the note. If the value is 0, the + sample will play immediately at full velocity. If the value is + 1.0, the sample volume will use the maximum time available for the + attack parameter. + [1] +

    • Decay — the amount of + time for the volume of the sample to go from + full velocity down to the sustain volume. If the value is 0, the + sample will immediately skip from the attack volume to the sustain + volume. If the value is 1.0, the sample volume will use the + maximum time available for the decay parameter.[1]

    • Sustain — the + volume to play the note after the decay phase + is over, and until the note is released. If set to 0, the note + will be silent. If set to 1.0, the note will play at full + velocity.

    • Release — the + time to fade out the note from the sustain + volume back down to 0 (silent). If set to 0, the note will fade + out in the minimum amount of time (about 5 ms). If set to 1, it + will fade out for the maximum time available.[1]

    If the sample is shorter than the times that you specify, the + sample will end, regardless of which phase of the ADSR it is in. If + the note is sustained, it does not draw out the + note while you are holding it. It only holds the gain (volume) + parameter during that time.

    9.3.2.Gain and Mute Group

    The gain sets the overall volume for the sample. This gain is + applied after the gain that you set for the layer, and before the gain + that is set for the mixer. If the Gain is 0, the instrument will be + silent. If the gain is 1.0 the volume of the samples will not be + adjusted (i.e. 0 dB). If the gain is set higher, the samples will be + amplified.

    Warning

    It is very easy to set the Gain too + high, causing your sample to clip. Remember to test the gain with + full-velocity notes. If you clip your signal here, it will only get + worse as Hydrogen processes it.

    Hydrogen provides more mute groups than you know what to do with + (over 256). A mute group is a grouping of instruments that are + mutually exclusive — only one instrument may be playing at any + time. If one is playing and another instrument in the group is + triggered, it will immediately silence (mute) and start playing the + other instrument. This is useful, especially, for instruments like + hi-hats where the open sound and the closed sound are different + instruments.

    If the mute group is set to "Off", then the + instrument is not part of any mute grouping. If the mute group is set + to any number, then that is the group that the instrument is a part + of. To set other instruments into the same grouping, set their mute + group parameter to the same number. (For example, to group all the + high-hat instruments, you can set all their mute group parameters to + 1. To have a snare drum mute group, set their mute group parameters + to 2.)

    9.3.3.Filter and Random Pitch

    The filter is a low-pass resonance filter. If you don't wish to + use is, click the BYPass button so that it's + red. If it's not red, then the filter is active. The cutoff + parameter adjusts the cutoff frequency for the filter. The resonance + parameter adjusts how much to resonate the cutoff frequency. If the + resonance is set to 0, then the filter is just a simple low-pass + filter.

    Note

    The cutoff frequency of the filter varies with the sample rate + of your audio card. The range of the knob (0 to 1.0) is optimized + for a 48,000 kHz sample rate.

    The random pitch parameter allows you to randomly vary the pitch + of the sample every time it is triggered. The value is set between 0 + and 1.0. The pitch change is fairly small: 2 half-steps + value. Using this sparingly can help your sequences to sound + more like a real drummer.

    9.3.4.Midi out settings

    Hydrogen is capable of generating midi messages that you can use + to trigger any external midi device or application. To do this you simply need to + configure the Midi out channel and Note for every instrument. As you can see + this is a very flexible approach that enables you to trigger samples or sounds + from multiple devices and/or apps. Finally you need to make sure the proper + Midi routing/wiring is in place and you're set. +

    From now on every time a note is played for that instrument (in the Hydrogen sequencer) + a midi message will be sent to your external app/device and trigger a sound. + This way you can use Hydrogen as a pure sequencer for other apps, or combine the + internal Hydrogen sampler with multiple external apps/devices.

    9.3.5.Auto Stop-Note

    If this box is checked Hydrogen will immediately stop any playing sample that + belongs to this instrument whenever the instrument is re-triggered.

    This option is particularly useful when you are using long samples like a + crash or some existing audio that you have sampled (like a looped voice in a + dance/electro song) For the crash you will need to use the Auto Stop-Note when + you are sequencing multiple notes in fast succession and want to make it sound realistic. If you do + not check this option the cymbal will start to sound like multiple cymbals + instead of only one (since the sample of each individual hit will be played completely). + For the voice sample this option is useful if you are trying to get that 'stuttering' effect. + +

    9.4.Creating an Instrument and Layers

    For each instrument in a drum kit, you can load several samples + and set different synthesizer parameters. This section will step you + through how to create a new instrument and load the samples.

    To begin creating an instrument, select + InstrumentsAdd instrument. This will give you a blank + instrument to start from.

    Now, you need two samples. Any .WAV or .FLAC file will do. + Hydrogen provides several in the data/drumkits directory.

    In the instrument editor, click on Layers. + You can layer several samples into the instrument. Which one is played + depends on the velocity of the incoming note. Click Load + Layer and point the Audio File Browser to + your sample. Note that the Audio File Browser will + allow you to preview the sample before you load it. It will also allow + you to load more than one sample at a time. But for now, only load + one.

    After you load the sample, you'll see that there is now a + 1 at the top, and the topmost rectangle has turned + light blue. To load a second sample, click the slot just below it, and + then click Load Layer to bring in another + sample.

    After bringing in both samples, you'll probably notice that only + the first sample is being played whenever you + trigger the instrument. This is because you need to set the + velocity ranges for the layers. Move your mouse to + the sides of the light blue rectangles and you see that you get a + left-right drag cursor. Now drag the sample to the left or right (like + a curtain). You will now see Layer 2 appear.

    Figure2.16.The Instrument editor Layers view

    The Instrument editor Layers view

    The velocity setting for the layer is 0-velocity on the left, and + full velocity on the right. Set up Layer 1 to sound for soft notes, and + Layer 2 to sound for hard notes (i.e. Layer 1 on the left and Layer 2 + on the right).

    Now, in the pattern area, set up a simple pattern that plays this + instrument. Adjust the velocity settings on each note so that you can + get the different samples to sound. Now set the pattern to loop and + notice how your different samples are getting triggered. (To learn + about editing a pattern, see Section6)

    For each layer, you can set the Gain and + the Pitch. The pitch also has a + Fine adjustment.

    Use the Gain adjustment to control how loud + the sample will play. This is necessary because it's extremely + difficult to get a set of samples that all sound at about the same + volume. By adjusting here, the samples that were recorded too quietly + can be turned up to match your loud samples (that had to be turned + down).

    Warning

    It is very easy to set the Gain too high, + causing your sample to clip. Remember to test the gain with + full-velocity notes. If you clip your signal here, it will only get + worse as Hydrogen processes it.

    The pitch of the sample can be modified with the pitch controls. + The Pitch knob adjust the pitch in musical + half-steps. (So, -12 is down 1 octave). The pitch on the right adjusts + the pitch 50 cents. (One half-step is 100 cents.)

    Note

    The pitch is adjusted by playing the sample back faster or + slower. This is called the Doppler Effect. So, if you have a + 1-second sample that you turn down -12 (1 octave), your sample will + only last for .5-seconds. If you do not want this to happen you should + use rubberband instead (see Section9.5.2)

    You can hear the sample in a layer by clicking the layer id (just + below the 'General' and 'Layers' buttons) and the 'Delete Layer' button + will delete the currently selected layer.

    9.5.Sample Editor

    So far we have created a multilayered Drumkit, set a number of + instrument parameters, played with velocity settings and so on. Now it's + time to go one step deeper and edit the samples using one of the newest + Hydrogen features: the Sample Editor.

    The Sample Editor allows you to tweak and manipulate your samples. + This is a function that will really speed up the creation of a drumkit since + you can do the fine-tunning of the sample within Hydrogen. In pre-0.9.5 builds + the typical workflow would be to prepare your sample in an external sound editor, + import the sample in Hydrogen, test it, go back to the audio editor, import again, + test ... The sample editor allows you to do most of the sample manipulation + within Hydrogen. This mean less switching between Hydrogen and your audio editor + and more time to make music !

    Note

    The changes you make to + your samples in the Sample Editor are non-destructive + and are saved per song. + So the original sample will not be changed, + and you can reuse the same sample in multiple songs with different Sample Editor + settings.

    Figure2.17.The Sample Editor

    The Sample Editor

    The Sample Editor consists of 3 sections (as indicated in the figure above):

    9.5.1.Sample Editor in/out points

    + In this section you can set the start, stop and loop points for the sample by dragging the + the 3 markers: +

    • S-marker (green) : indicates the Start-point (in-point) of the sample.

    • E-marker (red) : indicates the End-point (out-point) of the sample.

    • L-marker (blue) : determines the loop-in point of your sample

    + You can easily move one of the markers by grabbing them close to the + letter that marks them. Whenever you grab one of the markers you will see a detail + view of the position of that marker on the second (smaller) window on the right, making it easy to + find the zero-crossings in the sample. This detail window also has a slider next to + it that allows you to zoom in and out on the vertical axis. Think of it as a sort of + volume 'zoom'. +

    Underneath these 2 windows you can find (from left>right) : the position of the Start + marker, the position of the Loop marker, the Loop mode, the number of loops and the + position of the End marker. The position of the markers is expressed in number of + samples from the very beginning of the sample. These values will change if you drag the markers, + but you can also fine-tune the marker position by using the up/down arrows of the spinboxes, + the up/down keys on your keyboard, or by using your mouse scroll wheel while hovering + above the spinboxes.

    Apart from the marker positions there are 2 settings that apply to the Sample + Editor's loop function: loop mode and loop number. With the loop function you can + repeat the part of your sample that is in between the Loop- and the + End-marker. The way it is looped is determined by the Loop mode + (forward, revers or ping-pong) and the number of times it is looped is determined + by the Loop number.

    If you want to hear a preview of the tweaking you have done so far, you first need to + press the 'Apply Changes' button (@ the bottom of section 3) and then the Play button to + hear the result.

    9.5.2.Sample Editor rubberband

    This section of the Sample Editor allows you to control the Rubberband settings. + Rubberband is a tool that can change the tempo of a sample without changing + the sample's pitch (and vice versa).

    If you are using Ubuntu you can install rubberband from the Software Center + (rubberband-cli). For other linux distros check your package manager. For other platforms + please check the rubberband site + . After installing rubberband you should check if the path to the rubberband cli is + configured correctly (see Section3.1).

    If rubberband is installed correctly you will have access to the rubberband + settings, and an extra button named 'RUB' will be available in the Main Toolbar, + right of the BPM LCD display: + +

    + +

    Back to the rubberband settings : +

    • Sample length to beat : when set to 'off', rubberband functionality is disabled. + Normally this parameter should be set to the length of the part of the sample between + the Start and End marker, expressed in number of beats.

    • Pitch : this setting allows you to change the pitch of the sample, expressed in + semitones,cent.

    • Crispness : this setting does not affect tempo or pitch, but changes the way + the sample sounds.

    +

    Note: If you want Hydrogen to recalculate the sample length on the fly (using rubberband) + you must enable the 'RUB' button (see figure above).

    9.5.3.Sample Editor volume/pan

    In the bottom section of the Sample Editor you can see the end result + of the tweaks you have made by pressing the Apply Changes button. You can + also change the the Volume and Panorama (Pan) of your sample here. + This is done by creating 'envelopes' like the + ones you find in numerous DAW's for automation. To edit an + envelope you first need to select 'Volume' or 'Panorama'in the upper right + corner of section 3. The Volume envelope is blue, and the pan envelope is yellow. + Left clicking in the bottom window will ad a node to an envelope and also + allows you to drag an existing node. Right-clicking a node will delete it. + Don't forget to Apply Changes before you play your tweaked sample.

    9.6.Tips on Editing Instruments

    With all of the different parameters available to tweak, it can be + difficult to set up something that sounds nice when you're done. Here are + a few tips on setting up an instrument:

    Turn down the gain. Every gain + knob (i.e. an amplifier), this is a gain stage. + With every gain stage you have, it's + easy to overdrive your signal — which means the signal gets + distorted by clipping. In addition, if you have two samples that, by + themselves, peg your meters — what do you think happens when you + combine them? That's right, you overdrive the signal again.

    If things sound bad and distorted, start by turning down the gain + setting on the layer... especially if it's larger than 1.0. Then turn + down the instrument gain. Then any gain on a LADSPA effect. Then the + fader on the mixer. Then the master output fader.

    Test samples at full velocity. + Your sample will be played louder if the velocity is higher. So, if you + set everything to sound nice and full with velocity at 0.7, what will + happen when you get a full velocity of 1.0? (Hint: + clipping.)

    Try to use samples that are -6 dB + max. Visually, this means samples that peak at only + 1/2 of full scale. Otherwise, turn your layer gain to about + .5.

    Remove all DC offsets from the + sample. In a sample editor, there is usually a line down the + center of your sample's waveform. This is the zero-line. The beginning + of your sample should be on this line. The end of your sample should + also be on this line. However, if your signal is a little above or a + little below this line, you will hear a click at the beginning and the + end of your sample whenever it is played. If your sample editor doesn't + provide any tools to fix a DC offset problem, you can eliminate the + noise by putting a slight fade-in/out at the ends of your sample.

    The ADSR will not be longer than your + sample. If you have a short sample, it doesn't matter how + long you set the attack and delay — the sample will stop playing + at the end.

    Things change with the sample + rate. If you have a really nice setup with all your + parameters painstakenly tweaked... things will + change if you change the sample rate of your audio card. Many of + Hydrogen's internal settings and parameters are based on how many + samples go by, not on how many seconds go by. The sorts of things + that change are: anything time-base (like attack and release) and + anything frequency based (like the cutoff frequency).

    10.Midi

    In this section you can find more info about defining MIDI actions + and how they can be useful for you. Before you can work with midi actions + you should have your Midi devices, drivers and connections configured + correctly (see Section3.3). +

    Lets take a look at the available options : +

    +

    10.1.Midi Events

    An Event is an incoming Midi message, coming from a MIDI controller or + an external sequencer.

    If you look at the Events list you will see that there are 3 types of Events + available (as described in the Midi standard):

    • + NOTE: input coming from a regular black/white key of a keyboard or a drumpad +

    • + CC: controller commands coming from faders or rotary controllers +

    • + MMC_x: + machine control events coming from play/stop... buttons on a controller +

    + The Param. (parameter) value to the right of the Event is the identifier of the note/button/controller + that is linked to this Action. This parameter can be entered manually, or automatically by + using the Midi learn function (see Section3.3). +

    Note

    You can also activate the Midi learn function by Shift-clicking most of the gui elements. + A 'Waiting for Midi input...' popup informs you that Hydrogen is now waiting for you to press + a key or turn/move a controller. +

    If you Shift-click on a gui element that does not support Midi automation a popup will + inform you. +

    10.2.Midi Actions

    Next is a list of the available Actions: an Action describes what Hydrogen should do + when a specific Midi Event is detected.

    Note

    ** Some of the Midi Actions require that the Action Parameter is configured. The + Parameter usually references a specific channel, instrument, FXsend... Keep in mind that the + Parameter value is zero-based. So if you want to reference channel 1 you + have to enter '0' in the Parameter field (1 for channel 2, 2 for channel 3 ...)

    • + PLAY : start playback +

    • + PLAY/STOP_TOGGLE : toggles between PLAY and STOP. Execute this action will + start playback, execute it again and playback will stop + the playhead will return + to the start of the song +

    • + PLAY/PAUSE_TOGGLE : toggles between PLAY and PAUSE. (the playhead will not return + to the start of the song, but will stay at its current position) +

    • + STOP : stops playback and returns to the start of the song +

    • + PAUSE : pauses the song +

    • + MUTE : mutes the the Master output (sequencer keeps running) +

    • + UNMUTE : unmutes the Master output (sequencer keeps running) +

    • + MUTE_TOGGLE : toggles between MUTE and UNMUTE (sequencer keeps running) +

    • + NEXT_BAR : jumps to the next bar in the song +

    • + PREVIOUS_BAR : jumps to the previous bar in the song +

    • + BPM_INCR : increments the tempo of the song +

    • + BPM_DECR : decrements the tempo of the song +

    • + BPM_CC_RELATIVE : changes the tempo relative to the current tempo, using a controller +

    • + MASTER_VOLUME_RELATIVE : changes the Master output volume, relative + to the current setting (e.g. if you are using rotary encoders) +

    • + MASTER_VOLUME_ABSOLUTE : changes the Master output volume to the + absolute value of the midi control (use with midi fader or pot) +

    • + STRIP_VOLUME_RELATIVE : see MASTER_VOLUME_RELATIVE, but applies to + the channel strip defined in the Action Parameter ** +

    • + STRIP_VOLUME_ABSOLUTE : see MASTER_VOLUME_ABSOLUTE, but applies to + the channel strip defined in the Action Parameter ** +

    • + EFFECTx_LEVEL_RELATIVE : changes the volume level of effect 'x'; + the value you enter in the Action Parameter determines the channel strip this action applies to ** +

    • + SELECT_NEXT_PATTERN : selects the pattern that is defined in the Action Parameter ** +

    • + SELECT_AND_PLAY_NEXT_PATTERN : combines the SELECT_NEXT_PATTERN with PLAY +

    • + PAN_RELATIVE : changes the panorama setting, relative to the current value; + the value you enter in the Action Parameter determines the channel strip this action applies to ** +

    • + PAN_ABSOLUTE : changes the panorama setting to the absolute value that the linked controller sends to Hydrogen +

    • + BEATCOUNTER : sets the tempo (see Section4.1 +

    • + TAP_TEMPO : sets the tempo (see Section4.1 +

    • + SELECT_INSTRUMENT : selects one of the instruments in the drumkit +



    [1] The attack, decay, and release parameters are all set by + the number of audio samples. This means + that the time changes depending on the sample rate of your sound + card. The max time for each of them is 100,000 audio samples + (typ. 2.27 sec at 44.1 kHz).

    Chapter3.A new song

    1."Song" mode and "Pattern" mode

    This section is a quick-and-dirty walkthrough to Hydrogen. Refer to the + tutorial for a more detailed overview.

    Hydrogen has 2 main modes: "Pattern" mode and "Song" mode (refer to + Section4 for the buttons that activate each mode). When + "Pattern" mode is activated the current pattern is continuously repeated. + This mode is very well suited to tweak your pattern until it's just right, since the + pattern you are working on is constantly repeated. This way you can immediately + hear the changes you have made. In "Song" mode the whole song is played. + This is useful when putting together the patterns to create the structure of the song.

    2.A new pattern

    We'll start from the empty song with an empty pattern created when + Hydrogen starts up: "pattern" mode should be selected by default. Now + let's click on the Playbutton, and while the pattern is playing + let's add notes by left_mouse_clicking in the grid of the Song Editor + (Figure3.1). Adjust the grid resolution and BPM + speed if needed. Remember some constraints of the grid: if you are + working with a resolution of 16 you can't go back to 8 and remove a + 16th note; same thing happens if you are working with a resolution of + 8 and you try to insert a note in the middle of two bars (looking for + a 16 bars precision): they will be placed on the previous or on the + following 8th bar (unless you choose off from the Grid Resolution LCD in which case + you're free to place notes wherever you prefer). Be + sure to select the correct pattern in the Song Editor before adding notes + in the Pattern Editor!

    Figure3.1.The Pattern Editor

    The Pattern Editor

    3.A new sequence

    Once patterns are created (Figure3.2), we + can copy/paste/delete them using the Select Mode (see Section5.1). +

    Figure3.2.Inserting Notes in a Pattern

    Inserting Notes in a Pattern

    4.Adjust from the mixer

    Of course we can always use the mixer window, either when creating + or playing patterns.

    The Mixer frame (Figure3.3) is made of 32 + independent tracks, each of these is bound to an instrument, plus a + "Master Output" control and a "FX" button to show and hide the + effects panel. + Every line features 3 buttons ( + + + + + + + + ), pan adjust ( + + + + ), current maximum peak, volume fader and name of the track. Clicking on + + + + will play the selected instrument, cutting the others. The "Mute" button + + + + , simply mute that instrument. The maximum peak + indicates the maximum volume reached from the instrument. The peak must + be in a range of 0.0 and 1.0 (in Figure3.3 you can + see a few volumes too loud). Peaks outside that range will get distorted + (especially with OSS audio driver). Keep an eye on each vu-meter and + if distortion appears, turn the volume down for that instrument. +

    Figure3.3.The Mixer

    The Mixer

    Chapter4.Shortcut lists

    • + [CTRL + N] = New Project +

    • + [CTRL + O] = Open File +

    • + [CTRL + D] = Open Demo +

    • + [CTRL + S] = Save File +

    • + [CTRL + SHIFT + S] = Save File as +

    • + [CTRL + P] = Export Pattern as +

    • + [CTRL + M] = Export MIDI file +

    • + [CTRL + E] = Export Song +

    • + [CTRL + Q] = Quit Hydrogen +

    • + [ALT + D] = Show Director window +

    • + [ALT + M] = Show Mixer window +

    • + [ALT + I] = Show Instrument rack +

    • + [ALT + P] = Show Preferences window +

    • + [CTRL + ?] = Show manual +

    • + [Backspace] = Restart + song or pattern from the beginning +

    • + [spacebar] = Play / Pause +

    • + [,] (comma key) = Beatcounter +

    • + [\] (backslash) = Tap tempo +

    • + [+] and [-] = Tempo up / down +

    • + [F9] = Jump back to previous bar in the song +

    • + [F10] = Jump to the next bar in the song +

    • + [F12] = Panic button (stops the song and mutes all + playing sounds) +

    Glossary

    This is a glossary of general terms encountered when using Hydrogen, + synthesizers, drums, or samplers. The definitions here provide more + detail and explanation than the simplified ones in the text. For + example, the text of the manual would have you believe that an ADSR is + the only kind of envelope generator and could only ever control the + volume. While the simplified definitions help new users start using + Hydrogen quickly, they can lack the nuances presented here.

    ADSR

    A type of envelope generator that allows you to control the + Attack, + Decay, + Sustain, and + Release parameters. + Generally, the + parameters are proportional to + the velocity.

    In Hydrogen, the ADSR envelope generator only controls the volume + (attenuation).

    Read more about this in the Wikipedia + Article ADSR + Envelope

    See Also Envelope Generator, Attack, Decay, Sustain, Release.

    Attack

    This is the first phase of an ADSR envelope, and is the amount + of time to turn the parameter up from + 0 to full velocity after triggering the note.

    See Also ADSR.

    Attenuation

    In filters and mixers, this the amount that a signal is reduced + (volume).

    See Also Roll-off.

    Band-Pass Filter

    A filter that preserves a certain band of frequencies, and + attenuates (silences) all others. This is often done by combining a + high-pass and a low-pass filter.

    See Also Filter, High-Pass Filter, Low-Pass Filter.

    Clipping

    A phenomenon that happens to a signal when the signal is too large + for whatever is receiving it. The peaks of the signal (which are + normally smooth curves) get cut off straight at the max volume + (clipped). This distorts the sound and is usually undesirable.

    An example of clipping is when you play music louder than your + speaker can handle. Parts of the music sound harsh and fuzzy.

    Cutoff Frequency

    On high-pass and low-pass filters, this is the frequency that + divides between those that pass, and those that are attenuated + (silenced). In a high-pass resonance filter, or a low-pass resonance + filter, the cutoff is also the frequency zone that gets boosted.

    For example, if you have a low-pass filter and you set the cutoff + frequency high (i.e. 20kHz)... the filter will not affect the sound. + All the audible frequencies will pass through undisturbed. As you lower + the cutoff frequency to something like 40 Hz (the low string on a bass + guitar), it sounds like someone is putting a blanket over the speaker. + The higher frequencies are being attenuated above 30 Hz.

    See Also Filter, High-Pass Filter, Low-Pass Filter, Resonance Filter.

    Decay

    After reaching full velocity from the attack, this is the amount + of time to turn the parameter down from full + velocity to the sustain level.

    See Also ADSR.

    DC-offsety

    DC offset, or DC coefficient is the mean value of the wavefor.m

    DC offset is usually undesirable. For example, in audio processing, a + sound that has DC offset will not be at its loudest possible volume when + normalized (because the offset consumes headroom), and this problem can + possibly extend to the mix as a whole, since a sound with DC offset and a sound + without DC offset will have DC offset when mixed. It may also cause other artifacts + depending on what is being done with the signal.

    Envelope Generator

    A way to control (change) a parameter over time as a response to + triggering, holding, and releasing a note.

    Did your eyes just glaze over? Let's try again:

    Imagine that you're playing a note on the keyboard and you have + your other hand on a knob (volume, filter cutoff, etc.). As you play + the note, you twist the knob (often up, then down... or down, then up). + You do the same thing on each note. That's what an envelope generator + does. See also ADSR

    Fader

    A slider control used to adjust the attenuation (volume) in a + mixer. Faders always have an "audio" taper, which means that the + attenuation amount changes on an exponential scale.

    Filter

    A device that changes a sound by attenuating specific frequencies. + A tone knob is an example of a simple, low-pass filter.

    See Also Band-Pass Filter, High-Pass Filter, Low-Pass Filter, Resonance Filter.

    Gain

    In an amplifier, this adjust how much (or how little) a signal is + amplified (volume). A higher gain value is a louder signal.

    High-Pass Filter

    A filter that attenuates (silences) low frequencies, but allows + high frequencies to pass through.

    See Also Filter, Cutoff Frequency.

    Instrument

    In Hydrogen, an instrument is a single noise-maker (like a bass + drum kick, or a tom).

    Layer

    In an instrument you can load several different samples (each one + called a layer), and have a different + sample play depending on the velocity of the note. Only one sample at a + time will play.

    Suppose you have a sample of a floor tom being struck softly. If + you simply play the sample louder — it will + not sound the same as a real tom that has been + struck very hard. If you wish to mimic this in your instrument, you can + load one sample for soft playing, and a different sample for loud + playing.

    See Also Instrument.

    Low-Pass Filter

    A filter that attenuates (silences) high frequencies, but allows + low frequencies to pass through.

    See Also Filter, Cutoff Frequency.

    Mute

    To make no noise. A setting on an instrument that prevents any + audio output.

    Mute Group

    A group of instruments (samples) that should mute (stop playing) + immediately after another instrument in the group is triggered.

    This is typically used in hi-hats, where there's a different + instrument (sample) for when the hi-hat is open or closed. With a real + hi-hat, the sound of the open hi-hat will stop as soon as you close it. + However, if you use two samples — the open sound will continue + even after you have triggered the closed sound. By placing both + instruments in the same mute group (group #1, for example)... triggering + closed sound will immediately stop the open sound (and vice + versa).

    Octave

    A span of frequencies where the top-most frequency is exactly + twice the frequency of the bottom frequency.

    For example, the range 20 Hz to 40 Hz is an octave. So is 120 Hz + to 240 Hz, and 575 Hz to 1150 Hz. While the frequency differences are + very different (20 Hz, 120 Hz, and 575 Hz, respectively), to the human + ear they sound like the same distance.

    Release

    After the note is released, this is the amount of + time to reduce the parameter from the sustain level + to 0.

    See Also ADSR.

    Resonance

    When referring to a resonance filter, this is the parameter that + determines how much of a boost (gain) to give the frequencies at the + cutoff.

    See Also Resonance Filter.

    Resonance Filter

    A filter that gives a large boost to a very narrow range of + frequencies. Typically it will be part of a high-pass or a low-pass + filter, where the boosted frequencies are centered on the cut-off + frequency.

    See Also Filter, Cutoff Frequency, Resonance.

    Roll-off

    This is the amount that frequencies are attenuated (suppressed) as + the frequency changes (typically measured in dB/octave).

    For example, in a low-pass filter the frequencies below the cutoff + frequency are not attenuated (they pass-through with the same volume). + Same with the cutoff frequency. As you go above the cutoff frequency, + the frequencies that are near the cutoff frequency are not attenuated + very much at all. However, the frequencies that are much higher than + the cutoff are attenuated (suppressed) a lot. This is usually + approximated by a straight line (on a log scale) and measured in in dB + of attenuation per octave of frequency.

    See Also Attenuation, Filter.

    Sample

    A short recording of a sound, typically between .1 and 3.0 seconds + long.

    Sustain

    The level to hold the parameter after + finishing the decay time. This level will be maintained until the not + is released.

    See Also ADSR.

    Velocity

    How hard you hit a note.

    MIDI devices are required to send this information along with the + note. Synthesizers use this information to adjust several parameters on + the sample (typically the volume). In Hydrogen, it is only used to + adjust how loud the sample is played back.

    diff -Nru hydrogen-0.9.6.1/data/doc/manual_it.html hydrogen-0.9.7/data/doc/manual_it.html --- hydrogen-0.9.6.1/data/doc/manual_it.html 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/data/doc/manual_it.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,37 +0,0 @@ -Hydrogen Manual

    Hydrogen Manual

    Antonio Piraino

    Alessandro Cominu

    Thijs van Severen

    Sebastian Moors

    Sommario

    Hydrogen is a software synthesizer which can be used alone, emulating a drum machine based on patterns, or via an external MIDI keyboard/sequencer software. Hydrogen compiles on Linux/x86 and Mac OS X, although the latter is still experimental, so ask in the developers mailing list for further details.


    Capitolo1.Introduzione

    1.Download

    You can download Hydrogen from http://www.hydrogen-music.org. On the 'Downloads' page you can find several binaries (installers) for Linux, Mac and Windows. (note that some versions may not be available for Windows and Mac)

    If you want to compile Hydrogen yourself (see Sezione2), you can download the latest source files directly from our subversion server with:

    $ svn co http://svn.assembla.com/svn/hydrogen/trunk

    A certain release can be fetched with:

    $ svn co http://svn.assembla.com/svn/hydrogen/tags/0.9.5

    -

    Compiling Hydrogen depends on the following libraries:

    Please install them with your distribution's package manager. If you're running a debian-based system, you can install the libraries with:

    $ apt-get install libqt4-dev g++ libasound2-dev \
    -        libjack-dev liblrdf0-dev libflac++-dev libtar-dev libsndfile1-dev \
    -        liblash-dev libportaudio-dev libportmidi-dev 
    -      

    2.Compilazione

    Depending on the branch you are compiling you will need to use Scons or Cmake. Check the INSTALL.txt and the README.txt files for more info (located in the top level dir once you downloaded the sources).

    2.1.Using scons

    Decompress the tarball or go to the directory where the subversion copy was checked out:

    $ cd hydrogen-*
    -          $ scons
    -          $ su -c "scons install"
    -        

    Before compiling, check for additional options with:

    $ scons --help
    -        

    If you want to use features which are not enabled by default (for instance PortAudio), you can enable them with:

    $ scons portaudio=1
    -        

    Namely, if you get some error while running Hydrogen and you want to report it remember to configure hydrogen with:

    $ scons debug=1
    -        

    To clean up compiled code:

    $ scons -c
    -        

    2.2.Using cmake

    Compiling with cmake can be done easily by using the make_helper script. Decompress the tarball or go to the directory where the subversion copy was checked out and run the make_helper script without any arguments to display the help :

    $ cd hydrogen-*
    -          $ ./make_helper
    -        

    The help is now displayed (and is self-explanatory) :

    $ used builder : cmake
    -          $ usage ./make_helper [cmds list]
    -          $ cmds may be
    -          $    r or rm     =
    -> all built, temp and cache files
    -          $    c or clean  =
    -> remove cache files
    -          $    m or make   =
    -> launch the build process
    -          $    d or doc    =
    -> build html documentation
    -          $    h or help   =
    -> show the build options
    -          $    x or exec   =
    -> execute hydrogen
    -        

    3.Preferences

    First of all you should make sure that the audio engine is configured properly. The preferences dialog can be accessed via the tools menu (tools -> preferences).

    3.1.The General tab

    On the "General" tab (Figura1.1) you can choose to automatically reopen the last used song and/or playlist. This can save you the trouble of having to reopen the song you are working on every time you open Hydrogen. Auto loading the playlist can come in handy when you are using Hydrogen live.

    If you want to use Lash to manage your Jack connections you should enable it here so Hydrogen allows interaction with Lash.

    The Beat Counter drift compensation and start offset allow you to compensate for system latency when you are using the Beat Counter function (see Sezione3.1)

    The Max number of bars in a song can be set here (currently limited to 800) and if you want to use rubberband for sample time-streching you need to enter the path where rubberband is installed on you system here.

    Figura1.1.The General Tab

    The General Tab

    3.2.The Audio System tab

    From the "Audio System" tab (Figura1.2) it is possible to modify the audio driver being used (OSS, Jack, ALSA, PortAudio) with its buffer and sampling rate (unless you are using JACK, in this case the audio driver configuration should happen before starting the JACK server).

    We can set some features of Hydrogen like "Create per-instrument outputs" this will create 1 output per instrument that you can connect to any other Jack enabled application. This can be useful if you want to add effects to a single instrument with jack-rack for example. "Connect to Default Output Pair" connects the output to the default ports: uncheck this if you want to connect the JACK output to other ports without having to disconnect them first.

    Also keep an eye on the value of "Polyphony": depending on your CPU you may want to change the max simultaneous notes in order to prevent hydrogen from overrunning the audio driver.

    Figura1.2.The Audio System Tab

    The Audio System Tab

    The following drivers are available:

    • jackd: The Jack driver is a professional audio server which permits very low lag and exchanges with other audio software. We strongly recommend using this driver to have the best out of Hydrogen. JACK server will start automatically if not already running.

    • ALSA: the widely adopted Linux standard audio drivers

    • OSS: The Oss audio driver uses /dev/dsp and it's based on the OSS interface which is supported by the vast majority of sound cards available for Linux; this said, the use of this audio driver blocks /dev/dsp until Hydrogen is closed i.e. unusable by any other software. Use it as last resort.

    • PortAudio: an open-source multi platform audio driver

    • CoreAudio: a driver for Mac OS X (experimental)

    3.3.The Midi System tab

    The "Midi System" tab (Figura1.3) contains all MIDI settings. Here you can choose the MIDI driver, input, and channel(s) that Hydrogen should respond to. You can also define midi bindings: link a midi note/message to an action. To do this simply press the red 'REC' button left of the 'binding' action line. A popup will inform you that Hydrogen is waiting for your input. Press/hit/turn the key/pad/knob on your midi keyboard (or controller) that you want to link to this action. The popup will close and the Event Param value will now show the midi note value of the key you pressed. Once this is done you can select an Action from the action drop-down list. Note that some actions (like SELECT_NEXT_PATTERN) also require an Action Param that references the pattern you want to select with this midi action.

    Figura1.3.The MIDI System Tab

    The MIDI System Tab

    3.4.The Appearance tab

    The "Appearance" tab (Figura1.4) let's you modify Hydrogen look and feel (font settings and interface style). Also the VU meters fall-off speed of the Mixer Window can be changed here.

    Figura1.4.The Appearance Tab

    The Appearance Tab

    3.5.The Audio Engine tab (debug only)

    The "Audio Engine" tab (Figura1.5) is a window that shows various stats about Hydrogen and the audio driver. In case JACK is used, buffer and sampling rate should be set before starting Hydrogen (JACK automatically starts when an application tries to connect).

    Note that the Audio Engine tab is only available if Hydrogen was complied with debug support.

    Figura1.5.The Audio Engine tab

    The Audio Engine tab

    Capitolo2.Using Hydrogen

    1.Used Filetypes

    Before working with Hydrogen, please familiarize with these filetypes:

    • *.h2pattern: XML file describing a single pattern. Patterns are group of beats and are managed in the pattern editor.

    • *.h2song: XML file describing the whole song (or sequence). Songs are group of patterns with their properties and are manager using the song editor

    • *.h2playlist: XML file describing a playlist. A Playlist is a (ordered) group of songs.

    • *.h2drumkit: a compressed and archived folder containing all sound samples composing a drumkit and a description XML file. Drumkits are basically group of sound samples.

    2.Main menu

    Projects: this menu offers file related functions.

    • New - Create a new song

    • Show Info - Set general properties of the song such as name, author, license and generic notes

    • Open - Open a song

    • Open Demo - Open a demo song (demo songs are stored in $INSTALLPATH/share/hydrogen/data/demo_songs)

    • Open recent - Open a menu showing last used songs

    • Save - Save changes to current song

    • Save as - Save current song specifying a name (default path: $HOME/.hydrogen/data/songs)

    • Open pattern - Open a saved pattern belonging to the current drumkit

    • Export pattern as - Saves a pattern. It will be stored in $HOME/.hydrogen/data/patterns/drumkit_name

    • Export MIDI file - Export current song in MIDI format

    • Export song - Export current song in WAV format

    • Quit - Quit Hydrogen

    Instruments: this menu offers instruments and drumkit (sound libraries) functions.

    • Add instrument - Add a new instrument to your current drumkit

    • Clear all - Delete all instruments from the current drumkit

    • Save library - Saves all instruments settings (and their sound samples) in $HOME/.hydrogen/data/library_name

    • Export library - Compress all instruments samples and settings in a drumkit in $HOME/.hydrogen/data/library_name

    • Import library - Imports another drumkit from the local filesystem or download it from a remote location through an XML feed. The XML file that should be provided is NOT RSS compliant (see Hydrogen website for an example). To load another drumkit in your current working session of Hydrogen, read Sezione7.

    Tools: opens the mixer, the director, the playlist editor, the instrument rack and the general preferences window.

    • Playlist editor - A tool to manage playlists.

    • Director - Open the director window.

    • Mixer - Open the mixer window.

    • Instrument rack - Open the instrument rack panel.

    • Preferences - Open the main preferences window. Read Sezione3 on how to configure Hydrogen.

    Debug: tools mainly for debugging and monitoring Hydrogen (only available when compiled with debug support !).

    • Show audio engine info - Open a monitor with various stats

    • debug action - Insert debug commands.

    • Print Objects - Print on stdout current objects map.

    Info

    • User manual - Open a window with this manual :)

    • About - The usual window with license information, acknowledgements, etc.

    3.La toolbar principale

    Before analyzing the two main frames of Hydrogen, let's take a quick look at the main toolbar and its components:

    • Pilot the song using the start, stop, pause, etc. buttons

    • Choose between "pattern" or "song" mode: in "pattern" mode only the currently selected pattern will play, while in "song" mode all patterns inserted will be played.

    • An advanced tap tempo function: choose note length and how many notes to wait before recalculating BPM, then click the comma key repeatedly until the 'R' letter will appear and the BPM will be updated. (see Sezione3.1)

    • Manually set BPM

    • Manage JACK transport

    • Open the mixer and the instrument rack panels

    Figura2.1.The Main Toolbar

    The Main Toolbar

    • Main controls to start [Hotkey = Spacebar], stop, record, fast forward, rewind, loop a song or a pattern.

    • Set Pattern/Song Mode. When Song mode is selected Hydrogen will play the complete song. This is the sequence of patterns you have created in the Song Editor (see Sezione4). When Pattern mode is selected Hydrogen will play the pattern that is currently selected, and thus displayed in the Pattern Editor (see Sezione5).

    • Set measure type and Beat Counter (see Sezione3.1).

    • Imposta la velocita' di esecuzione (range: 30-400 bpm) [Hotkey = rotella del mouse] e bottone per attivare/disattivare il metronomo

    • Shows CPU load and MIDI events. The CPU bargraph gives you an indication of the CPU load. The MIDI led lights up every time Hydrogen receives a midi message.

    • Click J. TRANS to enable Jack transport. If the J. MASTER button is pressed Hydrogen will work as 'master', else it will act as 'slave' to another 'master' program (e.g. Ardour). This applet is only available if Jack Audio Driver is selected.

    3.1.Tap Tempo and BeatCounter

    It is possible to change tempo at any time using the tap-tempo and BeatCounter features of Hydrogen. You can change these while playing or while the song is stopped. To change the tempo, hit the , (comma) key in tempo for the number of beats in the measure. After the correct number of beats are met, the tempo will change to the average tempo that you tapped in. If you continue to tap, these new taps will become a part of a rolling average. If you tap accidentally, or if you wait too long between taps, the tap tempo counter will start over.

    The Tap Tempo is a part of the BeatCounter, which is essentially a Tap Tempo on steroids. By default the BeatCounter display is not visible. To see the BeatCounter widget click the upright button (BC) between Song/Pattern mode selector and the BPM-widget. Or, it can be shown by pressing the comma key (,).

    The tempo that you tap will be considered even beats of the beat type. The beat type can be set to 1/8 (for eight-note beats), 1/4 (for quarter-note beats), 1/2 (for half-note beats), and 1/1 (for whole-note beats). To change the beat type use the left arrow buttons. To change the number of beats that are counted, use the right arrow button. You can set from 2 to 16 beats. (I.e. if you set the beat to 6, you will have to tap 6 times before the new tempo is computed and set.) When the display shows an R, it means that the BeatCounter is ready to start from 0. Every time you tap with the comma key, it will show the number of taps that you have entered (1, 2, 3...).

    The button in the bottom right-hand controls the auto-start feature, and it toggles between S and P. When it shows P for (Play), the song will set the new tempo and automatically start to play after you tap the right number of beats (if it's not already playing, of course). This way, if you have the BeatCounter set up for 4/4, you can tap 1-2-3-4, and start playing on the next beat. When it shows S (for Set BPM), the auto-start is disabled.

    For example: Suppose you have a live band, Hydrogen, and a softsynth that is controlled by Seq24)... and you want them all to start at the same time. Set the beat type to 1/4 and the number of beats to 4. Enable auto-start (button shows P). Count off the band 1-2-3-4 (while tapping the comma key) — and everyone starts on 1.

    Another example: Same situation, but the song doesn't require Hydrogen or synths until some point later. During that time, a human (e.g. guitar player) will be setting the tempo. On the measure before Hydrogen is supposed to play, tap the comma key 1-2-3-4 with the beat... and you're in on the next beat (at the right tempo).

    If you are using the JACK Transport, the BeatCounter continues to work. If another program is the JACK Transport Master, Hydrogen will respond to tempo change events from that application. Note that in this situation, Hydrogen is supposed to be a slave, so some of the BeatCounter features will be disabled or will not work properly. If Hydrogen is the JACK Transport Master, tempo changes from Hydrogen will be reflected in those programs (if they support it).

    Some of the settings to adjust the BeatCounter's latency compensation, are located on the General tab of the Preferences Dialog (see Sezione3.1 ). Here you will finde two spinboxes:

    • Beat counter drift compensation in 1/10ms — adjust to compensate for latency between the keyboard and the program.

    • Beat counter start offset in ms — adjust the time between the BeatCounter's last input stroke and when the song starts playing (if auto-start is activated).

    Note that these can be set to positive (+) or negative (-) values. In order to find useful values for these, you will need to take some time to play with it. Also, you may want different values depending on the speed of your hardware, audio devices, drivers, etc. Using the BeatCounter effectively requires practice.

    4.Song Editor

    The "Song Editor" (Figura2.2) gives an overview of the whole timeline of the song (e.g. intro, verse, bridge, chorus and so on); each blue colored square on this panel is a complete bar as shown in the underlying "Pattern Editor" panel. Here we have complete freedom to add, remove or move patterns in any order we prefer. We can also copy and paste patterns: use left mouse button to highlight an area and drag it around. Dragging with CTRL key pressed copies the patterns.

    The Song Editor comes with 7 buttons:

    - -

    • Completely delete all patterns (asks for confirmation!).

    • Create a new pattern (and asks for a name).

    • Move currently selected pattern up or down.

    • Enable selecting patterns for copy & paste (Select Mode).

    • Enable Draw Mode.

    • Switch from "Single pattern mode" to "Stacked pattern mode" and back..

    Sotto i bottoni c'e' la lista dei pattern creati posizionati nel punto della canzone in cui verranno eseguiti (una casella == una battuta). Cliccare su una casella per aggiungere il pattern o eliminarlo. Cliccare col tasto destro del mouse sul nome del pattern fara' apparire un menu a tendina da cui si puo' modificarne il nome oppure eliminare. Non sono ammessi pattern con nomi identici.

    Figura2.2.The Song Editor

    The Song Editor

    5.Pattern Editor

    The "Pattern Editor" lets us create or modify the pattern (bar) which is currently selected. You can add/remove notes, and tune a number of per-note properties like velocity and pan. The Pattern Editor can be used in 2 modes : 'Drum' mode or 'Piano' mode. You can switch between these modes by clicking the Drum/Piano button (located on the top-right of the Pattern Editor)

    First let's take a look at the (classic) 'Drum' mode :

    Figura2.3.Pattern Editor in Drum mode

    Pattern Editor in Drum mode


    -

    5.1.Pattern Editor Controls

    The top part of the pattern editor contains a number of controls :

    Figura2.4.Pattern Editor Controls

    Pattern Editor Controls

    From left to right :

    • SIZE : lets you choose the size of the pattern (the number of bars)

    • RES : this is the current grid resolution (4 through 64)

      Remember this constraint concerning the grid: if you are working with a resolution of 16 you can't go back to 8 and remove a 16th note. On the other hand if you are working with a resolution of 8 and you try to insert a note in the middle of two bars (looking for a 16 bars precision), notes will be placed in the previous or in the following 8th bar. This constraint can be removed if you disable the whole grid resolution (choose "off" from the grid resolution LCD control). Now you'll be able to place notes wherever you prefer.

    • HEAR : when enabled Hydrogen will play the sample as it's being added to the pattern.

    • QUANT : enables/disables quantization. When enabled the beats inserted will automatically respect the grid resolution currently applied.

    • Drumset / Instrument : when set to Drumset the keys on your midi keyboard will map to the instruments in your sound library as described in the instrument mapping table below. If you set it to Instrument the keys of your midi keyboard will trigger the instrument that is currently selected. The pitch of the instrument will follow the key you press on your keyboard. This feature is mainly used for non-drum instruments. An example : if you use a sample of a piano for one of your instruments, you will be able to 'play' that piano instrument using your keyboard just like you are playing a piano synth.

    • Note Length / Note off : these are 2 different ways to define the duration of a note. See Sezione5.3 for usage.

    • Drum/Piano : switch Pattern Editor between Drum and Piano mode. (see below)

    5.2.Pattern Editor Drumkit

    The section on the left shows you what drumkit/library is currently selected (GMkit by default) and below that you can see the instruments that are part of this kit.

    - -

    Each instrument has its own set of features that are accessible by right-clicking the instrument. From the context menu that pops up you can select

    • Clear notes : to remove all notes for this instrument in this pattern.

    • Fill notes : this allows you to fill up the pattern with notes for the selected instrument. Depending on the choice you make (fill all, fill 1/2, fill 1/4 ...) notes will be placed at all, 1/2, 1/4, etc of the note positions that are allowed by the grid setting. So be careful not to mix up the 'musical' 1/2-note and the 'fill 1/2' note.

    • Randomize velocity : automatically apply a pseudo-random velocity to each note of that instrument in the pattern. The more velocity you set on the instrument, the more hydrogen will hit hard on that instrument when played.

    • Delete Instrument : well, deletes the instrument ;-)

    The small red and green buttons right of the instrument names are the mute (red) and solo (green) buttons.

    The order of the instruments can be rearranged by simply dragging an instrument up/down in the list and dropping it on a new position within the drumkit/library. Doing so will not change anything to the sequence you have created for that instrument, nor will it change anything to the song or pattern you are working on. It will however, have an impact on the MIDI note mapping : in the table below you can find the link between the instrument position, the MIDI note and the qwerty keyboard keys.

    Important Notes :

    The name of the instrument depends on the drumkit that is loaded. This list below refers to the GMkit that is loaded by default.

    Keep in mind that it is the position of the instrument (within the loaded drumkit) that is linked to a MIDI-note/keyboard-key and not the name of the instrument.

    Here's a quick reference of the above bindings for your convenience.

    5.3.Pattern Editor Sequence area

    This is where it all happens, this is where you can make music :-)

    In this area you can see your selected pattern and add notes for any instrument. The simplest way to create a pattern is by adding notes using your mouse (and the 'Fill/Clear notes' function described above). Where you can add notes depends on the used pattern size and resolution.

    If you are using Hydrogen as a pure 'drum' you just want Hydrogen to 'hit' the instrument wherever there's a 'dot' in the pattern. If you are using Hydrogen as an 'instrument', the length of the note becomes very important. There are 2 ways to define the length of a note : in 'Note Length' mode you can add a note by left-cliking, and you can 'stretch' that note by right-click-dragging it. This will change the dot into a rectangle that represents the duration of that note. In 'Note Off' mode you can also add a note by left-clicking, but a right-click will now add a blue dot that represents the end of that note.

    (Figure above, from left ->right : a 'normal' note, a note in 'note length' mode, a note in 'note off' mode)

    So far we have only used the mouse to create a pattern, but you can also record your beats by clicking the Record button (see Sezione2) and simply playing your pattern on your MIDI drum or your pc keyboard (see instrument mapping above). This is probably a more musical way of creating a pattern, but it's up to you to decide what works best for you. (Also see Capitolo3 for a basic walk-through of how the pattern editor works)

    5.4.Pattern Editor Note Properties

    Clicking on an instrument or adding/removing a note next to it will select this instrument. Once an instrument is selected the note properties for this instrument will be shown in the form of vertical lines in the bottom window. The lines represent the value for the selected property of each note of the selected instrument. You can select another note-property from the note property drop-down list (located bottom-left). There are 4 note properties available :

    • Velocity : how hard the note is played (the volume of the note)

      Note that the color of the note-dot and the vertical bar will change according to the velocity value you have defined. A light shade of gray means a low velocity (low volume) and the higher you set the velocity the darker the color will be, turning red when you reach the point of clipping.

    • Pan : with this parameter you can define the stereo image of the note (how loud it will be in the left/right output)

    • Lead/Lag : Lead and Lag allows a slight note lead or lag in respect of the actual beat. The range is ca. 5 ticks which equals around ca. 10 ms at a tempo of 120bpm. Changing the lead/lag can make a huge difference to the way your pattern sounds and feels. It's a groove thing ;-)

    • Notekey : if you select this note parameter the area where you can modify the parameter will change into a 'piano keyboard'

      The striped black and white area represents a piano keyboard and in the gray area you can choose the octave. By placing a dot on the octave scale and a dot on the 'keyboard' you can choose any note.

    -

    5.5.Pattern Editor Piano mode

    Drum mode (see Figura2.3) focuses on using Hydrogen as a drum machine. If you are using Hydrogen as an instrument there is a big chance that the Piano mode is for you. It gives you a complete 'piano keyboard' so you can easily put down your tunes.

    You can compare the Piano mode to the Note properties Notekey (described above), only here you have a complete piano keyboard, so you dont have to select the octave first.

    Figura2.5.Pattern Editor in Piano mode

    Pattern Editor in Piano mode

    6.Mixer

    Figura2.6.The Mixer

    The Mixer

    The Mixer frame (Figura2.6) is useful for tuning a global or single volume of the current drumkit. It shows the current peak (click on to disable, useful on old CPUs) and let you set the maximum peak allowed (tune with the fader knob of the instrument), lets you modify attributes like pan, play solo , mute or test play only that instrument ; selecting in the Pattern Editor an instrument causes a blue LED to light on (near the play button). Near the global volume knob, you can set 3 global effect such a swing (shifts a few notes back or forward not randomly), timing (modify timings of the notes) and humanize effect (random velocity editing).

    In addition to all this you can set up to 4 special LADSPA effects for each instrument switching the button. See next section for a detailed overview.

    7.Sound Library (Drumkit Manager)

    The Sound Library saves you time in managing your drum kits, favorite patterns, and favorite songs. When making new songs and drum kits, the Sound Library makes it easier for you to reuse and mix the instruments and patterns from other kits and songs.

    7.1.System Drumkits

    This lists the drumkits that were installed by your system administrator. It was determined by the compile-time prefix. On Unix-like operating systems, this is usually /usr/share/hydrogen/data/drumkits, or possibly /usr/local/share/hydrogen/data/drumkits. These kits are available to all users on the system, and users are usually not able to add to them.

    To load a drumkit from here, right-click the drumkit and select Load. This will replace your current drumkit with the one that you selected. To load a single instrument from that kit, left-click the plus to the left of the drumkit's name to show all the instruments. With your left mouse button, click and drag the instrument into your current kit. The instrument will be added to the drumkit that you currently have loaded.

    7.2.User Drumkits

    These are your own drum kits that you can manage yourself. They are usually stored in $HOME/.hydrogen/data/drumkits. When you are creating a new drumkit, you can save it here by selecting InstrumentsSave library.

    Loading drumkits and instruments to use is the same as for the System Drumkits (see Sezione7.1).

    7.3.Patterns in the Sound Library

    Before you save your favorite patterns to the sound library, be sure to edit it's properties by right-clicking and selecting Properties. There, you can give the pattern a title and a category. You can use one of the categories already provided, or create your own categories by simply typing in a category name. The category name is important, because the patterns will be filed by category in the Sound Library.

    You can save your favorite patterns in the sound library by right clicking the title of the pattern in the song editor, and selecting Save Pattern. It will appear in the Sound Library underneath Patterns and the category that you assigned to the pattern.

    7.4.Songs in the Sound Library

    To save songs in the Sound Library, put them in your data directory underneath the songs folder (usually $HOME/data/songs. To remove them, remove the file from that folder.

    8.Drumkits and Instrument Editing

    Creating a new drumkit with Hydrogen is done with the Instrument Editor. Using the instrument editor you can load samples, set envelope parameters, set the gain, and a few other advanced features like mute groups, low-pass resonance filter, and pitch randomization.

    Instead of creating your own drumkit, you can also use or download existing drumkits using the Sezione7.

    8.1.Concepts

    The synthesizer in Hydrogen is a sample-based synthesizer. A sample is a piece of pre-recorded audio (usually between .1 sec and 3 sec). To play a note, the sample is simply played back at the right time. There's a few concepts and terms that you should understand when you are putting together a drumkit. (See Glossary for more detailed explanations.)

    Sampling Synthesizer Terms

    Sample

    A short recording of a sound, typically between .1 and 3.0 seconds long.

    Gain

    Volume adjustment.

    Velocity

    How hard you hit a note.

    ADSR Envelope Generator

    An Attack/Decay/Sustain/Release envelope generator. After you trigger a note, Hydrogen will attack the note by increasing its volume from 0 to the full velocity of the note. After reaching full velocity, it will decay the note by lowering the volume until it reaches the sustain level. When the note is released, Hydrogen reduces the volume from the sustain level back down to 0.

    Attack

    The amount of time to go from 0 to full velocity.

    Decay

    The amount of time to go from full velocity to the sustain volume.

    Sustain

    The level (how loud) to hold the note between the sustain and the release. It is a percentage of the velocity. It does not depend on time.

    Release

    The amount of time to go from the sustain volume back down to 0.

    Typical samples that are used in Hydrogen are: the sound of a single drum hit, the sound of a single cymbal hit, the sound of a single cowbell hit. Whenever you put a note in the pattern (or play a note using MIDI), Hydrogen will play whatever sound you have loaded. So, to put together a drum kit you need to gather short recordings of the bass drum, each tom, each cymbal, the high hat open, the high hat closed, the snare drum (snare on), the snare drum (snare off), rim shots, etc.

    However, there are no rules about what a sample can be. It's not uncommon to use Hydrogen to trigger non-drum sounds like: audio clips of people talking, a clip from a song, sound effects, audio clips from movies, and famous people speaking. Be creative!

    8.2.Creating a New Drumkit

    To start a brand new drum kit, select InstrumentsClear All . This will give you a bank of 32 blank instruments. To delete instruments, right-click on on each instrument and select Delete Instrument. To add more instruments, select InstrumentsAdd instrument .

    Select an instrument to start editing it. This is done by left-clicking on the name of the instrument in the instrument list (at the left). You will notice that the name of the instrument in the Instrument Editor matches the one that you clicked.

    After you have your drum kit working the way you want, select InstrumentsSave library . It will ask you for the name of the kit to save. If you wish to overwrite an existing kit, you will need to type in the same name as the kit that you want to replace.

    Drumkits are automatically stored in the data directory (i.e. $HOME/data/drumkits).

    To export a drumkit (for sharing with others), it must first be loaded into your Sound Library. Then, select InstrumentsExport library from the menu. Select the drum kit that you wish to export, and give it a file name to save it to.

    8.3.Creating an Instrument and Layers

    For each instrument in a drum kit, you can load several samples and set different synthesizer parameters. This section will step you through how to create a new instrument and load the samples.

    To begin creating an instrument, select InstrumentsAdd instrument. This will give you a blank instrument to start from.

    Now, you need two samples. Any .WAV or .FLAC file will do. Hydrogen provides several in the data/drumkits directory.

    In the instrument editor, click on Layers. You can layer several samples into the instrument. Which one is played depends on the velocity of the incoming note. Click Load Layer and point the Audio File Browser to your sample. Note that the Audio File Browser will allow you to preview the sample before you load it. It will also allow you to load more than one sample at a time. But for now, only load one.

    After you load the sample, you'll see that there is now a 1 at the top, and the topmost rectangle has turned light blue. To load a second sample, click the slot just below it, and then click Load Layer to bring in another sample.

    After bringing in both samples, you'll probably notice that only the first sample is being played whenever you trigger the instrument. This is because you need to set the velocity ranges for the layers. Move your mouse to the sides of the light blue rectangles and you see that you get a left-right drag cursor. Now drag the sample to the left or right (like a curtain). You will now see Layer 2 appear.

    The velocity setting for the layer is 0-velocity on the left, and full velocity on the right. Set up Layer 1 to sound for soft notes, and Layer 2 to sound for hard notes. (I.e. Layer 1 on the left and Layer 2 on the right.)

    Now, in the pattern area, set up a simple pattern that plays this instrument. Adjust the velocity settings on each note so that you can get the different samples to sound. Now set the pattern to loop and notice how your different samples are getting triggered. (To learn about editing a pattern, see Sezione5)

    For each layer, you can set the Gain and the Pitch. The pitch also has a Fine adjustment.

    Use the Gain adjustment to control how loud the sample will play. This is necessary because it's extremely difficult to get a set of samples that all sound at about the same volume. By adjusting here, the samples that were recorded too quietly can be turned up to match your loud samples (that had to be turned down).

    Avvertimento

    It is very easy to set the Gain too high, causing your sample to clip. Remember to test the gain with full-velocity notes. If you clip your signal here, it will only get worse as Hydrogen processes it.

    The pitch of the sample can be modified with the pitch controls. The Pitch knob adjust the pitch in musical half-steps. (So, -12 is down 1 octave). The pitch on the right adjusts the pitch 50 cents. (One half-step is 100 cents.)

    Nota

    The pitch is adjusted by playing the sample back faster or slower. This is called the Dopplar Effect. So, if you have a 1-second sample that you turn down -12 (1 octave), you sample will only last for .5-seconds.

    8.4.Instrument Parameters

    In the instrument editor, click on the General button. Here you can adjust several parameters that are for the whole instrument (not for each layer). The parameters that you can adjust are:

    • Envelope parameters: Attack, Decay, Sustain, Release. (See Envelope Generator)

    • Gain: The overall volume of the instrument.

    • Mute Group: Which mute group this instrument is a member of (see Mute Group).

    • Filter Parameters: Bypass, Cutoff, Resonance.

    • Random Pitch

    It's important that you understand Sezione8.1 in order to continue on.

    8.4.1.Envelope Parameters

    When the instrument is triggered, its volume is run through an ADSR Envelope. The parameters operate as follows:

    • Attack — the amount of time that the volume of the sample goes from 0 to the full velocity of the note. If the value is 0, the sample will play immediately at full velocity. If the value is 1.0, the sample volume will use the maximum time available for the attack parameter. [1] -

    • Decay — the amount of time for the volume of the sample to go from full velocity down to the sustain volume. If the value is 0, the sample will immediately skip from the attack volume to the sustain volume. If the value is 1.0, the sample volume will use the maximum time available for the decay parameter.[1]

    • Sustain — the volume to play the note after the decay phase is over, and until the note is released. If set to 0, the note will be silent. If set to 1.0, the note will play at full velocity.

    • Release — the time to fade out the note from the sustain volume back down to 0 (silent). If set to 0, the note will fade out in the minimum amount of time (about 5 ms). If set to 1, it will fade out for the maximum time available.[1]

    If the sample is shorter than the times that you specify, the sample will end, regardless of which phase of the ADSR it is in. If the note is sustained, it does not draw out the note while you are holding it. It only holds the gain (volume) parameter during that time.

    8.4.2.Gain and Mute Group

    The gain sets the overall volume for the sample. This gain is applied after the gain that you set for the layer, and before the gain that is set for the mixer. If the Gain is 0, the instrument will be silent. If the gain is 1.0 the volume of the samples will not be adjusted (i.e. 0 dB). If the gain is set higher, the samples will be amplified.

    Avvertimento

    It is very easy to set the Gain too high, causing your sample to clip. Remember to test the gain with full-velocity notes. If you clip your signal here, it will only get worse as Hydrogen processes it.

    Hydrogen provides more mute groups than you know what to do with (over 256). A mute group is a grouping of instruments that are mutually exclusive — only one instrument may be playing at any time. If one is playing and another instrument in the group is triggered, it will immediately silence (mute) and start playing the other instrument. This is useful, especially, for instruments like hi-hats where the open sound and the closed sound are different instruments.

    If the mute group is set to Off, then the instrument is not part of any mute grouping. If the mute group is set to any number, then that is the group that the instrument is a part of. To set other instruments into the same grouping, set their mute group parameter to the same number. (For example, to group all the high-hat instruments, you can set all their mute group parameters to 1. To have a snare drum mute group, set their mute group parameters to 2.)

    8.4.3.Filter and Random Pitch

    The filter is a low-pass resonance filter. If you don't wish to use is, click the BYPass button so that it's red. If it's not red, then the filter is active. The cutoff parameter adjusts the cutoff frequency for the filter. The resonance parameter adjusts how much to resonate the cutoff frequency. If the resonance is set to 0, then the filter is just a simple low-pass filter.

    Nota

    The cutoff frequency of the filter varies with the sample rate of your audio card. The range of the knob (0 to 1.0) is optimized for a 48,000 kHz sample rate.

    The random pitch parameter allows you to randomly vary the pitch of the sample every time it is triggered. The value is set between 0 and 1.0. The pitch change is fairly small: 2 half-steps value. Using this sparingly can help your sequences to sound more like a real drummer.

    8.5.Tips on Editing Instruments

    With all of the different parameters available to tweak, it can be difficult to set up something that sounds nice when you're done. Here's a few tips on setting up an instrument:

    Turn down the gain. Every time you have a gain knob (i.e. an amplifier), this is called a gain stage. With every gain stage you have, it's easy to overdrive your signal — which means the signal gets distorted by clipping. In addition, if you have two samples that, by themselves, peg your meters — what do you think happens when you combine them? That's right, you overdrive the signal again.

    If things sound bad and distorted, start by turning down the gain setting on the layer... especially if it's larger than 1.0. Then turn down the instrument gain. Then any gain on a LADSPA effect. Then the fader on the mixer. Then the master output fader.

    Test samples at full velocity. Your sample will be played louder if the velocity is higher. So, if you set everything to sound nice and full with velocity at 0.7, what will happen when you get a full velocity of 1.0? (Hint: clipping.)

    Try to use samples that are -6 dB max. Visually, this means samples that peak at only 1/2 of full scale. Otherwise, turn your layer gain to about .5.

    Remove all DC offsets from the sample. In a sample editor, there is usually a line down the center of your sample's waveform. This is the zero-line. The beginning of your sample should be on this line. The end of your sample should also be on this line. However, if your signal is a little above or a little below this line, you will hear a click at the beginning and the end of your sample whenever it is played. If your sample editor doesn't provide any tools to fix a DC Offset problem, you can eliminate the noise by putting a slight fade-in/out at the ends of your sample.

    The ADSR will not be longer than your sample. If you have a short sample, it doesn't matter how long you set the attack and delay — the sample will stop playing at the end.

    Things change with the sample rate. If you have a really nice setup with all your parameters painstakenly tweaked... things will change if you change the sample rate of your audio card. Many of Hydrogens internal settings and parameters are done based on how many samples go by, and not on how many seconds go by. The sort of things that change are: anything time-base (like attack and release) and anything frequency based (like the cutoff frequency).

    9.LADSPA plugins

    Hydrogen can also add effects to sounds using any LADSPA plugin library. You need to have installed the LADSPA sources (available from http://www.ladspa.org) and while this will give a rough idea of how it works you should really have a taste of the real thing installing one or more plugin libraries, it's as simple as a scons && scons install. Here are a few places to download plugin libraries:

    Plugins Kill

    A LADSPA plugin is compiled, executable code. It is capable of hanging, crashing, freezing, screeching, overflowing buffers, and even phoning home. If you start having issues with Hydrogen, disable your plugins and see if things improve. Some plugins are not designed for real-time use, and some are just plain better than others.

    Once you have installed a few plugins open a song you'd like add an effect to and select an instrument that has a few beats in the pattern. In the Mixer click on and select one of the four available effect line Click on the Edit button ( ), than on Select the FX: this will bring up another window (Figura2.7) that lets you choose an effect amongst those installed, they are alphabetically sorted and categorized. Once you're done, adjust the level from the mixer and start playing. Each round knob in the FX part controls the level of its effect. If you want to quickly enable/disable the effect click the Bypass ( ) button.

    Figura2.7.Select an Effect

    Select an Effect



    [1] The attack, decay, and release parameters are all set by the number of audio samples. This means that the time changes depending on the sample rate of your sound card. The max time for each of them is 100,000 audio samples (typ. 2.27 sec at 44.1 kHz).

    Capitolo3.Creazione di una canzone

    1.Modalita' song e modalita' pattern

    Questa sezione dara' alcune indicazioni di massima sull'uso di Hydrogen. Riferirsi al tutorial per una guida piu' approfondita.

    Hydrogen has 2 main modes: "Pattern" mode and "Song" mode (refer to Sezione3 for the buttons to activate). When "Pattern" mode is activated the current pattern is continuously repeated. This mode is very well suited to tweak your pattern untill it's just right, since the pattern you are working on is constantly repeated. This way you can immediately hear the changes you have made. In "Song" mode the whole song is played. This is useful when putting together the patterns, to create the structure of the song.

    2.Creazione pattern

    We'll start from an empty song with an empty pattern, as created by default: "pattern" mode should be selected now. It is also possible to change name of the pattern. Now let's click on the Play button and while the pattern is playing let's add notes in the grid of the Song Editor (Figura3.1) simply left_mouse_clicking on it: adjust grid resolution and BPM speed if needed. Remember some constraints of the grid: if you are working with a resolution of 16 you can't go back to 8 and remove a 16th note; same thing happens if you are working with a resolution of 8 and you try to insert a note in the middle of two bars (looking for a 16 bars precision): they will be placed on the previous or on the following 8th bar (unless you choose off from the Grid Resolution LCD, in this case you're free to place notes wherever you prefer). Be sure to select the correct pattern in the Song Editor before adding notes in the Pattern Editor!

    Figura3.1.The Pattern Editor

    The Pattern Editor

    3.Creazione sequenza

    Once patterns are created (Figura3.2), we can copy/paste/delete them simply dragging with the mouse (activate the select mode for the Song Editor and keep pressed left mouse button to select those you want to move or copy).

    Figura3.2.Inserting Notes in a Pattern

    Inserting Notes in a Pattern

    4.Operazioni sul mixer

    Ovviamente in qualsiasi momento e' possibile aprire ed utilizzare la finestra del mixer (Fig. 14), sia durante la fase di creazione dei pattern, sia durante l'esecuzione delle sequenze.

    The Mixer frame (Figura3.3) is made of 32 independent tracks, each of these is binded to an instrument, plus a "Master Output" line to adjust general output volume and a "FX" button to set effects. Every line features 3 buttons ( ), pan adjust ( ), current maximum peak, volume fader and name of the track. Clicking on will play the selected instrument, cutting the others. The "Mute" button , simply mute that instrument. The maximum peak indicates the maximum volume reached from the instrument; the peak must be in a range of 0.0 and 1.0 (in Figura3.3 you can see a few volumes too loud), otherwise it will get distorted producing a weird sound (especially with OSS audio driver), in this case it's better to set volume down; keep an eye on each vu-meter.

    Figura3.3.The Mixer

    The Mixer

    Capitolo4.Shortcut lists

    • [CTRL + N] = New Project

    • [CTRL + O] = Apre file.

    • [CTRL + D] = Open Demo

    • [CTRL + S] = Salva file.

    • [CTRL + SHIFT + S] = Save File as

    • [CTRL + P] = Export Pattern as

    • [CTRL + M] = Export MIDI file

    • [CTRL + E] = Export Song

    • [CTRL + Q] = Quit Hydrogen

    • [ALT + B] = Show Director window

    • [ALT + M] = Show Mixer window

    • [ALT + I] = Show Instrument rack

    • [ALT + P] = Show Preferences window

    • [CTRL + ?] = Show manual

    • [Backspace] = Ricomincia la canzone o il pattern da capo.

    • [spacebar] = Play / Pause

    • [,] (comma key) = Tap tempo (beatcounter)

    Glossary

    This is a glossary of general terms encountered when using Hydrogen, synthesizers, drums, or samplers. The definitions in the text are simplified, but the definitions here are more general and have more explanation. For example, the text of the manual would have you believe that an ADSR is the only kind of envelope generator, and could only ever control the volume. While it's simple for new users, it's not quite right.

    ADSR

    A type of envelope generator that allows you to control the Attack, Decay, Sustain, and Release parameters. Generally, the parameters are proportional to the velocity.

    In Hydrogen, the ADSR envelope generator only controls the volume (attenuation).

    Read more about this in the Wikipedia Article ADSR Envelope

    Vedi anche Envelope Generator, Attack, Decay, Sustain, Release.

    Attack

    This is the first phase of an ADSR envelope, and is the amount of time to turn the parameter up from 0 to full velocity after triggering the note.

    Vedi anche ADSR.

    Attenuation

    In filters and mixers, this the amount that a signal is reduced (volume).

    Vedi anche Roll-off.

    Band-Pass Filter

    A filter that preserves a certain band of frequencies, and attenuates (silences) all others. This is often done by combining a high-pass and a low-pass filter.

    Vedi anche Filter, High-Pass Filter, Low-Pass Filter.

    Clipping

    A phenomenon that happens to a signal when the signal is too large for whatever is receiving it. The peaks of the signal (which are normally smooth curves) get cut off straight at the max volume (clipped). This distorts the sound and is usually undesirable.

    An example of clipping is when you play music louder than your speaker can handle. Parts of the music sound harsh and fuzzy.

    Cutoff Frequency

    On high-pass and low-pass filters, this is the frequency that divides between those that pass, and those that are attenuated (silenced). In a high-pass resonance filter, or a low-pass resonance filter, the cutoff is also the frequency zone that gets boosted.

    For example, if you have a low-pass filter and you set the cutoff frequency high (i.e. 20kHz)... the filter will not affect the sound. All the audible frequencies will pass through undisturbed. As you lower the cutoff frequency to something like 40 Hz (the low string on a bass guitar), it sounds like someone is putting a blanket over the speaker. The higher frequencies are being attenuated above 30 Hz.

    Vedi anche Filter, High-Pass Filter, Low-Pass Filter, Resonance Filter.

    Decay

    After reaching full velocity from the attack, this is the amount of time to turn the parameter down from full velocity to the sustain level.

    Vedi anche ADSR.

    Envelope Generator

    A way to control (change) a parameter over time as a response to triggering, holding, and releasing a note.

    Did your eyes just glaze over? Let's try again:

    Imagine that you're playing a note on the keyboard and you have your other hand on a knob (volume, filter cutoff, etc.). As you play the note, you twist the knob (often up, then down... or down, then up). You do the same thing on each note. That's what an envelope generator does. See also ADSR

    Fader

    A slider control used to adjust the attenuation (volume) in a mixer. Faders always have an "audio" taper, which means that the attenuation amount changes on an exponential scale.

    Filter

    A device that changes a sound by attenuating specific frequencies. A tone knob is an example of a simple, low-pass filter.

    Vedi anche Band-Pass Filter, High-Pass Filter, Low-Pass Filter, Resonance Filter.

    Gain

    In an amplifier, this adjust how much (or how little) a signal is amplified (volume). A higher gain value is a louder signal.

    High-Pass Filter

    A filter that attenuates (silences) low frequencies, but allows high frequencies to pass through.

    Vedi anche Filter, Cutoff Frequency.

    Instrument

    In Hydrogen, an instrument is a single noise-maker (like a bass drum kick, or a tom).

    Layer

    In an instrument you can load several different samples (each one called a layer), and have a different sample play depending on the velocity of the note. Only one sample at a time will play.

    Suppose you have a sample of a floor tom being struck softly. If you simply play the sample louder — it will not sound the same as a real tom that has been struck very hard. If you wish to mimic this in your instrument, you can load one sample for soft playing, and a different sample for loud playing.

    Vedi anche Instrument.

    Low-Pass Filter

    A filter that attenuates (silences) high frequencies, but allows low frequencies to pass through.

    Vedi anche Filter, Cutoff Frequency.

    Mute

    To make no noise. A setting on an instrument that prevents any audio output.

    Mute Group

    A group of instruments (samples) that should mute (stop playing) immediately after another instrument in the group is triggered.

    This is typically used in hi-hats, where there's a different instrument (sample) for when the hi-hat is open or closed. With a real hi-hat, the sound of the open hi-hat will stop as soon as you close it. However, if you use two samples — the open sound will continue even after you have triggered the closed sound. By placing both instruments in the same mute group (group #1, for example)... triggering closed sound will immediately stop the open sound (and vice versa).

    Octave

    A span of frequencies where the top-most frequency is exactly twice the frequency of the bottom frequency.

    For example, the range 20 Hz to 40 Hz is an octave. So is 120 Hz to 240 Hz, and 575 Hz to 1150 Hz. While the frequency differences are very different (20 Hz, 120 Hz, and 575 Hz, respectively), to the human ear they sound like the same distance.

    Release

    After the note is released, this is the amount of time to reduce the parameter from the sustain level to 0.

    Vedi anche ADSR.

    Resonance

    When referring to a resonance filter, this is the parameter that determines how much of a boost (gain) to give the frequencies at the cutoff.

    Vedi anche Resonance Filter.

    Resonance Filter

    A filter that gives a large boost to a very narrow range of frequencies. Typically it will be part of a high-pass or a low-pass filter, where the boosted frequencies are centered on the cut-off frequency.

    Vedi anche Filter, Cutoff Frequency, Resonance.

    Roll-off

    This is the amount that frequencies are attenuated (suppressed) as the frequency changes (typically measured in dB/octave).

    For example, in a low-pass filter the frequencies below the cutoff frequency are not attenuated (they pass-through with the same volume). Same with the cutoff frequency. As you go above the cutoff frequency, the frequencies that are near the cutoff frequency are not attenuated very much at all. However, the frequencies that are much higher than the cutoff are attenuated (suppressed) a lot. This is usually approximated by a straight line (on a log scale) and measured in in dB of attenuation per octave of frequency.

    Vedi anche Attenuation, Filter.

    Sample

    A short recording of a sound, typically between .1 and 3.0 seconds long.

    Sustain

    The level to hold the parameter after finishing the decay time. This level will be maintained until the not is released.

    Vedi anche ADSR.

    Velocity

    How hard you hit a note.

    MIDI devices are required to send this information along with the note. Synthesizers use this information to adjust several parameters on the sample (typically the volume). In Hydrogen, it is only used to adjust how loud the sample is played back.

    diff -Nru hydrogen-0.9.6.1/data/doc/manual_nl.html hydrogen-0.9.7/data/doc/manual_nl.html --- hydrogen-0.9.6.1/data/doc/manual_nl.html 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/data/doc/manual_nl.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,37 +0,0 @@ -Hydrogen handleiding

    Hydrogen handleiding

    Antonio Piraino

    Alessandro Cominu

    Thijs van Severen

    Sebastian Moors

    Samenvatting

    Hydrogen is a software synthesizer which can be used alone, emulating a drum machine based on patterns, or via an external MIDI keyboard/sequencer software. Hydrogen compiles on Linux/x86 and Mac OS X, although the latter is still experimental, so ask in the developers mailing list for further details.


    Hoofdstuk 1. Inleiding

    1. Downloaden

    You can download Hydrogen from http://www.hydrogen-music.org. On the 'Downloads' page you can find several binaries (installers) for Linux, Mac and Windows. (note that some versions may not be available for Windows and Mac)

    If you want to compile Hydrogen yourself (see Paragraaf2), you can download the latest source files directly from our subversion server with:

    $ svn co http://svn.assembla.com/svn/hydrogen/trunk

    A certain release can be fetched with:

    $ svn co http://svn.assembla.com/svn/hydrogen/tags/0.9.5

    -

    Compiling Hydrogen depends on the following libraries:

    Please install them with your distribution's package manager. If you're running a debian-based system, you can install the libraries with:

    $ apt-get install libqt4-dev g++ libasound2-dev \
    -        libjack-dev liblrdf0-dev libflac++-dev libtar-dev libsndfile1-dev \
    -        liblash-dev libportaudio-dev libportmidi-dev 
    -      

    2. Compileren

    Depending on the branch you are compiling you will need to use Scons or Cmake. Check the INSTALL.txt and the README.txt files for more info (located in the top level dir once you downloaded the sources).

    2.1. Using scons

    Decompress the tarball or go to the directory where the subversion copy was checked out:

    $ cd hydrogen-*
    -          $ scons
    -          $ su -c "scons install"
    -        

    Before compiling, check for additional options with:

    $ scons --help
    -        

    If you want to use features which are not enabled by default (for instance PortAudio), you can enable them with:

    $ scons portaudio=1
    -        

    Namely, if you get some error while running Hydrogen and you want to report it remember to configure hydrogen with:

    $ scons debug=1
    -        

    To clean up compiled code:

    $ scons -c
    -        

    2.2. Using cmake

    Compiling with cmake can be done easily by using the make_helper script. Decompress the tarball or go to the directory where the subversion copy was checked out and run the make_helper script without any arguments to display the help :

    $ cd hydrogen-*
    -          $ ./make_helper
    -        

    The help is now displayed (and is self-explanatory) :

    $ used builder : cmake
    -          $ usage ./make_helper [cmds list]
    -          $ cmds may be
    -          $    r or rm     =
    -> all built, temp and cache files
    -          $    c or clean  =
    -> remove cache files
    -          $    m or make   =
    -> launch the build process
    -          $    d or doc    =
    -> build html documentation
    -          $    h or help   =
    -> show the build options
    -          $    x or exec   =
    -> execute hydrogen
    -        

    3. Preferences

    First of all you should make sure that the audio engine is configured properly. The preferences dialog can be accessed via the tools menu (tools -> preferences).

    3.1. The General tab

    On the "General" tab (Figuur1.1) you can choose to automatically reopen the last used song and/or playlist. This can save you the trouble of having to reopen the song you are working on every time you open Hydrogen. Auto loading the playlist can come in handy when you are using Hydrogen live.

    If you want to use Lash to manage your Jack connections you should enable it here so Hydrogen allows interaction with Lash.

    The Beat Counter drift compensation and start offset allow you to compensate for system latency when you are using the Beat Counter function (see Paragraaf3.1)

    The Max number of bars in a song can be set here (currently limited to 800) and if you want to use rubberband for sample time-streching you need to enter the path where rubberband is installed on you system here.

    Figuur 1.1. The General Tab

    The General Tab

    3.2. The Audio System tab

    From the "Audio System" tab (Figuur1.2) it is possible to modify the audio driver being used (OSS, Jack, ALSA, PortAudio) with its buffer and sampling rate (unless you are using JACK, in this case the audio driver configuration should happen before starting the JACK server).

    We can set some features of Hydrogen like "Create per-instrument outputs" this will create 1 output per instrument that you can connect to any other Jack enabled application. This can be useful if you want to add effects to a single instrument with jack-rack for example. "Connect to Default Output Pair" connects the output to the default ports: uncheck this if you want to connect the JACK output to other ports without having to disconnect them first.

    Also keep an eye on the value of "Polyphony": depending on your CPU you may want to change the max simultaneous notes in order to prevent hydrogen from overrunning the audio driver.

    Figuur 1.2. The Audio System Tab

    The Audio System Tab

    The following drivers are available:

    • jackd: The Jack driver is a professional audio server which permits very low lag and exchanges with other audio software. We strongly recommend using this driver to have the best out of Hydrogen. JACK server will start automatically if not already running.

    • ALSA: the widely adopted Linux standard audio drivers

    • OSS: The Oss audio driver uses /dev/dsp and it's based on the OSS interface which is supported by the vast majority of sound cards available for Linux; this said, the use of this audio driver blocks /dev/dsp until Hydrogen is closed i.e. unusable by any other software. Use it as last resort.

    • PortAudio: an open-source multi platform audio driver

    • CoreAudio: a driver for Mac OS X (experimental)

    3.3. The Midi System tab

    The "Midi System" tab (Figuur1.3) contains all MIDI settings. Here you can choose the MIDI driver, input, and channel(s) that Hydrogen should respond to. You can also define midi bindings: link a midi note/message to an action. To do this simply press the red 'REC' button left of the 'binding' action line. A popup will inform you that Hydrogen is waiting for your input. Press/hit/turn the key/pad/knob on your midi keyboard (or controller) that you want to link to this action. The popup will close and the Event Param value will now show the midi note value of the key you pressed. Once this is done you can select an Action from the action drop-down list. Note that some actions (like SELECT_NEXT_PATTERN) also require an Action Param that references the pattern you want to select with this midi action.

    Figuur 1.3. The MIDI System Tab

    The MIDI System Tab

    3.4. The Appearance tab

    The "Appearance" tab (Figuur1.4) let's you modify Hydrogen look and feel (font settings and interface style). Also the VU meters fall-off speed of the Mixer Window can be changed here.

    Figuur 1.4. The Appearance Tab

    The Appearance Tab

    3.5. The Audio Engine tab (debug only)

    The "Audio Engine" tab (Figuur1.5) is a window that shows various stats about Hydrogen and the audio driver. In case JACK is used, buffer and sampling rate should be set before starting Hydrogen (JACK automatically starts when an application tries to connect).

    Note that the Audio Engine tab is only available if Hydrogen was complied with debug support.

    Figuur 1.5. The Audio Engine tab

    The Audio Engine tab

    Hoofdstuk 2. Using Hydrogen

    1. Used Filetypes

    Before working with Hydrogen, please familiarize with these filetypes:

    • *.h2pattern: XML file describing a single pattern. Patterns are group of beats and are managed in the pattern editor.

    • *.h2song: XML file describing the whole song (or sequence). Songs are group of patterns with their properties and are manager using the song editor

    • *.h2playlist: XML file describing a playlist. A Playlist is a (ordered) group of songs.

    • *.h2drumkit: a compressed and archived folder containing all sound samples composing a drumkit and a description XML file. Drumkits are basically group of sound samples.

    2. Main menu

    Projects: this menu offers file related functions.

    • New - Create a new song

    • Show Info - Set general properties of the song such as name, author, license and generic notes

    • Open - Open a song

    • Open Demo - Open a demo song (demo songs are stored in $INSTALLPATH/share/hydrogen/data/demo_songs)

    • Open recent - Open a menu showing last used songs

    • Save - Save changes to current song

    • Save as - Save current song specifying a name (default path: $HOME/.hydrogen/data/songs)

    • Open pattern - Open a saved pattern belonging to the current drumkit

    • Export pattern as - Saves a pattern. It will be stored in $HOME/.hydrogen/data/patterns/drumkit_name

    • Export MIDI file - Export current song in MIDI format

    • Export song - Export current song in WAV format

    • Quit - Quit Hydrogen

    Instruments: this menu offers instruments and drumkit (sound libraries) functions.

    • Add instrument - Add a new instrument to your current drumkit

    • Clear all - Delete all instruments from the current drumkit

    • Save library - Saves all instruments settings (and their sound samples) in $HOME/.hydrogen/data/library_name

    • Export library - Compress all instruments samples and settings in a drumkit in $HOME/.hydrogen/data/library_name

    • Import library - Imports another drumkit from the local filesystem or download it from a remote location through an XML feed. The XML file that should be provided is NOT RSS compliant (see Hydrogen website for an example). To load another drumkit in your current working session of Hydrogen, read Paragraaf7.

    Tools: opens the mixer, the director, the playlist editor, the instrument rack and the general preferences window.

    • Playlist editor - A tool to manage playlists.

    • Director - Open the director window.

    • Mixer - Open the mixer window.

    • Instrument rack - Open the instrument rack panel.

    • Preferences - Open the main preferences window. Read Paragraaf3 on how to configure Hydrogen.

    Debug: tools mainly for debugging and monitoring Hydrogen (only available when compiled with debug support !).

    • Show audio engine info - Open a monitor with various stats

    • debug action - Insert debug commands.

    • Print Objects - Print on stdout current objects map.

    Info

    • User manual - Open a window with this manual :)

    • About - The usual window with license information, acknowledgements, etc.

    3. De hoofd werkbalk

    Before analyzing the two main frames of Hydrogen, let's take a quick look at the main toolbar and its components:

    • Pilot the song using the start, stop, pause, etc. buttons

    • Choose between "pattern" or "song" mode: in "pattern" mode only the currently selected pattern will play, while in "song" mode all patterns inserted will be played.

    • An advanced tap tempo function: choose note length and how many notes to wait before recalculating BPM, then click the comma key repeatedly until the 'R' letter will appear and the BPM will be updated. (see Paragraaf3.1)

    • Manually set BPM

    • Manage JACK transport

    • Open the mixer and the instrument rack panels

    Figuur 2.1. The Main Toolbar

    The Main Toolbar

    • Main controls to start [Hotkey = Spacebar], stop, record, fast forward, rewind, loop a song or a pattern.

    • Set Pattern/Song Mode. When Song mode is selected Hydrogen will play the complete song. This is the sequence of patterns you have created in the Song Editor (see Paragraaf4). When Pattern mode is selected Hydrogen will play the pattern that is currently selected, and thus displayed in the Pattern Editor (see Paragraaf5).

    • Set measure type and Beat Counter (see Paragraaf3.1).

    • Als je het tempo van een nummer wil aanpassen klik je op de + of - knop. Om de metronoom aan of uit te schakelen kan je het onderste knopje gebruiken.

    • Shows CPU load and MIDI events. The CPU bargraph gives you an indication of the CPU load. The MIDI led lights up every time Hydrogen receives a midi message.

    • Click J. TRANS to enable Jack transport. If the J. MASTER button is pressed Hydrogen will work as 'master', else it will act as 'slave' to another 'master' program (e.g. Ardour). This applet is only available if Jack Audio Driver is selected.

    3.1. Tap Tempo and BeatCounter

    It is possible to change tempo at any time using the tap-tempo and BeatCounter features of Hydrogen. You can change these while playing or while the song is stopped. To change the tempo, hit the , (comma) key in tempo for the number of beats in the measure. After the correct number of beats are met, the tempo will change to the average tempo that you tapped in. If you continue to tap, these new taps will become a part of a rolling average. If you tap accidentally, or if you wait too long between taps, the tap tempo counter will start over.

    The Tap Tempo is a part of the BeatCounter, which is essentially a Tap Tempo on steroids. By default the BeatCounter display is not visible. To see the BeatCounter widget click the upright button (BC) between Song/Pattern mode selector and the BPM-widget. Or, it can be shown by pressing the comma key (,).

    The tempo that you tap will be considered even beats of the beat type. The beat type can be set to 1/8 (for eight-note beats), 1/4 (for quarter-note beats), 1/2 (for half-note beats), and 1/1 (for whole-note beats). To change the beat type use the left arrow buttons. To change the number of beats that are counted, use the right arrow button. You can set from 2 to 16 beats. (I.e. if you set the beat to 6, you will have to tap 6 times before the new tempo is computed and set.) When the display shows an R, it means that the BeatCounter is ready to start from 0. Every time you tap with the comma key, it will show the number of taps that you have entered (1, 2, 3...).

    The button in the bottom right-hand controls the auto-start feature, and it toggles between S and P. When it shows P for (Play), the song will set the new tempo and automatically start to play after you tap the right number of beats (if it's not already playing, of course). This way, if you have the BeatCounter set up for 4/4, you can tap 1-2-3-4, and start playing on the next beat. When it shows S (for Set BPM), the auto-start is disabled.

    For example: Suppose you have a live band, Hydrogen, and a softsynth that is controlled by Seq24)... and you want them all to start at the same time. Set the beat type to 1/4 and the number of beats to 4. Enable auto-start (button shows P). Count off the band 1-2-3-4 (while tapping the comma key) — and everyone starts on 1.

    Another example: Same situation, but the song doesn't require Hydrogen or synths until some point later. During that time, a human (e.g. guitar player) will be setting the tempo. On the measure before Hydrogen is supposed to play, tap the comma key 1-2-3-4 with the beat... and you're in on the next beat (at the right tempo).

    If you are using the JACK Transport, the BeatCounter continues to work. If another program is the JACK Transport Master, Hydrogen will respond to tempo change events from that application. Note that in this situation, Hydrogen is supposed to be a slave, so some of the BeatCounter features will be disabled or will not work properly. If Hydrogen is the JACK Transport Master, tempo changes from Hydrogen will be reflected in those programs (if they support it).

    Some of the settings to adjust the BeatCounter's latency compensation, are located on the General tab of the Preferences Dialog (see Paragraaf3.1 ). Here you will finde two spinboxes:

    • Beat counter drift compensation in 1/10ms — adjust to compensate for latency between the keyboard and the program.

    • Beat counter start offset in ms — adjust the time between the BeatCounter's last input stroke and when the song starts playing (if auto-start is activated).

    Note that these can be set to positive (+) or negative (-) values. In order to find useful values for these, you will need to take some time to play with it. Also, you may want different values depending on the speed of your hardware, audio devices, drivers, etc. Using the BeatCounter effectively requires practice.

    4. De Opname editor

    The "Song Editor" (Figuur2.2) gives an overview of the whole timeline of the song (e.g. intro, verse, bridge, chorus and so on); each blue colored square on this panel is a complete bar as shown in the underlying "Pattern Editor" panel. Here we have complete freedom to add, remove or move patterns in any order we prefer. We can also copy and paste patterns: use left mouse button to highlight an area and drag it around. Dragging with CTRL key pressed copies the patterns.

    The Song Editor comes with 7 buttons:

    - -

    • Completely delete all patterns (asks for confirmation!).

    • Create a new pattern (and asks for a name).

    • Move currently selected pattern up or down.

    • Enable selecting patterns for copy & paste (Select Mode).

    • Enable Draw Mode.

    • Switch from "Single pattern mode" to "Stacked pattern mode" and back..

    XXX

    Figuur 2.2. The Song Editor

    The Song Editor

    5. De Patroon Editor

    The "Pattern Editor" lets us create or modify the pattern (bar) which is currently selected. You can add/remove notes, and tune a number of per-note properties like velocity and pan. The Pattern Editor can be used in 2 modes : 'Drum' mode or 'Piano' mode. You can switch between these modes by clicking the Drum/Piano button (located on the top-right of the Pattern Editor)

    First let's take a look at the (classic) 'Drum' mode :

    Figuur 2.3. Pattern Editor in Drum mode

    Pattern Editor in Drum mode


    -

    5.1. Pattern Editor Controls

    The top part of the pattern editor contains a number of controls :

    Figuur 2.4. Pattern Editor Controls

    Pattern Editor Controls

    From left to right :

    • SIZE : lets you choose the size of the pattern (the number of bars)

    • RES : this is the current grid resolution (4 through 64)

      Remember this constraint concerning the grid: if you are working with a resolution of 16 you can't go back to 8 and remove a 16th note. On the other hand if you are working with a resolution of 8 and you try to insert a note in the middle of two bars (looking for a 16 bars precision), notes will be placed in the previous or in the following 8th bar. This constraint can be removed if you disable the whole grid resolution (choose "off" from the grid resolution LCD control). Now you'll be able to place notes wherever you prefer.

    • HEAR : when enabled Hydrogen will play the sample as it's being added to the pattern.

    • QUANT : enables/disables quantization. When enabled the beats inserted will automatically respect the grid resolution currently applied.

    • Drumset / Instrument : when set to Drumset the keys on your midi keyboard will map to the instruments in your sound library as described in the instrument mapping table below. If you set it to Instrument the keys of your midi keyboard will trigger the instrument that is currently selected. The pitch of the instrument will follow the key you press on your keyboard. This feature is mainly used for non-drum instruments. An example : if you use a sample of a piano for one of your instruments, you will be able to 'play' that piano instrument using your keyboard just like you are playing a piano synth.

    • Note Length / Note off : these are 2 different ways to define the duration of a note. See Paragraaf5.3 for usage.

    • Drum/Piano : switch Pattern Editor between Drum and Piano mode. (see below)

    5.2. Pattern Editor Drumkit

    The section on the left shows you what drumkit/library is currently selected (GMkit by default) and below that you can see the instruments that are part of this kit.

    - -

    Each instrument has its own set of features that are accessible by right-clicking the instrument. From the context menu that pops up you can select

    • Clear notes : to remove all notes for this instrument in this pattern.

    • Fill notes : this allows you to fill up the pattern with notes for the selected instrument. Depending on the choice you make (fill all, fill 1/2, fill 1/4 ...) notes will be placed at all, 1/2, 1/4, etc of the note positions that are allowed by the grid setting. So be careful not to mix up the 'musical' 1/2-note and the 'fill 1/2' note.

    • Randomize velocity : automatically apply a pseudo-random velocity to each note of that instrument in the pattern. The more velocity you set on the instrument, the more hydrogen will hit hard on that instrument when played.

    • Delete Instrument : well, deletes the instrument ;-)

    The small red and green buttons right of the instrument names are the mute (red) and solo (green) buttons.

    The order of the instruments can be rearranged by simply dragging an instrument up/down in the list and dropping it on a new position within the drumkit/library. Doing so will not change anything to the sequence you have created for that instrument, nor will it change anything to the song or pattern you are working on. It will however, have an impact on the MIDI note mapping : in the table below you can find the link between the instrument position, the MIDI note and the qwerty keyboard keys.

    Important Notes :

    The name of the instrument depends on the drumkit that is loaded. This list below refers to the GMkit that is loaded by default.

    Keep in mind that it is the position of the instrument (within the loaded drumkit) that is linked to a MIDI-note/keyboard-key and not the name of the instrument.

    Here's a quick reference of the above bindings for your convenience.

    5.3. Pattern Editor Sequence area

    This is where it all happens, this is where you can make music :-)

    In this area you can see your selected pattern and add notes for any instrument. The simplest way to create a pattern is by adding notes using your mouse (and the 'Fill/Clear notes' function described above). Where you can add notes depends on the used pattern size and resolution.

    If you are using Hydrogen as a pure 'drum' you just want Hydrogen to 'hit' the instrument wherever there's a 'dot' in the pattern. If you are using Hydrogen as an 'instrument', the length of the note becomes very important. There are 2 ways to define the length of a note : in 'Note Length' mode you can add a note by left-cliking, and you can 'stretch' that note by right-click-dragging it. This will change the dot into a rectangle that represents the duration of that note. In 'Note Off' mode you can also add a note by left-clicking, but a right-click will now add a blue dot that represents the end of that note.

    (Figure above, from left ->right : a 'normal' note, a note in 'note length' mode, a note in 'note off' mode)

    So far we have only used the mouse to create a pattern, but you can also record your beats by clicking the Record button (see Paragraaf2) and simply playing your pattern on your MIDI drum or your pc keyboard (see instrument mapping above). This is probably a more musical way of creating a pattern, but it's up to you to decide what works best for you. (Also see Hoofdstuk3 for a basic walk-through of how the pattern editor works)

    5.4. Pattern Editor Note Properties

    Clicking on an instrument or adding/removing a note next to it will select this instrument. Once an instrument is selected the note properties for this instrument will be shown in the form of vertical lines in the bottom window. The lines represent the value for the selected property of each note of the selected instrument. You can select another note-property from the note property drop-down list (located bottom-left). There are 4 note properties available :

    • Velocity : how hard the note is played (the volume of the note)

      Note that the color of the note-dot and the vertical bar will change according to the velocity value you have defined. A light shade of gray means a low velocity (low volume) and the higher you set the velocity the darker the color will be, turning red when you reach the point of clipping.

    • Pan : with this parameter you can define the stereo image of the note (how loud it will be in the left/right output)

    • Lead/Lag : Lead and Lag allows a slight note lead or lag in respect of the actual beat. The range is ca. 5 ticks which equals around ca. 10 ms at a tempo of 120bpm. Changing the lead/lag can make a huge difference to the way your pattern sounds and feels. It's a groove thing ;-)

    • Notekey : if you select this note parameter the area where you can modify the parameter will change into a 'piano keyboard'

      The striped black and white area represents a piano keyboard and in the gray area you can choose the octave. By placing a dot on the octave scale and a dot on the 'keyboard' you can choose any note.

    -

    5.5. Pattern Editor Piano mode

    Drum mode (see Figuur2.3) focuses on using Hydrogen as a drum machine. If you are using Hydrogen as an instrument there is a big chance that the Piano mode is for you. It gives you a complete 'piano keyboard' so you can easily put down your tunes.

    You can compare the Piano mode to the Note properties Notekey (described above), only here you have a complete piano keyboard, so you dont have to select the octave first.

    Figuur 2.5. Pattern Editor in Piano mode

    Pattern Editor in Piano mode

    6. Mixer

    Figuur 2.6. The Mixer

    The Mixer

    The Mixer frame (Figuur2.6) is useful for tuning a global or single volume of the current drumkit. It shows the current peak (click on to disable, useful on old CPUs) and let you set the maximum peak allowed (tune with the fader knob of the instrument), lets you modify attributes like pan, play solo , mute or test play only that instrument ; selecting in the Pattern Editor an instrument causes a blue LED to light on (near the play button). Near the global volume knob, you can set 3 global effect such a swing (shifts a few notes back or forward not randomly), timing (modify timings of the notes) and humanize effect (random velocity editing).

    In addition to all this you can set up to 4 special LADSPA effects for each instrument switching the button. See next section for a detailed overview.

    7. Sound Library (Drumkit Manager)

    The Sound Library saves you time in managing your drum kits, favorite patterns, and favorite songs. When making new songs and drum kits, the Sound Library makes it easier for you to reuse and mix the instruments and patterns from other kits and songs.

    7.1. System Drumkits

    This lists the drumkits that were installed by your system administrator. It was determined by the compile-time prefix. On Unix-like operating systems, this is usually /usr/share/hydrogen/data/drumkits, or possibly /usr/local/share/hydrogen/data/drumkits. These kits are available to all users on the system, and users are usually not able to add to them.

    To load a drumkit from here, right-click the drumkit and select Load. This will replace your current drumkit with the one that you selected. To load a single instrument from that kit, left-click the plus to the left of the drumkit's name to show all the instruments. With your left mouse button, click and drag the instrument into your current kit. The instrument will be added to the drumkit that you currently have loaded.

    7.2. User Drumkits

    These are your own drum kits that you can manage yourself. They are usually stored in $HOME/.hydrogen/data/drumkits. When you are creating a new drumkit, you can save it here by selecting InstrumentsSave library.

    Loading drumkits and instruments to use is the same as for the System Drumkits (see Paragraaf7.1).

    7.3. Patterns in the Sound Library

    Before you save your favorite patterns to the sound library, be sure to edit it's properties by right-clicking and selecting Properties. There, you can give the pattern a title and a category. You can use one of the categories already provided, or create your own categories by simply typing in a category name. The category name is important, because the patterns will be filed by category in the Sound Library.

    You can save your favorite patterns in the sound library by right clicking the title of the pattern in the song editor, and selecting Save Pattern. It will appear in the Sound Library underneath Patterns and the category that you assigned to the pattern.

    7.4. Songs in the Sound Library

    To save songs in the Sound Library, put them in your data directory underneath the songs folder (usually $HOME/data/songs. To remove them, remove the file from that folder.

    8. Drumkits and Instrument Editing

    Creating a new drumkit with Hydrogen is done with the Instrument Editor. Using the instrument editor you can load samples, set envelope parameters, set the gain, and a few other advanced features like mute groups, low-pass resonance filter, and pitch randomization.

    Instead of creating your own drumkit, you can also use or download existing drumkits using the Paragraaf7.

    8.1. Concepts

    The synthesizer in Hydrogen is a sample-based synthesizer. A sample is a piece of pre-recorded audio (usually between .1 sec and 3 sec). To play a note, the sample is simply played back at the right time. There's a few concepts and terms that you should understand when you are putting together a drumkit. (See Glossary for more detailed explanations.)

    Sampling Synthesizer Terms

    Sample

    A short recording of a sound, typically between .1 and 3.0 seconds long.

    Gain

    Volume adjustment.

    Velocity

    How hard you hit a note.

    ADSR Envelope Generator

    An Attack/Decay/Sustain/Release envelope generator. After you trigger a note, Hydrogen will attack the note by increasing its volume from 0 to the full velocity of the note. After reaching full velocity, it will decay the note by lowering the volume until it reaches the sustain level. When the note is released, Hydrogen reduces the volume from the sustain level back down to 0.

    Attack

    The amount of time to go from 0 to full velocity.

    Decay

    The amount of time to go from full velocity to the sustain volume.

    Sustain

    The level (how loud) to hold the note between the sustain and the release. It is a percentage of the velocity. It does not depend on time.

    Release

    The amount of time to go from the sustain volume back down to 0.

    Typical samples that are used in Hydrogen are: the sound of a single drum hit, the sound of a single cymbal hit, the sound of a single cowbell hit. Whenever you put a note in the pattern (or play a note using MIDI), Hydrogen will play whatever sound you have loaded. So, to put together a drum kit you need to gather short recordings of the bass drum, each tom, each cymbal, the high hat open, the high hat closed, the snare drum (snare on), the snare drum (snare off), rim shots, etc.

    However, there are no rules about what a sample can be. It's not uncommon to use Hydrogen to trigger non-drum sounds like: audio clips of people talking, a clip from a song, sound effects, audio clips from movies, and famous people speaking. Be creative!

    8.2. Creating a New Drumkit

    To start a brand new drum kit, select InstrumentsClear All . This will give you a bank of 32 blank instruments. To delete instruments, right-click on on each instrument and select Delete Instrument. To add more instruments, select InstrumentsAdd instrument .

    Select an instrument to start editing it. This is done by left-clicking on the name of the instrument in the instrument list (at the left). You will notice that the name of the instrument in the Instrument Editor matches the one that you clicked.

    After you have your drum kit working the way you want, select InstrumentsSave library . It will ask you for the name of the kit to save. If you wish to overwrite an existing kit, you will need to type in the same name as the kit that you want to replace.

    Drumkits are automatically stored in the data directory (i.e. $HOME/data/drumkits).

    To export a drumkit (for sharing with others), it must first be loaded into your Sound Library. Then, select InstrumentsExport library from the menu. Select the drum kit that you wish to export, and give it a file name to save it to.

    8.3. Creating an Instrument and Layers

    For each instrument in a drum kit, you can load several samples and set different synthesizer parameters. This section will step you through how to create a new instrument and load the samples.

    To begin creating an instrument, select InstrumentsAdd instrument. This will give you a blank instrument to start from.

    Now, you need two samples. Any .WAV or .FLAC file will do. Hydrogen provides several in the data/drumkits directory.

    In the instrument editor, click on Layers. You can layer several samples into the instrument. Which one is played depends on the velocity of the incoming note. Click Load Layer and point the Audio File Browser to your sample. Note that the Audio File Browser will allow you to preview the sample before you load it. It will also allow you to load more than one sample at a time. But for now, only load one.

    After you load the sample, you'll see that there is now a 1 at the top, and the topmost rectangle has turned light blue. To load a second sample, click the slot just below it, and then click Load Layer to bring in another sample.

    After bringing in both samples, you'll probably notice that only the first sample is being played whenever you trigger the instrument. This is because you need to set the velocity ranges for the layers. Move your mouse to the sides of the light blue rectangles and you see that you get a left-right drag cursor. Now drag the sample to the left or right (like a curtain). You will now see Layer 2 appear.

    The velocity setting for the layer is 0-velocity on the left, and full velocity on the right. Set up Layer 1 to sound for soft notes, and Layer 2 to sound for hard notes. (I.e. Layer 1 on the left and Layer 2 on the right.)

    Now, in the pattern area, set up a simple pattern that plays this instrument. Adjust the velocity settings on each note so that you can get the different samples to sound. Now set the pattern to loop and notice how your different samples are getting triggered. (To learn about editing a pattern, see Paragraaf5)

    For each layer, you can set the Gain and the Pitch. The pitch also has a Fine adjustment.

    Use the Gain adjustment to control how loud the sample will play. This is necessary because it's extremely difficult to get a set of samples that all sound at about the same volume. By adjusting here, the samples that were recorded too quietly can be turned up to match your loud samples (that had to be turned down).

    Waarschuwing

    It is very easy to set the Gain too high, causing your sample to clip. Remember to test the gain with full-velocity notes. If you clip your signal here, it will only get worse as Hydrogen processes it.

    The pitch of the sample can be modified with the pitch controls. The Pitch knob adjust the pitch in musical half-steps. (So, -12 is down 1 octave). The pitch on the right adjusts the pitch 50 cents. (One half-step is 100 cents.)

    Opmerking

    The pitch is adjusted by playing the sample back faster or slower. This is called the Dopplar Effect. So, if you have a 1-second sample that you turn down -12 (1 octave), you sample will only last for .5-seconds.

    8.4. Instrument Parameters

    In the instrument editor, click on the General button. Here you can adjust several parameters that are for the whole instrument (not for each layer). The parameters that you can adjust are:

    • Envelope parameters: Attack, Decay, Sustain, Release. (See Envelope Generator)

    • Gain: The overall volume of the instrument.

    • Mute Group: Which mute group this instrument is a member of (see Mute Group).

    • Filter Parameters: Bypass, Cutoff, Resonance.

    • Random Pitch

    It's important that you understand Paragraaf8.1 in order to continue on.

    8.4.1. Envelope Parameters

    When the instrument is triggered, its volume is run through an ADSR Envelope. The parameters operate as follows:

    • Attack — the amount of time that the volume of the sample goes from 0 to the full velocity of the note. If the value is 0, the sample will play immediately at full velocity. If the value is 1.0, the sample volume will use the maximum time available for the attack parameter. [1] -

    • Decay — the amount of time for the volume of the sample to go from full velocity down to the sustain volume. If the value is 0, the sample will immediately skip from the attack volume to the sustain volume. If the value is 1.0, the sample volume will use the maximum time available for the decay parameter.[1]

    • Sustain — the volume to play the note after the decay phase is over, and until the note is released. If set to 0, the note will be silent. If set to 1.0, the note will play at full velocity.

    • Release — the time to fade out the note from the sustain volume back down to 0 (silent). If set to 0, the note will fade out in the minimum amount of time (about 5 ms). If set to 1, it will fade out for the maximum time available.[1]

    If the sample is shorter than the times that you specify, the sample will end, regardless of which phase of the ADSR it is in. If the note is sustained, it does not draw out the note while you are holding it. It only holds the gain (volume) parameter during that time.

    8.4.2. Gain and Mute Group

    The gain sets the overall volume for the sample. This gain is applied after the gain that you set for the layer, and before the gain that is set for the mixer. If the Gain is 0, the instrument will be silent. If the gain is 1.0 the volume of the samples will not be adjusted (i.e. 0 dB). If the gain is set higher, the samples will be amplified.

    Waarschuwing

    It is very easy to set the Gain too high, causing your sample to clip. Remember to test the gain with full-velocity notes. If you clip your signal here, it will only get worse as Hydrogen processes it.

    Hydrogen provides more mute groups than you know what to do with (over 256). A mute group is a grouping of instruments that are mutually exclusive — only one instrument may be playing at any time. If one is playing and another instrument in the group is triggered, it will immediately silence (mute) and start playing the other instrument. This is useful, especially, for instruments like hi-hats where the open sound and the closed sound are different instruments.

    If the mute group is set to Off, then the instrument is not part of any mute grouping. If the mute group is set to any number, then that is the group that the instrument is a part of. To set other instruments into the same grouping, set their mute group parameter to the same number. (For example, to group all the high-hat instruments, you can set all their mute group parameters to 1. To have a snare drum mute group, set their mute group parameters to 2.)

    8.4.3. Filter and Random Pitch

    The filter is a low-pass resonance filter. If you don't wish to use is, click the BYPass button so that it's red. If it's not red, then the filter is active. The cutoff parameter adjusts the cutoff frequency for the filter. The resonance parameter adjusts how much to resonate the cutoff frequency. If the resonance is set to 0, then the filter is just a simple low-pass filter.

    Opmerking

    The cutoff frequency of the filter varies with the sample rate of your audio card. The range of the knob (0 to 1.0) is optimized for a 48,000 kHz sample rate.

    The random pitch parameter allows you to randomly vary the pitch of the sample every time it is triggered. The value is set between 0 and 1.0. The pitch change is fairly small: 2 half-steps value. Using this sparingly can help your sequences to sound more like a real drummer.

    8.5. Tips on Editing Instruments

    With all of the different parameters available to tweak, it can be difficult to set up something that sounds nice when you're done. Here's a few tips on setting up an instrument:

    Turn down the gain. Every time you have a gain knob (i.e. an amplifier), this is called a gain stage. With every gain stage you have, it's easy to overdrive your signal — which means the signal gets distorted by clipping. In addition, if you have two samples that, by themselves, peg your meters — what do you think happens when you combine them? That's right, you overdrive the signal again.

    If things sound bad and distorted, start by turning down the gain setting on the layer... especially if it's larger than 1.0. Then turn down the instrument gain. Then any gain on a LADSPA effect. Then the fader on the mixer. Then the master output fader.

    Test samples at full velocity. Your sample will be played louder if the velocity is higher. So, if you set everything to sound nice and full with velocity at 0.7, what will happen when you get a full velocity of 1.0? (Hint: clipping.)

    Try to use samples that are -6 dB max. Visually, this means samples that peak at only 1/2 of full scale. Otherwise, turn your layer gain to about .5.

    Remove all DC offsets from the sample. In a sample editor, there is usually a line down the center of your sample's waveform. This is the zero-line. The beginning of your sample should be on this line. The end of your sample should also be on this line. However, if your signal is a little above or a little below this line, you will hear a click at the beginning and the end of your sample whenever it is played. If your sample editor doesn't provide any tools to fix a DC Offset problem, you can eliminate the noise by putting a slight fade-in/out at the ends of your sample.

    The ADSR will not be longer than your sample. If you have a short sample, it doesn't matter how long you set the attack and delay — the sample will stop playing at the end.

    Things change with the sample rate. If you have a really nice setup with all your parameters painstakenly tweaked... things will change if you change the sample rate of your audio card. Many of Hydrogens internal settings and parameters are done based on how many samples go by, and not on how many seconds go by. The sort of things that change are: anything time-base (like attack and release) and anything frequency based (like the cutoff frequency).

    9. LADSPA plugins

    Hydrogen can also add effects to sounds using any LADSPA plugin library. You need to have installed the LADSPA sources (available from http://www.ladspa.org) and while this will give a rough idea of how it works you should really have a taste of the real thing installing one or more plugin libraries, it's as simple as a scons && scons install. Here are a few places to download plugin libraries:

    Plugins Kill

    A LADSPA plugin is compiled, executable code. It is capable of hanging, crashing, freezing, screeching, overflowing buffers, and even phoning home. If you start having issues with Hydrogen, disable your plugins and see if things improve. Some plugins are not designed for real-time use, and some are just plain better than others.

    Once you have installed a few plugins open a song you'd like add an effect to and select an instrument that has a few beats in the pattern. In the Mixer click on and select one of the four available effect line Click on the Edit button ( ), than on Select the FX: this will bring up another window (Figuur2.7) that lets you choose an effect amongst those installed, they are alphabetically sorted and categorized. Once you're done, adjust the level from the mixer and start playing. Each round knob in the FX part controls the level of its effect. If you want to quickly enable/disable the effect click the Bypass ( ) button.

    Figuur 2.7. Select an Effect

    Select an Effect



    [1] The attack, decay, and release parameters are all set by the number of audio samples. This means that the time changes depending on the sample rate of your sound card. The max time for each of them is 100,000 audio samples (typ. 2.27 sec at 44.1 kHz).

    Hoofdstuk 3. Een nieuw liedje

    1. "Song" mode en "Pattern" mode

    XXX

    Hydrogen has 2 main modes: "Pattern" mode and "Song" mode (refer to Paragraaf3 for the buttons to activate). When "Pattern" mode is activated the current pattern is continuously repeated. This mode is very well suited to tweak your pattern untill it's just right, since the pattern you are working on is constantly repeated. This way you can immediately hear the changes you have made. In "Song" mode the whole song is played. This is useful when putting together the patterns, to create the structure of the song.

    2. Een nieuw patroon

    We'll start from an empty song with an empty pattern, as created by default: "pattern" mode should be selected now. It is also possible to change name of the pattern. Now let's click on the Play button and while the pattern is playing let's add notes in the grid of the Song Editor (Figuur3.1) simply left_mouse_clicking on it: adjust grid resolution and BPM speed if needed. Remember some constraints of the grid: if you are working with a resolution of 16 you can't go back to 8 and remove a 16th note; same thing happens if you are working with a resolution of 8 and you try to insert a note in the middle of two bars (looking for a 16 bars precision): they will be placed on the previous or on the following 8th bar (unless you choose off from the Grid Resolution LCD, in this case you're free to place notes wherever you prefer). Be sure to select the correct pattern in the Song Editor before adding notes in the Pattern Editor!

    Figuur 3.1. The Pattern Editor

    The Pattern Editor

    3. Een nieuw spoor

    Once patterns are created (Figuur3.2), we can copy/paste/delete them simply dragging with the mouse (activate the select mode for the Song Editor and keep pressed left mouse button to select those you want to move or copy).

    Figuur 3.2. Inserting Notes in a Pattern

    Inserting Notes in a Pattern

    4. Aanpassen via de mixer

    Natuurlijk kunnen we ook het Mixer venster gebruiken tijdens het maken of afspelen van patronen

    The Mixer frame (Figuur3.3) is made of 32 independent tracks, each of these is binded to an instrument, plus a "Master Output" line to adjust general output volume and a "FX" button to set effects. Every line features 3 buttons ( ), pan adjust ( ), current maximum peak, volume fader and name of the track. Clicking on will play the selected instrument, cutting the others. The "Mute" button , simply mute that instrument. The maximum peak indicates the maximum volume reached from the instrument; the peak must be in a range of 0.0 and 1.0 (in Figuur3.3 you can see a few volumes too loud), otherwise it will get distorted producing a weird sound (especially with OSS audio driver), in this case it's better to set volume down; keep an eye on each vu-meter.

    Figuur 3.3. The Mixer

    The Mixer

    Hoofdstuk 4. Shortcut lists

    • [CTRL + N] = New Project

    • [CTRL + O] = Opname openen

    • [CTRL + D] = Open Demo

    • [CTRL + S] = Opname opslaan

    • [CTRL + SHIFT + S] = Save File as

    • [CTRL + P] = Export Pattern as

    • [CTRL + M] = Export MIDI file

    • [CTRL + E] = Export Song

    • [CTRL + Q] = Quit Hydrogen

    • [ALT + B] = Show Director window

    • [ALT + M] = Show Mixer window

    • [ALT + I] = Show Instrument rack

    • [ALT + P] = Show Preferences window

    • [CTRL + ?] = Show manual

    • [Backspace] = Liedje of patroon herstarten vanaf het begin.

    • [spacebar] = Play / Pause

    • [,] (comma key) = Tap tempo (beatcounter)

    Glossary

    This is a glossary of general terms encountered when using Hydrogen, synthesizers, drums, or samplers. The definitions in the text are simplified, but the definitions here are more general and have more explanation. For example, the text of the manual would have you believe that an ADSR is the only kind of envelope generator, and could only ever control the volume. While it's simple for new users, it's not quite right.

    ADSR

    A type of envelope generator that allows you to control the Attack, Decay, Sustain, and Release parameters. Generally, the parameters are proportional to the velocity.

    In Hydrogen, the ADSR envelope generator only controls the volume (attenuation).

    Read more about this in the Wikipedia Article ADSR Envelope

    Zie ook Envelope Generator, Attack, Decay, Sustain, Release.

    Attack

    This is the first phase of an ADSR envelope, and is the amount of time to turn the parameter up from 0 to full velocity after triggering the note.

    Zie ook ADSR.

    Attenuation

    In filters and mixers, this the amount that a signal is reduced (volume).

    Zie ook Roll-off.

    Band-Pass Filter

    A filter that preserves a certain band of frequencies, and attenuates (silences) all others. This is often done by combining a high-pass and a low-pass filter.

    Zie ook Filter, High-Pass Filter, Low-Pass Filter.

    Clipping

    A phenomenon that happens to a signal when the signal is too large for whatever is receiving it. The peaks of the signal (which are normally smooth curves) get cut off straight at the max volume (clipped). This distorts the sound and is usually undesirable.

    An example of clipping is when you play music louder than your speaker can handle. Parts of the music sound harsh and fuzzy.

    Cutoff Frequency

    On high-pass and low-pass filters, this is the frequency that divides between those that pass, and those that are attenuated (silenced). In a high-pass resonance filter, or a low-pass resonance filter, the cutoff is also the frequency zone that gets boosted.

    For example, if you have a low-pass filter and you set the cutoff frequency high (i.e. 20kHz)... the filter will not affect the sound. All the audible frequencies will pass through undisturbed. As you lower the cutoff frequency to something like 40 Hz (the low string on a bass guitar), it sounds like someone is putting a blanket over the speaker. The higher frequencies are being attenuated above 30 Hz.

    Zie ook Filter, High-Pass Filter, Low-Pass Filter, Resonance Filter.

    Decay

    After reaching full velocity from the attack, this is the amount of time to turn the parameter down from full velocity to the sustain level.

    Zie ook ADSR.

    Envelope Generator

    A way to control (change) a parameter over time as a response to triggering, holding, and releasing a note.

    Did your eyes just glaze over? Let's try again:

    Imagine that you're playing a note on the keyboard and you have your other hand on a knob (volume, filter cutoff, etc.). As you play the note, you twist the knob (often up, then down... or down, then up). You do the same thing on each note. That's what an envelope generator does. See also ADSR

    Fader

    A slider control used to adjust the attenuation (volume) in a mixer. Faders always have an "audio" taper, which means that the attenuation amount changes on an exponential scale.

    Filter

    A device that changes a sound by attenuating specific frequencies. A tone knob is an example of a simple, low-pass filter.

    Zie ook Band-Pass Filter, High-Pass Filter, Low-Pass Filter, Resonance Filter.

    Gain

    In an amplifier, this adjust how much (or how little) a signal is amplified (volume). A higher gain value is a louder signal.

    High-Pass Filter

    A filter that attenuates (silences) low frequencies, but allows high frequencies to pass through.

    Zie ook Filter, Cutoff Frequency.

    Instrument

    In Hydrogen, an instrument is a single noise-maker (like a bass drum kick, or a tom).

    Layer

    In an instrument you can load several different samples (each one called a layer), and have a different sample play depending on the velocity of the note. Only one sample at a time will play.

    Suppose you have a sample of a floor tom being struck softly. If you simply play the sample louder — it will not sound the same as a real tom that has been struck very hard. If you wish to mimic this in your instrument, you can load one sample for soft playing, and a different sample for loud playing.

    Zie ook Instrument.

    Low-Pass Filter

    A filter that attenuates (silences) high frequencies, but allows low frequencies to pass through.

    Zie ook Filter, Cutoff Frequency.

    Mute

    To make no noise. A setting on an instrument that prevents any audio output.

    Mute Group

    A group of instruments (samples) that should mute (stop playing) immediately after another instrument in the group is triggered.

    This is typically used in hi-hats, where there's a different instrument (sample) for when the hi-hat is open or closed. With a real hi-hat, the sound of the open hi-hat will stop as soon as you close it. However, if you use two samples — the open sound will continue even after you have triggered the closed sound. By placing both instruments in the same mute group (group #1, for example)... triggering closed sound will immediately stop the open sound (and vice versa).

    Octave

    A span of frequencies where the top-most frequency is exactly twice the frequency of the bottom frequency.

    For example, the range 20 Hz to 40 Hz is an octave. So is 120 Hz to 240 Hz, and 575 Hz to 1150 Hz. While the frequency differences are very different (20 Hz, 120 Hz, and 575 Hz, respectively), to the human ear they sound like the same distance.

    Release

    After the note is released, this is the amount of time to reduce the parameter from the sustain level to 0.

    Zie ook ADSR.

    Resonance

    When referring to a resonance filter, this is the parameter that determines how much of a boost (gain) to give the frequencies at the cutoff.

    Zie ook Resonance Filter.

    Resonance Filter

    A filter that gives a large boost to a very narrow range of frequencies. Typically it will be part of a high-pass or a low-pass filter, where the boosted frequencies are centered on the cut-off frequency.

    Zie ook Filter, Cutoff Frequency, Resonance.

    Roll-off

    This is the amount that frequencies are attenuated (suppressed) as the frequency changes (typically measured in dB/octave).

    For example, in a low-pass filter the frequencies below the cutoff frequency are not attenuated (they pass-through with the same volume). Same with the cutoff frequency. As you go above the cutoff frequency, the frequencies that are near the cutoff frequency are not attenuated very much at all. However, the frequencies that are much higher than the cutoff are attenuated (suppressed) a lot. This is usually approximated by a straight line (on a log scale) and measured in in dB of attenuation per octave of frequency.

    Zie ook Attenuation, Filter.

    Sample

    A short recording of a sound, typically between .1 and 3.0 seconds long.

    Sustain

    The level to hold the parameter after finishing the decay time. This level will be maintained until the not is released.

    Zie ook ADSR.

    Velocity

    How hard you hit a note.

    MIDI devices are required to send this information along with the note. Synthesizers use this information to adjust several parameters on the sample (typically the volume). In Hydrogen, it is only used to adjust how loud the sample is played back.

    diff -Nru hydrogen-0.9.6.1/data/doc/tutorial_en.html hydrogen-0.9.7/data/doc/tutorial_en.html --- hydrogen-0.9.6.1/data/doc/tutorial_en.html 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/data/doc/tutorial_en.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,27 +0,0 @@ -Hydrogen Tutorial

    Hydrogen Tutorial

    Antonio Piraino

    Abstract

    Ok, you've just downloaded the latest version of Hydrogen and have it installed successfully. Now you want to test it while creating your favourite song, this might help you to learn it, writing down a few difficult parts in order to play them over and over again or to be sure that in future a quick glance at the songfile will bring up immediately to mind the song. Hydrogen can be used also as an advanced “click” machine that can help you practicing (in speed, precision and rudiments), maybe with a custom pattern designed by yourself. This short introduction will guide you creating a a complete song, we will work on "Georgy Porgy" of Toto which has a quite straight structure therefore is appropriate for a guide but this doenst mean the song is _actually_ easy to write down since the drummer (Jeff Porcaro) enriches the groove with his personal touch and fantasy; Hydrogen will not play better than the drummer who is working on the song, most of the task must be accomplished by the programmer's sensibility and experience.


    Chapter1.Move on

    Before starting make sure you have a few things:

    • The song to study on: either an audio-cd or (better) an .ogg or .mp3 for optimal flexibility.

    • Optionally a rough layout of the song on paper: it may be useful to count bars and different parts of the song that eventually wii get into Hydrogen.

    The song we will work on has the following structure:

    • Intro: 4 bars

    • Verse: 8 bars

    • Bridge: 8 bars

    • Verse: 8 bars

    • Bridge: 8 bars

    • Chorus: 8 bars

    • Riff: 4 bars

    • Verse (with guitar): 8 bars

    • Verse (with voice): 8 bars

    • Bridge: 8 bars

    • Chorus: 8 bars

    • Chorus: 8 bars

    • Chorus: 8 bars

    • Final Riff: 4 bars

    Looking at this scheme we can see that some pattern repeats, so we'll use this symbols in Hydrogen's Song Editor:

    • Verse -> A

    • Bridge -> B

    • Chorus -> C

    And to save up words on explainations we'll use two common TLA (Three Letters Acronym ^_^):

    • LMB: left mouse button

    • RMB: right mouse button

    Well, now unplug your phone and launch Hydrogen from the shell: let's get to work!

    1.Intro

    The base pattern (Fig. 1 and 2) is 4 bars long (divided in 2 different bars, each repeated 2 times, so it's [2a*2]+[2b*2]) and lasts for the whole song, from the beginning to the end, riff included; most of the time (intro and riff excluded) this base pattern is repeated 2 times to reach the commonly used 8 bars for each part of the song (A,B,C). Before starting let's set the speed to 98bpm (HINT HINT you can find out by yourself the speed of the song while playing it with your favourite media player and following the rhythm by clicking repeatedly the backslash key in Hydrogen) and from the menu “Grid Resolution” let's set '16'. To create a new pattern select the instrument “Closed HH”, click on RMB and choose “Fill Notes”: the first two bars will be filled up. Then insert manually the beats on Snare Jazz and Kick as indicated in the 2 pictures below and there we have the base pattern for our song. Note how the beats on the hi-hat have different 'hardness': beats falling on the beginning of the bar are set at [0.78], the others at [0.50] (you can check that on the lower stat bar of Hydrogen), in order to give groove the song.

    - Fig. 1 Base pattern, first bar. -

    - Fig. 2 Base pattern, second bar. -

    Before we start writing down verses there are 4 intro bars, all equals to each other, except for the last one which at the end has an open hi-hat. We should do then:

    • Rename the first pattern in the Song Editor with RMB click on the name “Empty Pattern” and change it to “intro_a”, for example.

    • Add two 'X' near the first one (which represent the second and the third bar)

    • Create in Pattern Editor the base pattern (Fig. 1)

    For the fourth bar we'll instead open the hi-hat (Fig. 3):

    • RMB in Song Editor on the newly created pattern, choose “copy”, then choose a name (ex. “intro_b”) and automagically you will have a new one right under.

    • Select the pattern you've just created (IMPORTANT!)

    • Delete the last 2 beats of “Closed HH” and move them on “Open HH”.

    • Select '32' from “Grid Resolution” and add another 2 beats right near the previous ones.

    • Adjust the hardness of these 4 beats so that the first is [0.78] while the other 3 [0.20] to simulate a longer opening.

    - Fig. 3 Intro detail, fourth bar. -

    2.First verse

    Since we have written the base pattern, now we should already know the basis. To create the first verse we just have to copy from the Song Editor the pattern “intro_a” and rename, say, to “A-B-C_1”, because it is the first bar of the verse that eventually will also fit for the bridge (B) and the chorus (C). Pay attention, why can't we just add 2 more 'X' next to this pattern? Because in the first bar there is a “Crash” beat which ends the previous intro, therefore the two bars are not completely equal; you have to copy the pattern “A-B-C_1” and rename it to “A-B-C_2”, cutting the “Crash” beat cited before.

    Same thing for the following 2 bars: just copy into the Song Editor the pattern in Fig. 2, rename it according to the previous ones and add two 'X' (because they're identical), you should reach number '8' as shown in Fig. 4.

    The 4 remaining bars of the verse are more or less the same of what we've just written, so why redo everything from scratch? Bars number 5,6,7 are virtually identical to the previous ones so we just have to add 2 crosses to pattern “A-B-C_2” and one to “A-B-C_3+4” taking care of renaming the patterns logically (so to understand how the song moves around the Song Editor), while in the eighth bar there is a fill which closes the verse. We have to copy+paste in a new line a pattern already written (ex. “A-B-C_3+4”), rename it to “A-B-C_8” and modify it as in Fig. 4. Note how in this case too the three “Snare Jazz” beats on fourth bar have hardness properly tuned with [0.10], [0.20] and [0.78]; you can't see it in the picture but also the two final beats of “Tom Mid” are both 'touched' to [0.50], after all it's only just a small fill, better not beat hard on the drums :)

    - Fig. 4 Eighth bar of the first verse. -

    The result in the Song Editor should be something like Fig. 5.

    - Fig. 5 Intro and first verse in the Song Editor. -

    WARNING! if you reached this point without saving your work, NOW is the good time to do that. A simple [CTRL+S] followed by the name of the songfile and you'll be ok. If you want to add some more infos, LMB on 'S' button of the Song Editor and change the fields as you like: these infos will be shown upon opening of the file.

    3.Bridge and following

    Now that we're done with the first verse you should have an idea of how the whole thing works: the first bridge is made of the same 8 bars (4+4) with a slight change at the end of the fourth, which forces us to create a 'custom' fourth bar while the others are easily added with our friendly little cross ('X').

    Let's take the latest pattern created as sample (“A-B-C_8”), let's copy and rename it to “Bridge1_4” (i.e. fourth bar of first bridge) and modify it as in Fig. 6. We have quickly completed the bridge! The Song Editor now should appear as follows in Fig. 7. Looking closely one should ask why the fifth bar of the bridge (17th bar of the whole song) isnt assigned to the pattern “A-B-C_1”; the answer is that the pattern has also a “Crash” which is not present in “A-B-C_2+5+6”.

    - Fig. 6 Fourth bar of the first bridge. -

    - Fig. 7 The Song Editor with the first bridge. -

    Now we can build up quickly the remaining parts of the song: after this bridge there is another verse, then a bridge and a chorus, which are mostly the same so we just need to create different pattern in a few cases (along with this guide you will find the song file with the whole song). Of course one can write as many lines in the Song Editor as the bars in the song but a whole song would become difficult to follow, plus the songfile would be bigger.

    4.The Riff

    Around half song there are two riffs: each one is 2 bars long but actually the pattern is the same, just the other instruments play something that we will see in the last riff of this song (where drums too play the pattern of the riff).

    In this riff the drums play the same pattern we already know for one bar (see Fig. 1) while in the second bar only beats two times (Fig. 8), then the pattern again and then again two beats with a small final fill (Fig. 9); again the open hi-hat is done with beats of different intensity: [0.78] and [0.20].

    - Fig. 8 Second bar of the riff. -

    - Fig. 9 Fourth bar of the riff. -

    5.The second half of the song

    After the riff we have half job done. We just have to write down two verses, one bridge, a chorus repeated 3 times and the same riff at the end.

    The second part of the song is slightly different from the previous one because we have a few hi-hat opening during the verses and every 4 bars there's a small fill almost everytime: it's easier to start from scratch a new set of pattern (i.e. “A-B-C-*”) in the Song Editor copying them with a suffix like '_hh' to show the presence of the “Open HH”. As noted in the introduction of this guide, Jeff Porcaro puts much of his skills playing the song and this makes the difference between a song played from a raw and "cold" transcription on paper (or on Hydrogen): therefore the following parts of the song will try to be faithful to the original piece, but another 'ear' could give another written layout of the same part: after all this doesnt matter so much since we are showing how a program works, not to play like Porcaro :)

    In Fig. 10 here is how is the section in the Song Editor of the two verses and the bridge following the first riff; as you can see the first bars (48-50 according to the Song Editor's enumeration) are already written before while the others (51-71) are new. Moreover there a few pattern 'ad hoc' identified by “A-B-C-3a_hh” (Fig. 11 to see an example) and “A-B-C-4a_hh” since both have a few changes not present in any pattern written up to now.

    - Fig. 10 Third and fourth bars in the Song Editor. -

    - Fig. 11 Seventh bar of the third bridge. -

    After the third bridge we repeat the chorus: the first time the “Stick” is used instead of the “Snare Jazz” and we don't play the “Kick” (even if it may sound the opposite since the bass guitar does play here, so we have put the same the kick beats softly at [0.50]), while the second and third time the chorus goes on there are a few bars different, as shown from patterns “C3_*”. In Fig. 12 the pattern “C3_6+7 & C4_3” (slightly different ...) which criptycally identify the sixth and seventh bar of the third chorus AND the third bar of the fourth chorus: if you think this is confusing, you may find out your own method :-)

    - Fig. 12 Pattern “C3_6+7 & C4_3”. -

    6.The Final riff

    The song ends repeating a slightly different riff we have met before: the first 2 bars are the same (i.e. pattern + 2 beats), while the in third bar the drum plays actually with the other instruments (Fig. 13) to finally end as always.

    - Fig. 13 The final riff. -

    And this is the end. The goal of this little tutorial is giving a quick overview of the most common functions of Hydrogen: this piece of software can also run for other purposes, like an advanced 'click' played with the drum, or to loop playing some part of a song difficult to catch; however, as in other things, analyzing the song itself helps the comprehension and here too, Hydrogen can be helpful reducing the time needed to write down a pattern and tune it.

    For comments, suggestions, corrections, you can use the Hydrogen mailing lists (hydrogen.sf.net)

    diff -Nru hydrogen-0.9.6.1/data/doc/tutorial_fr.html hydrogen-0.9.7/data/doc/tutorial_fr.html --- hydrogen-0.9.6.1/data/doc/tutorial_fr.html 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/data/doc/tutorial_fr.html 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -Tutoriel de Hydrogen

    Tutoriel de Hydrogen

    Antonio Piraino

    Rsum

    Vous venez de tlcharger la dernire version du logiciel Hydrogen et l'installation s'est bien droule. Maintenant vous voulez l'essayer et recrer votre chanson favorite. Ceci pourrait en effet vous aider apprendre crire les parties les plus difficiles, pour pouvoir les couter plusieurs fois ou tre sur que vous pouvez, d'un coup d'oeil rapide dans le fichier du morceau, vous le remmorer immdiatement. Hydrogen peut tre utilis comme une "bote rythme" avance qui peut vous aider dans votre pratique musicale (dans la vitesse, la prcision et autres bases), peut tre avec un motif dfini par vos soins. Cette petite introduction vous guidera dans la cration d'une chanson complte. Nous travaillerons sur le morceau "Georgy Porgy" de Toto (dsol) qui a une structure assez directe, ce qui le rend appropri pour ce guide, mais cela ne veut pas dire que le morceau est _vraiment_ facile crire vu que le batteur, Jeff Porcaro, enrichit le groove avec son touch personnel et son feeling. Hydrogen ne jouera pas mieux que le batteur, la majeure partie de la tche doit tre accomplie par la sensibilit et l'exprience du programmeur.


    Chapitre1.En avant

    Avant de commencer assurez vous d'avoir ces diffrentes choses :

    • Le morceau tudi : sur CD audio, ou, mieux, au format .wav, .ogg ou .mp3 pour une flexibilit optimale.

    • Eventuellement la partition de batterie ou un schma approximatif de la structure de la chanson : il peut tre utile de compter les mesures et de viualiser les diffrentes parties du morceau.

    La chanson que nous travaillons possde la structure suivante :

    • Intro : 4 mesures

    • Couplet : 8 mesures

    • Pont : 8 mesures

    • Couplet : 8 mesures

    • Pont : 8 mesures

    • Refrain : 8 mesures

    • Riff : 4 mesures

    • Couplet (avec guitare) : 8 mesures

    • Couplet (avec voix) : 8 mesures

    • Pont : 8 mesures

    • Refrain : 8 mesures

    • Refrain : 8 mesures

    • Refrain : 8 mesures

    • Riff final : 4 mesures

    En regardant cet arrangement nous pouvons voir que quelques motifs se rptent, nous emploierons donc cette lgende avec Hydrogen :

    • Verse -> A

    • Bridge -> B

    • Chorus -> C

    Et pour sauver les mots explicatifs, nou utiliserons les TLA communs (Trois Lettres Acronymes ^_^):

    • LMB: left mouse button (boutons gauche de la souris)

    • RMB: right mouse button (bouton droit de la souris)

    Bien, maintenant dbranchez votre tlphone et lancez Hydrogen : au travail !

    1.Introduction

    Le motif de base (Fig. 1 and 2) se compose de 4 mesures (divis en 2 mesures diffrentes, chacune rpte 2 fois, donc [2a*2]+[2b*2]) et dure la chanson entire, du dbut la fin, riff inclus ; la plupart du temps (intro et riff exclus) ce motif de base est rpt 2 fois pour arriver une structure classique de 8 mesures pour chaque partie du morceau (A,B,C). Avant de commencer, plaez la vitesse 98bpm (Remarque : vous pouvez trouver la vitesse (en Bpm) du morceau par vous mme en la jouant avec votre lecteur prfr, XMMS, et en tapant le rythme avec la touche antislash dans Hydrogen). partir du menu "Rsolution de la grille" choisissez '16'. Pour crer un nouveau motif, cliquez droit sur l'instrument "Closed HH" et choisissez "Fill Notes": les deux premires mesures seront remplies. Insrez alors manuellement les notes de la caisse claire Jazz ("Snare Jazz") et de la grosse caisse ("Kick") comme indiqu sur les 2 images ci-dessous. Nous avons le motif de base pour notre morceau. Notez comment les coups de charleston sont accentus de manires diffrentes : ceux qui tombent sur les temps (au dbut d'une mesure) ont une intensit de [0,78 ], les autres de [0.50] (vous pouvez vrifier cela sur la barre de statut infrieure d'Hydrogen), afin de donner du groove au morceau.

    Fig. 1 Motif de base, premire mesure.

    Fig. 2 Motif de base, seconde mesure.

    Avant que nous commencions crire les couplets, il y a 4 mesures d'intro, toutes identiques, except pour la dernire, la fin de laquelle il y a un coup de charleston ouvert . Faites ce qui suit :

    • Renommez le premier motif dans l'diteur de morceau en cliquant avec le bouton droit de la souris surEmpty Pattern. Changez le, par exemple, en intro_a.

    • Ajoutez 2 'X' prs du premier (qui reprsente les deuxime et troisime mesures)

    • Crez dans l'diteur de motif le motif de base (Fig. 1)

    Pour la quatrime mesure, nous allons remplacer par une ouverture de charleston (Fig. 3) :

    • Cliquez droit dans l'diteur de morceau sur le motif nouvellement cr, slectionnez copier, puis choisissez un nom (ex.intro_b) et un nouveau motif apparait en dessous automagiquement !

    • Slectionnez le motif que vous venez de crer (IMPORTANT !)

    • Effacez les 2 dernires notes de charleston ferm et remplacer par des charleston ouverts.

    • Slectionnez '32' depuis "Rsolution de la grille" et ajoutez 2 nouvelles notes juste cot des prcdentes.

    • Ajustez l'intensit de ces 4 notes de sorte que le premier soit [0.78] et que les 3 autres soient [0.20] pour simuler une ouverture plus longue.

    Fig. 3 Dtail de l'intro, quatrime mesure.

    2.Premier Couplet

    Nous venons de crer le motif de base, maintenant, nous devrions donc connatre ... les bases ! Pour crer le premier couplet, il suffit de copier dans l'diteur de motif le motif intro_a et de le renommer en A-B-C_1, car ceci est la premire mesure du couplet qui par la suite s'adaptera au pont (B) et au refrain (C). Prenez garde, pourquoi ne pas simplement ajouter 2 autres croix la suite de ce motif ? Parce que dans la premire mesure il y a un coup de cymbale crash qui fini l'intro prcdente, donc les deux mesures ne sont pas compltement quivalentes; vous devez donc copier le motif A-B-C_1 et le renommer en A-B-C_2 puis couper ce susdit coup de crash.

    Faire la mme chose pour les 2 mesures suivantes : copiez simplement dans l'diteur de motif le motif de la fig. 2, renommez le comme les deux prcdents et ajoutez 2 croix (les deux mesures tant les mmes), vous devriez donc atteindre le nombre '8' comme indiqu sur la fig. 4.

    Les 4 mesures restantes du couplet sont plus ou moins les mmes que ce que vous venez d'crire, alors pourquoi devriez vous tout refaire de zro ? Les mesures 5,6,7 sont identiques aux prcdentes ainsi vous avez juste ajouter 2 croix au motif A-B-C_2 et une A-B-C_3+4en prenant soin de renommer les motifs logiquement (pour comprendre par la suite comment le morceau se droule dans l'diteur de morceau), car la huitime mesure se termine par un remplissage qui clture le couplet. Vous devez copier/coller dans une nouvelle ligne un motif dj cr (ex. A-B-C_3+4, le renommer en A-B-C_8 et le modifier comme sur la Fig. 4. Notez que dont les trois caisses claires Jazz de la quatrime mesure ont une intensit respective rgle [ 0.10 ], [ 0.20 ] et [ 0.78 ]; vous ne pouvez pas le voir sur l'image mais les deux notes finales du tom mdium Tom Mid) ont une intensit de [0.50], aprs tout ce n'est qu'un tout petit remplissage, autant ne pas exploser les peaux des toms :)

    Fig. 4 Huitime mesure du premier couplet.

    Le rsultat dans l'diteur de chanson devrait ressembler la Fig. 5.

    Fig. 5 Introduction et premier couplet dans l'diteur de morceau.

    ATTENTION! si vous atteignez ce point sans avoir sauvegard votre travail, il est temps de le faire MIANTENANT. Un simple [CTRL+S] suivi du nom du morceau, et vous serez bien. Si vous voulez ajouter des infos, cliquez avec le bouton gauche sur le bouton 'S' de l'diteur de morceau et modifiez les champs comme vous le voulez : ces infos seront affiches lors de l'ouverture du projet.

    3.Le pont et la suite

    Maintenant que vous avez ralis le premier couplet vous devriez avoir une ide du mode de fonctionnement global de ce morceau : le premier pont est fait des mmes 8 mesures (4+4) avec un lger changement la fin de la quatrime, ce qui nous oblige crer une mesure spciale alors que les autres seront tout simplement ajoutes l'aide de notre gniale petite croix ('X').

    Utilisons le dernier motif cr comme un chantillon (A-B-C_8), puis copiez le et renommez le en Bridge1_4 (c'est dire quatrime mesure du premier pont) et modifiez le comme sur la Fig. 6. Nous avons rapidement termin le pont ! L'diteur de morceau devrait ressembler la fig. 7. En regardant attentivement l'illustration on pourrait se demander pourquoi la cinquime mesure du pont (la 17me du morceau) n'est pas assigne au motif A-B-C_1; la rponse est que le motif a galement un coup de crash final qui n'est pas prsent dans A-B-C_2+5+6.

    Fig. 6 Quatrime mesure du pont.

    Fig. 7 L'diteur de morceau avec le premier pont.

    Maintenant vous pouvez crer rapidement les parties restantes du morceau : aprs le pont il y a un autre couplet, puis un pont et un refrain, qui sont la plupart du temps identiques, vous devrez simplement crer des motifs diffrents dans quelques cas (plus loin dans ce guide, vous trouverez le fichier du morceai avec la chanson entire). Naturellement, vous pouvez crire autant de lignes dans l'diteur de morceau que de mesures dans le morceau, mais un morceau complet risquerait d'tre difficile suivre, et il prendrait beaucoup de place.

    4.Le Riff

    Vers le milieu du morceau il y a deux riffs : ils sont tous deux composs de 2 mesures mais en fait le motif est toujours le mme, et seul les autres instruments jouent quelque chose que nous verrons dans le dernier riff de ce morceau (o la batterie joue elle aussi le motif du riff).

    Dans ce riff la batterie joue le mme motif que nous connaissons dj pendant une mesure (voir Fig. 1) puis une nouvelle mesure de deux notes seulement (fig. 8), puis le motif de base nouveau, puis encore les deux mmes notes avec un petit fill la fin (Fig. 9) ; encore une ouverture charleston avec des notes d'intensit diffrente : [0.78] et [0.20].

    Fig. 8 Deuxime mesure du riff.

    Fig. 9 Quatrime mesure du riff.

    5.La deuxime moiti du morceau

    Aprs le riff nous avons fait la moiti du travail. Nous n'avons plus qu' crer deux couplets, un pont, un refrain qui sera rpt 3 fois et un autre riff la fin.

    La seconde partie du morceau est lgrement diffrente de la prcdente car il y a quelques ouvertures de charleston pendant les couplets et, toutes les quatres mesures, un petit fill presque chaque fois : c'est plus facile de dmarrer zro un nouvel enchainement de motif (c'est dire : A-B-C-* dans l'diteur de morceau en leur ajoutant un suffixe du style '_hh' pour rappeler la prsence de l'ouverture de charleston. Comme nous l'avons vu dans l'introduction de ce tutoriel, Jeff Porcaro met beaucoup de sa personalit dans son jeu, ce qui fait la reproduction froide et exacte d'une partition (ce que fait Hydrogen). Les parties suivantes du morceau seront donc plus ou moins fidles au morceau original, mais une autre 'oreille' pourrait donner une autre criture de la mme partie. Aprs tout, on s'en fiche : ce tutoriel explique comment utiliser Hydrogen, pas comment joue Porcaro :)

    La fig. 10 montre l'cran de l'diteur de morceau plac sur les deux couplets et le pont qui suivent le premier riff ; comme vous pouvez le voir, les premires mesures (48-50 au niveau de la numrotation de l'diteur de morceau) n'ont pas t modifies alors que les autres (51-71) ont t r-crites. De plus, il y a plusieurs motifs 'ad hoc' identifies commeA-B-C-3a_hh (Fig. 11 pour voir un exemple) et A-B-C- 4a_hh qui contiennent quelques changements que nous n'avons jamais crits jusqu' prsent.

    Fig. 10 Troisime et quatrime mesure dans l'diteur de morceau.

    Fig. 11 Septime mesure du troisime pont.

    Aprs le troisime pont, il y a un refrain : la premire fois, le clap baguettes est utilis la place de la caisse Jazz et la grosse caisse n'est pas joue (mme si on pourrait croire entendre le contraire parce que la basse joue, si on veut rendre cet effet, on peut mettre un coup de grosse caisse [0.50]), tandis que la deuxime et troisime fois que le refrain joue, il y a quelques mesures diffrentes, comme le montre l'appellation C3 _ *. Dans la Fig. 12, le motif C3_6+7 & C4_3 (lgrement diffrent ...) qui reprsente les sixime et septime mesures du troisime refrain ET la troisime mesure du quatrime chorus : si vous pensez que c'est confu, cherchez votre propre mthode :-)

    Fig. 12 Motif C3_6+7 & C4_3.

    6.Le riff final

    La fin de la chanson rpte un riff quelque peu diffrent de celui que nous avons dja rencontr : les deux premires mesures sont identiques (c'est dire, le motif + 2 notes), tandis que dans la troisime mesure, la batterie joue le mme rythme que les autres instruments (fig. 13) pour enfin terminer comme d'habitude.

    Fig. 13 Le riff final.

    Et voila, c'est termin. Le but de ce petit tutoriel tait de vous donner une vue d'ensemble rapide des fonctions les plus courantes d'Hydrogen : ce morceau de logiciel peut galement tre utilis dans d'autres optiques, comme un 'clic' avanc jou avec une batterie, ou pour boucler sur une partie d'un morcreau difficile chopper; cependant, dans tous les cas, analyser le morceau lui-mme aide sa comprhension et ici aussi, Hydrogen peut tre utile pour rduire le temps ncessaire pour crire un rythme et le jouer.

    Pour des commentaires, des suggestions, des corrections, vous pouvez utiliser sur les mailing lists d'Hydrogen (hydrogen.sf.net)

    diff -Nru hydrogen-0.9.6.1/data/doc/tutorial_it.html hydrogen-0.9.7/data/doc/tutorial_it.html --- hydrogen-0.9.6.1/data/doc/tutorial_it.html 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/data/doc/tutorial_it.html 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -Hydrogen Tutorial

    Hydrogen Tutorial

    Antonio Piraino

    Sommario

    Ok, avete scaricato l'ultima versione di Hydrogen e l'avete installata con successo. Ora volete provare a usare il programma per ricreare la vostra canzone preferita, questo puo' essere utile per aiutarvi ad impararla, mettendo nero su bianco alcuni passaggi difficili per poterli ripetere fino all'esaurimento o per assicurarvi che in un futuro un'occhiata al file vi aiuti a ricordare velocemente come suonare quella canzone. Hydrogen puo' anche essere usato semplicemente come un click evoluto che, insieme a un pattern di base (che vi potete create a parte), vi aiuti a prendere pratica con la batteria (velocita', precisione ma anche studio dei rudimenti). Questo tutorial rappresenta quindi un compendio al manuale e cerchera' di guidare l'utente di Hydrogen nella creazione di un canzone completa partendo da zero e l'uso del programma per altri scopi: in questa sede verra' analizzata la canzone "Georgy Porgy" dei Toto che e' abbastanza lineare come struttura e quindi piu' adatta per una guida. Questo comunque non significa che sia una canzone _facile_ da riprendere fedelmente poiche' il batterista (il grande Jeff Porcaro) arricchisce il groove con una miriade di aggiunte personali e con un 'tocco' senza paragoni. Dal momento che Hydrogen non suonera' meglio del batterista che alla tastiera gli passa le istruzioni, e' evidente che parte del lavoro va fatto dalla persona stessa, guidato dalla propria sensibilita' ed esperienza tecnica.


    Capitolo1.Si comincia

    Prima di iniziare la stesura della canzone assicuratevi di avere alcuni strumenti necessari:

    • La canzone da studiare: puo' andar bene un cd-audio ma sarebbe preferibile scaricarla sul PC in formato .ogg o .mp3 per una maggior flessibilita'.

    • Opzionalmente anche uno spartito di batteria oppure mettere su carta una struttura di massima per quella canzone: puo' far comodo controllare il numero delle battute o le varie parti del pezzo musicale che si inseriranno in Hydrogen.

    La canzone in esame ha la seguente struttura:

    • Intro: 4 battute

    • Strofa: 8 battute

    • Bridge: 8 battute

    • Strofa: 8 battute

    • Bridge: 8 battute

    • Ritornello: 8 battute

    • Riff: 4 battute

    • Strofa (con chitarra): 8 battute

    • Strofa (con voce): 8 battute

    • Bridge: 8 battute

    • Ritornello: 8 battute

    • Ritornello: 8 battute

    • Ritornello: 8 battute

    • Riff finale: 4 battute

    Da questo schema si evidenzia come alcuni pattern si ripetono nella canzone quindi useremo questa legenda, tornera' comodo con Hydrogen:

    • Verse -> A

    • Bridge -> B

    • Chorus -> C

    E per accorciare le spiegazioni useremo anche questi due classici TLA (Three Letters Acronym ^_^):

    • LMB: left mouse button

    • RMB: right mouse button

    Bene, adesso staccate il telefono e lanciate Hydrogen dalla shell: e' il momento di mettersi al lavoro!

    1.Intro

    Il pattern base (Fig. 1 e 2) e' di 4 battute (suddivise in 2 battute differenti ciascuna ripetuta per due volte, quindi [2a*2]+[2b*2]), e dura per tutto il pezzo, dall'inizio alla fine, riff inclusi; nella maggior parte dei casi (escluso l'intro e i riff) questo pattern base viene ripetuto 2 volte per arrivare alle classiche 8 battute per ciascuna parte (A,B,C) del brano. Prima di tutto pero' due piccole operazioni preliminari: settate la velocita' a 98 bpm (SUGGERIMENTO: potete scoprire da voi la velocita' della canzone mettendola in esecuzione col vostro player preferito e tenendo il tempo col tasto backslash di Hydrogen) e dal menu Grid Resolution selezionate '16'. Per creare il pattern selezionate lo strumento Closed HH, click su RMB e scegliete Fill Notes: le due battute correntemente visualizzate saranno riempite di sedicesimi, voila'! Inserite poi a mano i colpi di rullante e di cassa come indicato nelle due figure sottostanti e abbiamo ottenuto il ritmo base per la nostra canzone. Notare come i colpi sul charleston siano accentati in maniera differenziata: i colpi che cascano sui quarti hanno un'intensita' di [0.78], gli altri di [0.50] (visualizzata nella barra di stato in fondo alla schermata del programma), in maniera da vivacizzare la resa globale del pezzo.

    Fig. 1 Il pattern base, prima battuta.

    Fig. 2 Il pattern base, seconda battuta.

    Prima di cominciare la stesura delle strofe ci sono le 4 battute di intro, tutte uguali, eccezion fatta per la quarta che in fondo ha l'apertura del charleston. La procedura quindi e':

    • Rinominare il primo pattern nel Song Editor con clic di RMB sul nome Empty Pattern sostituendolo, per esempio, con intro_a.

    • Aggiungere altre due crocette accanto alla prima (che rappresentano rispettivamente la seconda e la terza battuta)

    • Create nel Pattern Editor il pattern base (Fig. 1)

    Per la quarta battuta invece c'e' da aggiungere l'apertura del charleston; si puo' procedere cosi' (Fig. 3):

    • Click di RMB Nel Song Editor sul pattern appena creato, scegliere copy, scegliere un nome (es. intro_b) e automaticamente ne verra' creato uno gemello proprio sotto.

    • Selezionare il nuovo pattern creato (IMPORTANTE!)

    • Cancellare gli ultimi due sedicesimi del Closed HH e riportarli sul Open HH.

    • Selezionare '32' dalla Grid Resolution e aggiungere altri due colpi a fianco dei sedicesimi gia' esistenti.

    • Aggiustate l'intensita' in maniera che il primo dei 4 trendaduesimi sia [0.78] mentre gli altri 3 siano [0.20] per simulare un'apertura piu' lunga.

    Fig. 3 Dettaglio dell'intro, quarta battuta.

    2.Prima strofa

    Abbiamo gia' visto come creare il pattern base, dunque per cominciare la stesura della prima strofa basta copiare dal Song Editor il pattern intro_a e rinominarlo, per esempio A-B-C_1, poiche' rappresenta la prima battuta della strofa che poi andra' bene anche per il bridge (B) e il ritornello (C). Attenzione, perche' non aggiungere due crocette consecutive in corrispondenza di questo pattern appena creato? Poiche' nella prima battuta c'e' un colpo di Crash che conclude l'intro precedente, il risultato e' che le prime due battute non sono completamente identiche. Per aggiungere la seconda battuta si deve quindi copiare il pattern A-B-C_1 e rinominarlo A-B-C_2, togliendo poi il colpo di Crash citato prima.

    Alla stessa maniera per ottenere le 2 battute seguenti e' sufficiente copiare nel Song Editor il pattern in Fig. 2, rinominarlo secondo la serie e aggiungere due crocette fino al numero '8' (poiche' sono identiche): il risultato ottenuto dovrebbe essere come da Fig. 4.

    Le rimanenti 4 battute della strofa sommariamente sono una ripetizione di cio' che abbiamo appena scritto, dunque perche' rifare tutto? La battuta 5,6,7 sono identiche alle precedenti, quindi e' sufficiente aggiungere in sequenza due crocette sul pattern A-B-C_2 e una sul pattern A-B-C_3+4 avendo cura di rinominare di conseguenza i nomi dei pattern per capire come la canzone si muove nel Song Editor, mentre nell'ottava battuta c'e' il fill che conclude la strofa quindi dobbiamo creare una nuova riga nel Song Editor, magari copiando il pattern A-B-C_3+4 e rinominandolo A-B-C_8, e modificarlo come da Fig. 4. Notate come anche in questo caso i tre colpi di rullante (Snare Jazz) finali siano stati opportunamente accentati rispettivamente con [0.10], [0.20] e [0.78]; nell'immagine non si vede ma anche i due colpi finali di Tom Mid hanno un'intensita' di [0.50]. Si tratta solo di un piccolo passaggio, forse e' meglio non picchiare troppo sulle pelli :)

    Fig. 4 Ottava battuta della prima strofa.

    Il risultato finale nel Song Editor dovrebbe essere simile alla Fig. 5.

    Fig. 5 Intro e prima strofa nel Song Editor.

    ATTENZIONE! Se siete giunti fino qui senza mai salvare potrebbe essere un'ottima idea farlo adesso. Un semplice [CTRL+S] seguito dal nome che volete dare al vostro lavoro in corso vi togliera' ogni preoccupazione. Se volete aggiungere anche qualche informazione supplementare fate click con LMB sul pulsante 'S' del Song Editor e modificate i campi a vostro piacimento, queste sono le informazioni che verranno automaticamente visualizzate all'apertura del brano.

    3.Bridge e seguenti

    Ora che abbiamo riportato la prima strofa per intero dovreste avere un'idea del meccanismo con cui creare i pattern successivi: il primo bridge e' composto dalle solite 8 battute (4+4) con una piccola variazione alla fine della quarta, quale cosa ci impone di creare una "quarta battuta" differente, mentre per le altre basta aggiungere le nostre crocette amiche per sveltire il lavoro.

    Prendiamo dunque come campione proprio l'ultimo pattern creato (A-B-C_8) e rinominiamolo Bridge1_4 (per indicare che e' la quarta battuta del primo bridge) e lo modifichiamo come da Fig. 6. In poco tempo abbiamo quindi gia' completato la stesura del primo bridge! Il Song Editor adesso dovrebbe apparire simile alla Fig. 7. Osservando attentamente la figura ci si potrebbe domandare come mai la quinta battuta del bridge (corrispondente alla 17esima battuta del Song Editor) non sia stata assegnata al pattern A-B-C_1; quel pattern ha infatti un colpo di crash sul primo quarto che non e' presente nel pattern A-B-C_2+5+6.

    Fig. 6 Quarta battuta del primo Bridge.

    Fig. 7 Il Song Editor con il primo bridge.

    Procedendo cosi' potremo creare velocemente le successive parti del pezzo: dopo questo bridge c'e' infatti di nuovo una strofa, un altro bridge e il ritornello, sono tutti molto simili quindi basta creare dei pattern differenziati solo per quelle battute che effettivamente differiscono. Insieme a questa guida c'e' comunque il file con il tutto il pezzo. Logicamente si possono creare righe tante quante sono le battute, ma una canzone completa poi rischia di diventare difficile da seguire e il file relativo occupa piu' spazio.

    4.Il Riff

    Verso meta' pezzo poi ci sono due riff consecutivi: ciascuno e' lungo 2 battute ma in realta' la sostanza non cambia poi molto. Il pattern musicale per la batteria e' lo stesso, sono solo tutti gli altri strumenti che eseguono qualcosa di simile a quello che verra' poi rappresentato dal riff finale, in cui partecipa anche la batteria.

    Piu' semplicemente in questo riff la batteria esegue il solito pattern per una battuta (vedi Fig. 1) mentre nella seconda accenta insieme agli altri strumenti (Fig. 8), poi ripete il solito pattern per una battuta e di nuovo nella seconda ci sono solo due accenti con un piccolo fill a chiusura del tutto (Fig. 9); ancora una volta l'apertura del charleston finale e' simulata con due intensita' differenziate di [0.78] e [0.20].

    Fig. 8 Seconda battuta del riff.

    Fig. 9 Quarta battuta del riff.

    5.L'altra meta' della canzone

    Una volta analizzato il riff abbiamo girato la boa della meta' del pezzo. Cio' che resta da scrivere e' la solita strofa ripetuta due volte consecutive, un bridge e il ritornello ripetuto 3 volte con in coda il solito riff finale.

    Questa seconda meta' della canzone differisce lievemente dalla precedente poiche' nelle due strofe ci sono alcune aperture del charleston e ogni 4 battute c'e' quasi sempre un piccolo passaggio, il tutto tradotto nel linguaggio di Hydrogen significa ricreare da capo un'altra sezione A-B-C-* perche' a questo punto non conviene piu' sforzarsi di incastrare dei pattern precedentemente creati, ci sono troppe differenze. Copiare quindi i pattern creati in precedenza per la strofa e rinominarli per esempio con un suffisso '_hh' per indicare la presenza dello strumento Open HH. Come viene accennato nell'introduzione il batterista originale del pezzo aggiunge anche del suo ed e' questo che fa la differenza fra un pezzo suonato e un pezzo riportato su carta (o su Hydrogen): tutto questo per dire che le parti seguenti della canzone sono riportate cercando di essere fedeli al pezzo originale, ma un altro orecchio potra' dare un'altra interpretazione, in fondo stiamo solo cercando di insegnare a usare un programma, non a emulare Jeff Porcaro :)

    Comunque ecco in Fig. 10 come appare la sezione del Song Editor relativa alle strofe e al bridge che seguono il riff; come si puo' notare le prime battute (48-50 secondo la numerazione del Song Editor) sono prese dal vecchio pattern mentre le altre (51-71) sono nuove. In piu' sono state create anche due battute 'ad hoc' identificate con A-B-C-3a_hh (Fig. 11 per vedere un esempio) e A-B-C-4a_hh poiche' hanno alcune singolarita' non presenti in nessun pattern finora scritto.

    Fig. 10 Terza e quarta strofa nel Song Editor.

    Fig. 11 Settima battuta del terzo bridge.

    In seguito al terzo bridge abbiamo tre volte il ritornello: la prima volta il rullante e' sostituito dallo strumento Stick e la cassa non viene suonata (potrebbe sembrare il contrario perche' il basso invece suona, ad ogni buon conto lo strumento c'e' lo stesso smorzando l'intensita' a [0.50]), mentre la seconda e la terza volta ci sono alcune battute fuori dal coro come segnalato dai pattern C3_*, in Figura 12 il pattern C3_6+7 & C4_3 (lievemente diverso ma pur sempre tale) che cripticamente identifica la sesta e settima battuta del terzo ritornello e la terza battuta del quarto ritornello: se una notazione del genere puo' confondere e' sufficiente adattarla al proprio sistema.

    Fig. 12 Il pattern C3_6+7 & C4_3.

    6.Il riff finale

    Il pezzo si conclude ripetendo una variazione del riff di prima: la prime due battute sono uguali (cioe' pattern normale + battuta con solo un paio di accenti), mentre nella terza battuta la batteria invece di suonare per conto proprio accenta tutta la melodia degli altri strumenti (Fig. 13) per poi concludere alla maniera classica.

    Fig. 13 Il pattern del riff finale.

    E con questo siamo arrivati alla fine della canzone. L'obiettivo di questo breve tutorial era dare una rapida panoramica sulle funzioni che tipicamente si andranno a utilizzare di Hydrogen nell'uso comune: come accennato nell'introduzione, questo programma puo' comunque essere usato come un semplice click accompagnando la batteria dal solo metronomo oppure ancora si puo' isolare un pezzo particolarmente ostico di un brano, riportarlo nel Pattern Editor di Hydrogen e metterlo in loop: come in molte altre cose ci si accorge che anche la sola analisi di un brano da studiare ne rende piu' facile la comprensione e l'esecuzione e anche in questo Hydrogen puo' aiutare sveltendo il lavoro di una semplice stesura di un pattern e successiva raffinazione.

    Per commenti, suggerimenti, correzioni si puo' utilizzare le mailing list attivate per Hydrogen (hydrogen.sf.net)

    diff -Nru hydrogen-0.9.6.1/data/drumkits/GMkit/drumkit.xml hydrogen-0.9.7/data/drumkits/GMkit/drumkit.xml --- hydrogen-0.9.6.1/data/drumkits/GMkit/drumkit.xml 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/data/drumkits/GMkit/drumkit.xml 2016-11-05 08:22:50.000000000 +0000 @@ -7,7 +7,16 @@ p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Lucida Grande'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">GeneralMIDI acoustic drum set made of samples from Roland XV-5080 synth module. Thanks to L.-E. Johansson for samples.</p></body></html> - + undefined license + + + + + 0 + Main + 1 + + 0 @@ -18,6 +27,7 @@ 1 0 1 + true false 1 0 @@ -27,19 +37,27 @@ 1000 -1 -1 - 60 + 35 false + VELOCITY + -1 + 0 + 127 0 0 0 0 - - kick_Dry_b.flac - 0 - 1 + + 0 1 - 0 - + + kick_Dry_b.flac + 0 + 1 + 1 + 0 + + 1 @@ -50,6 +68,7 @@ 1 0 1 + true false 1 0 @@ -59,19 +78,27 @@ 1000 -1 -1 - 60 + 37 false + VELOCITY + -1 + 0 + 127 0 0 0 0 - - stick_Woody.flac - 0 - 1 + + 0 1 - 0 - + + stick_Woody.flac + 0 + 1 + 1 + 0 + + 2 @@ -82,6 +109,7 @@ 1 0 1 + true false 1 0 @@ -91,19 +119,27 @@ 1000 -1 -1 - 60 + 38 false + VELOCITY + -1 + 0 + 127 0 0 0 0 - - sn_Jazz_c.flac - 0 - 1 + + 0 1 - 0 - + + sn_Jazz_c.flac + 0 + 1 + 1 + 0 + + 3 @@ -114,6 +150,7 @@ 1 0 1 + true false 1 0 @@ -123,19 +160,27 @@ 1000 -1 -1 - 60 + 39 false + VELOCITY + -1 + 0 + 127 0 0 0 0 - - clap_Dry_c.flac - 0 - 1 + + 0 1 - 0 - + + clap_Dry_c.flac + 0 + 1 + 1 + 0 + + 4 @@ -146,6 +191,7 @@ 1 0 1 + true false 1 0 @@ -155,19 +201,27 @@ 1000 -1 -1 - 60 + 40 false + VELOCITY + -1 + 0 + 127 0 0 0 0 - - sn_Wet_b.flac - 0 - 1 + + 0 1 - 0 - + + sn_Wet_b.flac + 0 + 1 + 1 + 0 + + 5 @@ -178,6 +232,7 @@ 1 0 1 + true false 1 0 @@ -187,19 +242,27 @@ 1000 -1 -1 - 60 + 41 false + VELOCITY + -1 + 0 + 127 0 0 0 0 - - tom_Rock_lo.flac - 0 - 1 + + 0 1 - 0 - + + tom_Rock_lo.flac + 0 + 1 + 1 + 0 + + 6 @@ -210,6 +273,7 @@ 0.78 0 1 + true false 1 0 @@ -219,19 +283,27 @@ 1000 -1 -1 - 60 + 42 false + VELOCITY + -1 + 0 + 127 0 0 0 0 - - hhc_Dry_a.flac - 0 - 1 + + 0 1 - 0 - + + hhc_Dry_a.flac + 0 + 1 + 1 + 0 + + 7 @@ -242,6 +314,7 @@ 1 0 1 + true false 1 0 @@ -251,19 +324,27 @@ 1000 -1 -1 - 60 + 43 false + VELOCITY + -1 + 0 + 127 0 0 0 0 - - tom_Rock_mid.flac - 0 - 1 + + 0 1 - 0 - + + tom_Rock_mid.flac + 0 + 1 + 1 + 0 + + 8 @@ -274,6 +355,7 @@ 0.78 0 1 + true false 1 0 @@ -283,19 +365,27 @@ 1000 -1 -1 - 60 + 44 false + VELOCITY + -1 + 0 + 127 0 0 0 0 - - hhp_Dry_a.flac - 0 - 1 + + 0 1 - 0 - + + hhp_Dry_a.flac + 0 + 1 + 1 + 0 + + 9 @@ -306,6 +396,7 @@ 0.42 0 1 + true false 1 0 @@ -315,19 +406,27 @@ 1000 -1 -1 - 60 + 45 false + VELOCITY + -1 + 0 + 127 0 0 0 0 - - tom_Rock_hi.flac - 0 - 1 + + 0 1 - 0 - + + tom_Rock_hi.flac + 0 + 1 + 1 + 0 + + 10 @@ -338,6 +437,7 @@ 0.84 0 1 + true false 1 0 @@ -347,19 +447,27 @@ 1000 -1 -1 - 60 + 46 false + VELOCITY + -1 + 0 + 127 0 0 0 0 - - hhc_Rock_b.flac - 0 - 1 + + 0 1 - 0 - + + hhc_Rock_b.flac + 0 + 1 + 1 + 0 + + 11 @@ -370,6 +478,7 @@ 1 0 1 + true false 1 0 @@ -379,19 +488,27 @@ 1000 -1 -1 - 60 + 56 false + VELOCITY + -1 + 0 + 127 0 0 0 0 - - misc_Cowbell.flac - 0 - 1 + + 0 1 - 0 - + + misc_Cowbell.flac + 0 + 1 + 1 + 0 + + 12 @@ -402,6 +519,7 @@ 1 0 1 + true false 1 0 @@ -411,19 +529,27 @@ 1000 -1 -1 - 60 + 51 false + VELOCITY + -1 + 0 + 127 0 0 0 0 - - cym_Jazz.flac - 0 - 1 + + 0 1 - 0 - + + cym_Jazz.flac + 0 + 1 + 1 + 0 + + 13 @@ -434,6 +560,7 @@ 0.88 0 1 + true false 1 0 @@ -443,19 +570,27 @@ 1000 -1 -1 - 60 + 49 false + VELOCITY + -1 + 0 + 127 0 0 0 0 - - cra_Rock_a.flac - 0 - 1 + + 0 1 - 0 - + + cra_Rock_a.flac + 0 + 1 + 1 + 0 + + 14 @@ -466,6 +601,7 @@ 1 0 1 + true false 1 0 @@ -475,19 +611,27 @@ 1000 -1 -1 - 60 + 59 false + VELOCITY + -1 + 0 + 127 0 0 0 0 - - cym_Rock_b.flac - 0 - 1 + + 0 1 - 0 - + + cym_Rock_b.flac + 0 + 1 + 1 + 0 + + 15 @@ -498,6 +642,7 @@ 0.78 0 1 + true false 1 0 @@ -507,19 +652,27 @@ 1000 -1 -1 - 60 + 57 false + VELOCITY + -1 + 0 + 127 0 0 0 0 - - cra_Jazz.flac - 0 - 1 + + 0 1 - 0 - + + cra_Jazz.flac + 0 + 1 + 1 + 0 + + diff -Nru hydrogen-0.9.6.1/data/drumkits/TR808EmulationKit/drumkit.xml hydrogen-0.9.7/data/drumkits/TR808EmulationKit/drumkit.xml --- hydrogen-0.9.6.1/data/drumkits/TR808EmulationKit/drumkit.xml 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/data/drumkits/TR808EmulationKit/drumkit.xml 2016-11-05 08:22:50.000000000 +0000 @@ -8,6 +8,15 @@ </style></head><body style=" font-family:'Lucida Grande'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This drum kit contains 16 original sounds that were synthesized from scratch (using only basic synth waves, like sine, noise etc.). It simulates the sounds of the legendary Roland TR-808 Rhythm Composer. More kits from ArtemioLabs: http://artemiolabs.com/downloads/audio/hydrogen/</p></body></html> GPL + + + + + 0 + Main + 1 + + 0 @@ -18,6 +27,7 @@ 1 0 1 + true false 1 0 @@ -27,19 +37,27 @@ 1000 -1 -1 - 60 + 35 false + VELOCITY + -1 + 0 + 127 0 0 0 0 - - 808_Kick_Long.flac - 0 - 1 + + 0 1 - 0 - + + 808_Kick_Long.flac + 0 + 1 + 1 + 0 + + 1 @@ -50,6 +68,7 @@ 1 0 1 + true false 1 0 @@ -59,19 +78,27 @@ 1000 -1 -1 - 60 + 36 false + VELOCITY + -1 + 0 + 127 0 0 0 0 - - 808_Kick_Short.flac - 0 - 1 + + 0 1 - 0 - + + 808_Kick_Short.flac + 0 + 1 + 1 + 0 + + 2 @@ -82,6 +109,7 @@ 1 0 1 + true false 1 0 @@ -91,19 +119,27 @@ 1000 -1 -1 - 60 + 38 false + VELOCITY + -1 + 0 + 127 0 0 0 0 - - 808_Snare_1.flac - 0 - 1 + + 0 1 - 0 - + + 808_Snare_1.flac + 0 + 1 + 1 + 0 + + 3 @@ -114,6 +150,7 @@ 1 0 1 + true false 1 0 @@ -123,19 +160,27 @@ 1000 -1 -1 - 60 + 40 false + VELOCITY + -1 + 0 + 127 0 0 0 0 - - 808_Snare_2.flac - 0 - 1 + + 0 1 - 0 - + + 808_Snare_2.flac + 0 + 1 + 1 + 0 + + 4 @@ -146,6 +191,7 @@ 1 0 1 + true false 1 0 @@ -155,19 +201,27 @@ 1000 -1 -1 - 60 + 39 false + VELOCITY + -1 + 0 + 127 0 0 0 0 - - 808_Clap.flac - 0 - 1 + + 0 1 - 0 - + + 808_Clap.flac + 0 + 1 + 1 + 0 + + 5 @@ -178,6 +232,7 @@ 0.52 0 1 + true false 1 0 @@ -187,19 +242,27 @@ 1000 -1 -1 - 60 + 43 false + VELOCITY + -1 + 0 + 127 0 0 0 0 - - 808_Tom_Low.flac - 0 - 1 + + 0 1 - 0 - + + 808_Tom_Low.flac + 0 + 1 + 1 + 0 + + 6 @@ -210,6 +273,7 @@ 1 0 1 + true false 1 0 @@ -219,19 +283,27 @@ 1000 -1 -1 - 60 + 45 false + VELOCITY + -1 + 0 + 127 0 0 0 0 - - 808_Tom_Mid.flac - 0 - 1 + + 0 1 - 0 - + + 808_Tom_Mid.flac + 0 + 1 + 1 + 0 + + 7 @@ -242,6 +314,7 @@ 1 0 1 + true false 1 0 @@ -251,19 +324,27 @@ 1000 -1 -1 - 60 + 48 false + VELOCITY + -1 + 0 + 127 0 0 0 0 - - 808_Tom_Hi.flac - 0 - 1 + + 0 1 - 0 - + + 808_Tom_Hi.flac + 0 + 1 + 1 + 0 + + 8 @@ -274,6 +355,7 @@ 1 0 1 + true false 1 0 @@ -283,19 +365,27 @@ 1000 -1 -1 - 60 + 42 false + VELOCITY + -1 + 0 + 127 0 0 0 0 - - 808_Hat_Closed.flac - 0 - 1 + + 0 1 - 0 - + + 808_Hat_Closed.flac + 0 + 1 + 1 + 0 + + 9 @@ -306,6 +396,7 @@ 1 0 1 + true false 1 0 @@ -315,19 +406,27 @@ 1000 -1 -1 - 60 + 44 false + VELOCITY + -1 + 0 + 127 0 0 0 0 - - 808_Hat_Pedal.flac - 0 - 1 + + 0 1 - 0 - + + 808_Hat_Pedal.flac + 0 + 1 + 1 + 0 + + 10 @@ -338,6 +437,7 @@ 1 0 1 + true false 1 0 @@ -347,19 +447,27 @@ 1000 -1 -1 - 60 + 46 false + VELOCITY + -1 + 0 + 127 0 0 0 0 - - 808_Hat_Open.flac - 0 - 1 + + 0 1 - 0 - + + 808_Hat_Open.flac + 0 + 1 + 1 + 0 + + 11 @@ -370,6 +478,7 @@ 1 0 1 + true false 1 0 @@ -379,19 +488,27 @@ 1000 -1 -1 - 60 + 49 false + VELOCITY + -1 + 0 + 127 0 0 0 0 - - 808_Cymbal.flac - 0 - 1 + + 0 1 - 0 - + + 808_Cymbal.flac + 0 + 1 + 1 + 0 + + 12 @@ -402,6 +519,7 @@ 1 0 1 + true false 1 0 @@ -411,19 +529,27 @@ 1000 -1 -1 - 60 + 70 false + VELOCITY + -1 + 0 + 127 0 0 0 0 - - 808_Shaker.flac - 0 - 1 + + 0 1 - 0 - + + 808_Shaker.flac + 0 + 1 + 1 + 0 + + 13 @@ -434,6 +560,7 @@ 1 0 1 + true false 1 0 @@ -443,19 +570,27 @@ 1000 -1 -1 - 60 + 63 false + VELOCITY + -1 + 0 + 127 0 0 0 0 - - 808_Conga.flac - 0 - 1 + + 0 1 - 0 - + + 808_Conga.flac + 0 + 1 + 1 + 0 + + 14 @@ -466,6 +601,7 @@ 1 0 1 + true false 1 0 @@ -475,19 +611,27 @@ 1000 -1 -1 - 60 + 75 false + VELOCITY + -1 + 0 + 127 0 0 0 0 - - 808_Clave.flac - 0 - 1 + + 0 1 - 0 - + + 808_Clave.flac + 0 + 1 + 1 + 0 + + 15 @@ -498,6 +642,7 @@ 1 0 1 + true false 1 0 @@ -507,19 +652,27 @@ 1000 -1 -1 - 60 + 56 false + VELOCITY + -1 + 0 + 127 0 0 0 0 - - 808_Cowbell.flac - 0 - 1 + + 0 1 - 0 - + + 808_Cowbell.flac + 0 + 1 + 1 + 0 + + diff -Nru hydrogen-0.9.6.1/data/hydrogen.default.conf hydrogen-0.9.7/data/hydrogen.default.conf --- hydrogen-0.9.6.1/data/hydrogen.default.conf 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/data/hydrogen.default.conf 2016-11-05 08:22:50.000000000 +0000 @@ -8,13 +8,13 @@ ###################################################### --> - 0.9.5 + 0.9.7 true true - false + false false - 400 - false + 400 + false true true false @@ -22,9 +22,9 @@ Path to Rubberband-CLI - - http://www.hydrogen-music.org/feeds/drumkit_list.php - + + http://www.hydrogen-music.org/feeds/drumkit_list.php + not_categorized @@ -206,6 +206,9 @@ 135,135,135 + 2 + 213 + Binary files /tmp/tmpktOUQO/kmAosGw3t1/hydrogen-0.9.6.1/data/i18n/hydrogen.ca.qm and /tmp/tmpktOUQO/ALHtWJIToj/hydrogen-0.9.7/data/i18n/hydrogen.ca.qm differ Binary files /tmp/tmpktOUQO/kmAosGw3t1/hydrogen-0.9.6.1/data/i18n/hydrogen.cs.qm and /tmp/tmpktOUQO/ALHtWJIToj/hydrogen-0.9.7/data/i18n/hydrogen.cs.qm differ diff -Nru hydrogen-0.9.6.1/data/i18n/hydrogen.cs.ts hydrogen-0.9.7/data/i18n/hydrogen.cs.ts --- hydrogen-0.9.6.1/data/i18n/hydrogen.cs.ts 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/data/i18n/hydrogen.cs.ts 2016-11-05 08:22:50.000000000 +0000 @@ -1,6 +1,6 @@ - + AboutDialog @@ -16,12 +16,16 @@ <b>Stránka projektu</b><br> - <b>Mailing lists</b><br> - <b>Kontakty</b><br> + <b>Main coder and maintainer:</b><br> + - <b>Main coder and mantainer:</b><br> - <b>Hlavní vývojář a zástupce:</b><br> + <b>Thanks to:</b> + + + + <b>Development mailing list</b><br> + @@ -54,355 +58,6 @@ &License &Licence - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This program is distributed under the terms of the GPL v2.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU GENERAL PUBLIC LICENSE</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Version 2, June 1991</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Copyright (C) 1989, 1991 Free Software Foundation, Inc.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 675 Mass Ave, Cambridge, MA 02139, USA</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Everyone is permitted to copy and distribute verbatim copies</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> of this license document, but changing it is not allowed.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Preamble</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> The licenses for most software are designed to take away your</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">freedom to share and change it. By contrast, the GNU General Public</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">License is intended to guarantee your freedom to share and change free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">software--to make sure the software is free for all its users. This</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">General Public License applies to most of the Free Software</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Foundation's software and to any other program whose authors commit to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">using it. (Some other Free Software Foundation software is covered by</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the GNU Library General Public License instead.) You can apply it to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">your programs, too.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> When we speak of free software, we are referring to freedom, not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">price. Our General Public Licenses are designed to make sure that you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">have the freedom to distribute copies of free software (and charge for</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this service if you wish), that you receive source code or can get it</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">if you want it, that you can change the software or use pieces of it</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">in new free programs; and that you know you can do these things.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> To protect your rights, we need to make restrictions that forbid</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">anyone to deny you these rights or to ask you to surrender the rights.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">These restrictions translate to certain responsibilities for you if you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute copies of the software, or if you modify it.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> For example, if you distribute copies of such a program, whether</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">gratis or for a fee, you must give the recipients all the rights that</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">you have. You must make sure that they, too, receive or can get the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">source code. And you must show them these terms so they know their</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">rights.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> We protect your rights with two steps: (1) copyright the software, and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">(2) offer you this license which gives you legal permission to copy,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute and/or modify the software.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Also, for each author's protection and ours, we want to make certain</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that everyone understands that there is no warranty for this free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">software. If the software is modified by someone else and passed on, we</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">want its recipients to know that what they have is not the original, so</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that any problems introduced by others will not reflect on the original</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">authors' reputations.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Finally, any free program is threatened constantly by software</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patents. We wish to avoid the danger that redistributors of a free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">program will individually obtain patent licenses, in effect making the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">program proprietary. To prevent this, we have made it clear that any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patent must be licensed for everyone's free use or not licensed at all.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> The precise terms and conditions for copying, distribution and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">modification follow.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU GENERAL PUBLIC LICENSE</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 0. This License applies to any program or other work which contains</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">a notice placed by the copyright holder saying it may be distributed</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">under the terms of this General Public License. The &quot;Program&quot;, below,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">refers to any such program or work, and a &quot;work based on the Program&quot;</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">means either the Program or any derivative work under copyright law:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that is to say, a work containing the Program or a portion of it,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">either verbatim or with modifications and/or translated into another</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">language. (Hereinafter, translation is included without limitation in</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the term &quot;modification&quot;.) Each licensee is addressed as &quot;you&quot;.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Activities other than copying, distribution and modification are not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">covered by this License; they are outside its scope. The act of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">running the Program is not restricted, and the output from the Program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">is covered only if its contents constitute a work based on the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program (independent of having been made by running the Program).</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Whether that is true depends on what the Program does.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 1. You may copy and distribute verbatim copies of the Program's</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">source code as you receive it, in any medium, provided that you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">conspicuously and appropriately publish on each copy an appropriate</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">copyright notice and disclaimer of warranty; keep intact all the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">notices that refer to this License and to the absence of any warranty;</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">and give any other recipients of the Program a copy of this License</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">along with the Program.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You may charge a fee for the physical act of transferring a copy, and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">you may at your option offer warranty protection in exchange for a fee.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 2. You may modify your copy or copies of the Program or any portion</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of it, thus forming a work based on the Program, and copy and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute such modifications or work under the terms of Section 1</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">above, provided that you also meet all of these conditions:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a) You must cause the modified files to carry prominent notices</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> stating that you changed the files and the date of any change.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> b) You must cause any work that you distribute or publish, that in</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> whole or in part contains or is derived from the Program or any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> part thereof, to be licensed as a whole at no charge to all third</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> parties under the terms of this License.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> c) If the modified program normally reads commands interactively</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> when run, you must cause it, when started running for such</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> interactive use in the most ordinary way, to print or display an</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> announcement including an appropriate copyright notice and a</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> notice that there is no warranty (or else, saying that you provide</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a warranty) and that users may redistribute the program under</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> these conditions, and telling the user how to view a copy of this</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> License. (Exception: if the Program itself is interactive but</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> does not normally print such an announcement, your work based on</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> the Program is not required to print an announcement.)</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">These requirements apply to the modified work as a whole. If</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">identifiable sections of that work are not derived from the Program,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">and can be reasonably considered independent and separate works in</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">themselves, then this License, and its terms, do not apply to those</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">sections when you distribute them as separate works. But when you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute the same sections as part of a whole which is a work based</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">on the Program, the distribution of the whole must be on the terms of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License, whose permissions for other licensees extend to the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">entire whole, and thus to each and every part regardless of who wrote it.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Thus, it is not the intent of this section to claim rights or contest</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">your rights to work written entirely by you; rather, the intent is to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">exercise the right to control the distribution of derivative or</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">collective works based on the Program.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">In addition, mere aggregation of another work not based on the Program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">with the Program (or with a work based on the Program) on a volume of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">a storage or distribution medium does not bring the other work under</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the scope of this License.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 3. You may copy and distribute the Program (or a work based on it,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">under Section 2) in object code or executable form under the terms of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Sections 1 and 2 above provided that you also do one of the following:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a) Accompany it with the complete corresponding machine-readable</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> source code, which must be distributed under the terms of Sections</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 1 and 2 above on a medium customarily used for software interchange; or,</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> b) Accompany it with a written offer, valid for at least three</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> years, to give any third party, for a charge no more than your</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> cost of physically performing source distribution, a complete</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> machine-readable copy of the corresponding source code, to be</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> distributed under the terms of Sections 1 and 2 above on a medium</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> customarily used for software interchange; or,</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> c) Accompany it with the information you received as to the offer</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> to distribute corresponding source code. (This alternative is</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> allowed only for noncommercial distribution and only if you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> received the program in object code or executable form with such</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> an offer, in accord with Subsection b above.)</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">The source code for a work means the preferred form of the work for</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">making modifications to it. For an executable work, complete source</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">code means all the source code for all modules it contains, plus any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">associated interface definition files, plus the scripts used to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">control compilation and installation of the executable. However, as a</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">special exception, the source code distributed need not include</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">anything that is normally distributed (in either source or binary</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">form) with the major components (compiler, kernel, and so on) of the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">operating system on which the executable runs, unless that component</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">itself accompanies the executable.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If distribution of executable or object code is made by offering</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">access to copy from a designated place, then offering equivalent</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">access to copy the source code from the same place counts as</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribution of the source code, even though third parties are not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">compelled to copy the source along with the object code.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 4. You may not copy, modify, sublicense, or distribute the Program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">except as expressly provided under this License. Any attempt</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">otherwise to copy, modify, sublicense or distribute the Program is</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">void, and will automatically terminate your rights under this License.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">However, parties who have received copies, or rights, from you under</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License will not have their licenses terminated so long as such</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">parties remain in full compliance.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 5. You are not required to accept this License, since you have not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">signed it. However, nothing else grants you permission to modify or</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute the Program or its derivative works. These actions are</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">prohibited by law if you do not accept this License. Therefore, by</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">modifying or distributing the Program (or any work based on the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program), you indicate your acceptance of this License to do so, and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">all its terms and conditions for copying, distributing or modifying</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the Program or works based on it.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 6. Each time you redistribute the Program (or any work based on the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program), the recipient automatically receives a license from the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">original licensor to copy, distribute or modify the Program subject to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">these terms and conditions. You may not impose any further</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">restrictions on the recipients' exercise of the rights granted herein.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You are not responsible for enforcing compliance by third parties to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 7. If, as a consequence of a court judgment or allegation of patent</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">infringement or for any other reason (not limited to patent issues),</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">conditions are imposed on you (whether by court order, agreement or</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">otherwise) that contradict the conditions of this License, they do not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">excuse you from the conditions of this License. If you cannot</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute so as to satisfy simultaneously your obligations under this</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">License and any other pertinent obligations, then as a consequence you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">may not distribute the Program at all. For example, if a patent</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">license would not permit royalty-free redistribution of the Program by</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">all those who receive copies directly or indirectly through you, then</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the only way you could satisfy both it and this License would be to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">refrain entirely from distribution of the Program.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If any portion of this section is held invalid or unenforceable under</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">any particular circumstance, the balance of the section is intended to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">apply and the section as a whole is intended to apply in other</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">circumstances.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">It is not the purpose of this section to induce you to infringe any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patents or other property right claims or to contest validity of any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">such claims; this section has the sole purpose of protecting the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">integrity of the free software distribution system, which is</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">implemented by public license practices. Many people have made</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">generous contributions to the wide range of software distributed</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">through that system in reliance on consistent application of that</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">system; it is up to the author/donor to decide if he or she is willing</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to distribute software through any other system and a licensee cannot</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">impose that choice.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This section is intended to make thoroughly clear what is believed to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be a consequence of the rest of this License.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 8. If the distribution and/or use of the Program is restricted in</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">certain countries either by patents or by copyrighted interfaces, the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">original copyright holder who places the Program under this License</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">may add an explicit geographical distribution limitation excluding</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">those countries, so that distribution is permitted only in or among</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">countries not thus excluded. In such case, this License incorporates</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the limitation as if written in the body of this License.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 9. The Free Software Foundation may publish revised and/or new versions</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of the General Public License from time to time. Such new versions will</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be similar in spirit to the present version, but may differ in detail to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">address new problems or concerns.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Each version is given a distinguishing version number. If the Program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">specifies a version number of this License which applies to it and &quot;any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">later version&quot;, you have the option of following the terms and conditions</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">either of that version or of any later version published by the Free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Software Foundation. If the Program does not specify a version number of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License, you may choose any version ever published by the Free Software</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Foundation.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 10. If you wish to incorporate parts of the Program into other free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">programs whose distribution conditions are different, write to the author</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to ask for permission. For software which is copyrighted by the Free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Software Foundation, write to the Free Software Foundation; we sometimes</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">make exceptions for this. Our decision will be guided by the two goals</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of preserving the free status of all derivatives of our free software and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of promoting the sharing and reuse of software generally.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> NO WARRANTY</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROVIDE THE PROGRAM &quot;AS IS&quot; WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">REPAIR OR CORRECTION.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">POSSIBILITY OF SUCH DAMAGES.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> END OF TERMS AND CONDITIONS</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> How to Apply These Terms to Your New Programs</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> If you develop a new program, and you want it to be of the greatest</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">possible use to the public, the best way to achieve this is to make it</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">free software which everyone can redistribute and change under these terms.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> To do so, attach the following notices to the program. It is safest</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to attach them to the start of each source file to most effectively</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">convey the exclusion of warranty; and each file should have at least</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the &quot;copyright&quot; line and a pointer to where the full notice is found.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> &lt;one line to give the program's name and a brief idea of what it does.&gt;</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Copyright (C) 19yy &lt;name of author&gt;</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This program is free software; you can redistribute it and/or modify</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> it under the terms of the GNU General Public License as published by</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> the Free Software Foundation; either version 2 of the License, or</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> (at your option) any later version.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This program is distributed in the hope that it will be useful,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> but WITHOUT ANY WARRANTY; without even the implied warranty of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU General Public License for more details.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> You should have received a copy of the GNU General Public License</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> along with this program; if not, write to the Free Software</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Also add information on how to contact you by electronic and paper mail.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If the program is interactive, make it output a short notice like this</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">when it starts in an interactive mode:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Gnomovision version 69, Copyright (C) 19yy name of author</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This is free software, and you are welcome to redistribute it</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> under certain conditions; type `show c' for details.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">The hypothetical commands `show w' and `show c' should show the appropriate</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">parts of the General Public License. Of course, the commands you use may</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be called something other than `show w' and `show c'; they could even be</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">mouse-clicks or menu items--whatever suits your program.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You should also get your employer (if you work as a programmer) or your</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">school, if any, to sign a &quot;copyright disclaimer&quot; for the program, if</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">necessary. Here is a sample; alter the names:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Yoyodyne, Inc., hereby disclaims all copyright interest in the program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> `Gnomovision' (which makes passes at compilers) written by James Hacker.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> &lt;signature of Ty Coon&gt;, 1 April 1989</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Ty Coon, President of Vice</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This General Public License does not permit incorporating your program into</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">proprietary programs. If your program is a subroutine library, you may</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">consider it more useful to permit linking proprietary applications with the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">library. If this is what you want to do, use the GNU Library General</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Public License instead of this License.</span></p></body></html> - - AudioEngineInfoForm @@ -613,6 +268,25 @@ + ComponentMixerLine + + Mute + Ztlumit + + + Solo + Sólo + + + Component name + + + + Set instrument volume [%1] + Nastavit hlasitost nástroje [%1] + + + Director Director @@ -627,91 +301,51 @@ - DownloadWidget + DonationDialog - (%1/%2 KiB) - ETA %3 - + Donations + - DrumkitManager_UI + DonationDialog_UI - Form1 - Formulář1 - - - Load - Nahrát - - - ### Drumkit author - ### Autor bicí sady - - - Delete drumkit - Vymazat bicí sadu - - - ### Drumkit name - ### Název bicí sady - - - ### Drumkit info - ### info o bicí sadě - - - Load drumkit - Nahrát bicí sadu - - - Save - Uložit - - - Author - Autor - - - Info - Informace - - - Drumkit name - Název bicí sady + Form + - Import - Import + Donate! + - Drumkit filename - Název souboru bicí sady + Choose random entry. + - Browse - Najít + <html><head/><body><p align="justify">Hydrogen is an open source project which is developed by multiple people in their spare time. By making a donation you can say &quot;thank you&quot; to the involved persons.</p></body></html> + - <b> -Download more drumkits at <br> -http://www.hydrogen-music.org -</b> - <b> -Bicích sady ke stažení na <br> -http://www.hydrogen-music.org -</b> + Sebastian Moors (aka mauser): Maintainer / Developer + - ### The drumkit will be installed zncxbmzbxcmznxbcmz - ### Bicí sada bude nainstalována + Michael Wolkstein (aka wolke): Forum hosting + + + + Download - Export - Export + Importing item failed: %1 + + + + DownloadWidget - Drumkit directory - Adresář pro bicí sady + (%1/%2 KiB) - ETA %3 + @@ -897,11 +531,15 @@ - Enable use of rubberband batch processor + 88200 + 88200 + + + Enable use of rubberband's batch processor - Rubberbad Batch + Rubberband Batch @@ -965,6 +603,14 @@ Saving of this drumkit failed. + + Open Image + + + + Image Files (*.png *.jpg *.jpeg) + + HydrogenApp @@ -984,6 +630,10 @@ Mixer Mixér + + modified + + InstrumentEditor @@ -1056,9 +706,33 @@ - Auto-Stop-Note + New component name + + + + Component name + + + + Midi out channel + + + + Midi out note + + + + Component volume + + + + Don't change the layers' gain based on velocity + + Select pattern size + Vybrat velikost paternu + InstrumentLine @@ -1110,6 +784,22 @@ Solo Sólo + + Copy notes ... + + + + Only for this pattern + + + + For all patterns + + + + Paste notes ... + + InstrumentRack @@ -1329,11 +1019,8 @@ LayerPreview - Layer %1: Min. velocity = %2, Max. velocity = %3 - - - - Velocity = %1 + Dec. = %1 +MIDI = %2 @@ -1344,10 +1031,6 @@ Hydrogen pripraven. - &Project - &Projekt - - &New &Nový @@ -1632,6 +1315,40 @@ Report bug + + Export &LilyPond file + + + + Donate + + + + +The LilyPond export is an experimental feature. +It should work like a charm provided that you use the GM-kit, and that you do not use triplet + + + + + LilyPond file (*.ly) + + + + Export LilyPond file + + + + +The current playlist contains unsaved changes. +Do you want to discard the changes? + + + + + Pro&ject + + MasterMixerLine @@ -1665,6 +1382,17 @@ + MidiSenseWidget + + This element is not midi operable. + + + + Waiting for midi input... + + + + MidiTable Event @@ -2301,10 +2029,6 @@ - No song selected! - - - Playlist: set song no. %1 @@ -2316,6 +2040,29 @@ &New Playlist + + File not found: + + + + No valid song selected! + + + + +The current playlist contains unsaved changes. +Do you want to discard the changes? + + + + + &Discard + &Zahodit + + + &Cancel + &Storno + PlaylistDialog_UI @@ -2391,6 +2138,30 @@ &Cancel &Storno + + Automatic + + + + Steps + + + + Fixed + + + + <b>PulseAudio Driver</b><br> + + + + Number of steps + + + + Color (Hue value) + + PreferencesDialog_UI @@ -2603,10 +2374,6 @@ Písmo mixéru - <i>After a font change the application must be restarted.</i> - <i>Změna písma se projeví až po restartu aplikace.</i> - - Restart output Restartovat výstup @@ -2698,6 +2465,30 @@ Tabbed + + TextLabel + + + + Coloring method for Song Editor elements + + + + <html><head/><body><p><span style=" font-style:italic;">After changing a font or the interface layout the application must be restarted.</span></p></body></html> + + + + Use relative paths for playlist + + + + Use output note as input note + + + + Discard midi messages after action has been triggered + + SampleEditor @@ -3098,10 +2889,6 @@ Režim jednoho paternu - not_categorized - Nekategorizováno - - Enable time line edit @@ -3304,13 +3091,41 @@ Dialog - Browse - Procházet - - Export Export + + Drumkit + + + + Component + + + + Path + + + + Version + + + + Browse... + Procházet... + + + 0.9.7 and higher + + + + 0.9.6 and lower + + + + Cancel + Storno + SoundLibraryImportDialog @@ -3371,8 +3186,12 @@ Paterny - License: %1 - Licence: %1 + Drumkit License: %1 + + + + Image License: %1 + @@ -3394,10 +3213,6 @@ Název knihovny zvuků - Sound library Info - Informace o knihovně zvuků - - Author... Autor... @@ -3422,10 +3237,6 @@ 1 - License... - Licence... - - Edit server list Upravit seznam serverů @@ -3433,6 +3244,18 @@ Close Zavřít + + TextLabel + + + + Image License... + + + + Drumkit License... + + SoundLibraryPanel @@ -3505,6 +3328,17 @@ Drumkit deletion failed. + + The existing kit has %1 instruments but the new one only has %2. +The first %2 instruments will be replaced with the new intruments and will keep their notes, but some of the remaining instruments have notes. +Would you like to keep or discard the remaining instruments and notes? + + + + + Keep + + SoundLibraryPropertiesDialog_UI @@ -3525,10 +3359,6 @@ Informace - License - Licence - - Save Uložit @@ -3540,6 +3370,22 @@ Save changes made to instruments into sound library Uložit provedené změny nástrojů do knihovny zvuků + + Drumkit License + + + + Image + + + + Browse + Najít + + + Image License + + SoundLibraryRepositoryDialog @@ -3582,7 +3428,19 @@ - Saving of this drumkit failed. + A library with the same name already exists. Do you want to overwrite the existing library? + + + + Saving of this library failed. + + + + Open Image + + + + Image Files (*.png *.jpg *.jpeg) @@ -3616,6 +3474,18 @@ Save Uložit + + Image + + + + Browse + Najít + + + Image License + + SoundLibraryTree Binary files /tmp/tmpktOUQO/kmAosGw3t1/hydrogen-0.9.6.1/data/i18n/hydrogen.de.qm and /tmp/tmpktOUQO/ALHtWJIToj/hydrogen-0.9.7/data/i18n/hydrogen.de.qm differ diff -Nru hydrogen-0.9.6.1/data/i18n/hydrogen.de.ts hydrogen-0.9.7/data/i18n/hydrogen.de.ts --- hydrogen-0.9.6.1/data/i18n/hydrogen.de.ts 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/data/i18n/hydrogen.de.ts 2016-11-05 08:22:50.000000000 +0000 @@ -1,6 +1,6 @@ - + AboutDialog @@ -12,16 +12,20 @@ Über - <b>Main coder and mantainer:</b><br> - <b>Hauptprogrammierer:</b><br> - - <b>Website</b><br> <b>Website</b><br> - <b>Mailing lists</b><br> - <b>Mailinglisten</b><br> + <b>Main coder and maintainer:</b><br> + + + + <b>Thanks to:</b> + + + + <b>Development mailing list</b><br> + @@ -54,355 +58,6 @@ Alt+O Alt+O - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This program is distributed under the terms of the GPL v2.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU GENERAL PUBLIC LICENSE</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Version 2, June 1991</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Copyright (C) 1989, 1991 Free Software Foundation, Inc.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 675 Mass Ave, Cambridge, MA 02139, USA</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Everyone is permitted to copy and distribute verbatim copies</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> of this license document, but changing it is not allowed.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Preamble</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> The licenses for most software are designed to take away your</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">freedom to share and change it. By contrast, the GNU General Public</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">License is intended to guarantee your freedom to share and change free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">software--to make sure the software is free for all its users. This</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">General Public License applies to most of the Free Software</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Foundation's software and to any other program whose authors commit to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">using it. (Some other Free Software Foundation software is covered by</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the GNU Library General Public License instead.) You can apply it to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">your programs, too.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> When we speak of free software, we are referring to freedom, not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">price. Our General Public Licenses are designed to make sure that you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">have the freedom to distribute copies of free software (and charge for</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this service if you wish), that you receive source code or can get it</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">if you want it, that you can change the software or use pieces of it</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">in new free programs; and that you know you can do these things.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> To protect your rights, we need to make restrictions that forbid</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">anyone to deny you these rights or to ask you to surrender the rights.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">These restrictions translate to certain responsibilities for you if you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute copies of the software, or if you modify it.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> For example, if you distribute copies of such a program, whether</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">gratis or for a fee, you must give the recipients all the rights that</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">you have. You must make sure that they, too, receive or can get the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">source code. And you must show them these terms so they know their</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">rights.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> We protect your rights with two steps: (1) copyright the software, and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">(2) offer you this license which gives you legal permission to copy,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute and/or modify the software.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Also, for each author's protection and ours, we want to make certain</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that everyone understands that there is no warranty for this free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">software. If the software is modified by someone else and passed on, we</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">want its recipients to know that what they have is not the original, so</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that any problems introduced by others will not reflect on the original</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">authors' reputations.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Finally, any free program is threatened constantly by software</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patents. We wish to avoid the danger that redistributors of a free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">program will individually obtain patent licenses, in effect making the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">program proprietary. To prevent this, we have made it clear that any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patent must be licensed for everyone's free use or not licensed at all.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> The precise terms and conditions for copying, distribution and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">modification follow.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU GENERAL PUBLIC LICENSE</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 0. This License applies to any program or other work which contains</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">a notice placed by the copyright holder saying it may be distributed</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">under the terms of this General Public License. The &quot;Program&quot;, below,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">refers to any such program or work, and a &quot;work based on the Program&quot;</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">means either the Program or any derivative work under copyright law:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that is to say, a work containing the Program or a portion of it,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">either verbatim or with modifications and/or translated into another</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">language. (Hereinafter, translation is included without limitation in</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the term &quot;modification&quot;.) Each licensee is addressed as &quot;you&quot;.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Activities other than copying, distribution and modification are not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">covered by this License; they are outside its scope. The act of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">running the Program is not restricted, and the output from the Program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">is covered only if its contents constitute a work based on the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program (independent of having been made by running the Program).</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Whether that is true depends on what the Program does.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 1. You may copy and distribute verbatim copies of the Program's</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">source code as you receive it, in any medium, provided that you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">conspicuously and appropriately publish on each copy an appropriate</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">copyright notice and disclaimer of warranty; keep intact all the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">notices that refer to this License and to the absence of any warranty;</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">and give any other recipients of the Program a copy of this License</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">along with the Program.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You may charge a fee for the physical act of transferring a copy, and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">you may at your option offer warranty protection in exchange for a fee.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 2. You may modify your copy or copies of the Program or any portion</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of it, thus forming a work based on the Program, and copy and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute such modifications or work under the terms of Section 1</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">above, provided that you also meet all of these conditions:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a) You must cause the modified files to carry prominent notices</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> stating that you changed the files and the date of any change.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> b) You must cause any work that you distribute or publish, that in</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> whole or in part contains or is derived from the Program or any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> part thereof, to be licensed as a whole at no charge to all third</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> parties under the terms of this License.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> c) If the modified program normally reads commands interactively</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> when run, you must cause it, when started running for such</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> interactive use in the most ordinary way, to print or display an</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> announcement including an appropriate copyright notice and a</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> notice that there is no warranty (or else, saying that you provide</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a warranty) and that users may redistribute the program under</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> these conditions, and telling the user how to view a copy of this</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> License. (Exception: if the Program itself is interactive but</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> does not normally print such an announcement, your work based on</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> the Program is not required to print an announcement.)</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">These requirements apply to the modified work as a whole. If</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">identifiable sections of that work are not derived from the Program,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">and can be reasonably considered independent and separate works in</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">themselves, then this License, and its terms, do not apply to those</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">sections when you distribute them as separate works. But when you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute the same sections as part of a whole which is a work based</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">on the Program, the distribution of the whole must be on the terms of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License, whose permissions for other licensees extend to the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">entire whole, and thus to each and every part regardless of who wrote it.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Thus, it is not the intent of this section to claim rights or contest</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">your rights to work written entirely by you; rather, the intent is to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">exercise the right to control the distribution of derivative or</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">collective works based on the Program.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">In addition, mere aggregation of another work not based on the Program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">with the Program (or with a work based on the Program) on a volume of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">a storage or distribution medium does not bring the other work under</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the scope of this License.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 3. You may copy and distribute the Program (or a work based on it,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">under Section 2) in object code or executable form under the terms of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Sections 1 and 2 above provided that you also do one of the following:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a) Accompany it with the complete corresponding machine-readable</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> source code, which must be distributed under the terms of Sections</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 1 and 2 above on a medium customarily used for software interchange; or,</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> b) Accompany it with a written offer, valid for at least three</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> years, to give any third party, for a charge no more than your</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> cost of physically performing source distribution, a complete</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> machine-readable copy of the corresponding source code, to be</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> distributed under the terms of Sections 1 and 2 above on a medium</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> customarily used for software interchange; or,</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> c) Accompany it with the information you received as to the offer</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> to distribute corresponding source code. (This alternative is</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> allowed only for noncommercial distribution and only if you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> received the program in object code or executable form with such</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> an offer, in accord with Subsection b above.)</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">The source code for a work means the preferred form of the work for</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">making modifications to it. For an executable work, complete source</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">code means all the source code for all modules it contains, plus any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">associated interface definition files, plus the scripts used to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">control compilation and installation of the executable. However, as a</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">special exception, the source code distributed need not include</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">anything that is normally distributed (in either source or binary</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">form) with the major components (compiler, kernel, and so on) of the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">operating system on which the executable runs, unless that component</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">itself accompanies the executable.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If distribution of executable or object code is made by offering</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">access to copy from a designated place, then offering equivalent</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">access to copy the source code from the same place counts as</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribution of the source code, even though third parties are not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">compelled to copy the source along with the object code.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 4. You may not copy, modify, sublicense, or distribute the Program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">except as expressly provided under this License. Any attempt</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">otherwise to copy, modify, sublicense or distribute the Program is</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">void, and will automatically terminate your rights under this License.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">However, parties who have received copies, or rights, from you under</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License will not have their licenses terminated so long as such</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">parties remain in full compliance.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 5. You are not required to accept this License, since you have not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">signed it. However, nothing else grants you permission to modify or</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute the Program or its derivative works. These actions are</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">prohibited by law if you do not accept this License. Therefore, by</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">modifying or distributing the Program (or any work based on the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program), you indicate your acceptance of this License to do so, and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">all its terms and conditions for copying, distributing or modifying</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the Program or works based on it.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 6. Each time you redistribute the Program (or any work based on the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program), the recipient automatically receives a license from the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">original licensor to copy, distribute or modify the Program subject to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">these terms and conditions. You may not impose any further</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">restrictions on the recipients' exercise of the rights granted herein.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You are not responsible for enforcing compliance by third parties to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 7. If, as a consequence of a court judgment or allegation of patent</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">infringement or for any other reason (not limited to patent issues),</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">conditions are imposed on you (whether by court order, agreement or</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">otherwise) that contradict the conditions of this License, they do not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">excuse you from the conditions of this License. If you cannot</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute so as to satisfy simultaneously your obligations under this</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">License and any other pertinent obligations, then as a consequence you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">may not distribute the Program at all. For example, if a patent</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">license would not permit royalty-free redistribution of the Program by</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">all those who receive copies directly or indirectly through you, then</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the only way you could satisfy both it and this License would be to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">refrain entirely from distribution of the Program.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If any portion of this section is held invalid or unenforceable under</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">any particular circumstance, the balance of the section is intended to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">apply and the section as a whole is intended to apply in other</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">circumstances.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">It is not the purpose of this section to induce you to infringe any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patents or other property right claims or to contest validity of any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">such claims; this section has the sole purpose of protecting the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">integrity of the free software distribution system, which is</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">implemented by public license practices. Many people have made</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">generous contributions to the wide range of software distributed</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">through that system in reliance on consistent application of that</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">system; it is up to the author/donor to decide if he or she is willing</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to distribute software through any other system and a licensee cannot</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">impose that choice.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This section is intended to make thoroughly clear what is believed to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be a consequence of the rest of this License.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 8. If the distribution and/or use of the Program is restricted in</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">certain countries either by patents or by copyrighted interfaces, the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">original copyright holder who places the Program under this License</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">may add an explicit geographical distribution limitation excluding</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">those countries, so that distribution is permitted only in or among</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">countries not thus excluded. In such case, this License incorporates</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the limitation as if written in the body of this License.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 9. The Free Software Foundation may publish revised and/or new versions</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of the General Public License from time to time. Such new versions will</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be similar in spirit to the present version, but may differ in detail to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">address new problems or concerns.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Each version is given a distinguishing version number. If the Program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">specifies a version number of this License which applies to it and &quot;any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">later version&quot;, you have the option of following the terms and conditions</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">either of that version or of any later version published by the Free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Software Foundation. If the Program does not specify a version number of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License, you may choose any version ever published by the Free Software</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Foundation.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 10. If you wish to incorporate parts of the Program into other free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">programs whose distribution conditions are different, write to the author</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to ask for permission. For software which is copyrighted by the Free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Software Foundation, write to the Free Software Foundation; we sometimes</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">make exceptions for this. Our decision will be guided by the two goals</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of preserving the free status of all derivatives of our free software and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of promoting the sharing and reuse of software generally.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> NO WARRANTY</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROVIDE THE PROGRAM &quot;AS IS&quot; WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">REPAIR OR CORRECTION.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">POSSIBILITY OF SUCH DAMAGES.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> END OF TERMS AND CONDITIONS</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> How to Apply These Terms to Your New Programs</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> If you develop a new program, and you want it to be of the greatest</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">possible use to the public, the best way to achieve this is to make it</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">free software which everyone can redistribute and change under these terms.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> To do so, attach the following notices to the program. It is safest</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to attach them to the start of each source file to most effectively</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">convey the exclusion of warranty; and each file should have at least</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the &quot;copyright&quot; line and a pointer to where the full notice is found.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> &lt;one line to give the program's name and a brief idea of what it does.&gt;</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Copyright (C) 19yy &lt;name of author&gt;</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This program is free software; you can redistribute it and/or modify</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> it under the terms of the GNU General Public License as published by</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> the Free Software Foundation; either version 2 of the License, or</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> (at your option) any later version.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This program is distributed in the hope that it will be useful,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> but WITHOUT ANY WARRANTY; without even the implied warranty of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU General Public License for more details.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> You should have received a copy of the GNU General Public License</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> along with this program; if not, write to the Free Software</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Also add information on how to contact you by electronic and paper mail.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If the program is interactive, make it output a short notice like this</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">when it starts in an interactive mode:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Gnomovision version 69, Copyright (C) 19yy name of author</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This is free software, and you are welcome to redistribute it</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> under certain conditions; type `show c' for details.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">The hypothetical commands `show w' and `show c' should show the appropriate</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">parts of the General Public License. Of course, the commands you use may</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be called something other than `show w' and `show c'; they could even be</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">mouse-clicks or menu items--whatever suits your program.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You should also get your employer (if you work as a programmer) or your</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">school, if any, to sign a &quot;copyright disclaimer&quot; for the program, if</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">necessary. Here is a sample; alter the names:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Yoyodyne, Inc., hereby disclaims all copyright interest in the program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> `Gnomovision' (which makes passes at compilers) written by James Hacker.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> &lt;signature of Ty Coon&gt;, 1 April 1989</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Ty Coon, President of Vice</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This General Public License does not permit incorporating your program into</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">proprietary programs. If your program is a subroutine library, you may</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">consider it more useful to permit linking proprietary applications with the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">library. If this is what you want to do, use the GNU Library General</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Public License instead of this License.</span></p></body></html> - - AudioEngineInfoForm @@ -613,6 +268,25 @@ + ComponentMixerLine + + Mute + Stumm + + + Solo + Solo + + + Component name + + + + Set instrument volume [%1] + Instrumentlautstaerke [%1] + + + Director Director @@ -627,91 +301,51 @@ - DownloadWidget + DonationDialog - (%1/%2 KiB) - ETA %3 + Donations - DrumkitManager_UI - - Form1 - Formular 1 - - - Drumkit name - Drumkit-Name - + DonationDialog_UI - Delete drumkit - Drumkit löschen - - - Load drumkit - Drumkit laden - - - Load - Laden - - - Author - Autor - - - Info - Infos - - - Save - Speichern - - - Browse - Durchsuchen - - - Import - Importieren - - - Drumkit filename - Dateiname des Drumkits + Form + - Export - Exportieren + Donate! + - Drumkit directory - Drumkit-Verzeichnis + Choose random entry. + - ### Drumkit author - ### Drumkit Autor + <html><head/><body><p align="justify">Hydrogen is an open source project which is developed by multiple people in their spare time. By making a donation you can say &quot;thank you&quot; to the involved persons.</p></body></html> + - ### Drumkit info - ### Drumkit Info + Sebastian Moors (aka mauser): Maintainer / Developer + - ### The drumkit will be installed zncxbmzbxcmznxbcmz - ###Das Drumkit wird installiert zncxbmzbxcmznxbcmz + Michael Wolkstein (aka wolke): Forum hosting + + + + Download - ### Drumkit name - ### Name des Drumkit + Importing item failed: %1 + Importieren von Objekt fehlgeschlagen: %1 + + + DownloadWidget - <b> -Download more drumkits at <br> -http://www.hydrogen-music.org -</b> - <b> -Mehr Drumkits gibt es unter<br> -http://www.hydrogen-music.org -</b> + (%1/%2 KiB) - ETA %3 + @@ -897,11 +531,15 @@ - Enable use of rubberband batch processor + 88200 + 88200 + + + Enable use of rubberband's batch processor - Rubberbad Batch + Rubberband Batch @@ -966,6 +604,14 @@ Saving of this drumkit failed. + + Open Image + + + + Image Files (*.png *.jpg *.jpeg) + + HydrogenApp @@ -985,6 +631,10 @@ Mixer Mixer + + modified + + InstrumentEditor @@ -1057,8 +707,32 @@ - Auto-Stop-Note - Auto-Stop-Note + New component name + + + + Component name + + + + Midi out channel + + + + Midi out note + + + + Component volume + + + + Don't change the layers' gain based on velocity + + + + Select pattern size + Patternlänge wählen @@ -1111,6 +785,22 @@ Solo Solo + + Copy notes ... + + + + Only for this pattern + + + + For all patterns + + + + Paste notes ... + + InstrumentRack @@ -1329,11 +1019,8 @@ LayerPreview - Layer %1: Min. velocity = %2, Max. velocity = %3 - - - - Velocity = %1 + Dec. = %1 +MIDI = %2 @@ -1456,10 +1143,6 @@ De&bug - &Project - &Projekt - - Save &as... Speichern &unter... @@ -1618,7 +1301,7 @@ Input mode - + Eingabe Modus Instrument @@ -1632,6 +1315,40 @@ Report bug Fehler melden + + Export &LilyPond file + Exportiere &LilyPond Datei + + + Donate + Spenden + + + +The LilyPond export is an experimental feature. +It should work like a charm provided that you use the GM-kit, and that you do not use triplet + + + + + LilyPond file (*.ly) + LilyPond Datei (*.ly) + + + Export LilyPond file + Exportiere LilyPond Datei + + + +The current playlist contains unsaved changes. +Do you want to discard the changes? + + + + + Pro&ject + Pro&jekt + MasterMixerLine @@ -1666,6 +1383,17 @@ + MidiSenseWidget + + This element is not midi operable. + Dieses Element kann nicht per MIDI angesprochen werden. + + + Waiting for midi input... + Warte auf MIDI Daten... + + + MidiTable Event @@ -2300,10 +2028,6 @@ - No song selected! - Kein Song ausgewählt! - - Playlist: set song no. %1 @@ -2315,6 +2039,29 @@ &New Playlist + + File not found: + + + + No valid song selected! + + + + +The current playlist contains unsaved changes. +Do you want to discard the changes? + + + + + &Discard + Änderungen &verwerfen + + + &Cancel + &Abbrechen + PlaylistDialog_UI @@ -2390,6 +2137,30 @@ &Cancel &Abbrechen + + Automatic + + + + Steps + + + + Fixed + + + + <b>PulseAudio Driver</b><br> + + + + Number of steps + + + + Color (Hue value) + + PreferencesDialog_UI @@ -2518,10 +2289,6 @@ Schriftart wählen - <i>After a font change the application must be restarted.</i> - <i>Nach einer Änderungen der Schriftart muss die Anwendung neu gestartet werden.</i> - - ### ### @@ -2697,6 +2464,30 @@ Tabbed + + TextLabel + + + + Coloring method for Song Editor elements + + + + <html><head/><body><p><span style=" font-style:italic;">After changing a font or the interface layout the application must be restarted.</span></p></body></html> + + + + Use relative paths for playlist + + + + Use output note as input note + + + + Discard midi messages after action has been triggered + + SampleEditor @@ -3100,10 +2891,6 @@ - not_categorized - nicht_kategorisiert - - Enable time line edit Timeline Editor aktivieren @@ -3306,13 +3093,41 @@ Dialog - Browse - Durchsuchen - - Export Exportieren + + Drumkit + + + + Component + + + + Path + + + + Version + + + + Browse... + Durchsuchen... + + + 0.9.7 and higher + + + + 0.9.6 and lower + + + + Cancel + Abbrechen + SoundLibraryImportDialog @@ -3373,8 +3188,12 @@ Pattern - License: %1 - Lizenz: %1 + Drumkit License: %1 + + + + Image License: %1 + @@ -3396,10 +3215,6 @@ Soundbibliothek Name - Sound library Info - Soundbibliothek Info - - Author... Autor... @@ -3424,10 +3239,6 @@ 1 - License... - Lizenz... - - Edit server list Bearbeite Server-Liste @@ -3435,6 +3246,18 @@ Close Schliessen + + TextLabel + + + + Image License... + + + + Drumkit License... + + SoundLibraryPanel @@ -3506,6 +3329,17 @@ Drumkit deletion failed. + + The existing kit has %1 instruments but the new one only has %2. +The first %2 instruments will be replaced with the new intruments and will keep their notes, but some of the remaining instruments have notes. +Would you like to keep or discard the remaining instruments and notes? + + + + + Keep + + SoundLibraryPropertiesDialog_UI @@ -3526,10 +3360,6 @@ Information - License - Lizenz - - Save Speichern @@ -3541,6 +3371,22 @@ Save changes made to instruments into sound library Änderungen an den Instrumenten übernehmen + + Drumkit License + + + + Image + + + + Browse + Durchsuchen + + + Image License + + SoundLibraryRepositoryDialog @@ -3583,7 +3429,19 @@ Bitte gültigen Dateinamen angeben! - Saving of this drumkit failed. + A library with the same name already exists. Do you want to overwrite the existing library? + + + + Saving of this library failed. + + + + Open Image + + + + Image Files (*.png *.jpg *.jpeg) @@ -3617,6 +3475,18 @@ Save Speichern + + Image + + + + Browse + Durchsuchen + + + Image License + + SoundLibraryTree Binary files /tmp/tmpktOUQO/kmAosGw3t1/hydrogen-0.9.6.1/data/i18n/hydrogen.el.qm and /tmp/tmpktOUQO/ALHtWJIToj/hydrogen-0.9.7/data/i18n/hydrogen.el.qm differ diff -Nru hydrogen-0.9.6.1/data/i18n/hydrogen.el.ts hydrogen-0.9.7/data/i18n/hydrogen.el.ts --- hydrogen-0.9.6.1/data/i18n/hydrogen.el.ts 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/data/i18n/hydrogen.el.ts 2016-11-05 08:22:50.000000000 +0000 @@ -1,26 +1,30 @@ - + AboutDialog About - + Σχετικά με <b>Website</b><br> - + <b>Ιστότοπος</b><br> <b>Project page</b><br> - + <b>Σελίδα του εγχειρήματος</b><br> - <b>Mailing lists</b><br> - + <b>Main coder and maintainer:</b><br> + <b>Κύριος προγραμματιστής και συντηρητής:</b><br> - <b>Main coder and mantainer:</b><br> + <b>Thanks to:</b> + <b>Ευχαριστίες στους:</b> + + + <b>Development mailing list</b><br> @@ -54,361 +58,12 @@ ### ### - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This program is distributed under the terms of the GPL v2.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU GENERAL PUBLIC LICENSE</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Version 2, June 1991</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Copyright (C) 1989, 1991 Free Software Foundation, Inc.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 675 Mass Ave, Cambridge, MA 02139, USA</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Everyone is permitted to copy and distribute verbatim copies</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> of this license document, but changing it is not allowed.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Preamble</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> The licenses for most software are designed to take away your</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">freedom to share and change it. By contrast, the GNU General Public</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">License is intended to guarantee your freedom to share and change free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">software--to make sure the software is free for all its users. This</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">General Public License applies to most of the Free Software</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Foundation's software and to any other program whose authors commit to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">using it. (Some other Free Software Foundation software is covered by</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the GNU Library General Public License instead.) You can apply it to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">your programs, too.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> When we speak of free software, we are referring to freedom, not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">price. Our General Public Licenses are designed to make sure that you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">have the freedom to distribute copies of free software (and charge for</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this service if you wish), that you receive source code or can get it</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">if you want it, that you can change the software or use pieces of it</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">in new free programs; and that you know you can do these things.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> To protect your rights, we need to make restrictions that forbid</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">anyone to deny you these rights or to ask you to surrender the rights.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">These restrictions translate to certain responsibilities for you if you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute copies of the software, or if you modify it.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> For example, if you distribute copies of such a program, whether</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">gratis or for a fee, you must give the recipients all the rights that</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">you have. You must make sure that they, too, receive or can get the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">source code. And you must show them these terms so they know their</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">rights.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> We protect your rights with two steps: (1) copyright the software, and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">(2) offer you this license which gives you legal permission to copy,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute and/or modify the software.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Also, for each author's protection and ours, we want to make certain</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that everyone understands that there is no warranty for this free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">software. If the software is modified by someone else and passed on, we</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">want its recipients to know that what they have is not the original, so</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that any problems introduced by others will not reflect on the original</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">authors' reputations.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Finally, any free program is threatened constantly by software</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patents. We wish to avoid the danger that redistributors of a free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">program will individually obtain patent licenses, in effect making the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">program proprietary. To prevent this, we have made it clear that any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patent must be licensed for everyone's free use or not licensed at all.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> The precise terms and conditions for copying, distribution and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">modification follow.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU GENERAL PUBLIC LICENSE</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 0. This License applies to any program or other work which contains</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">a notice placed by the copyright holder saying it may be distributed</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">under the terms of this General Public License. The &quot;Program&quot;, below,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">refers to any such program or work, and a &quot;work based on the Program&quot;</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">means either the Program or any derivative work under copyright law:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that is to say, a work containing the Program or a portion of it,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">either verbatim or with modifications and/or translated into another</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">language. (Hereinafter, translation is included without limitation in</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the term &quot;modification&quot;.) Each licensee is addressed as &quot;you&quot;.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Activities other than copying, distribution and modification are not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">covered by this License; they are outside its scope. The act of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">running the Program is not restricted, and the output from the Program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">is covered only if its contents constitute a work based on the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program (independent of having been made by running the Program).</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Whether that is true depends on what the Program does.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 1. You may copy and distribute verbatim copies of the Program's</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">source code as you receive it, in any medium, provided that you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">conspicuously and appropriately publish on each copy an appropriate</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">copyright notice and disclaimer of warranty; keep intact all the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">notices that refer to this License and to the absence of any warranty;</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">and give any other recipients of the Program a copy of this License</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">along with the Program.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You may charge a fee for the physical act of transferring a copy, and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">you may at your option offer warranty protection in exchange for a fee.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 2. You may modify your copy or copies of the Program or any portion</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of it, thus forming a work based on the Program, and copy and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute such modifications or work under the terms of Section 1</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">above, provided that you also meet all of these conditions:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a) You must cause the modified files to carry prominent notices</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> stating that you changed the files and the date of any change.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> b) You must cause any work that you distribute or publish, that in</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> whole or in part contains or is derived from the Program or any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> part thereof, to be licensed as a whole at no charge to all third</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> parties under the terms of this License.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> c) If the modified program normally reads commands interactively</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> when run, you must cause it, when started running for such</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> interactive use in the most ordinary way, to print or display an</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> announcement including an appropriate copyright notice and a</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> notice that there is no warranty (or else, saying that you provide</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a warranty) and that users may redistribute the program under</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> these conditions, and telling the user how to view a copy of this</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> License. (Exception: if the Program itself is interactive but</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> does not normally print such an announcement, your work based on</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> the Program is not required to print an announcement.)</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">These requirements apply to the modified work as a whole. If</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">identifiable sections of that work are not derived from the Program,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">and can be reasonably considered independent and separate works in</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">themselves, then this License, and its terms, do not apply to those</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">sections when you distribute them as separate works. But when you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute the same sections as part of a whole which is a work based</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">on the Program, the distribution of the whole must be on the terms of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License, whose permissions for other licensees extend to the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">entire whole, and thus to each and every part regardless of who wrote it.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Thus, it is not the intent of this section to claim rights or contest</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">your rights to work written entirely by you; rather, the intent is to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">exercise the right to control the distribution of derivative or</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">collective works based on the Program.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">In addition, mere aggregation of another work not based on the Program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">with the Program (or with a work based on the Program) on a volume of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">a storage or distribution medium does not bring the other work under</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the scope of this License.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 3. You may copy and distribute the Program (or a work based on it,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">under Section 2) in object code or executable form under the terms of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Sections 1 and 2 above provided that you also do one of the following:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a) Accompany it with the complete corresponding machine-readable</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> source code, which must be distributed under the terms of Sections</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 1 and 2 above on a medium customarily used for software interchange; or,</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> b) Accompany it with a written offer, valid for at least three</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> years, to give any third party, for a charge no more than your</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> cost of physically performing source distribution, a complete</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> machine-readable copy of the corresponding source code, to be</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> distributed under the terms of Sections 1 and 2 above on a medium</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> customarily used for software interchange; or,</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> c) Accompany it with the information you received as to the offer</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> to distribute corresponding source code. (This alternative is</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> allowed only for noncommercial distribution and only if you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> received the program in object code or executable form with such</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> an offer, in accord with Subsection b above.)</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">The source code for a work means the preferred form of the work for</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">making modifications to it. For an executable work, complete source</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">code means all the source code for all modules it contains, plus any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">associated interface definition files, plus the scripts used to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">control compilation and installation of the executable. However, as a</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">special exception, the source code distributed need not include</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">anything that is normally distributed (in either source or binary</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">form) with the major components (compiler, kernel, and so on) of the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">operating system on which the executable runs, unless that component</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">itself accompanies the executable.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If distribution of executable or object code is made by offering</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">access to copy from a designated place, then offering equivalent</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">access to copy the source code from the same place counts as</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribution of the source code, even though third parties are not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">compelled to copy the source along with the object code.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 4. You may not copy, modify, sublicense, or distribute the Program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">except as expressly provided under this License. Any attempt</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">otherwise to copy, modify, sublicense or distribute the Program is</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">void, and will automatically terminate your rights under this License.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">However, parties who have received copies, or rights, from you under</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License will not have their licenses terminated so long as such</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">parties remain in full compliance.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 5. You are not required to accept this License, since you have not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">signed it. However, nothing else grants you permission to modify or</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute the Program or its derivative works. These actions are</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">prohibited by law if you do not accept this License. Therefore, by</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">modifying or distributing the Program (or any work based on the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program), you indicate your acceptance of this License to do so, and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">all its terms and conditions for copying, distributing or modifying</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the Program or works based on it.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 6. Each time you redistribute the Program (or any work based on the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program), the recipient automatically receives a license from the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">original licensor to copy, distribute or modify the Program subject to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">these terms and conditions. You may not impose any further</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">restrictions on the recipients' exercise of the rights granted herein.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You are not responsible for enforcing compliance by third parties to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 7. If, as a consequence of a court judgment or allegation of patent</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">infringement or for any other reason (not limited to patent issues),</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">conditions are imposed on you (whether by court order, agreement or</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">otherwise) that contradict the conditions of this License, they do not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">excuse you from the conditions of this License. If you cannot</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute so as to satisfy simultaneously your obligations under this</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">License and any other pertinent obligations, then as a consequence you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">may not distribute the Program at all. For example, if a patent</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">license would not permit royalty-free redistribution of the Program by</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">all those who receive copies directly or indirectly through you, then</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the only way you could satisfy both it and this License would be to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">refrain entirely from distribution of the Program.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If any portion of this section is held invalid or unenforceable under</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">any particular circumstance, the balance of the section is intended to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">apply and the section as a whole is intended to apply in other</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">circumstances.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">It is not the purpose of this section to induce you to infringe any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patents or other property right claims or to contest validity of any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">such claims; this section has the sole purpose of protecting the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">integrity of the free software distribution system, which is</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">implemented by public license practices. Many people have made</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">generous contributions to the wide range of software distributed</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">through that system in reliance on consistent application of that</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">system; it is up to the author/donor to decide if he or she is willing</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to distribute software through any other system and a licensee cannot</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">impose that choice.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This section is intended to make thoroughly clear what is believed to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be a consequence of the rest of this License.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 8. If the distribution and/or use of the Program is restricted in</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">certain countries either by patents or by copyrighted interfaces, the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">original copyright holder who places the Program under this License</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">may add an explicit geographical distribution limitation excluding</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">those countries, so that distribution is permitted only in or among</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">countries not thus excluded. In such case, this License incorporates</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the limitation as if written in the body of this License.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 9. The Free Software Foundation may publish revised and/or new versions</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of the General Public License from time to time. Such new versions will</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be similar in spirit to the present version, but may differ in detail to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">address new problems or concerns.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Each version is given a distinguishing version number. If the Program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">specifies a version number of this License which applies to it and &quot;any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">later version&quot;, you have the option of following the terms and conditions</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">either of that version or of any later version published by the Free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Software Foundation. If the Program does not specify a version number of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License, you may choose any version ever published by the Free Software</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Foundation.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 10. If you wish to incorporate parts of the Program into other free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">programs whose distribution conditions are different, write to the author</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to ask for permission. For software which is copyrighted by the Free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Software Foundation, write to the Free Software Foundation; we sometimes</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">make exceptions for this. Our decision will be guided by the two goals</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of preserving the free status of all derivatives of our free software and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of promoting the sharing and reuse of software generally.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> NO WARRANTY</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROVIDE THE PROGRAM &quot;AS IS&quot; WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">REPAIR OR CORRECTION.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">POSSIBILITY OF SUCH DAMAGES.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> END OF TERMS AND CONDITIONS</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> How to Apply These Terms to Your New Programs</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> If you develop a new program, and you want it to be of the greatest</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">possible use to the public, the best way to achieve this is to make it</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">free software which everyone can redistribute and change under these terms.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> To do so, attach the following notices to the program. It is safest</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to attach them to the start of each source file to most effectively</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">convey the exclusion of warranty; and each file should have at least</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the &quot;copyright&quot; line and a pointer to where the full notice is found.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> &lt;one line to give the program's name and a brief idea of what it does.&gt;</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Copyright (C) 19yy &lt;name of author&gt;</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This program is free software; you can redistribute it and/or modify</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> it under the terms of the GNU General Public License as published by</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> the Free Software Foundation; either version 2 of the License, or</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> (at your option) any later version.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This program is distributed in the hope that it will be useful,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> but WITHOUT ANY WARRANTY; without even the implied warranty of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU General Public License for more details.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> You should have received a copy of the GNU General Public License</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> along with this program; if not, write to the Free Software</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Also add information on how to contact you by electronic and paper mail.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If the program is interactive, make it output a short notice like this</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">when it starts in an interactive mode:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Gnomovision version 69, Copyright (C) 19yy name of author</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This is free software, and you are welcome to redistribute it</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> under certain conditions; type `show c' for details.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">The hypothetical commands `show w' and `show c' should show the appropriate</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">parts of the General Public License. Of course, the commands you use may</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be called something other than `show w' and `show c'; they could even be</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">mouse-clicks or menu items--whatever suits your program.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You should also get your employer (if you work as a programmer) or your</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">school, if any, to sign a &quot;copyright disclaimer&quot; for the program, if</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">necessary. Here is a sample; alter the names:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Yoyodyne, Inc., hereby disclaims all copyright interest in the program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> `Gnomovision' (which makes passes at compilers) written by James Hacker.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> &lt;signature of Ty Coon&gt;, 1 April 1989</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Ty Coon, President of Vice</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This General Public License does not permit incorporating your program into</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">proprietary programs. If your program is a subroutine library, you may</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">consider it more useful to permit linking proprietary applications with the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">library. If this is what you want to do, use the GNU Library General</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Public License instead of this License.</span></p></body></html> - - AudioEngineInfoForm Audio Engine Info - + Πληροφορίες Μηχανής Ήχου @@ -507,19 +162,19 @@ AudioFileBrowser Audio File Browser - + Πλοηγός Αρχείων Ήχου Size: %1 bytes - + Μέγεθος: %1 μπάιτια Samplerate: %1 - + Ρυθμός δειγματοληψίας:%1 Sample length: - + Διάρκεια δείγματος: s @@ -527,23 +182,23 @@ Please do not preview samples which are longer than 10 minutes! - + Παρακαλώ, μην προακούς δείγματα τα οποία είναι μεγαλύτερα των 10 λεπτών. Name: - Όνομα: + Όνομα: Size: - Μέγεθος: + Μέγεθος: Samplerate: - Ρυθμός δειγματοληψίας: + Ρυθμός δειγματοληψίας: Sample length: - + Διάρκεια δείγματος: @@ -614,10 +269,29 @@ + ComponentMixerLine + + Mute + Σίγηση + + + Solo + + + + Component name + Όνομα του στοιχείου + + + Set instrument volume [%1] + Όρισε την ένταση του οργάνου [%1] + + + Director Director - + Καθοδηγητής @@ -628,112 +302,75 @@ - DownloadWidget + DonationDialog - (%1/%2 KiB) - ETA %3 - + Donations + Δωρεές - DrumkitManager_UI - - Form1 - Προμόρφωμα1 - + DonationDialog_UI - Load - - - - ### Drumkit author - - - - Delete drumkit - - - - ### Drumkit name - - - - ### Drumkit info - - - - Load drumkit - - - - Save - - - - Author - Δημιουργός + Form + Έντυπο - Info - + Donate! + Να γίνει δωρεά! - Drumkit name - + Choose random entry. + Επέλεξε τυχαία εισαγωγή. - Import + <html><head/><body><p align="justify">Hydrogen is an open source project which is developed by multiple people in their spare time. By making a donation you can say &quot;thank you&quot; to the involved persons.</p></body></html> - Drumkit filename + Sebastian Moors (aka mauser): Maintainer / Developer - Browse - Αναζήτηση - - - <b> -Download more drumkits at <br> -http://www.hydrogen-music.org -</b> + Michael Wolkstein (aka wolke): Forum hosting + + + Download - ### The drumkit will be installed zncxbmzbxcmznxbcmz - - - - Export - Εξαγωγή + Importing item failed: %1 + Αποτυχία εισαγωγής αντικειμένου: %1 + + + DownloadWidget - Drumkit directory - + (%1/%2 KiB) - ETA %3 + (%1/%2 ΧίλιοΜπ) - Εκτ.Χρ. %3 ExportSongDialog Export song - + Εξαγωγή τραγουδιού Export to a single track - + Εξαγωγή σε ένα κανάλι Export to seperate tracks - + Εξαγωγή σε ξεχωριστά κανάλια Both - + Καί τα δύο The file %1 exists. Overwrite the existing file? - + Το αρχείο % υπάρχει. Να επανογραφεί; @@ -860,46 +497,50 @@ Interpolation: - + Επανασύνθεση: Choose type of interpolation methode - + Επέλεξε τη μέθοδο επανασύνθεσης Linear - + Γραμμική Cosine - + Συνημίτονου Third - + Τρίτη Cubic - + Κυβική Hermite - + Του Χερμάιτ Enable tempo changing - + Ενεργοποίηση της αλλαγής της ταχύτητας TimeLine BPM - + Χτ.ΑνάΛεπ. του Χρονογράμματος + + + 88200 + 88200 - Enable use of rubberband batch processor + Enable use of rubberband's batch processor - Rubberbad Batch + Rubberband Batch @@ -907,110 +548,123 @@ FileBrowser %1<br>%2 KHz<br>%3 %4 - + %1<br>%2 KHz<br>%3 %4 FxMixerLine FX on/off - + FX ενεργοποιημένα ή όχι Master output - + Κύρια εξαγωγή H2Core::SongEditorPanelBpmWidget BPM - Χτ.ΑνάΛεπ. + Χτ.ΑνάΛεπ. H2Core::SongEditorPanelTagWidget Tag - Ετικέτα + Ετικέτα H2Core::SoundLibraryPropertiesDialog SoundLibrary Properties - + Ιδιότητες της ΒιβλιοθήκηςΉχων This is not possible, you can only save changes inside instruments to the current loaded sound library - + Αυτό δεν είναι δυνατό. Μπορείς, μονάχα, να αποθηκεύσεις αλλαγές μέσα σε όργανα στην τωρινή φορτωμένη βιβλιοθήκη ήχων Warning! Changing the drumkit name will result in creating a new drumkit with this name. Are you sure? - + Προειδοποίηση: Η αλλαγή του ονόματος της ομάδας κρουστών, θα έχει σαν αποτέλεσμα τη δημιουργία μιας νέας ομάδας κρουστών, με αυτό το νέο όνομα. +Είσαι σίγουρος; &Ok - + &Εντάξει &Cancel - Α&κύρωση + Α&κύρωση Saving of this drumkit failed. - + Αποτυχία αποθήκευσης αυτής της ομάδας κρουστών + + + Open Image + Άνοιγμα Εικόνας + + + Image Files (*.png *.jpg *.jpeg) + Αρχεία Εικόνας (*.png *.jpg *.jpeg) HydrogenApp Song Editor - + Επεξεργαστής Τραγουδιού Instrument + Pattern - + Όργανο + Μήτρα Mixer - + Μίκτης Drumkit loaded: [%1] - + Φορτώθηκε η ομάδα κρουστών: [%1] + + + modified + μετατράπηκε InstrumentEditor General - + Γενικά Show instrument properties - + Εμφάνιση των ιδιοτήτων του οργάνου Layers - + Στρώματα Show layers properties - + Εμφάνιση των ιδιοτήτων των στρωμάτων Random pitch factor - + Παράγοντας τυχαίας τονικότητας Filter Cutoff - + Αποκοπή Φίλτρου Filter resonance - + Αντίχηση φίλτρου Attack @@ -1018,42 +672,66 @@ Decay - + Πτώση Sustain - + Διάρκεια Release - + Απελευθέρωση Instrument gain - - - - Auto-Stop-Note - + Ένταση οργάνου Stop the current playing instrument-note before trigger the next note sample. - + Σταμάτημα του τωρινού αναπαραγώμενου στίγματος του οργάνου, πριν την εκτέλεση του επόμενου δείγματος του στίγματος. Layer gain - + Ένταση στρώματος Layer pitch (Coarse) - + Τόνος στρώματος (Τραχύς) Layer pitch (Fine) - + Τόνος του στρώματος (Φίνος) New instrument name + Όνομα του νέου οργάνου + + + New component name + Όνομα του νέου + + + Component name + Όνομα + + + Midi out channel + Κανάλι εξόδου ΜΙΝΤΙ + + + Midi out note + Στίγμα εξόδου ΜΙΝΤΙ + + + Component volume + Ένταση + + + Don't change the layers' gain based on velocity + + + + Select pattern size @@ -1061,7 +739,7 @@ InstrumentLine Mute instrument - + Σίγηση οργάνου Solo @@ -1069,35 +747,35 @@ Clear notes - + Καθάρισμα των στιγμάτων Fill notes ... - + Συμπλήρωμα στιγμάτων ... Fill all notes - + Συμπλήρωμα όλων των στιγμάτων Fill 1/2 notes - + Συμπλήρωμα 1/2 στιγμάτων Fill 1/3 notes - + Συμπλήρωμα 1/3 στιγμάτων Fill 1/4 notes - + Συμπλήρωμα 1/4 στιγμάτων Fill 1/6 notes - + Συμπλήρωμα 1/6 στιγμάτων Fill 1/8 notes - + Συμπλήρωμα 1/8 στιγμάτων Randomize velocity @@ -1105,111 +783,127 @@ Delete instrument + Διαγραφή οργάνου + + + Copy notes ... + Αντογραφή στιγμάτων ... + + + Only for this pattern + + For all patterns + + + + Paste notes ... + Επικόλληση στιγμάτων ... + InstrumentRack Show Instrument editor - + Εμφάνιση του επεξεργαστή οργάνου Instrument - + Όργανο Show sound library - + Εμφάνιση της βιβλιοθήκης ήχων Sound library - + Βιβλιοθήκη ήχων LadspaFXMixerLine FX bypass - + Παράκαμψη FX Edit FX parameters - + Επεξεργασία των παραμέτρων FX Ladspa FX name - + Όνομα του Ladspa FX Effect return - + Επιστροφή του εφέ LadspaFXProperties Select FX - + Επιλογή FX Remove FX - + Απομάκρυνση FX Activate - + Ενεργοποίηση [%1] LADSPA FX Properties - + [%1] Ιδιώτητες LADSPA FX Deactivate - + Απενεργποίηση LADSPA FX %1 Properties - + LADSPA FX %1 Ιδιώτητες No plugin - + Κανένα ένθεμα LadspaFXSelector Select LADSPA FX - + Επιλογή LADSPA FX Groups - + Ομάδες Alphabetic List - + Αλφαβητικό Κατάστιχο Categorized - + Ανά Κατηγορία Recently Used - + Πρόσφατα Χρησιμοποιημένα Stereo - + Στερεοφωνικά Mono - + Μονοφωνικά Not supported - + Δεν υποστηρίζονται @@ -1350,11 +1044,8 @@ LayerPreview - Layer %1: Min. velocity = %2, Max. velocity = %3 - - - - Velocity = %1 + Dec. = %1 +MIDI = %2 @@ -1375,10 +1066,6 @@ - &Project - - - &New @@ -1473,7 +1160,7 @@ Director - + Καθοδηγητής &Mixer @@ -1489,7 +1176,7 @@ Instrument - + Όργανο Drumkit @@ -1654,6 +1341,40 @@ &Cancel Α&κύρωση + + Export &LilyPond file + + + + Donate + + + + +The LilyPond export is an experimental feature. +It should work like a charm provided that you use the GM-kit, and that you do not use triplet + + + + + LilyPond file (*.ly) + + + + Export LilyPond file + + + + +The current playlist contains unsaved changes. +Do you want to discard the changes? + + + + + Pro&ject + + MasterMixerLine @@ -1687,6 +1408,17 @@ + MidiSenseWidget + + This element is not midi operable. + + + + Waiting for midi input... + + + + MidiTable press button to record midi event @@ -1740,7 +1472,7 @@ Mute - + Σίγηση Solo @@ -1756,7 +1488,7 @@ Set instrument volume [%1] - + Όρισε την ένταση του οργάνου [%1] Set instr. pan [%1] @@ -2021,7 +1753,7 @@ Set BPM / Set BPM and play - + Όρισε τους Χτ.ΑνάΛεπ. ή Ορισμός των Χτ.ΑνάΛεπ. και αναπαραγωγή Recalculate Rubberband modified samples if bpm will change @@ -2045,7 +1777,7 @@ Mixer - + Μίκτης Show Instrument Rack @@ -2101,11 +1833,11 @@ Count BPM and start PLAY - + Μέτρημα των Χτ.ΑνάΛεπ. και εκκίνηση της ΑΝΑΠΑΡΑΓΩΓΗΣ Count and set BPM - + Μέτρημα και οσρισμός των Χτ.ΑνάΛεπ. Recalculate all samples using Rubberband ON @@ -2137,7 +1869,7 @@ New BPM value - + Νέα tim;h Χτ.ΑνάΛεπ. Loop song = On @@ -2319,10 +2051,6 @@ - No song selected! - - - Error loading song. @@ -2334,6 +2062,29 @@ Playlist: set song no. %1 + + File not found: + + + + No valid song selected! + + + + +The current playlist contains unsaved changes. +Do you want to discard the changes? + + + + + &Discard + + + + &Cancel + Α&κύρωση + PlaylistDialog_UI @@ -2371,7 +2122,7 @@ &Ok - + &Εντάξει &Cancel @@ -2409,6 +2160,30 @@ Please restart hydrogen to enable/disable LASH support + + Automatic + + + + Steps + + + + Fixed + + + + <b>PulseAudio Driver</b><br> + + + + Number of steps + + + + Color (Hue value) + + PreferencesDialog_UI @@ -2462,11 +2237,6 @@ Επιλογή γραμματοσειράς - <i>After a font change the application must be restarted.</i> - <i>Μετά την αλλαγή της γραμματοσειράς,</i><br> -<i>θα πρέπει να επανεκκινηθεί η εφαρμογή.</i> - - Polyphony Πολυφωνία @@ -2694,23 +2464,23 @@ Linear - + Γραμμική Cosine - + Συνημίτονου Third - + Τρίτη Cubic - + Κυβική Hermite - + Του Χερμάιτ Default interface layout @@ -2724,6 +2494,30 @@ Tabbed + + TextLabel + + + + Coloring method for Song Editor elements + + + + <html><head/><body><p><span style=" font-style:italic;">After changing a font or the interface layout the application must be restarted.</span></p></body></html> + + + + Use relative paths for playlist + + + + Use output note as input note + + + + Discard midi messages after action has been triggered + + SampleEditor @@ -2734,7 +2528,7 @@ &Ok - + &Εντάξει &Cancel @@ -3081,7 +2875,7 @@ SongEditorPanel Song Editor - + Επεξεργαστής Τραγουδιού Enable time line edit @@ -3120,17 +2914,13 @@ - not_categorized - - - Warning, this will erase your pattern sequence. Are you sure? &Ok - + &Εντάξει &Cancel @@ -3256,7 +3046,7 @@ &Ok - + &Εντάξει &Cancel @@ -3339,13 +3129,41 @@ Διάλογος - Browse - Αναζήτηση - - Export Εξαγωγή + + Drumkit + + + + Component + + + + Path + + + + Version + + + + Browse... + Αναζήτηση... + + + 0.9.7 and higher + + + + 0.9.6 and lower + + + + Cancel + Ακύρωση + SoundLibraryImportDialog @@ -3355,7 +3173,7 @@ Sound library - + Βιβλιοθήκη ήχων Status @@ -3390,10 +3208,6 @@ - License: %1 - - - Downloading SoundLibrary... @@ -3409,6 +3223,14 @@ Import drumkit + + Drumkit License: %1 + Άδεια της Ομάδας Κρουστών: %1 + + + Image License: %1 + Άδεια της Εικόνας: %1 + SoundLibraryImportDialog_UI @@ -3429,10 +3251,6 @@ Όνομα της Βιβλιοθήκης Ήχων - Sound library Info - Πληροφορίες της Βιβλιοθήκης Ήχων - - Author... Δημιουργός... @@ -3457,10 +3275,6 @@ 1 - License... - Άδεια... - - Edit server list Επεξεργασία της λίστας των εξυπηρετητών @@ -3468,6 +3282,18 @@ Close Κλείσιμο + + TextLabel + + + + Image License... + Άδεια της Εικόνας... + + + Drumkit License... + Άδεια της Ομάδας Κρουστών... + SoundLibraryPanel @@ -3505,7 +3331,7 @@ &Ok - + &Εντάξει &Cancel @@ -3539,6 +3365,17 @@ Drumkit deletion failed. + + The existing kit has %1 instruments but the new one only has %2. +The first %2 instruments will be replaced with the new intruments and will keep their notes, but some of the remaining instruments have notes. +Would you like to keep or discard the remaining instruments and notes? + + + + + Keep + + SoundLibraryPropertiesDialog_UI @@ -3559,10 +3396,6 @@ Πληροφορίες - License - Άδεια - - Save Αποθήκευση @@ -3574,6 +3407,22 @@ Save changes made to instruments into sound library Τις αλλαγές που έγιναν στα όργανα, αποθήκευσέ τες στη βιβλιοθήκη ήχων + + Drumkit License + Άδεια της Ομάδας Κρουστών + + + Image + + + + Browse + Αναζήτηση + + + Image License + Άδεια της Εικόνας + SoundLibraryRepositoryDialog @@ -3616,9 +3465,21 @@ - Saving of this drumkit failed. + A library with the same name already exists. Do you want to overwrite the existing library? + + + + Saving of this library failed. + + Open Image + Άνοιγμα Εικόνας + + + Image Files (*.png *.jpg *.jpeg) + Αρχεία Εικόνας (*.png *.jpg *.jpeg) + SoundLibrarySaveDialog_UI @@ -3650,12 +3511,24 @@ Save Αποθήκευση + + Image + + + + Browse + Αναζήτηση + + + Image License + Άδεια της Εικόνας + SoundLibraryTree Sound library - + Βιβλιοθήκη ήχων Binary files /tmp/tmpktOUQO/kmAosGw3t1/hydrogen-0.9.6.1/data/i18n/hydrogen.es.qm and /tmp/tmpktOUQO/ALHtWJIToj/hydrogen-0.9.7/data/i18n/hydrogen.es.qm differ diff -Nru hydrogen-0.9.6.1/data/i18n/hydrogen.es.ts hydrogen-0.9.7/data/i18n/hydrogen.es.ts --- hydrogen-0.9.6.1/data/i18n/hydrogen.es.ts 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/data/i18n/hydrogen.es.ts 2016-11-05 08:22:50.000000000 +0000 @@ -1,6 +1,6 @@ - + AboutDialog @@ -12,16 +12,20 @@ Acerca de - <b>Main coder and mantainer:</b><br> - <b>Programador principal y mantenedor:</b><br> - - <b>Website</b><br> <b>Página web</b><br> - <b>Mailing lists</b><br> - <b>Listas de correo</b><br> + <b>Main coder and maintainer:</b><br> + + + + <b>Thanks to:</b> + + + + <b>Development mailing list</b><br> + @@ -54,355 +58,6 @@ Alt+O Alt+O - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This program is distributed under the terms of the GPL v2.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU GENERAL PUBLIC LICENSE</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Version 2, June 1991</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Copyright (C) 1989, 1991 Free Software Foundation, Inc.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 675 Mass Ave, Cambridge, MA 02139, USA</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Everyone is permitted to copy and distribute verbatim copies</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> of this license document, but changing it is not allowed.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Preamble</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> The licenses for most software are designed to take away your</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">freedom to share and change it. By contrast, the GNU General Public</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">License is intended to guarantee your freedom to share and change free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">software--to make sure the software is free for all its users. This</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">General Public License applies to most of the Free Software</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Foundation's software and to any other program whose authors commit to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">using it. (Some other Free Software Foundation software is covered by</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the GNU Library General Public License instead.) You can apply it to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">your programs, too.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> When we speak of free software, we are referring to freedom, not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">price. Our General Public Licenses are designed to make sure that you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">have the freedom to distribute copies of free software (and charge for</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this service if you wish), that you receive source code or can get it</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">if you want it, that you can change the software or use pieces of it</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">in new free programs; and that you know you can do these things.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> To protect your rights, we need to make restrictions that forbid</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">anyone to deny you these rights or to ask you to surrender the rights.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">These restrictions translate to certain responsibilities for you if you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute copies of the software, or if you modify it.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> For example, if you distribute copies of such a program, whether</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">gratis or for a fee, you must give the recipients all the rights that</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">you have. You must make sure that they, too, receive or can get the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">source code. And you must show them these terms so they know their</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">rights.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> We protect your rights with two steps: (1) copyright the software, and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">(2) offer you this license which gives you legal permission to copy,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute and/or modify the software.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Also, for each author's protection and ours, we want to make certain</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that everyone understands that there is no warranty for this free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">software. If the software is modified by someone else and passed on, we</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">want its recipients to know that what they have is not the original, so</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that any problems introduced by others will not reflect on the original</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">authors' reputations.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Finally, any free program is threatened constantly by software</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patents. We wish to avoid the danger that redistributors of a free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">program will individually obtain patent licenses, in effect making the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">program proprietary. To prevent this, we have made it clear that any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patent must be licensed for everyone's free use or not licensed at all.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> The precise terms and conditions for copying, distribution and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">modification follow.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU GENERAL PUBLIC LICENSE</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 0. This License applies to any program or other work which contains</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">a notice placed by the copyright holder saying it may be distributed</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">under the terms of this General Public License. The &quot;Program&quot;, below,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">refers to any such program or work, and a &quot;work based on the Program&quot;</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">means either the Program or any derivative work under copyright law:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that is to say, a work containing the Program or a portion of it,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">either verbatim or with modifications and/or translated into another</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">language. (Hereinafter, translation is included without limitation in</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the term &quot;modification&quot;.) Each licensee is addressed as &quot;you&quot;.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Activities other than copying, distribution and modification are not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">covered by this License; they are outside its scope. The act of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">running the Program is not restricted, and the output from the Program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">is covered only if its contents constitute a work based on the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program (independent of having been made by running the Program).</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Whether that is true depends on what the Program does.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 1. You may copy and distribute verbatim copies of the Program's</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">source code as you receive it, in any medium, provided that you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">conspicuously and appropriately publish on each copy an appropriate</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">copyright notice and disclaimer of warranty; keep intact all the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">notices that refer to this License and to the absence of any warranty;</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">and give any other recipients of the Program a copy of this License</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">along with the Program.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You may charge a fee for the physical act of transferring a copy, and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">you may at your option offer warranty protection in exchange for a fee.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 2. You may modify your copy or copies of the Program or any portion</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of it, thus forming a work based on the Program, and copy and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute such modifications or work under the terms of Section 1</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">above, provided that you also meet all of these conditions:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a) You must cause the modified files to carry prominent notices</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> stating that you changed the files and the date of any change.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> b) You must cause any work that you distribute or publish, that in</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> whole or in part contains or is derived from the Program or any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> part thereof, to be licensed as a whole at no charge to all third</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> parties under the terms of this License.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> c) If the modified program normally reads commands interactively</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> when run, you must cause it, when started running for such</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> interactive use in the most ordinary way, to print or display an</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> announcement including an appropriate copyright notice and a</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> notice that there is no warranty (or else, saying that you provide</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a warranty) and that users may redistribute the program under</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> these conditions, and telling the user how to view a copy of this</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> License. (Exception: if the Program itself is interactive but</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> does not normally print such an announcement, your work based on</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> the Program is not required to print an announcement.)</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">These requirements apply to the modified work as a whole. If</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">identifiable sections of that work are not derived from the Program,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">and can be reasonably considered independent and separate works in</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">themselves, then this License, and its terms, do not apply to those</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">sections when you distribute them as separate works. But when you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute the same sections as part of a whole which is a work based</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">on the Program, the distribution of the whole must be on the terms of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License, whose permissions for other licensees extend to the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">entire whole, and thus to each and every part regardless of who wrote it.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Thus, it is not the intent of this section to claim rights or contest</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">your rights to work written entirely by you; rather, the intent is to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">exercise the right to control the distribution of derivative or</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">collective works based on the Program.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">In addition, mere aggregation of another work not based on the Program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">with the Program (or with a work based on the Program) on a volume of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">a storage or distribution medium does not bring the other work under</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the scope of this License.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 3. You may copy and distribute the Program (or a work based on it,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">under Section 2) in object code or executable form under the terms of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Sections 1 and 2 above provided that you also do one of the following:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a) Accompany it with the complete corresponding machine-readable</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> source code, which must be distributed under the terms of Sections</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 1 and 2 above on a medium customarily used for software interchange; or,</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> b) Accompany it with a written offer, valid for at least three</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> years, to give any third party, for a charge no more than your</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> cost of physically performing source distribution, a complete</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> machine-readable copy of the corresponding source code, to be</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> distributed under the terms of Sections 1 and 2 above on a medium</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> customarily used for software interchange; or,</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> c) Accompany it with the information you received as to the offer</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> to distribute corresponding source code. (This alternative is</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> allowed only for noncommercial distribution and only if you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> received the program in object code or executable form with such</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> an offer, in accord with Subsection b above.)</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">The source code for a work means the preferred form of the work for</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">making modifications to it. For an executable work, complete source</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">code means all the source code for all modules it contains, plus any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">associated interface definition files, plus the scripts used to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">control compilation and installation of the executable. However, as a</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">special exception, the source code distributed need not include</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">anything that is normally distributed (in either source or binary</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">form) with the major components (compiler, kernel, and so on) of the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">operating system on which the executable runs, unless that component</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">itself accompanies the executable.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If distribution of executable or object code is made by offering</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">access to copy from a designated place, then offering equivalent</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">access to copy the source code from the same place counts as</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribution of the source code, even though third parties are not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">compelled to copy the source along with the object code.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 4. You may not copy, modify, sublicense, or distribute the Program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">except as expressly provided under this License. Any attempt</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">otherwise to copy, modify, sublicense or distribute the Program is</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">void, and will automatically terminate your rights under this License.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">However, parties who have received copies, or rights, from you under</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License will not have their licenses terminated so long as such</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">parties remain in full compliance.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 5. You are not required to accept this License, since you have not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">signed it. However, nothing else grants you permission to modify or</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute the Program or its derivative works. These actions are</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">prohibited by law if you do not accept this License. Therefore, by</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">modifying or distributing the Program (or any work based on the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program), you indicate your acceptance of this License to do so, and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">all its terms and conditions for copying, distributing or modifying</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the Program or works based on it.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 6. Each time you redistribute the Program (or any work based on the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program), the recipient automatically receives a license from the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">original licensor to copy, distribute or modify the Program subject to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">these terms and conditions. You may not impose any further</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">restrictions on the recipients' exercise of the rights granted herein.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You are not responsible for enforcing compliance by third parties to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 7. If, as a consequence of a court judgment or allegation of patent</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">infringement or for any other reason (not limited to patent issues),</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">conditions are imposed on you (whether by court order, agreement or</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">otherwise) that contradict the conditions of this License, they do not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">excuse you from the conditions of this License. If you cannot</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute so as to satisfy simultaneously your obligations under this</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">License and any other pertinent obligations, then as a consequence you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">may not distribute the Program at all. For example, if a patent</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">license would not permit royalty-free redistribution of the Program by</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">all those who receive copies directly or indirectly through you, then</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the only way you could satisfy both it and this License would be to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">refrain entirely from distribution of the Program.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If any portion of this section is held invalid or unenforceable under</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">any particular circumstance, the balance of the section is intended to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">apply and the section as a whole is intended to apply in other</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">circumstances.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">It is not the purpose of this section to induce you to infringe any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patents or other property right claims or to contest validity of any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">such claims; this section has the sole purpose of protecting the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">integrity of the free software distribution system, which is</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">implemented by public license practices. Many people have made</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">generous contributions to the wide range of software distributed</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">through that system in reliance on consistent application of that</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">system; it is up to the author/donor to decide if he or she is willing</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to distribute software through any other system and a licensee cannot</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">impose that choice.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This section is intended to make thoroughly clear what is believed to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be a consequence of the rest of this License.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 8. If the distribution and/or use of the Program is restricted in</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">certain countries either by patents or by copyrighted interfaces, the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">original copyright holder who places the Program under this License</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">may add an explicit geographical distribution limitation excluding</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">those countries, so that distribution is permitted only in or among</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">countries not thus excluded. In such case, this License incorporates</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the limitation as if written in the body of this License.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 9. The Free Software Foundation may publish revised and/or new versions</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of the General Public License from time to time. Such new versions will</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be similar in spirit to the present version, but may differ in detail to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">address new problems or concerns.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Each version is given a distinguishing version number. If the Program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">specifies a version number of this License which applies to it and &quot;any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">later version&quot;, you have the option of following the terms and conditions</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">either of that version or of any later version published by the Free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Software Foundation. If the Program does not specify a version number of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License, you may choose any version ever published by the Free Software</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Foundation.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 10. If you wish to incorporate parts of the Program into other free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">programs whose distribution conditions are different, write to the author</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to ask for permission. For software which is copyrighted by the Free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Software Foundation, write to the Free Software Foundation; we sometimes</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">make exceptions for this. Our decision will be guided by the two goals</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of preserving the free status of all derivatives of our free software and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of promoting the sharing and reuse of software generally.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> NO WARRANTY</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROVIDE THE PROGRAM &quot;AS IS&quot; WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">REPAIR OR CORRECTION.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">POSSIBILITY OF SUCH DAMAGES.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> END OF TERMS AND CONDITIONS</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> How to Apply These Terms to Your New Programs</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> If you develop a new program, and you want it to be of the greatest</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">possible use to the public, the best way to achieve this is to make it</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">free software which everyone can redistribute and change under these terms.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> To do so, attach the following notices to the program. It is safest</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to attach them to the start of each source file to most effectively</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">convey the exclusion of warranty; and each file should have at least</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the &quot;copyright&quot; line and a pointer to where the full notice is found.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> &lt;one line to give the program's name and a brief idea of what it does.&gt;</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Copyright (C) 19yy &lt;name of author&gt;</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This program is free software; you can redistribute it and/or modify</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> it under the terms of the GNU General Public License as published by</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> the Free Software Foundation; either version 2 of the License, or</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> (at your option) any later version.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This program is distributed in the hope that it will be useful,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> but WITHOUT ANY WARRANTY; without even the implied warranty of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU General Public License for more details.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> You should have received a copy of the GNU General Public License</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> along with this program; if not, write to the Free Software</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Also add information on how to contact you by electronic and paper mail.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If the program is interactive, make it output a short notice like this</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">when it starts in an interactive mode:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Gnomovision version 69, Copyright (C) 19yy name of author</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This is free software, and you are welcome to redistribute it</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> under certain conditions; type `show c' for details.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">The hypothetical commands `show w' and `show c' should show the appropriate</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">parts of the General Public License. Of course, the commands you use may</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be called something other than `show w' and `show c'; they could even be</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">mouse-clicks or menu items--whatever suits your program.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You should also get your employer (if you work as a programmer) or your</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">school, if any, to sign a &quot;copyright disclaimer&quot; for the program, if</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">necessary. Here is a sample; alter the names:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Yoyodyne, Inc., hereby disclaims all copyright interest in the program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> `Gnomovision' (which makes passes at compilers) written by James Hacker.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> &lt;signature of Ty Coon&gt;, 1 April 1989</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Ty Coon, President of Vice</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This General Public License does not permit incorporating your program into</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">proprietary programs. If your program is a subroutine library, you may</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">consider it more useful to permit linking proprietary applications with the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">library. If this is what you want to do, use the GNU Library General</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Public License instead of this License.</span></p></body></html> - - AudioEngineInfoForm @@ -613,6 +268,25 @@ + ComponentMixerLine + + Mute + Silencio + + + Solo + Solo + + + Component name + + + + Set instrument volume [%1] + Fijar volumen del instrumento [%1] + + + Director Director @@ -627,91 +301,51 @@ - DownloadWidget + DonationDialog - (%1/%2 KiB) - ETA %3 - + Donations + - DrumkitManager_UI + DonationDialog_UI - Drumkit name - Nombre del drumkit - - - Delete drumkit - Eliminar drumkit - - - Load drumkit - Cargar drumkit - - - Load - Cargar - - - Author - Autor - - - Info - Información - - - Save - Guardar - - - Browse - Examinar - - - Import - Importar - - - Drumkit filename - Nombre de drumkit - - - Export - Exportar + Form + Forma - Drumkit directory - Directorio de drumkits + Donate! + - Form1 - Forma1 + Choose random entry. + - ### Drumkit author - Autor drumkit + <html><head/><body><p align="justify">Hydrogen is an open source project which is developed by multiple people in their spare time. By making a donation you can say &quot;thank you&quot; to the involved persons.</p></body></html> + - ### Drumkit info - Información de drumkit + Sebastian Moors (aka mauser): Maintainer / Developer + - ### The drumkit will be installed zncxbmzbxcmznxbcmz - El drumkit se instalará zncxbmzbxcmznxbcmz + Michael Wolkstein (aka wolke): Forum hosting + + + + Download - ### Drumkit name - Nombre de drumkit + Importing item failed: %1 + + + + DownloadWidget - <b> -Download more drumkits at <br> -http://www.hydrogen-music.org -</b> - <b> -Descargue más kits de batería en <br> -http://www.hydrogen-music.org(new line) -</b> + (%1/%2 KiB) - ETA %3 + @@ -898,11 +532,15 @@ - Enable use of rubberband batch processor + 88200 + 88200 + + + Enable use of rubberband's batch processor - Rubberbad Batch + Rubberband Batch @@ -966,6 +604,14 @@ Saving of this drumkit failed. + + Open Image + + + + Image Files (*.png *.jpg *.jpeg) + + HydrogenApp @@ -985,6 +631,10 @@ Mixer Mezclador + + modified + + InstrumentEditor @@ -1057,9 +707,33 @@ Detén la nota del instrumento actual antes de disparar la siguiente nota de sample. - Auto-Stop-Note + New component name + + + + Component name + + Midi out channel + + + + Midi out note + + + + Component volume + + + + Don't change the layers' gain based on velocity + + + + Select pattern size + Seleccionar tamaño del patrón + InstrumentLine @@ -1111,6 +785,22 @@ Solo Solo + + Copy notes ... + + + + Only for this pattern + + + + For all patterns + + + + Paste notes ... + + InstrumentRack @@ -1330,11 +1020,8 @@ LayerPreview - Layer %1: Min. velocity = %2, Max. velocity = %3 - - - - Velocity = %1 + Dec. = %1 +MIDI = %2 @@ -1461,10 +1148,6 @@ De&bug - &Project - &Proyecto - - Save &as... Gu&ardar como... @@ -1636,6 +1319,40 @@ Report bug + + Export &LilyPond file + + + + Donate + + + + +The LilyPond export is an experimental feature. +It should work like a charm provided that you use the GM-kit, and that you do not use triplet + + + + + LilyPond file (*.ly) + + + + Export LilyPond file + + + + +The current playlist contains unsaved changes. +Do you want to discard the changes? + + + + + Pro&ject + + MasterMixerLine @@ -1669,6 +1386,17 @@ + MidiSenseWidget + + This element is not midi operable. + + + + Waiting for midi input... + + + + MidiTable Event @@ -2305,10 +2033,6 @@ - No song selected! - - - Playlist: set song no. %1 @@ -2320,6 +2044,29 @@ &New Playlist + + File not found: + + + + No valid song selected! + + + + +The current playlist contains unsaved changes. +Do you want to discard the changes? + + + + + &Discard + &Descartar + + + &Cancel + &Cancelar + PlaylistDialog_UI @@ -2395,6 +2142,30 @@ &Cancel &Cancelar + + Automatic + + + + Steps + + + + Fixed + + + + <b>PulseAudio Driver</b><br> + + + + Number of steps + + + + Color (Hue value) + + PreferencesDialog_UI @@ -2447,10 +2218,6 @@ Seleccionar fuente - <i>After a font change the application must be restarted.</i> - <i>Reiniciar la aplicación para usar la nueva fuente.</i> - - Sample rate Tasa de muestreo @@ -2702,6 +2469,30 @@ Tabbed + + TextLabel + + + + Coloring method for Song Editor elements + + + + <html><head/><body><p><span style=" font-style:italic;">After changing a font or the interface layout the application must be restarted.</span></p></body></html> + + + + Use relative paths for playlist + + + + Use output note as input note + + + + Discard midi messages after action has been triggered + + SampleEditor @@ -3104,10 +2895,6 @@ modo patrón único - not_categorized - sin_categorizar - - Enable time line edit Activar edición de línea de tiempo @@ -3311,13 +3098,41 @@ Diálogo - Browse - Examinar - - Export Exportar + + Drumkit + + + + Component + + + + Path + + + + Version + + + + Browse... + Examinar... + + + 0.9.7 and higher + + + + 0.9.6 and lower + + + + Cancel + Cancelar + SoundLibraryImportDialog @@ -3378,8 +3193,12 @@ Patrones - License: %1 - Licencia: %1 + Drumkit License: %1 + + + + Image License: %1 + @@ -3401,10 +3220,6 @@ Nombre de biblioteca de sonido - Sound library Info - Info de biblioteca de sonido - - Author... Autor... @@ -3429,10 +3244,6 @@ 1 - License... - Licencia... - - Edit server list Editar lista de servidores @@ -3440,6 +3251,18 @@ Close Cerrar + + TextLabel + + + + Image License... + + + + Drumkit License... + + SoundLibraryPanel @@ -3512,6 +3335,17 @@ Drumkit deletion failed. + + The existing kit has %1 instruments but the new one only has %2. +The first %2 instruments will be replaced with the new intruments and will keep their notes, but some of the remaining instruments have notes. +Would you like to keep or discard the remaining instruments and notes? + + + + + Keep + + SoundLibraryPropertiesDialog_UI @@ -3532,10 +3366,6 @@ Info - License - Licencia - - Save Guardar @@ -3547,6 +3377,22 @@ Save changes made to instruments into sound library Guardar cambios a los instrumentos en la biblioteca de sonidos + + Drumkit License + + + + Image + + + + Browse + Examinar + + + Image License + + SoundLibraryRepositoryDialog @@ -3589,7 +3435,19 @@ Por favor proporcione al menos un nombre válido - Saving of this drumkit failed. + A library with the same name already exists. Do you want to overwrite the existing library? + + + + Saving of this library failed. + + + + Open Image + + + + Image Files (*.png *.jpg *.jpeg) @@ -3623,6 +3481,18 @@ Save Guardar + + Image + + + + Browse + Examinar + + + Image License + + SoundLibraryTree Binary files /tmp/tmpktOUQO/kmAosGw3t1/hydrogen-0.9.6.1/data/i18n/hydrogen.fr.qm and /tmp/tmpktOUQO/ALHtWJIToj/hydrogen-0.9.7/data/i18n/hydrogen.fr.qm differ diff -Nru hydrogen-0.9.6.1/data/i18n/hydrogen.fr.ts hydrogen-0.9.7/data/i18n/hydrogen.fr.ts --- hydrogen-0.9.6.1/data/i18n/hydrogen.fr.ts 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/data/i18n/hydrogen.fr.ts 2016-11-05 08:22:50.000000000 +0000 @@ -1,6 +1,6 @@ - + AboutDialog @@ -13,15 +13,19 @@ <b>Website</b><br> - <b>Site Web</b><br> + <b>Site internet</b><br> - <b>Mailing lists</b><br> - <b>Listes de discussion</b><br> + <b>Main coder and maintainer:</b><br> + <b>Codeurs et mainteneurs principaux :</b><br> - <b>Main coder and mantainer:</b><br> - <b>Programmeur et responsable principal:</b><br> + <b>Thanks to:</b> + <b>Merci à to :</b> + + + <b>Development mailing list</b><br> + @@ -54,355 +58,6 @@ &License &Licence - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This program is distributed under the terms of the GPL v2.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU GENERAL PUBLIC LICENSE</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Version 2, June 1991</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Copyright (C) 1989, 1991 Free Software Foundation, Inc.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 675 Mass Ave, Cambridge, MA 02139, USA</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Everyone is permitted to copy and distribute verbatim copies</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> of this license document, but changing it is not allowed.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Preamble</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> The licenses for most software are designed to take away your</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">freedom to share and change it. By contrast, the GNU General Public</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">License is intended to guarantee your freedom to share and change free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">software--to make sure the software is free for all its users. This</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">General Public License applies to most of the Free Software</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Foundation's software and to any other program whose authors commit to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">using it. (Some other Free Software Foundation software is covered by</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the GNU Library General Public License instead.) You can apply it to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">your programs, too.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> When we speak of free software, we are referring to freedom, not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">price. Our General Public Licenses are designed to make sure that you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">have the freedom to distribute copies of free software (and charge for</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this service if you wish), that you receive source code or can get it</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">if you want it, that you can change the software or use pieces of it</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">in new free programs; and that you know you can do these things.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> To protect your rights, we need to make restrictions that forbid</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">anyone to deny you these rights or to ask you to surrender the rights.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">These restrictions translate to certain responsibilities for you if you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute copies of the software, or if you modify it.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> For example, if you distribute copies of such a program, whether</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">gratis or for a fee, you must give the recipients all the rights that</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">you have. You must make sure that they, too, receive or can get the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">source code. And you must show them these terms so they know their</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">rights.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> We protect your rights with two steps: (1) copyright the software, and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">(2) offer you this license which gives you legal permission to copy,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute and/or modify the software.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Also, for each author's protection and ours, we want to make certain</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that everyone understands that there is no warranty for this free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">software. If the software is modified by someone else and passed on, we</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">want its recipients to know that what they have is not the original, so</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that any problems introduced by others will not reflect on the original</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">authors' reputations.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Finally, any free program is threatened constantly by software</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patents. We wish to avoid the danger that redistributors of a free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">program will individually obtain patent licenses, in effect making the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">program proprietary. To prevent this, we have made it clear that any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patent must be licensed for everyone's free use or not licensed at all.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> The precise terms and conditions for copying, distribution and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">modification follow.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU GENERAL PUBLIC LICENSE</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 0. This License applies to any program or other work which contains</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">a notice placed by the copyright holder saying it may be distributed</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">under the terms of this General Public License. The &quot;Program&quot;, below,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">refers to any such program or work, and a &quot;work based on the Program&quot;</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">means either the Program or any derivative work under copyright law:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that is to say, a work containing the Program or a portion of it,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">either verbatim or with modifications and/or translated into another</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">language. (Hereinafter, translation is included without limitation in</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the term &quot;modification&quot;.) Each licensee is addressed as &quot;you&quot;.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Activities other than copying, distribution and modification are not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">covered by this License; they are outside its scope. The act of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">running the Program is not restricted, and the output from the Program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">is covered only if its contents constitute a work based on the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program (independent of having been made by running the Program).</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Whether that is true depends on what the Program does.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 1. You may copy and distribute verbatim copies of the Program's</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">source code as you receive it, in any medium, provided that you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">conspicuously and appropriately publish on each copy an appropriate</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">copyright notice and disclaimer of warranty; keep intact all the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">notices that refer to this License and to the absence of any warranty;</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">and give any other recipients of the Program a copy of this License</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">along with the Program.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You may charge a fee for the physical act of transferring a copy, and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">you may at your option offer warranty protection in exchange for a fee.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 2. You may modify your copy or copies of the Program or any portion</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of it, thus forming a work based on the Program, and copy and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute such modifications or work under the terms of Section 1</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">above, provided that you also meet all of these conditions:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a) You must cause the modified files to carry prominent notices</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> stating that you changed the files and the date of any change.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> b) You must cause any work that you distribute or publish, that in</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> whole or in part contains or is derived from the Program or any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> part thereof, to be licensed as a whole at no charge to all third</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> parties under the terms of this License.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> c) If the modified program normally reads commands interactively</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> when run, you must cause it, when started running for such</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> interactive use in the most ordinary way, to print or display an</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> announcement including an appropriate copyright notice and a</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> notice that there is no warranty (or else, saying that you provide</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a warranty) and that users may redistribute the program under</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> these conditions, and telling the user how to view a copy of this</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> License. (Exception: if the Program itself is interactive but</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> does not normally print such an announcement, your work based on</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> the Program is not required to print an announcement.)</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">These requirements apply to the modified work as a whole. If</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">identifiable sections of that work are not derived from the Program,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">and can be reasonably considered independent and separate works in</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">themselves, then this License, and its terms, do not apply to those</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">sections when you distribute them as separate works. But when you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute the same sections as part of a whole which is a work based</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">on the Program, the distribution of the whole must be on the terms of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License, whose permissions for other licensees extend to the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">entire whole, and thus to each and every part regardless of who wrote it.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Thus, it is not the intent of this section to claim rights or contest</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">your rights to work written entirely by you; rather, the intent is to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">exercise the right to control the distribution of derivative or</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">collective works based on the Program.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">In addition, mere aggregation of another work not based on the Program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">with the Program (or with a work based on the Program) on a volume of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">a storage or distribution medium does not bring the other work under</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the scope of this License.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 3. You may copy and distribute the Program (or a work based on it,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">under Section 2) in object code or executable form under the terms of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Sections 1 and 2 above provided that you also do one of the following:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a) Accompany it with the complete corresponding machine-readable</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> source code, which must be distributed under the terms of Sections</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 1 and 2 above on a medium customarily used for software interchange; or,</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> b) Accompany it with a written offer, valid for at least three</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> years, to give any third party, for a charge no more than your</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> cost of physically performing source distribution, a complete</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> machine-readable copy of the corresponding source code, to be</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> distributed under the terms of Sections 1 and 2 above on a medium</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> customarily used for software interchange; or,</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> c) Accompany it with the information you received as to the offer</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> to distribute corresponding source code. (This alternative is</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> allowed only for noncommercial distribution and only if you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> received the program in object code or executable form with such</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> an offer, in accord with Subsection b above.)</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">The source code for a work means the preferred form of the work for</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">making modifications to it. For an executable work, complete source</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">code means all the source code for all modules it contains, plus any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">associated interface definition files, plus the scripts used to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">control compilation and installation of the executable. However, as a</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">special exception, the source code distributed need not include</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">anything that is normally distributed (in either source or binary</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">form) with the major components (compiler, kernel, and so on) of the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">operating system on which the executable runs, unless that component</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">itself accompanies the executable.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If distribution of executable or object code is made by offering</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">access to copy from a designated place, then offering equivalent</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">access to copy the source code from the same place counts as</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribution of the source code, even though third parties are not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">compelled to copy the source along with the object code.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 4. You may not copy, modify, sublicense, or distribute the Program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">except as expressly provided under this License. Any attempt</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">otherwise to copy, modify, sublicense or distribute the Program is</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">void, and will automatically terminate your rights under this License.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">However, parties who have received copies, or rights, from you under</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License will not have their licenses terminated so long as such</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">parties remain in full compliance.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 5. You are not required to accept this License, since you have not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">signed it. However, nothing else grants you permission to modify or</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute the Program or its derivative works. These actions are</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">prohibited by law if you do not accept this License. Therefore, by</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">modifying or distributing the Program (or any work based on the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program), you indicate your acceptance of this License to do so, and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">all its terms and conditions for copying, distributing or modifying</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the Program or works based on it.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 6. Each time you redistribute the Program (or any work based on the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program), the recipient automatically receives a license from the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">original licensor to copy, distribute or modify the Program subject to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">these terms and conditions. You may not impose any further</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">restrictions on the recipients' exercise of the rights granted herein.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You are not responsible for enforcing compliance by third parties to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 7. If, as a consequence of a court judgment or allegation of patent</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">infringement or for any other reason (not limited to patent issues),</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">conditions are imposed on you (whether by court order, agreement or</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">otherwise) that contradict the conditions of this License, they do not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">excuse you from the conditions of this License. If you cannot</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute so as to satisfy simultaneously your obligations under this</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">License and any other pertinent obligations, then as a consequence you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">may not distribute the Program at all. For example, if a patent</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">license would not permit royalty-free redistribution of the Program by</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">all those who receive copies directly or indirectly through you, then</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the only way you could satisfy both it and this License would be to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">refrain entirely from distribution of the Program.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If any portion of this section is held invalid or unenforceable under</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">any particular circumstance, the balance of the section is intended to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">apply and the section as a whole is intended to apply in other</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">circumstances.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">It is not the purpose of this section to induce you to infringe any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patents or other property right claims or to contest validity of any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">such claims; this section has the sole purpose of protecting the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">integrity of the free software distribution system, which is</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">implemented by public license practices. Many people have made</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">generous contributions to the wide range of software distributed</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">through that system in reliance on consistent application of that</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">system; it is up to the author/donor to decide if he or she is willing</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to distribute software through any other system and a licensee cannot</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">impose that choice.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This section is intended to make thoroughly clear what is believed to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be a consequence of the rest of this License.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 8. If the distribution and/or use of the Program is restricted in</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">certain countries either by patents or by copyrighted interfaces, the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">original copyright holder who places the Program under this License</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">may add an explicit geographical distribution limitation excluding</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">those countries, so that distribution is permitted only in or among</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">countries not thus excluded. In such case, this License incorporates</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the limitation as if written in the body of this License.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 9. The Free Software Foundation may publish revised and/or new versions</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of the General Public License from time to time. Such new versions will</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be similar in spirit to the present version, but may differ in detail to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">address new problems or concerns.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Each version is given a distinguishing version number. If the Program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">specifies a version number of this License which applies to it and &quot;any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">later version&quot;, you have the option of following the terms and conditions</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">either of that version or of any later version published by the Free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Software Foundation. If the Program does not specify a version number of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License, you may choose any version ever published by the Free Software</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Foundation.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 10. If you wish to incorporate parts of the Program into other free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">programs whose distribution conditions are different, write to the author</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to ask for permission. For software which is copyrighted by the Free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Software Foundation, write to the Free Software Foundation; we sometimes</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">make exceptions for this. Our decision will be guided by the two goals</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of preserving the free status of all derivatives of our free software and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of promoting the sharing and reuse of software generally.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> NO WARRANTY</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROVIDE THE PROGRAM &quot;AS IS&quot; WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">REPAIR OR CORRECTION.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">POSSIBILITY OF SUCH DAMAGES.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> END OF TERMS AND CONDITIONS</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> How to Apply These Terms to Your New Programs</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> If you develop a new program, and you want it to be of the greatest</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">possible use to the public, the best way to achieve this is to make it</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">free software which everyone can redistribute and change under these terms.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> To do so, attach the following notices to the program. It is safest</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to attach them to the start of each source file to most effectively</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">convey the exclusion of warranty; and each file should have at least</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the &quot;copyright&quot; line and a pointer to where the full notice is found.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> &lt;one line to give the program's name and a brief idea of what it does.&gt;</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Copyright (C) 19yy &lt;name of author&gt;</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This program is free software; you can redistribute it and/or modify</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> it under the terms of the GNU General Public License as published by</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> the Free Software Foundation; either version 2 of the License, or</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> (at your option) any later version.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This program is distributed in the hope that it will be useful,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> but WITHOUT ANY WARRANTY; without even the implied warranty of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU General Public License for more details.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> You should have received a copy of the GNU General Public License</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> along with this program; if not, write to the Free Software</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Also add information on how to contact you by electronic and paper mail.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If the program is interactive, make it output a short notice like this</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">when it starts in an interactive mode:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Gnomovision version 69, Copyright (C) 19yy name of author</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This is free software, and you are welcome to redistribute it</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> under certain conditions; type `show c' for details.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">The hypothetical commands `show w' and `show c' should show the appropriate</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">parts of the General Public License. Of course, the commands you use may</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be called something other than `show w' and `show c'; they could even be</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">mouse-clicks or menu items--whatever suits your program.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You should also get your employer (if you work as a programmer) or your</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">school, if any, to sign a &quot;copyright disclaimer&quot; for the program, if</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">necessary. Here is a sample; alter the names:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Yoyodyne, Inc., hereby disclaims all copyright interest in the program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> `Gnomovision' (which makes passes at compilers) written by James Hacker.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> &lt;signature of Ty Coon&gt;, 1 April 1989</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Ty Coon, President of Vice</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This General Public License does not permit incorporating your program into</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">proprietary programs. If your program is a subroutine library, you may</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">consider it more useful to permit linking proprietary applications with the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">library. If this is what you want to do, use the GNU Library General</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Public License instead of this License.</span></p></body></html> - - AudioEngineInfoForm @@ -613,6 +268,25 @@ + ComponentMixerLine + + Mute + Muet + + + Solo + Solo + + + Component name + Nom du composant + + + Set instrument volume [%1] + Régler le volume de l'instrument [%1] + + + Director Director @@ -627,88 +301,51 @@ - DownloadWidget + DonationDialog - (%1/%2 KiB) - ETA %3 - (%1/%2 Kio) - EHA %3 + Donations + Dons - DrumkitManager_UI - - Load - Charger - - - Load drumkit - Charger kit de batterie - - - ### Drumkit author - ### Auteur du kit - - - ### Drumkit name - ### Nom du kit - - - ### Drumkit info - ### Info du kit - - - Delete drumkit - Effacer le kit - - - Save - Enregistrer - - - Author - Auteur - - - Info - Info - + DonationDialog_UI - Drumkit name - Nom du kit - - - Import - Importer + Form + Forme - Drumkit filename - Nom de fichier du kit + Donate! + Donner ! - Browse - Explorer... + Choose random entry. + Choisir au hasard - ### The drumkit will be installed zncxbmzbxcmznxbcmz - ### Le kit sera installé comme zncxbmzbxcmznxbcmz + <html><head/><body><p align="justify">Hydrogen is an open source project which is developed by multiple people in their spare time. By making a donation you can say &quot;thank you&quot; to the involved persons.</p></body></html> + <html><head/><body><p align="justify">Hydrogen est un projet à source ouverte qui est développé par plusieurs personnes sur leur temps libre. En faisant un don, vous pouvez dire &quot;merci à vous&quot; aux personnes impliquées.</p></body></html> - Export - Exporter + Sebastian Moors (aka mauser): Maintainer / Developer + Sebastian Moors (dit : mauser) : mainteneur / développeur - Drumkit directory - Répertoire du kit + Michael Wolkstein (aka wolke): Forum hosting + Michael Wolkstein (dit : wolke) : hébergement des forums + + + Download - Form1 - Form1 + Importing item failed: %1 + Échec de l'importation de l'élément : %1 + + + DownloadWidget - <b> -Download more drumkits at <br> -http://www.hydrogen-music.org -</b> - <b>Télécharger plus de kits de batterie sur le site <br>http://www.hydrogen-music.org</b> + (%1/%2 KiB) - ETA %3 + (%1/%2 Kio) - temps estimé %3 @@ -818,7 +455,7 @@ Templates: - Format: + Format : WAV in CD quality "44,1kHz, 16 bit PCM" @@ -862,19 +499,19 @@ Interpolation: - + Interpolation : Choose type of interpolation methode - + Choisir le type de méthode d'interpolation Linear - + Linéaire Cosine - + Cosinus Third @@ -882,7 +519,7 @@ Cubic - + Cubique Hermite @@ -890,18 +527,22 @@ Enable tempo changing - + Active les modifications de tempo TimeLine BPM - + Ligne de temps BPM - Enable use of rubberband batch processor - + 88200 + 88200 - Rubberbad Batch + Enable use of rubberband's batch processor + Autorise l'utilisation du traitement en lot de rubberband + + + Rubberband Batch @@ -962,7 +603,15 @@ Saving of this drumkit failed. - + La sauvegarde de ce kit de batterie a échouée + + + Open Image + Ouvrir une image + + + Image Files (*.png *.jpg *.jpeg) + Fichiers d'images (*.png *.jpg *.jpeg) @@ -973,22 +622,26 @@ Song Editor - Éditeur de morceau + Éditeur de morceau Instrument + Pattern - + Instrument + Motif Mixer - Mixage + Mixeur + + + modified + modifié InstrumentEditor Random pitch factor - Hauteur aléatoire + Hauteur de tonalité aléatoire Filter Cutoff @@ -1024,11 +677,11 @@ Layer pitch (Coarse) - Hauteur de la couche (brut) + Hauteur de tonalité de la couche (réglage grossier) Layer pitch (Fine) - Haute de la couche (fin) + Hauteur de tonalité de la couche (réglage fin) Show instrument properties @@ -1055,8 +708,32 @@ Arrêter la note actuelle avant de déclencher l'échantillon suivant. - Auto-Stop-Note - + New component name + Nom du nouveau composant + + + Component name + Nom du composant + + + Midi out channel + Canal de sortie MIDI + + + Midi out note + Note de sortie MIDI + + + Component volume + Volume du composant + + + Don't change the layers' gain based on velocity + Ne pas modifier le gain de la couche basé sur la vélocité + + + Select pattern size + Sélectionner la taille du motif @@ -1103,18 +780,34 @@ Mute instrument - + Rendre l'instrument muet Solo - Solo + Solo + + + Copy notes ... + Copier les notes... + + + Only for this pattern + Seulement pour ce motif + + + For all patterns + Pour tous les motifs + + + Paste notes ... + Coller les notes... InstrumentRack Show Instrument editor - Afficher l'éditeur d'instruments + Afficher l'éditeur d'instrument Instrument @@ -1137,7 +830,7 @@ FX bypass - Dérivation de l'effet + Court-circuiter l'effet Ladspa FX name @@ -1410,7 +1103,7 @@ Open &Demo - Ouvrir un &demo + Ouvrir une &démo Open &recent @@ -1473,10 +1166,6 @@ Pilote jack : impossible d'authentifier le client - &Project - &Projet - - &Export song &Exporter le morceau en fichier WAV... @@ -1625,36 +1314,76 @@ Undo history - + Historique d'annulation &Undo - + Annuler menu Undo - + Annuler Redo - + Refaire Input mode - + Mode d'entrée Instrument - Instrument + Instrument Drumkit - + Kit de batterie Report bug - + Rapporter un bogue + + + Export &LilyPond file + Exporter le morceau en fichier LilyPond... + + + Donate + Donner + + + +The LilyPond export is an experimental feature. +It should work like a charm provided that you use the GM-kit, and that you do not use triplet + + +L'export LilyPond est une fonctionnalité expérimentale. +Ça devrait fonctionner comme un charme tant que vous utilisez le GM-kit, et que vous n'utilisez pas de triolet + + + + LilyPond file (*.ly) + Fichier LilyPond (*.ly) + + + Export LilyPond file + Exporter un fichier LilyPond + + + +The current playlist contains unsaved changes. +Do you want to discard the changes? + + +La liste de lecture courante contient des modifications non-sauvegardées. +Voulez-vous abandonner ces changements ? + + + + Pro&ject + Pro&jet @@ -1689,10 +1418,21 @@ + MidiSenseWidget + + This element is not midi operable. + Cet élément n'est pas opérable par MIDI. + + + Waiting for midi input... + Attente d'une entrée MIDI... + + + MidiTable Event - Évènements + Événements Param. @@ -1738,7 +1478,7 @@ MixerLine Play sample - Jouer échantillon + Jouer l'échantillon Mute @@ -1785,15 +1525,15 @@ Quantize keyboard/midi events to grid - Quantifier les évenements clavier/MIDI sur la grille + Quantifier les événements clavier/MIDI sur la grille Quantize incoming keyboard/midi events = On - Quantifier les évenements clavier/MIDI entrant = Actif + Quantifier les événements clavier/MIDI entrant = Actif Select pattern size - Sélectionner la grandeur du motif + Sélectionner la longueur du motif Select grid resolution @@ -1845,7 +1585,7 @@ Quantize incoming keyboard/midi events = Off - Quantifier les évènements entrant du clavier/midi = Inactif + Quantifier les événements entrant du clavier/midi = Inactif NoteKey @@ -1961,22 +1701,22 @@ Pattern description - + Description du motif PianoRollEditor Velocity - Velocite + Vélocité Pan - Pan + Panoramique Lead and Lag - Trainee + Trainée @@ -2011,7 +1751,7 @@ Jack-transport on/off - Transport Jack on/off + Transport Jack actif/inactif Jack-transport mode = On @@ -2031,7 +1771,7 @@ Play/ Pause - Jouer/ Pause + Jouer/Pause Fast Forward @@ -2043,7 +1783,7 @@ Mixer - Mixage + Mixeur Show Instrument Rack @@ -2075,7 +1815,7 @@ BeatCounter Panel on - Panneau du compteur BPM activé + Activation du panneau du compteur BPM Set BPM / Set BPM and play @@ -2119,23 +1859,23 @@ Record midi events = On - Enregistrer les événements midi = On + Enregistrer les événements midi = actif Record midi events = Off - Enregistrer les événements midi = Off + Enregistrer les événements midi = inactif Destructive mode = Off - Mode destructif = Off + Mode destructif = inactif Destructive mode = On - Mode destructif = On + Mode destructif = actif Recalculate Rubberband modified samples if bpm will change - Recalcule l'échantillon modifié par Rubberband si le bpm change + Recalcule les échantillons modifiés par Rubberband si le BPM change Recalculate all samples using Rubberband ON @@ -2147,7 +1887,7 @@ Switch metronome on/off - + Active/désactive le métronome @@ -2326,10 +2066,6 @@ Navigateur de liste de lecture - No song selected! - Auncun morceau sélectionné! - - Playlist: set song no. %1 Liste: choisir le morceau #%1 @@ -2339,7 +2075,33 @@ &New Playlist - + Nouvelle liste de lecture + + + File not found: + Fichier non-trouvé : + + + No valid song selected! + Pas de morceau valide séléctionné ! + + + &Discard + Aband&onner + + + &Cancel + Annuler (&C) + + + +The current playlist contains unsaved changes. +Do you want to discard the changes? + + +La liste de lecture actuelle contient des modifications non-sauvegardées. +Voulez-vous abandonner ces changements ? + @@ -2417,6 +2179,30 @@ &Cancel Annuler (&C) + + Automatic + Automatique + + + Steps + Par pas + + + Fixed + Fixe + + + <b>PulseAudio Driver</b><br> + <b>Pilote PulseAudio</b><br> + + + Number of steps + Nombre de pas + + + Color (Hue value) + Couleur (valeur Hue) + PreferencesDialog_UI @@ -2477,10 +2263,6 @@ Police de la table de mixage - <i>After a font change the application must be restarted.</i> - <i>Après un changement de police, l'application doit être relancée.</i> - - Style Style @@ -2562,7 +2344,7 @@ Ignore note-off - Ignorer les fins de note + Ignorer les fins de note (note-off) 1 @@ -2694,11 +2476,11 @@ Linear - + Linéaire Cosine - + Cosinus Third @@ -2706,7 +2488,7 @@ Cubic - + Cubique Hermite @@ -2714,14 +2496,38 @@ Default interface layout - + Agencement de l'interface par défaut Single pane - + Tout-en-un Tabbed + Plusieurs onglets + + + TextLabel + Label de texte + + + Coloring method for Song Editor elements + Méthode de colorisation des éléments de l'éditeur de morceau + + + <html><head/><body><p><span style=" font-style:italic;">After changing a font or the interface layout the application must be restarted.</span></p></body></html> + <html><head/><body><p><span style=" font-style:italic;">Après avoir modifié une police ou l'agencement de l'interface, l'application doit être redémarrée.</span></p></body></html> + + + Use relative paths for playlist + Utiliser des chemins relatifs pour la liste de lecture + + + Use output note as input note + Utiliser la note de sortie en tant que note d'entrée + + + Discard midi messages after action has been triggered @@ -2776,19 +2582,19 @@ set processing - + paramètrer le traitement forward - faire suivre + faire suivre reverse - renversement + renversement pingpong - pingpong + ping-pong loops @@ -3018,7 +2824,7 @@ Crispness: - + Croustillance : Start @@ -3139,12 +2945,8 @@ Mode à un motif - not_categorized - Sans catégorie - - Enable time line edit - Active l'édition de la TimeLine + Active l'édition de la ligne de temps Pattern %1 @@ -3278,7 +3080,7 @@ Export Pattern - + Exporter le motif @@ -3335,7 +3137,7 @@ Directory - + Répertoire @@ -3345,13 +3147,41 @@ Dialogue - Browse - Explorer - - Export Exporter + + Drumkit + Kit de batterie + + + Component + Composant + + + Path + Chemin + + + Version + Version + + + Browse... + Explorer... + + + 0.9.7 and higher + 0.9.7 et supérieur + + + 0.9.6 and lower + 0.9.6 et inférieur + + + Cancel + Annuler + SoundLibraryImportDialog @@ -3369,7 +3199,7 @@ Updating SoundLibrary list... - Mise à jour de la liste de la bibliothèque de sons. + Mise à jour de la liste de la bibliothèque de sons... Installed @@ -3381,7 +3211,7 @@ Author: %1 - Auteur: %1 + Auteur : %1 Downloading SoundLibrary... @@ -3393,7 +3223,7 @@ SoundLibrary imported in %1 - La bibliothèque de sons est importés à %1 + La bibliothèque de sons a été importée dans %1 An error occurred importing the SoundLibrary. @@ -3412,8 +3242,12 @@ Motifs - License: %1 - Licence: %1 + Drumkit License: %1 + Licence du kit de batterie : %1 + + + Image License: %1 + Licence de l'image : %1 @@ -3435,10 +3269,6 @@ Nom de la bibliothèque de sons - Sound library Info - Information de la bibliothèque de sons - - Author... Auteur... @@ -3463,10 +3293,6 @@ 1 - License... - Licence... - - Edit server list Éditer la liste des serveurs @@ -3474,6 +3300,18 @@ Close Fermer + + TextLabel + Label de texte + + + Image License... + Licence de l'image... + + + Drumkit License... + Licence du kit de batterie... + SoundLibraryPanel @@ -3531,20 +3369,38 @@ It is not possible to delete the currently loaded drumkit: "%1". To delete this drumkit first load another drumkit. - + Il n'est pas possible de supprimer le kit de batterie actuellement chargé : + "%1". +Pour effacer ce kit de batterie, chargez d'abord un autre kit. + "%1"is a system drumkit and can't be deleted. - + "%1" est un kit système et ne peut pas être effacé. Warning, the "%1" drumkit will be deleted from disk. Are you sure? - + Attention, le kit "%1" va être effacé du disque. +Êtes-vous certain ? Drumkit deletion failed. - + Échec de la suppression du kit. + + + The existing kit has %1 instruments but the new one only has %2. +The first %2 instruments will be replaced with the new intruments and will keep their notes, but some of the remaining instruments have notes. +Would you like to keep or discard the remaining instruments and notes? + + Le kit existant possède %1 instruments mais le nouveau en a seulement %2. +Les %2 premiers instruments seront remplacés avec les nouveaux instruments et conserveront leurs notes, mais certains des instruments restant possèdent des notes. +Souhaitez-vous conserver ou abandonner les instruments et notes restant ? + + + + Keep + Conserver @@ -3566,10 +3422,6 @@ Information - License - Licence - - Save Enregistrer @@ -3581,6 +3433,22 @@ Save changes made to instruments into sound library Enregistrer les changements appliqués aux instruments dans la bibliothèque de sons + + Drumkit License + Licence du kit de batterie + + + Image + Image + + + Browse + Naviguer + + + Image License + Licence de l'image + SoundLibraryRepositoryDialog @@ -3623,8 +3491,20 @@ S'il vous plaît, mettez au moins un nom valide - Saving of this drumkit failed. - + A library with the same name already exists. Do you want to overwrite the existing library? + Une bibliothèque avec le même nom existe déjà. Voulez-vous la remplacer ? + + + Saving of this library failed. + La sauvegarde de cette bibliothèque a échouée + + + Open Image + Ouvrir l'image + + + Image Files (*.png *.jpg *.jpeg) + Fichiers d'images (*.png *.jpg *.jpeg) @@ -3657,6 +3537,18 @@ Save Enregistrer + + Image + Image + + + Browse + Naviguer + + + Image License + Licence de l'image + SoundLibraryTree Binary files /tmp/tmpktOUQO/kmAosGw3t1/hydrogen-0.9.6.1/data/i18n/hydrogen.gl.qm and /tmp/tmpktOUQO/ALHtWJIToj/hydrogen-0.9.7/data/i18n/hydrogen.gl.qm differ diff -Nru hydrogen-0.9.6.1/data/i18n/hydrogen.gl.ts hydrogen-0.9.7/data/i18n/hydrogen.gl.ts --- hydrogen-0.9.6.1/data/i18n/hydrogen.gl.ts 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/data/i18n/hydrogen.gl.ts 2016-11-05 08:22:50.000000000 +0000 @@ -1,6 +1,6 @@ - + AboutDialog @@ -16,12 +16,16 @@ <b>Sitio web</b><br> - <b>Mailing lists</b><br> - <b>Listas de correo</b><br> + <b>Main coder and maintainer:</b><br> + - <b>Main coder and mantainer:</b><br> - <b>Programador principal e mantedor:</b><br> + <b>Thanks to:</b> + + + + <b>Development mailing list</b><br> + @@ -54,355 +58,6 @@ &License &Licenza - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This program is distributed under the terms of the GPL v2.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU GENERAL PUBLIC LICENSE</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Version 2, June 1991</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Copyright (C) 1989, 1991 Free Software Foundation, Inc.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 675 Mass Ave, Cambridge, MA 02139, USA</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Everyone is permitted to copy and distribute verbatim copies</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> of this license document, but changing it is not allowed.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Preamble</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> The licenses for most software are designed to take away your</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">freedom to share and change it. By contrast, the GNU General Public</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">License is intended to guarantee your freedom to share and change free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">software--to make sure the software is free for all its users. This</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">General Public License applies to most of the Free Software</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Foundation's software and to any other program whose authors commit to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">using it. (Some other Free Software Foundation software is covered by</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the GNU Library General Public License instead.) You can apply it to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">your programs, too.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> When we speak of free software, we are referring to freedom, not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">price. Our General Public Licenses are designed to make sure that you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">have the freedom to distribute copies of free software (and charge for</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this service if you wish), that you receive source code or can get it</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">if you want it, that you can change the software or use pieces of it</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">in new free programs; and that you know you can do these things.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> To protect your rights, we need to make restrictions that forbid</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">anyone to deny you these rights or to ask you to surrender the rights.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">These restrictions translate to certain responsibilities for you if you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute copies of the software, or if you modify it.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> For example, if you distribute copies of such a program, whether</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">gratis or for a fee, you must give the recipients all the rights that</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">you have. You must make sure that they, too, receive or can get the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">source code. And you must show them these terms so they know their</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">rights.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> We protect your rights with two steps: (1) copyright the software, and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">(2) offer you this license which gives you legal permission to copy,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute and/or modify the software.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Also, for each author's protection and ours, we want to make certain</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that everyone understands that there is no warranty for this free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">software. If the software is modified by someone else and passed on, we</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">want its recipients to know that what they have is not the original, so</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that any problems introduced by others will not reflect on the original</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">authors' reputations.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Finally, any free program is threatened constantly by software</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patents. We wish to avoid the danger that redistributors of a free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">program will individually obtain patent licenses, in effect making the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">program proprietary. To prevent this, we have made it clear that any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patent must be licensed for everyone's free use or not licensed at all.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> The precise terms and conditions for copying, distribution and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">modification follow.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU GENERAL PUBLIC LICENSE</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 0. This License applies to any program or other work which contains</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">a notice placed by the copyright holder saying it may be distributed</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">under the terms of this General Public License. The &quot;Program&quot;, below,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">refers to any such program or work, and a &quot;work based on the Program&quot;</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">means either the Program or any derivative work under copyright law:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that is to say, a work containing the Program or a portion of it,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">either verbatim or with modifications and/or translated into another</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">language. (Hereinafter, translation is included without limitation in</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the term &quot;modification&quot;.) Each licensee is addressed as &quot;you&quot;.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Activities other than copying, distribution and modification are not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">covered by this License; they are outside its scope. The act of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">running the Program is not restricted, and the output from the Program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">is covered only if its contents constitute a work based on the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program (independent of having been made by running the Program).</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Whether that is true depends on what the Program does.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 1. You may copy and distribute verbatim copies of the Program's</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">source code as you receive it, in any medium, provided that you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">conspicuously and appropriately publish on each copy an appropriate</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">copyright notice and disclaimer of warranty; keep intact all the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">notices that refer to this License and to the absence of any warranty;</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">and give any other recipients of the Program a copy of this License</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">along with the Program.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You may charge a fee for the physical act of transferring a copy, and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">you may at your option offer warranty protection in exchange for a fee.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 2. You may modify your copy or copies of the Program or any portion</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of it, thus forming a work based on the Program, and copy and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute such modifications or work under the terms of Section 1</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">above, provided that you also meet all of these conditions:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a) You must cause the modified files to carry prominent notices</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> stating that you changed the files and the date of any change.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> b) You must cause any work that you distribute or publish, that in</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> whole or in part contains or is derived from the Program or any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> part thereof, to be licensed as a whole at no charge to all third</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> parties under the terms of this License.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> c) If the modified program normally reads commands interactively</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> when run, you must cause it, when started running for such</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> interactive use in the most ordinary way, to print or display an</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> announcement including an appropriate copyright notice and a</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> notice that there is no warranty (or else, saying that you provide</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a warranty) and that users may redistribute the program under</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> these conditions, and telling the user how to view a copy of this</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> License. (Exception: if the Program itself is interactive but</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> does not normally print such an announcement, your work based on</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> the Program is not required to print an announcement.)</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">These requirements apply to the modified work as a whole. If</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">identifiable sections of that work are not derived from the Program,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">and can be reasonably considered independent and separate works in</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">themselves, then this License, and its terms, do not apply to those</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">sections when you distribute them as separate works. But when you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute the same sections as part of a whole which is a work based</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">on the Program, the distribution of the whole must be on the terms of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License, whose permissions for other licensees extend to the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">entire whole, and thus to each and every part regardless of who wrote it.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Thus, it is not the intent of this section to claim rights or contest</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">your rights to work written entirely by you; rather, the intent is to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">exercise the right to control the distribution of derivative or</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">collective works based on the Program.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">In addition, mere aggregation of another work not based on the Program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">with the Program (or with a work based on the Program) on a volume of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">a storage or distribution medium does not bring the other work under</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the scope of this License.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 3. You may copy and distribute the Program (or a work based on it,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">under Section 2) in object code or executable form under the terms of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Sections 1 and 2 above provided that you also do one of the following:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a) Accompany it with the complete corresponding machine-readable</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> source code, which must be distributed under the terms of Sections</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 1 and 2 above on a medium customarily used for software interchange; or,</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> b) Accompany it with a written offer, valid for at least three</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> years, to give any third party, for a charge no more than your</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> cost of physically performing source distribution, a complete</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> machine-readable copy of the corresponding source code, to be</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> distributed under the terms of Sections 1 and 2 above on a medium</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> customarily used for software interchange; or,</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> c) Accompany it with the information you received as to the offer</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> to distribute corresponding source code. (This alternative is</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> allowed only for noncommercial distribution and only if you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> received the program in object code or executable form with such</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> an offer, in accord with Subsection b above.)</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">The source code for a work means the preferred form of the work for</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">making modifications to it. For an executable work, complete source</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">code means all the source code for all modules it contains, plus any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">associated interface definition files, plus the scripts used to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">control compilation and installation of the executable. However, as a</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">special exception, the source code distributed need not include</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">anything that is normally distributed (in either source or binary</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">form) with the major components (compiler, kernel, and so on) of the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">operating system on which the executable runs, unless that component</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">itself accompanies the executable.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If distribution of executable or object code is made by offering</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">access to copy from a designated place, then offering equivalent</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">access to copy the source code from the same place counts as</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribution of the source code, even though third parties are not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">compelled to copy the source along with the object code.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 4. You may not copy, modify, sublicense, or distribute the Program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">except as expressly provided under this License. Any attempt</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">otherwise to copy, modify, sublicense or distribute the Program is</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">void, and will automatically terminate your rights under this License.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">However, parties who have received copies, or rights, from you under</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License will not have their licenses terminated so long as such</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">parties remain in full compliance.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 5. You are not required to accept this License, since you have not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">signed it. However, nothing else grants you permission to modify or</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute the Program or its derivative works. These actions are</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">prohibited by law if you do not accept this License. Therefore, by</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">modifying or distributing the Program (or any work based on the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program), you indicate your acceptance of this License to do so, and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">all its terms and conditions for copying, distributing or modifying</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the Program or works based on it.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 6. Each time you redistribute the Program (or any work based on the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program), the recipient automatically receives a license from the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">original licensor to copy, distribute or modify the Program subject to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">these terms and conditions. You may not impose any further</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">restrictions on the recipients' exercise of the rights granted herein.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You are not responsible for enforcing compliance by third parties to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 7. If, as a consequence of a court judgment or allegation of patent</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">infringement or for any other reason (not limited to patent issues),</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">conditions are imposed on you (whether by court order, agreement or</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">otherwise) that contradict the conditions of this License, they do not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">excuse you from the conditions of this License. If you cannot</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute so as to satisfy simultaneously your obligations under this</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">License and any other pertinent obligations, then as a consequence you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">may not distribute the Program at all. For example, if a patent</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">license would not permit royalty-free redistribution of the Program by</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">all those who receive copies directly or indirectly through you, then</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the only way you could satisfy both it and this License would be to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">refrain entirely from distribution of the Program.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If any portion of this section is held invalid or unenforceable under</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">any particular circumstance, the balance of the section is intended to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">apply and the section as a whole is intended to apply in other</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">circumstances.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">It is not the purpose of this section to induce you to infringe any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patents or other property right claims or to contest validity of any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">such claims; this section has the sole purpose of protecting the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">integrity of the free software distribution system, which is</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">implemented by public license practices. Many people have made</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">generous contributions to the wide range of software distributed</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">through that system in reliance on consistent application of that</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">system; it is up to the author/donor to decide if he or she is willing</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to distribute software through any other system and a licensee cannot</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">impose that choice.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This section is intended to make thoroughly clear what is believed to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be a consequence of the rest of this License.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 8. If the distribution and/or use of the Program is restricted in</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">certain countries either by patents or by copyrighted interfaces, the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">original copyright holder who places the Program under this License</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">may add an explicit geographical distribution limitation excluding</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">those countries, so that distribution is permitted only in or among</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">countries not thus excluded. In such case, this License incorporates</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the limitation as if written in the body of this License.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 9. The Free Software Foundation may publish revised and/or new versions</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of the General Public License from time to time. Such new versions will</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be similar in spirit to the present version, but may differ in detail to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">address new problems or concerns.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Each version is given a distinguishing version number. If the Program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">specifies a version number of this License which applies to it and &quot;any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">later version&quot;, you have the option of following the terms and conditions</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">either of that version or of any later version published by the Free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Software Foundation. If the Program does not specify a version number of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License, you may choose any version ever published by the Free Software</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Foundation.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 10. If you wish to incorporate parts of the Program into other free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">programs whose distribution conditions are different, write to the author</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to ask for permission. For software which is copyrighted by the Free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Software Foundation, write to the Free Software Foundation; we sometimes</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">make exceptions for this. Our decision will be guided by the two goals</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of preserving the free status of all derivatives of our free software and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of promoting the sharing and reuse of software generally.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> NO WARRANTY</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROVIDE THE PROGRAM &quot;AS IS&quot; WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">REPAIR OR CORRECTION.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">POSSIBILITY OF SUCH DAMAGES.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> END OF TERMS AND CONDITIONS</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> How to Apply These Terms to Your New Programs</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> If you develop a new program, and you want it to be of the greatest</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">possible use to the public, the best way to achieve this is to make it</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">free software which everyone can redistribute and change under these terms.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> To do so, attach the following notices to the program. It is safest</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to attach them to the start of each source file to most effectively</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">convey the exclusion of warranty; and each file should have at least</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the &quot;copyright&quot; line and a pointer to where the full notice is found.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> &lt;one line to give the program's name and a brief idea of what it does.&gt;</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Copyright (C) 19yy &lt;name of author&gt;</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This program is free software; you can redistribute it and/or modify</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> it under the terms of the GNU General Public License as published by</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> the Free Software Foundation; either version 2 of the License, or</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> (at your option) any later version.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This program is distributed in the hope that it will be useful,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> but WITHOUT ANY WARRANTY; without even the implied warranty of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU General Public License for more details.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> You should have received a copy of the GNU General Public License</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> along with this program; if not, write to the Free Software</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Also add information on how to contact you by electronic and paper mail.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If the program is interactive, make it output a short notice like this</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">when it starts in an interactive mode:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Gnomovision version 69, Copyright (C) 19yy name of author</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This is free software, and you are welcome to redistribute it</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> under certain conditions; type `show c' for details.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">The hypothetical commands `show w' and `show c' should show the appropriate</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">parts of the General Public License. Of course, the commands you use may</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be called something other than `show w' and `show c'; they could even be</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">mouse-clicks or menu items--whatever suits your program.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You should also get your employer (if you work as a programmer) or your</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">school, if any, to sign a &quot;copyright disclaimer&quot; for the program, if</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">necessary. Here is a sample; alter the names:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Yoyodyne, Inc., hereby disclaims all copyright interest in the program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> `Gnomovision' (which makes passes at compilers) written by James Hacker.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> &lt;signature of Ty Coon&gt;, 1 April 1989</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Ty Coon, President of Vice</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This General Public License does not permit incorporating your program into</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">proprietary programs. If your program is a subroutine library, you may</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">consider it more useful to permit linking proprietary applications with the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">library. If this is what you want to do, use the GNU Library General</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Public License instead of this License.</span></p></body></html> - - AudioEngineInfoForm @@ -613,6 +268,25 @@ + ComponentMixerLine + + Mute + Silencio + + + Solo + Solo + + + Component name + + + + Set instrument volume [%1] + Estabelecer o volume do instrumento [%1] + + + Director Director @@ -627,91 +301,51 @@ - DownloadWidget + DonationDialog - (%1/%2 KiB) - ETA %3 - (%1/%2 KiB) - transcorrido %3 + Donations + - DrumkitManager_UI + DonationDialog_UI - Load - Cargar - - - Load drumkit - Cargar batería - - - ### Drumkit author - ### Autor da batería - - - ### Drumkit name - ### Nome da batería - - - ### Drumkit info - ### Información da batería - - - Delete drumkit - Eliminar batería - - - Save - Gardar - - - Author - Autor - - - Info - Información - - - Drumkit name - Nome da batería - - - Import - Importar + Form + Forma - Drumkit filename - Nome de ficheiro da batería + Donate! + - Browse - Examinar + Choose random entry. + - ### The drumkit will be installed zncxbmzbxcmznxbcmz - ### A batería vai seren instalada zncxbmzbxcmznxbcmz + <html><head/><body><p align="justify">Hydrogen is an open source project which is developed by multiple people in their spare time. By making a donation you can say &quot;thank you&quot; to the involved persons.</p></body></html> + - Export - Exportar + Sebastian Moors (aka mauser): Maintainer / Developer + - Drumkit directory - Directorio de baterías + Michael Wolkstein (aka wolke): Forum hosting + + + + Download - Form1 - Forma1 + Importing item failed: %1 + + + + DownloadWidget - <b> -Download more drumkits at <br> -http://www.hydrogen-music.org -</b> - <b> -Descargue máis xogos de batería en <br> -http://www.hydrogen-music.org -</b> + (%1/%2 KiB) - ETA %3 + (%1/%2 KiB) - transcorrido %3 @@ -905,6 +539,10 @@ Rubberband Batch + + 88200 + 88200 + FileBrowser @@ -966,6 +604,14 @@ Saving of this drumkit failed. Non foi posíbel gardar esta batería. + + Open Image + + + + Image Files (*.png *.jpg *.jpeg) + + HydrogenApp @@ -985,6 +631,10 @@ Mixer Misturador + + modified + + InstrumentEditor @@ -1053,13 +703,37 @@ Capas - Auto-Stop-Note - Nota de parada automática - - Stop the current playing instrument-note before trigger the next note sample. Deteña a nota do instrumento actual antes de disparar a seguinte nota da mostra. + + New component name + + + + Component name + + + + Midi out channel + + + + Midi out note + + + + Component volume + + + + Don't change the layers' gain based on velocity + + + + Select pattern size + Seleccionar o tamaño do patrón + InstrumentLine @@ -1491,10 +1165,6 @@ Controlador Jack: produciuse un erro no rexistro do porto - &Project - &Proxecto - - &Export song &Exportar canción @@ -1631,6 +1301,7 @@ &Undo &Desfacer + menu Undo @@ -1674,6 +1345,40 @@ Don't show this message anymore Non volver amosar esta mensaxe + + Export &LilyPond file + + + + Donate + + + + +The LilyPond export is an experimental feature. +It should work like a charm provided that you use the GM-kit, and that you do not use triplet + + + + + LilyPond file (*.ly) + + + + Export LilyPond file + + + + +The current playlist contains unsaved changes. +Do you want to discard the changes? + + + + + Pro&ject + + MasterMixerLine @@ -1707,6 +1412,17 @@ + MidiSenseWidget + + This element is not midi operable. + + + + Waiting for midi input... + + + + MidiTable Event @@ -2362,6 +2078,21 @@ Playlist: set song no. %1 Lista de reprodución: estabelecer a canción num. %1 + + +The current playlist contains unsaved changes. +Do you want to discard the changes? + + + + + &Discard + &Desbotar + + + &Cancel + + PlaylistDialog_UI @@ -2442,6 +2173,26 @@ <b>PulseAudio Driver</b><br> <b>Controlador PulseAudio </b><br> + + Automatic + + + + Steps + + + + Fixed + + + + Number of steps + + + + Color (Hue value) + + PreferencesDialog_UI @@ -2502,10 +2253,6 @@ Tipo de letra para o mesturador - <i>After a font change the application must be restarted.</i> - <i>Reiniciar o aplicativo para usar o nuevo tipo de letra.</i> - - Style Estilo @@ -2749,6 +2496,30 @@ Tabbed En páxinas + + TextLabel + + + + Coloring method for Song Editor elements + + + + <html><head/><body><p><span style=" font-style:italic;">After changing a font or the interface layout the application must be restarted.</span></p></body></html> + + + + Use relative paths for playlist + + + + Use output note as input note + + + + Discard midi messages after action has been triggered + + SampleEditor @@ -3174,10 +2945,6 @@ modo de patrón único - not_categorized - sen categoría - - Pattern %1 Patrón %1 @@ -3381,13 +3148,41 @@ Diálogo - Browse - Examinar - - Export Exportar + + Drumkit + Batería + + + Component + + + + Path + + + + Version + + + + Browse... + Examinar... + + + 0.9.7 and higher + + + + 0.9.6 and lower + + + + Cancel + Cancelar + SoundLibraryImportDialog @@ -3448,8 +3243,12 @@ Patróns - License: %1 - Licenza: %1 + Drumkit License: %1 + + + + Image License: %1 + @@ -3471,10 +3270,6 @@ Nome da biblioteca de son - Sound library Info - Información da biblioteca de son - - Author... Autor... @@ -3499,10 +3294,6 @@ 1 - License... - Licenza... - - Edit server list Editar a lista de servidores @@ -3510,6 +3301,18 @@ Close Pechar + + TextLabel + + + + Image License... + + + + Drumkit License... + + SoundLibraryPanel @@ -3585,6 +3388,17 @@ Drumkit deletion failed. Non foi posíbel eliminar a batería. + + The existing kit has %1 instruments but the new one only has %2. +The first %2 instruments will be replaced with the new intruments and will keep their notes, but some of the remaining instruments have notes. +Would you like to keep or discard the remaining instruments and notes? + + + + + Keep + + SoundLibraryPropertiesDialog_UI @@ -3605,10 +3419,6 @@ Información - License - Licenza - - Save Gardar @@ -3620,6 +3430,22 @@ Save changes made to instruments into sound library Gardar os cambios feitos aos instrumentos na biblioteca de son + + Drumkit License + + + + Image + + + + Browse + Examinar + + + Image License + + SoundLibraryRepositoryDialog @@ -3662,8 +3488,20 @@ Forneza polo menos un nome correcto - Saving of this drumkit failed. - Non foi posíbel gardar esta batería. + A library with the same name already exists. Do you want to overwrite the existing library? + + + + Saving of this library failed. + + + + Open Image + + + + Image Files (*.png *.jpg *.jpeg) + @@ -3696,6 +3534,18 @@ Save Gardar + + Image + + + + Browse + Examinar + + + Image License + + SoundLibraryTree Binary files /tmp/tmpktOUQO/kmAosGw3t1/hydrogen-0.9.6.1/data/i18n/hydrogen.hr.qm and /tmp/tmpktOUQO/ALHtWJIToj/hydrogen-0.9.7/data/i18n/hydrogen.hr.qm differ diff -Nru hydrogen-0.9.6.1/data/i18n/hydrogen.hr.ts hydrogen-0.9.7/data/i18n/hydrogen.hr.ts --- hydrogen-0.9.6.1/data/i18n/hydrogen.hr.ts 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/data/i18n/hydrogen.hr.ts 2016-11-05 08:22:50.000000000 +0000 @@ -1,6 +1,6 @@ - + AboutDialog @@ -12,16 +12,20 @@ O Programu - <b>Main coder and mantainer:</b><br> - <b>Glavni programer i održavatelj:</b><br> - - <b>Website</b><br> <b>Web stranica</b><br> - <b>Mailing lists</b><br> - <b>Mailing lista</b><br> + <b>Main coder and maintainer:</b><br> + + + + <b>Thanks to:</b> + + + + <b>Development mailing list</b><br> + @@ -54,355 +58,6 @@ ### - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This program is distributed under the terms of the GPL v2.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU GENERAL PUBLIC LICENSE</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Version 2, June 1991</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Copyright (C) 1989, 1991 Free Software Foundation, Inc.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 675 Mass Ave, Cambridge, MA 02139, USA</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Everyone is permitted to copy and distribute verbatim copies</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> of this license document, but changing it is not allowed.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Preamble</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> The licenses for most software are designed to take away your</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">freedom to share and change it. By contrast, the GNU General Public</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">License is intended to guarantee your freedom to share and change free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">software--to make sure the software is free for all its users. This</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">General Public License applies to most of the Free Software</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Foundation's software and to any other program whose authors commit to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">using it. (Some other Free Software Foundation software is covered by</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the GNU Library General Public License instead.) You can apply it to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">your programs, too.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> When we speak of free software, we are referring to freedom, not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">price. Our General Public Licenses are designed to make sure that you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">have the freedom to distribute copies of free software (and charge for</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this service if you wish), that you receive source code or can get it</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">if you want it, that you can change the software or use pieces of it</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">in new free programs; and that you know you can do these things.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> To protect your rights, we need to make restrictions that forbid</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">anyone to deny you these rights or to ask you to surrender the rights.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">These restrictions translate to certain responsibilities for you if you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute copies of the software, or if you modify it.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> For example, if you distribute copies of such a program, whether</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">gratis or for a fee, you must give the recipients all the rights that</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">you have. You must make sure that they, too, receive or can get the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">source code. And you must show them these terms so they know their</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">rights.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> We protect your rights with two steps: (1) copyright the software, and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">(2) offer you this license which gives you legal permission to copy,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute and/or modify the software.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Also, for each author's protection and ours, we want to make certain</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that everyone understands that there is no warranty for this free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">software. If the software is modified by someone else and passed on, we</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">want its recipients to know that what they have is not the original, so</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that any problems introduced by others will not reflect on the original</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">authors' reputations.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Finally, any free program is threatened constantly by software</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patents. We wish to avoid the danger that redistributors of a free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">program will individually obtain patent licenses, in effect making the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">program proprietary. To prevent this, we have made it clear that any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patent must be licensed for everyone's free use or not licensed at all.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> The precise terms and conditions for copying, distribution and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">modification follow.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU GENERAL PUBLIC LICENSE</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 0. This License applies to any program or other work which contains</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">a notice placed by the copyright holder saying it may be distributed</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">under the terms of this General Public License. The &quot;Program&quot;, below,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">refers to any such program or work, and a &quot;work based on the Program&quot;</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">means either the Program or any derivative work under copyright law:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that is to say, a work containing the Program or a portion of it,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">either verbatim or with modifications and/or translated into another</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">language. (Hereinafter, translation is included without limitation in</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the term &quot;modification&quot;.) Each licensee is addressed as &quot;you&quot;.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Activities other than copying, distribution and modification are not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">covered by this License; they are outside its scope. The act of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">running the Program is not restricted, and the output from the Program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">is covered only if its contents constitute a work based on the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program (independent of having been made by running the Program).</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Whether that is true depends on what the Program does.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 1. You may copy and distribute verbatim copies of the Program's</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">source code as you receive it, in any medium, provided that you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">conspicuously and appropriately publish on each copy an appropriate</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">copyright notice and disclaimer of warranty; keep intact all the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">notices that refer to this License and to the absence of any warranty;</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">and give any other recipients of the Program a copy of this License</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">along with the Program.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You may charge a fee for the physical act of transferring a copy, and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">you may at your option offer warranty protection in exchange for a fee.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 2. You may modify your copy or copies of the Program or any portion</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of it, thus forming a work based on the Program, and copy and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute such modifications or work under the terms of Section 1</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">above, provided that you also meet all of these conditions:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a) You must cause the modified files to carry prominent notices</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> stating that you changed the files and the date of any change.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> b) You must cause any work that you distribute or publish, that in</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> whole or in part contains or is derived from the Program or any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> part thereof, to be licensed as a whole at no charge to all third</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> parties under the terms of this License.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> c) If the modified program normally reads commands interactively</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> when run, you must cause it, when started running for such</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> interactive use in the most ordinary way, to print or display an</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> announcement including an appropriate copyright notice and a</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> notice that there is no warranty (or else, saying that you provide</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a warranty) and that users may redistribute the program under</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> these conditions, and telling the user how to view a copy of this</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> License. (Exception: if the Program itself is interactive but</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> does not normally print such an announcement, your work based on</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> the Program is not required to print an announcement.)</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">These requirements apply to the modified work as a whole. If</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">identifiable sections of that work are not derived from the Program,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">and can be reasonably considered independent and separate works in</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">themselves, then this License, and its terms, do not apply to those</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">sections when you distribute them as separate works. But when you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute the same sections as part of a whole which is a work based</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">on the Program, the distribution of the whole must be on the terms of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License, whose permissions for other licensees extend to the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">entire whole, and thus to each and every part regardless of who wrote it.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Thus, it is not the intent of this section to claim rights or contest</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">your rights to work written entirely by you; rather, the intent is to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">exercise the right to control the distribution of derivative or</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">collective works based on the Program.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">In addition, mere aggregation of another work not based on the Program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">with the Program (or with a work based on the Program) on a volume of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">a storage or distribution medium does not bring the other work under</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the scope of this License.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 3. You may copy and distribute the Program (or a work based on it,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">under Section 2) in object code or executable form under the terms of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Sections 1 and 2 above provided that you also do one of the following:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a) Accompany it with the complete corresponding machine-readable</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> source code, which must be distributed under the terms of Sections</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 1 and 2 above on a medium customarily used for software interchange; or,</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> b) Accompany it with a written offer, valid for at least three</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> years, to give any third party, for a charge no more than your</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> cost of physically performing source distribution, a complete</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> machine-readable copy of the corresponding source code, to be</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> distributed under the terms of Sections 1 and 2 above on a medium</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> customarily used for software interchange; or,</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> c) Accompany it with the information you received as to the offer</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> to distribute corresponding source code. (This alternative is</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> allowed only for noncommercial distribution and only if you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> received the program in object code or executable form with such</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> an offer, in accord with Subsection b above.)</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">The source code for a work means the preferred form of the work for</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">making modifications to it. For an executable work, complete source</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">code means all the source code for all modules it contains, plus any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">associated interface definition files, plus the scripts used to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">control compilation and installation of the executable. However, as a</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">special exception, the source code distributed need not include</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">anything that is normally distributed (in either source or binary</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">form) with the major components (compiler, kernel, and so on) of the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">operating system on which the executable runs, unless that component</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">itself accompanies the executable.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If distribution of executable or object code is made by offering</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">access to copy from a designated place, then offering equivalent</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">access to copy the source code from the same place counts as</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribution of the source code, even though third parties are not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">compelled to copy the source along with the object code.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 4. You may not copy, modify, sublicense, or distribute the Program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">except as expressly provided under this License. Any attempt</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">otherwise to copy, modify, sublicense or distribute the Program is</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">void, and will automatically terminate your rights under this License.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">However, parties who have received copies, or rights, from you under</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License will not have their licenses terminated so long as such</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">parties remain in full compliance.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 5. You are not required to accept this License, since you have not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">signed it. However, nothing else grants you permission to modify or</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute the Program or its derivative works. These actions are</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">prohibited by law if you do not accept this License. Therefore, by</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">modifying or distributing the Program (or any work based on the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program), you indicate your acceptance of this License to do so, and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">all its terms and conditions for copying, distributing or modifying</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the Program or works based on it.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 6. Each time you redistribute the Program (or any work based on the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program), the recipient automatically receives a license from the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">original licensor to copy, distribute or modify the Program subject to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">these terms and conditions. You may not impose any further</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">restrictions on the recipients' exercise of the rights granted herein.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You are not responsible for enforcing compliance by third parties to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 7. If, as a consequence of a court judgment or allegation of patent</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">infringement or for any other reason (not limited to patent issues),</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">conditions are imposed on you (whether by court order, agreement or</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">otherwise) that contradict the conditions of this License, they do not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">excuse you from the conditions of this License. If you cannot</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute so as to satisfy simultaneously your obligations under this</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">License and any other pertinent obligations, then as a consequence you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">may not distribute the Program at all. For example, if a patent</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">license would not permit royalty-free redistribution of the Program by</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">all those who receive copies directly or indirectly through you, then</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the only way you could satisfy both it and this License would be to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">refrain entirely from distribution of the Program.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If any portion of this section is held invalid or unenforceable under</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">any particular circumstance, the balance of the section is intended to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">apply and the section as a whole is intended to apply in other</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">circumstances.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">It is not the purpose of this section to induce you to infringe any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patents or other property right claims or to contest validity of any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">such claims; this section has the sole purpose of protecting the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">integrity of the free software distribution system, which is</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">implemented by public license practices. Many people have made</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">generous contributions to the wide range of software distributed</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">through that system in reliance on consistent application of that</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">system; it is up to the author/donor to decide if he or she is willing</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to distribute software through any other system and a licensee cannot</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">impose that choice.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This section is intended to make thoroughly clear what is believed to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be a consequence of the rest of this License.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 8. If the distribution and/or use of the Program is restricted in</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">certain countries either by patents or by copyrighted interfaces, the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">original copyright holder who places the Program under this License</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">may add an explicit geographical distribution limitation excluding</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">those countries, so that distribution is permitted only in or among</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">countries not thus excluded. In such case, this License incorporates</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the limitation as if written in the body of this License.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 9. The Free Software Foundation may publish revised and/or new versions</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of the General Public License from time to time. Such new versions will</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be similar in spirit to the present version, but may differ in detail to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">address new problems or concerns.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Each version is given a distinguishing version number. If the Program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">specifies a version number of this License which applies to it and &quot;any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">later version&quot;, you have the option of following the terms and conditions</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">either of that version or of any later version published by the Free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Software Foundation. If the Program does not specify a version number of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License, you may choose any version ever published by the Free Software</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Foundation.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 10. If you wish to incorporate parts of the Program into other free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">programs whose distribution conditions are different, write to the author</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to ask for permission. For software which is copyrighted by the Free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Software Foundation, write to the Free Software Foundation; we sometimes</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">make exceptions for this. Our decision will be guided by the two goals</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of preserving the free status of all derivatives of our free software and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of promoting the sharing and reuse of software generally.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> NO WARRANTY</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROVIDE THE PROGRAM &quot;AS IS&quot; WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">REPAIR OR CORRECTION.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">POSSIBILITY OF SUCH DAMAGES.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> END OF TERMS AND CONDITIONS</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> How to Apply These Terms to Your New Programs</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> If you develop a new program, and you want it to be of the greatest</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">possible use to the public, the best way to achieve this is to make it</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">free software which everyone can redistribute and change under these terms.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> To do so, attach the following notices to the program. It is safest</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to attach them to the start of each source file to most effectively</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">convey the exclusion of warranty; and each file should have at least</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the &quot;copyright&quot; line and a pointer to where the full notice is found.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> &lt;one line to give the program's name and a brief idea of what it does.&gt;</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Copyright (C) 19yy &lt;name of author&gt;</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This program is free software; you can redistribute it and/or modify</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> it under the terms of the GNU General Public License as published by</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> the Free Software Foundation; either version 2 of the License, or</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> (at your option) any later version.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This program is distributed in the hope that it will be useful,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> but WITHOUT ANY WARRANTY; without even the implied warranty of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU General Public License for more details.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> You should have received a copy of the GNU General Public License</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> along with this program; if not, write to the Free Software</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Also add information on how to contact you by electronic and paper mail.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If the program is interactive, make it output a short notice like this</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">when it starts in an interactive mode:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Gnomovision version 69, Copyright (C) 19yy name of author</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This is free software, and you are welcome to redistribute it</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> under certain conditions; type `show c' for details.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">The hypothetical commands `show w' and `show c' should show the appropriate</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">parts of the General Public License. Of course, the commands you use may</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be called something other than `show w' and `show c'; they could even be</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">mouse-clicks or menu items--whatever suits your program.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You should also get your employer (if you work as a programmer) or your</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">school, if any, to sign a &quot;copyright disclaimer&quot; for the program, if</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">necessary. Here is a sample; alter the names:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Yoyodyne, Inc., hereby disclaims all copyright interest in the program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> `Gnomovision' (which makes passes at compilers) written by James Hacker.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> &lt;signature of Ty Coon&gt;, 1 April 1989</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Ty Coon, President of Vice</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This General Public License does not permit incorporating your program into</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">proprietary programs. If your program is a subroutine library, you may</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">consider it more useful to permit linking proprietary applications with the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">library. If this is what you want to do, use the GNU Library General</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Public License instead of this License.</span></p></body></html> - - AudioEngineInfoForm @@ -613,6 +268,25 @@ + ComponentMixerLine + + Mute + Escludi + + + Solo + Solo + + + Component name + + + + Set instrument volume [%1] + Volume strumento [%1] + + + Director Director @@ -627,91 +301,51 @@ - DownloadWidget + DonationDialog - (%1/%2 KiB) - ETA %3 + Donations - DrumkitManager_UI - - Form1 - - - - Load - Podigni - + DonationDialog_UI - ### Drumkit author - ### Autor seta bubnjeva - - - Delete drumkit - Izbriši set bubnjeva - - - ### Drumkit name - ### Ime seta bubnjeva - - - ### Drumkit info - ### Informacije o setu bubnjeva - - - Load drumkit - Podigni set bubnjeva - - - Save - Spremi - - - Author - Autor - - - Info - Informacije - - - Drumkit name - Ime seta bubnjeva + Form + - Import - Umetni + Donate! + - Drumkit filename - Ime seta bubnjeva + Choose random entry. + - Browse - Pretraži + <html><head/><body><p align="justify">Hydrogen is an open source project which is developed by multiple people in their spare time. By making a donation you can say &quot;thank you&quot; to the involved persons.</p></body></html> + - <b> -Download more drumkits at <br> -http://www.hydrogen-music.org -</b> - <b> -Skini druge raspoložive setove bubnjeva na<br> -http://www.hydrogen-music.org -</b> + Sebastian Moors (aka mauser): Maintainer / Developer + - ### The drumkit will be installed zncxbmzbxcmznxbcmz - ### Set bubnjeva će biti instaliran + Michael Wolkstein (aka wolke): Forum hosting + + + + Download - Export - Izbaci + Importing item failed: %1 + + + + DownloadWidget - Drumkit directory - Mjesto (na disku) seta bubnjeva + (%1/%2 KiB) - ETA %3 + @@ -897,11 +531,15 @@ - Enable use of rubberband batch processor + 88200 + 88200 + + + Enable use of rubberband's batch processor - Rubberbad Batch + Rubberband Batch @@ -965,6 +603,14 @@ Saving of this drumkit failed. + + Open Image + + + + Image Files (*.png *.jpg *.jpeg) + + HydrogenApp @@ -984,6 +630,10 @@ Mixer Mixer + + modified + + InstrumentEditor @@ -1056,9 +706,33 @@ - Auto-Stop-Note + New component name + + + + Component name + + Midi out channel + + + + Midi out note + + + + Component volume + + + + Don't change the layers' gain based on velocity + + + + Select pattern size + Izaberi veličinu uzorka + InstrumentLine @@ -1110,6 +784,22 @@ Solo Solo + + Copy notes ... + + + + Only for this pattern + + + + For all patterns + + + + Paste notes ... + + InstrumentRack @@ -1329,11 +1019,8 @@ LayerPreview - Layer %1: Min. velocity = %2, Max. velocity = %3 - - - - Velocity = %1 + Dec. = %1 +MIDI = %2 @@ -1467,10 +1154,6 @@ &Debugiraj - &Project - &Projekt - - &Tools &Alati @@ -1632,6 +1315,40 @@ Report bug + + Export &LilyPond file + + + + Donate + + + + +The LilyPond export is an experimental feature. +It should work like a charm provided that you use the GM-kit, and that you do not use triplet + + + + + LilyPond file (*.ly) + + + + Export LilyPond file + + + + +The current playlist contains unsaved changes. +Do you want to discard the changes? + + + + + Pro&ject + + MasterMixerLine @@ -1665,6 +1382,17 @@ + MidiSenseWidget + + This element is not midi operable. + + + + Waiting for midi input... + + + + MidiTable press button to record midi event @@ -2301,10 +2029,6 @@ - No song selected! - - - Playlist: set song no. %1 @@ -2316,6 +2040,29 @@ &New Playlist + + File not found: + + + + No valid song selected! + + + + +The current playlist contains unsaved changes. +Do you want to discard the changes? + + + + + &Discard + Odbaci promje&ne + + + &Cancel + + PlaylistDialog_UI @@ -2391,6 +2138,30 @@ Please restart hydrogen to enable/disable LASH support Restartaj hydrogen kako bi se uključila/isključila LASH podrška + + Automatic + + + + Steps + + + + Fixed + + + + <b>PulseAudio Driver</b><br> + + + + Number of steps + + + + Color (Hue value) + + PreferencesDialog_UI @@ -2443,10 +2214,6 @@ Odaberi font - <i>After a font change the application must be restarted.</i> - <i>Nakon promjene fonta aplikacija mora biti restartana.</i> - - Polyphony Polifonija @@ -2698,6 +2465,30 @@ Tabbed + + TextLabel + + + + Coloring method for Song Editor elements + + + + <html><head/><body><p><span style=" font-style:italic;">After changing a font or the interface layout the application must be restarted.</span></p></body></html> + + + + Use relative paths for playlist + + + + Use output note as input note + + + + Discard midi messages after action has been triggered + + SampleEditor @@ -3105,10 +2896,6 @@ single pattern mode Pojedinačni Mod uzoraka - - not_categorized - Nije kategorizirano - SongEditorPanelBpmWidget_UI @@ -3304,13 +3091,41 @@ - Browse - Pretražuj - - Export Izbaci + + Drumkit + + + + Component + + + + Path + + + + Version + + + + Browse... + Pretražuj... + + + 0.9.7 and higher + + + + 0.9.6 and lower + + + + Cancel + + SoundLibraryImportDialog @@ -3371,8 +3186,12 @@ Uzorci - License: %1 - Licenca: %1 + Drumkit License: %1 + + + + Image License: %1 + @@ -3394,10 +3213,6 @@ Ime zvučne knjižnice - Sound library Info - Informacije o zvučnoj knjižnici - - Author... Autor... @@ -3422,10 +3237,6 @@ 1 - License... - Licenca... - - Edit server list Uredi server listu @@ -3433,6 +3244,18 @@ Close Zatvori + + TextLabel + + + + Image License... + + + + Drumkit License... + + SoundLibraryPanel @@ -3505,6 +3328,17 @@ Drumkit deletion failed. + + The existing kit has %1 instruments but the new one only has %2. +The first %2 instruments will be replaced with the new intruments and will keep their notes, but some of the remaining instruments have notes. +Would you like to keep or discard the remaining instruments and notes? + + + + + Keep + + SoundLibraryPropertiesDialog_UI @@ -3525,10 +3359,6 @@ Informacije - License - Licenca - - Save Spremi @@ -3540,6 +3370,22 @@ Save changes made to instruments into sound library Spremi promjene napravljene na instrumentima u zvučnoj knjižnici + + Drumkit License + + + + Image + + + + Browse + Pretraži + + + Image License + + SoundLibraryRepositoryDialog @@ -3582,7 +3428,19 @@ - Saving of this drumkit failed. + A library with the same name already exists. Do you want to overwrite the existing library? + + + + Saving of this library failed. + + + + Open Image + + + + Image Files (*.png *.jpg *.jpeg) @@ -3616,6 +3474,18 @@ Save Spremi + + Image + + + + Browse + Pretraži + + + Image License + + SoundLibraryTree Binary files /tmp/tmpktOUQO/kmAosGw3t1/hydrogen-0.9.6.1/data/i18n/hydrogen.hu_HU.qm and /tmp/tmpktOUQO/ALHtWJIToj/hydrogen-0.9.7/data/i18n/hydrogen.hu_HU.qm differ diff -Nru hydrogen-0.9.6.1/data/i18n/hydrogen.hu_HU.ts hydrogen-0.9.7/data/i18n/hydrogen.hu_HU.ts --- hydrogen-0.9.6.1/data/i18n/hydrogen.hu_HU.ts 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/data/i18n/hydrogen.hu_HU.ts 2016-11-05 08:22:50.000000000 +0000 @@ -1,6 +1,6 @@ - + AboutDialog @@ -16,11 +16,15 @@ - <b>Mailing lists</b><br> + <b>Main coder and maintainer:</b><br> - <b>Main coder and mantainer:</b><br> + <b>Thanks to:</b> + + + + <b>Development mailing list</b><br> @@ -54,355 +58,6 @@ &License - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This program is distributed under the terms of the GPL v2.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU GENERAL PUBLIC LICENSE</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Version 2, June 1991</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Copyright (C) 1989, 1991 Free Software Foundation, Inc.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 675 Mass Ave, Cambridge, MA 02139, USA</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Everyone is permitted to copy and distribute verbatim copies</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> of this license document, but changing it is not allowed.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Preamble</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> The licenses for most software are designed to take away your</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">freedom to share and change it. By contrast, the GNU General Public</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">License is intended to guarantee your freedom to share and change free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">software--to make sure the software is free for all its users. This</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">General Public License applies to most of the Free Software</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Foundation's software and to any other program whose authors commit to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">using it. (Some other Free Software Foundation software is covered by</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the GNU Library General Public License instead.) You can apply it to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">your programs, too.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> When we speak of free software, we are referring to freedom, not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">price. Our General Public Licenses are designed to make sure that you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">have the freedom to distribute copies of free software (and charge for</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this service if you wish), that you receive source code or can get it</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">if you want it, that you can change the software or use pieces of it</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">in new free programs; and that you know you can do these things.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> To protect your rights, we need to make restrictions that forbid</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">anyone to deny you these rights or to ask you to surrender the rights.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">These restrictions translate to certain responsibilities for you if you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute copies of the software, or if you modify it.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> For example, if you distribute copies of such a program, whether</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">gratis or for a fee, you must give the recipients all the rights that</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">you have. You must make sure that they, too, receive or can get the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">source code. And you must show them these terms so they know their</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">rights.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> We protect your rights with two steps: (1) copyright the software, and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">(2) offer you this license which gives you legal permission to copy,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute and/or modify the software.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Also, for each author's protection and ours, we want to make certain</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that everyone understands that there is no warranty for this free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">software. If the software is modified by someone else and passed on, we</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">want its recipients to know that what they have is not the original, so</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that any problems introduced by others will not reflect on the original</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">authors' reputations.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Finally, any free program is threatened constantly by software</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patents. We wish to avoid the danger that redistributors of a free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">program will individually obtain patent licenses, in effect making the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">program proprietary. To prevent this, we have made it clear that any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patent must be licensed for everyone's free use or not licensed at all.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> The precise terms and conditions for copying, distribution and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">modification follow.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU GENERAL PUBLIC LICENSE</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 0. This License applies to any program or other work which contains</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">a notice placed by the copyright holder saying it may be distributed</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">under the terms of this General Public License. The &quot;Program&quot;, below,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">refers to any such program or work, and a &quot;work based on the Program&quot;</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">means either the Program or any derivative work under copyright law:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that is to say, a work containing the Program or a portion of it,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">either verbatim or with modifications and/or translated into another</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">language. (Hereinafter, translation is included without limitation in</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the term &quot;modification&quot;.) Each licensee is addressed as &quot;you&quot;.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Activities other than copying, distribution and modification are not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">covered by this License; they are outside its scope. The act of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">running the Program is not restricted, and the output from the Program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">is covered only if its contents constitute a work based on the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program (independent of having been made by running the Program).</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Whether that is true depends on what the Program does.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 1. You may copy and distribute verbatim copies of the Program's</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">source code as you receive it, in any medium, provided that you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">conspicuously and appropriately publish on each copy an appropriate</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">copyright notice and disclaimer of warranty; keep intact all the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">notices that refer to this License and to the absence of any warranty;</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">and give any other recipients of the Program a copy of this License</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">along with the Program.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You may charge a fee for the physical act of transferring a copy, and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">you may at your option offer warranty protection in exchange for a fee.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 2. You may modify your copy or copies of the Program or any portion</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of it, thus forming a work based on the Program, and copy and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute such modifications or work under the terms of Section 1</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">above, provided that you also meet all of these conditions:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a) You must cause the modified files to carry prominent notices</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> stating that you changed the files and the date of any change.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> b) You must cause any work that you distribute or publish, that in</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> whole or in part contains or is derived from the Program or any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> part thereof, to be licensed as a whole at no charge to all third</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> parties under the terms of this License.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> c) If the modified program normally reads commands interactively</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> when run, you must cause it, when started running for such</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> interactive use in the most ordinary way, to print or display an</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> announcement including an appropriate copyright notice and a</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> notice that there is no warranty (or else, saying that you provide</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a warranty) and that users may redistribute the program under</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> these conditions, and telling the user how to view a copy of this</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> License. (Exception: if the Program itself is interactive but</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> does not normally print such an announcement, your work based on</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> the Program is not required to print an announcement.)</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">These requirements apply to the modified work as a whole. If</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">identifiable sections of that work are not derived from the Program,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">and can be reasonably considered independent and separate works in</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">themselves, then this License, and its terms, do not apply to those</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">sections when you distribute them as separate works. But when you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute the same sections as part of a whole which is a work based</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">on the Program, the distribution of the whole must be on the terms of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License, whose permissions for other licensees extend to the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">entire whole, and thus to each and every part regardless of who wrote it.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Thus, it is not the intent of this section to claim rights or contest</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">your rights to work written entirely by you; rather, the intent is to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">exercise the right to control the distribution of derivative or</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">collective works based on the Program.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">In addition, mere aggregation of another work not based on the Program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">with the Program (or with a work based on the Program) on a volume of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">a storage or distribution medium does not bring the other work under</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the scope of this License.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 3. You may copy and distribute the Program (or a work based on it,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">under Section 2) in object code or executable form under the terms of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Sections 1 and 2 above provided that you also do one of the following:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a) Accompany it with the complete corresponding machine-readable</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> source code, which must be distributed under the terms of Sections</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 1 and 2 above on a medium customarily used for software interchange; or,</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> b) Accompany it with a written offer, valid for at least three</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> years, to give any third party, for a charge no more than your</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> cost of physically performing source distribution, a complete</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> machine-readable copy of the corresponding source code, to be</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> distributed under the terms of Sections 1 and 2 above on a medium</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> customarily used for software interchange; or,</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> c) Accompany it with the information you received as to the offer</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> to distribute corresponding source code. (This alternative is</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> allowed only for noncommercial distribution and only if you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> received the program in object code or executable form with such</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> an offer, in accord with Subsection b above.)</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">The source code for a work means the preferred form of the work for</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">making modifications to it. For an executable work, complete source</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">code means all the source code for all modules it contains, plus any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">associated interface definition files, plus the scripts used to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">control compilation and installation of the executable. However, as a</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">special exception, the source code distributed need not include</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">anything that is normally distributed (in either source or binary</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">form) with the major components (compiler, kernel, and so on) of the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">operating system on which the executable runs, unless that component</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">itself accompanies the executable.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If distribution of executable or object code is made by offering</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">access to copy from a designated place, then offering equivalent</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">access to copy the source code from the same place counts as</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribution of the source code, even though third parties are not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">compelled to copy the source along with the object code.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 4. You may not copy, modify, sublicense, or distribute the Program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">except as expressly provided under this License. Any attempt</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">otherwise to copy, modify, sublicense or distribute the Program is</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">void, and will automatically terminate your rights under this License.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">However, parties who have received copies, or rights, from you under</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License will not have their licenses terminated so long as such</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">parties remain in full compliance.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 5. You are not required to accept this License, since you have not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">signed it. However, nothing else grants you permission to modify or</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute the Program or its derivative works. These actions are</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">prohibited by law if you do not accept this License. Therefore, by</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">modifying or distributing the Program (or any work based on the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program), you indicate your acceptance of this License to do so, and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">all its terms and conditions for copying, distributing or modifying</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the Program or works based on it.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 6. Each time you redistribute the Program (or any work based on the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program), the recipient automatically receives a license from the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">original licensor to copy, distribute or modify the Program subject to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">these terms and conditions. You may not impose any further</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">restrictions on the recipients' exercise of the rights granted herein.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You are not responsible for enforcing compliance by third parties to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 7. If, as a consequence of a court judgment or allegation of patent</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">infringement or for any other reason (not limited to patent issues),</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">conditions are imposed on you (whether by court order, agreement or</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">otherwise) that contradict the conditions of this License, they do not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">excuse you from the conditions of this License. If you cannot</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute so as to satisfy simultaneously your obligations under this</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">License and any other pertinent obligations, then as a consequence you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">may not distribute the Program at all. For example, if a patent</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">license would not permit royalty-free redistribution of the Program by</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">all those who receive copies directly or indirectly through you, then</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the only way you could satisfy both it and this License would be to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">refrain entirely from distribution of the Program.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If any portion of this section is held invalid or unenforceable under</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">any particular circumstance, the balance of the section is intended to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">apply and the section as a whole is intended to apply in other</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">circumstances.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">It is not the purpose of this section to induce you to infringe any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patents or other property right claims or to contest validity of any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">such claims; this section has the sole purpose of protecting the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">integrity of the free software distribution system, which is</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">implemented by public license practices. Many people have made</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">generous contributions to the wide range of software distributed</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">through that system in reliance on consistent application of that</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">system; it is up to the author/donor to decide if he or she is willing</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to distribute software through any other system and a licensee cannot</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">impose that choice.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This section is intended to make thoroughly clear what is believed to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be a consequence of the rest of this License.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 8. If the distribution and/or use of the Program is restricted in</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">certain countries either by patents or by copyrighted interfaces, the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">original copyright holder who places the Program under this License</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">may add an explicit geographical distribution limitation excluding</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">those countries, so that distribution is permitted only in or among</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">countries not thus excluded. In such case, this License incorporates</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the limitation as if written in the body of this License.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 9. The Free Software Foundation may publish revised and/or new versions</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of the General Public License from time to time. Such new versions will</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be similar in spirit to the present version, but may differ in detail to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">address new problems or concerns.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Each version is given a distinguishing version number. If the Program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">specifies a version number of this License which applies to it and &quot;any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">later version&quot;, you have the option of following the terms and conditions</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">either of that version or of any later version published by the Free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Software Foundation. If the Program does not specify a version number of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License, you may choose any version ever published by the Free Software</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Foundation.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 10. If you wish to incorporate parts of the Program into other free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">programs whose distribution conditions are different, write to the author</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to ask for permission. For software which is copyrighted by the Free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Software Foundation, write to the Free Software Foundation; we sometimes</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">make exceptions for this. Our decision will be guided by the two goals</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of preserving the free status of all derivatives of our free software and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of promoting the sharing and reuse of software generally.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> NO WARRANTY</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROVIDE THE PROGRAM &quot;AS IS&quot; WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">REPAIR OR CORRECTION.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">POSSIBILITY OF SUCH DAMAGES.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> END OF TERMS AND CONDITIONS</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> How to Apply These Terms to Your New Programs</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> If you develop a new program, and you want it to be of the greatest</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">possible use to the public, the best way to achieve this is to make it</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">free software which everyone can redistribute and change under these terms.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> To do so, attach the following notices to the program. It is safest</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to attach them to the start of each source file to most effectively</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">convey the exclusion of warranty; and each file should have at least</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the &quot;copyright&quot; line and a pointer to where the full notice is found.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> &lt;one line to give the program's name and a brief idea of what it does.&gt;</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Copyright (C) 19yy &lt;name of author&gt;</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This program is free software; you can redistribute it and/or modify</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> it under the terms of the GNU General Public License as published by</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> the Free Software Foundation; either version 2 of the License, or</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> (at your option) any later version.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This program is distributed in the hope that it will be useful,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> but WITHOUT ANY WARRANTY; without even the implied warranty of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU General Public License for more details.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> You should have received a copy of the GNU General Public License</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> along with this program; if not, write to the Free Software</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Also add information on how to contact you by electronic and paper mail.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If the program is interactive, make it output a short notice like this</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">when it starts in an interactive mode:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Gnomovision version 69, Copyright (C) 19yy name of author</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This is free software, and you are welcome to redistribute it</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> under certain conditions; type `show c' for details.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">The hypothetical commands `show w' and `show c' should show the appropriate</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">parts of the General Public License. Of course, the commands you use may</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be called something other than `show w' and `show c'; they could even be</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">mouse-clicks or menu items--whatever suits your program.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You should also get your employer (if you work as a programmer) or your</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">school, if any, to sign a &quot;copyright disclaimer&quot; for the program, if</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">necessary. Here is a sample; alter the names:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Yoyodyne, Inc., hereby disclaims all copyright interest in the program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> `Gnomovision' (which makes passes at compilers) written by James Hacker.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> &lt;signature of Ty Coon&gt;, 1 April 1989</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Ty Coon, President of Vice</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This General Public License does not permit incorporating your program into</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">proprietary programs. If your program is a subroutine library, you may</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">consider it more useful to permit linking proprietary applications with the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">library. If this is what you want to do, use the GNU Library General</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Public License instead of this License.</span></p></body></html> - - AudioEngineInfoForm @@ -613,6 +268,25 @@ + ComponentMixerLine + + Mute + Némít + + + Solo + Szóló + + + Component name + + + + Set instrument volume [%1] + [%1] hangszer hangerejének beállítása + + + Director Director @@ -627,87 +301,50 @@ - DownloadWidget + DonationDialog - (%1/%2 KiB) - ETA %3 + Donations - DrumkitManager_UI - - Load - Betöltés - - - Load drumkit - Dobszerkó betöltése - - - Delete drumkit - Dobszerkó törlése - - - Save - Mentés - + DonationDialog_UI - Author - Szerző - - - Info - Rövid leírás - - - Drumkit name - Dobszerkó neve - - - Import - Importálás - - - Browse - Tallóz - - - Drumkit filename - Dobszerkó fájl neve - - - Export - Exportálás + Form + - Drumkit directory - Dobszerkó könyvtár + Donate! + - Form1 + Choose random entry. - ### Drumkit author + <html><head/><body><p align="justify">Hydrogen is an open source project which is developed by multiple people in their spare time. By making a donation you can say &quot;thank you&quot; to the involved persons.</p></body></html> - ### Drumkit name + Sebastian Moors (aka mauser): Maintainer / Developer - ### Drumkit info + Michael Wolkstein (aka wolke): Forum hosting + + + Download - <b> -Download more drumkits at <br> -http://www.hydrogen-music.org -</b> + Importing item failed: %1 + + + DownloadWidget - ### The drumkit will be installed zncxbmzbxcmznxbcmz + (%1/%2 KiB) - ETA %3 @@ -894,11 +531,15 @@ - Enable use of rubberband batch processor + 88200 - Rubberbad Batch + Enable use of rubberband's batch processor + + + + Rubberband Batch @@ -961,6 +602,14 @@ Saving of this drumkit failed. + + Open Image + + + + Image Files (*.png *.jpg *.jpeg) + + HydrogenApp @@ -980,6 +629,10 @@ Mixer Keverő + + modified + + InstrumentEditor @@ -1052,7 +705,31 @@ - Auto-Stop-Note + New component name + + + + Component name + + + + Midi out channel + + + + Midi out note + + + + Component volume + + + + Don't change the layers' gain based on velocity + + + + Select pattern size @@ -1106,6 +783,22 @@ Solo Szóló + + Copy notes ... + + + + Only for this pattern + + + + For all patterns + + + + Paste notes ... + + InstrumentRack @@ -1319,11 +1012,8 @@ LayerPreview - Layer %1: Min. velocity = %2, Max. velocity = %3 - - - - Velocity = %1 + Dec. = %1 +MIDI = %2 @@ -1394,10 +1084,6 @@ Jack meghajtó: hiba a port regiszterben - &Project - - - &New @@ -1622,6 +1308,40 @@ Report bug + + Export &LilyPond file + + + + Donate + + + + +The LilyPond export is an experimental feature. +It should work like a charm provided that you use the GM-kit, and that you do not use triplet + + + + + LilyPond file (*.ly) + + + + Export LilyPond file + + + + +The current playlist contains unsaved changes. +Do you want to discard the changes? + + + + + Pro&ject + + MasterMixerLine @@ -1655,6 +1375,17 @@ + MidiSenseWidget + + This element is not midi operable. + + + + Waiting for midi input... + + + + MidiTable Event @@ -2287,10 +2018,6 @@ - No song selected! - - - Playlist: set song no. %1 @@ -2302,6 +2029,29 @@ &New Playlist + + File not found: + + + + No valid song selected! + + + + +The current playlist contains unsaved changes. +Do you want to discard the changes? + + + + + &Discard + &Eldobás + + + &Cancel + + PlaylistDialog_UI @@ -2377,6 +2127,30 @@ &Cancel + + Automatic + + + + Steps + + + + Fixed + + + + <b>PulseAudio Driver</b><br> + + + + Number of steps + + + + Color (Hue value) + + PreferencesDialog_UI @@ -2441,10 +2215,6 @@ Csúcsindikátor esési sebessége - <i>After a font change the application must be restarted.</i> - <i>Az új betütípusok a program újraindítását követően lépnek életbe</i> - - Midi driver Midi meghajtó @@ -2684,6 +2454,30 @@ Tabbed + + TextLabel + + + + Coloring method for Song Editor elements + + + + <html><head/><body><p><span style=" font-style:italic;">After changing a font or the interface layout the application must be restarted.</span></p></body></html> + + + + Use relative paths for playlist + + + + Use output note as input note + + + + Discard midi messages after action has been triggered + + SampleEditor @@ -3083,10 +2877,6 @@ - not_categorized - - - Enable time line edit @@ -3289,13 +3079,41 @@ - Browse - Tallóz - - Export Exportálás + + Drumkit + + + + Component + + + + Path + + + + Version + + + + Browse... + Tallóz... + + + 0.9.7 and higher + + + + 0.9.6 and lower + + + + Cancel + Mégsem + SoundLibraryImportDialog @@ -3356,7 +3174,11 @@ Motívumok - License: %1 + Drumkit License: %1 + + + + Image License: %1 @@ -3379,10 +3201,6 @@ - Sound library Info - - - Author... @@ -3407,15 +3225,23 @@ - License... + Edit server list - Edit server list + Close - Close + TextLabel + + + + Image License... + + + + Drumkit License... @@ -3489,6 +3315,17 @@ Drumkit deletion failed. + + The existing kit has %1 instruments but the new one only has %2. +The first %2 instruments will be replaced with the new intruments and will keep their notes, but some of the remaining instruments have notes. +Would you like to keep or discard the remaining instruments and notes? + + + + + Keep + + SoundLibraryPropertiesDialog_UI @@ -3509,10 +3346,6 @@ - License - Jogok - - Save @@ -3524,6 +3357,22 @@ Save changes made to instruments into sound library + + Drumkit License + + + + Image + + + + Browse + Tallóz + + + Image License + + SoundLibraryRepositoryDialog @@ -3566,7 +3415,19 @@ - Saving of this drumkit failed. + A library with the same name already exists. Do you want to overwrite the existing library? + + + + Saving of this library failed. + + + + Open Image + + + + Image Files (*.png *.jpg *.jpeg) @@ -3600,6 +3461,18 @@ Save + + Image + + + + Browse + Tallóz + + + Image License + + SoundLibraryTree Binary files /tmp/tmpktOUQO/kmAosGw3t1/hydrogen-0.9.6.1/data/i18n/hydrogen.it.qm and /tmp/tmpktOUQO/ALHtWJIToj/hydrogen-0.9.7/data/i18n/hydrogen.it.qm differ diff -Nru hydrogen-0.9.6.1/data/i18n/hydrogen.it.ts hydrogen-0.9.7/data/i18n/hydrogen.it.ts --- hydrogen-0.9.6.1/data/i18n/hydrogen.it.ts 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/data/i18n/hydrogen.it.ts 2016-11-05 08:22:50.000000000 +0000 @@ -1,6 +1,6 @@ - + AboutDialog @@ -12,16 +12,20 @@ Informazioni su - <b>Main coder and mantainer:</b><br> - <b>Sviluppatore principale e collaboratori:</b><br> - - <b>Website</b><br> <b>Sito web</b><br> - <b>Mailing lists</b><br> - <b>Mailing list</b><br> + <b>Main coder and maintainer:</b><br> + + + + <b>Thanks to:</b> + + + + <b>Development mailing list</b><br> + @@ -54,355 +58,6 @@ ### - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This program is distributed under the terms of the GPL v2.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU GENERAL PUBLIC LICENSE</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Version 2, June 1991</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Copyright (C) 1989, 1991 Free Software Foundation, Inc.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 675 Mass Ave, Cambridge, MA 02139, USA</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Everyone is permitted to copy and distribute verbatim copies</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> of this license document, but changing it is not allowed.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Preamble</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> The licenses for most software are designed to take away your</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">freedom to share and change it. By contrast, the GNU General Public</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">License is intended to guarantee your freedom to share and change free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">software--to make sure the software is free for all its users. This</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">General Public License applies to most of the Free Software</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Foundation's software and to any other program whose authors commit to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">using it. (Some other Free Software Foundation software is covered by</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the GNU Library General Public License instead.) You can apply it to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">your programs, too.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> When we speak of free software, we are referring to freedom, not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">price. Our General Public Licenses are designed to make sure that you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">have the freedom to distribute copies of free software (and charge for</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this service if you wish), that you receive source code or can get it</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">if you want it, that you can change the software or use pieces of it</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">in new free programs; and that you know you can do these things.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> To protect your rights, we need to make restrictions that forbid</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">anyone to deny you these rights or to ask you to surrender the rights.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">These restrictions translate to certain responsibilities for you if you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute copies of the software, or if you modify it.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> For example, if you distribute copies of such a program, whether</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">gratis or for a fee, you must give the recipients all the rights that</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">you have. You must make sure that they, too, receive or can get the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">source code. And you must show them these terms so they know their</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">rights.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> We protect your rights with two steps: (1) copyright the software, and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">(2) offer you this license which gives you legal permission to copy,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute and/or modify the software.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Also, for each author's protection and ours, we want to make certain</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that everyone understands that there is no warranty for this free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">software. If the software is modified by someone else and passed on, we</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">want its recipients to know that what they have is not the original, so</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that any problems introduced by others will not reflect on the original</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">authors' reputations.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Finally, any free program is threatened constantly by software</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patents. We wish to avoid the danger that redistributors of a free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">program will individually obtain patent licenses, in effect making the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">program proprietary. To prevent this, we have made it clear that any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patent must be licensed for everyone's free use or not licensed at all.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> The precise terms and conditions for copying, distribution and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">modification follow.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU GENERAL PUBLIC LICENSE</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 0. This License applies to any program or other work which contains</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">a notice placed by the copyright holder saying it may be distributed</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">under the terms of this General Public License. The &quot;Program&quot;, below,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">refers to any such program or work, and a &quot;work based on the Program&quot;</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">means either the Program or any derivative work under copyright law:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that is to say, a work containing the Program or a portion of it,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">either verbatim or with modifications and/or translated into another</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">language. (Hereinafter, translation is included without limitation in</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the term &quot;modification&quot;.) Each licensee is addressed as &quot;you&quot;.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Activities other than copying, distribution and modification are not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">covered by this License; they are outside its scope. The act of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">running the Program is not restricted, and the output from the Program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">is covered only if its contents constitute a work based on the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program (independent of having been made by running the Program).</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Whether that is true depends on what the Program does.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 1. You may copy and distribute verbatim copies of the Program's</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">source code as you receive it, in any medium, provided that you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">conspicuously and appropriately publish on each copy an appropriate</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">copyright notice and disclaimer of warranty; keep intact all the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">notices that refer to this License and to the absence of any warranty;</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">and give any other recipients of the Program a copy of this License</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">along with the Program.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You may charge a fee for the physical act of transferring a copy, and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">you may at your option offer warranty protection in exchange for a fee.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 2. You may modify your copy or copies of the Program or any portion</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of it, thus forming a work based on the Program, and copy and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute such modifications or work under the terms of Section 1</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">above, provided that you also meet all of these conditions:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a) You must cause the modified files to carry prominent notices</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> stating that you changed the files and the date of any change.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> b) You must cause any work that you distribute or publish, that in</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> whole or in part contains or is derived from the Program or any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> part thereof, to be licensed as a whole at no charge to all third</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> parties under the terms of this License.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> c) If the modified program normally reads commands interactively</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> when run, you must cause it, when started running for such</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> interactive use in the most ordinary way, to print or display an</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> announcement including an appropriate copyright notice and a</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> notice that there is no warranty (or else, saying that you provide</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a warranty) and that users may redistribute the program under</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> these conditions, and telling the user how to view a copy of this</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> License. (Exception: if the Program itself is interactive but</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> does not normally print such an announcement, your work based on</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> the Program is not required to print an announcement.)</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">These requirements apply to the modified work as a whole. If</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">identifiable sections of that work are not derived from the Program,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">and can be reasonably considered independent and separate works in</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">themselves, then this License, and its terms, do not apply to those</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">sections when you distribute them as separate works. But when you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute the same sections as part of a whole which is a work based</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">on the Program, the distribution of the whole must be on the terms of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License, whose permissions for other licensees extend to the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">entire whole, and thus to each and every part regardless of who wrote it.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Thus, it is not the intent of this section to claim rights or contest</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">your rights to work written entirely by you; rather, the intent is to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">exercise the right to control the distribution of derivative or</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">collective works based on the Program.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">In addition, mere aggregation of another work not based on the Program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">with the Program (or with a work based on the Program) on a volume of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">a storage or distribution medium does not bring the other work under</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the scope of this License.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 3. You may copy and distribute the Program (or a work based on it,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">under Section 2) in object code or executable form under the terms of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Sections 1 and 2 above provided that you also do one of the following:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a) Accompany it with the complete corresponding machine-readable</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> source code, which must be distributed under the terms of Sections</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 1 and 2 above on a medium customarily used for software interchange; or,</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> b) Accompany it with a written offer, valid for at least three</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> years, to give any third party, for a charge no more than your</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> cost of physically performing source distribution, a complete</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> machine-readable copy of the corresponding source code, to be</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> distributed under the terms of Sections 1 and 2 above on a medium</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> customarily used for software interchange; or,</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> c) Accompany it with the information you received as to the offer</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> to distribute corresponding source code. (This alternative is</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> allowed only for noncommercial distribution and only if you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> received the program in object code or executable form with such</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> an offer, in accord with Subsection b above.)</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">The source code for a work means the preferred form of the work for</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">making modifications to it. For an executable work, complete source</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">code means all the source code for all modules it contains, plus any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">associated interface definition files, plus the scripts used to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">control compilation and installation of the executable. However, as a</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">special exception, the source code distributed need not include</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">anything that is normally distributed (in either source or binary</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">form) with the major components (compiler, kernel, and so on) of the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">operating system on which the executable runs, unless that component</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">itself accompanies the executable.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If distribution of executable or object code is made by offering</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">access to copy from a designated place, then offering equivalent</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">access to copy the source code from the same place counts as</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribution of the source code, even though third parties are not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">compelled to copy the source along with the object code.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 4. You may not copy, modify, sublicense, or distribute the Program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">except as expressly provided under this License. Any attempt</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">otherwise to copy, modify, sublicense or distribute the Program is</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">void, and will automatically terminate your rights under this License.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">However, parties who have received copies, or rights, from you under</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License will not have their licenses terminated so long as such</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">parties remain in full compliance.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 5. You are not required to accept this License, since you have not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">signed it. However, nothing else grants you permission to modify or</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute the Program or its derivative works. These actions are</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">prohibited by law if you do not accept this License. Therefore, by</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">modifying or distributing the Program (or any work based on the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program), you indicate your acceptance of this License to do so, and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">all its terms and conditions for copying, distributing or modifying</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the Program or works based on it.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 6. Each time you redistribute the Program (or any work based on the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program), the recipient automatically receives a license from the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">original licensor to copy, distribute or modify the Program subject to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">these terms and conditions. You may not impose any further</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">restrictions on the recipients' exercise of the rights granted herein.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You are not responsible for enforcing compliance by third parties to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 7. If, as a consequence of a court judgment or allegation of patent</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">infringement or for any other reason (not limited to patent issues),</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">conditions are imposed on you (whether by court order, agreement or</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">otherwise) that contradict the conditions of this License, they do not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">excuse you from the conditions of this License. If you cannot</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute so as to satisfy simultaneously your obligations under this</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">License and any other pertinent obligations, then as a consequence you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">may not distribute the Program at all. For example, if a patent</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">license would not permit royalty-free redistribution of the Program by</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">all those who receive copies directly or indirectly through you, then</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the only way you could satisfy both it and this License would be to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">refrain entirely from distribution of the Program.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If any portion of this section is held invalid or unenforceable under</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">any particular circumstance, the balance of the section is intended to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">apply and the section as a whole is intended to apply in other</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">circumstances.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">It is not the purpose of this section to induce you to infringe any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patents or other property right claims or to contest validity of any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">such claims; this section has the sole purpose of protecting the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">integrity of the free software distribution system, which is</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">implemented by public license practices. Many people have made</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">generous contributions to the wide range of software distributed</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">through that system in reliance on consistent application of that</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">system; it is up to the author/donor to decide if he or she is willing</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to distribute software through any other system and a licensee cannot</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">impose that choice.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This section is intended to make thoroughly clear what is believed to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be a consequence of the rest of this License.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 8. If the distribution and/or use of the Program is restricted in</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">certain countries either by patents or by copyrighted interfaces, the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">original copyright holder who places the Program under this License</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">may add an explicit geographical distribution limitation excluding</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">those countries, so that distribution is permitted only in or among</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">countries not thus excluded. In such case, this License incorporates</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the limitation as if written in the body of this License.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 9. The Free Software Foundation may publish revised and/or new versions</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of the General Public License from time to time. Such new versions will</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be similar in spirit to the present version, but may differ in detail to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">address new problems or concerns.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Each version is given a distinguishing version number. If the Program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">specifies a version number of this License which applies to it and &quot;any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">later version&quot;, you have the option of following the terms and conditions</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">either of that version or of any later version published by the Free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Software Foundation. If the Program does not specify a version number of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License, you may choose any version ever published by the Free Software</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Foundation.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 10. If you wish to incorporate parts of the Program into other free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">programs whose distribution conditions are different, write to the author</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to ask for permission. For software which is copyrighted by the Free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Software Foundation, write to the Free Software Foundation; we sometimes</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">make exceptions for this. Our decision will be guided by the two goals</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of preserving the free status of all derivatives of our free software and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of promoting the sharing and reuse of software generally.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> NO WARRANTY</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROVIDE THE PROGRAM &quot;AS IS&quot; WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">REPAIR OR CORRECTION.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">POSSIBILITY OF SUCH DAMAGES.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> END OF TERMS AND CONDITIONS</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> How to Apply These Terms to Your New Programs</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> If you develop a new program, and you want it to be of the greatest</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">possible use to the public, the best way to achieve this is to make it</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">free software which everyone can redistribute and change under these terms.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> To do so, attach the following notices to the program. It is safest</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to attach them to the start of each source file to most effectively</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">convey the exclusion of warranty; and each file should have at least</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the &quot;copyright&quot; line and a pointer to where the full notice is found.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> &lt;one line to give the program's name and a brief idea of what it does.&gt;</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Copyright (C) 19yy &lt;name of author&gt;</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This program is free software; you can redistribute it and/or modify</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> it under the terms of the GNU General Public License as published by</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> the Free Software Foundation; either version 2 of the License, or</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> (at your option) any later version.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This program is distributed in the hope that it will be useful,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> but WITHOUT ANY WARRANTY; without even the implied warranty of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU General Public License for more details.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> You should have received a copy of the GNU General Public License</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> along with this program; if not, write to the Free Software</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Also add information on how to contact you by electronic and paper mail.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If the program is interactive, make it output a short notice like this</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">when it starts in an interactive mode:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Gnomovision version 69, Copyright (C) 19yy name of author</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This is free software, and you are welcome to redistribute it</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> under certain conditions; type `show c' for details.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">The hypothetical commands `show w' and `show c' should show the appropriate</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">parts of the General Public License. Of course, the commands you use may</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be called something other than `show w' and `show c'; they could even be</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">mouse-clicks or menu items--whatever suits your program.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You should also get your employer (if you work as a programmer) or your</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">school, if any, to sign a &quot;copyright disclaimer&quot; for the program, if</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">necessary. Here is a sample; alter the names:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Yoyodyne, Inc., hereby disclaims all copyright interest in the program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> `Gnomovision' (which makes passes at compilers) written by James Hacker.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> &lt;signature of Ty Coon&gt;, 1 April 1989</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Ty Coon, President of Vice</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This General Public License does not permit incorporating your program into</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">proprietary programs. If your program is a subroutine library, you may</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">consider it more useful to permit linking proprietary applications with the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">library. If this is what you want to do, use the GNU Library General</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Public License instead of this License.</span></p></body></html> - - AudioEngineInfoForm @@ -613,6 +268,25 @@ + ComponentMixerLine + + Mute + Escludi + + + Solo + Solo + + + Component name + + + + Set instrument volume [%1] + Volume strumento [%1] + + + Director Director @@ -627,91 +301,51 @@ - DownloadWidget + DonationDialog - (%1/%2 KiB) - ETA %3 - (%1/%2 Kib) - ETA %3 + Donations + - DrumkitManager_UI - - Form1 - Form1 - - - Load - Apri - - - ### Drumkit author - ### Autore drumkit - - - Delete drumkit - Elimina drumkit - - - ### Drumkit name - ### Nome drumkit - - - ### Drumkit info - ### Informazioni drumkit - + DonationDialog_UI - Load drumkit - Apri drumkit - - - Save - Salva - - - Author - Autore - - - Info - Informazioni - - - Drumkit name - Nome drumkit + Form + Form - Import - Importa + Donate! + - Drumkit filename - Nome file drumkit + Choose random entry. + - Browse - Cerca + <html><head/><body><p align="justify">Hydrogen is an open source project which is developed by multiple people in their spare time. By making a donation you can say &quot;thank you&quot; to the involved persons.</p></body></html> + - <b> -Download more drumkits at <br> -http://www.hydrogen-music.org -</b> - <b> -Scarica drumkit aggiuntivi da<br> -http://www.hydrogen-music.org -</b> + Sebastian Moors (aka mauser): Maintainer / Developer + - ### The drumkit will be installed zncxbmzbxcmznxbcmz - ### Il drumkit sarà installato in + Michael Wolkstein (aka wolke): Forum hosting + + + + Download - Export - Esporta + Importing item failed: %1 + + + + DownloadWidget - Drumkit directory - Directory destinazione + (%1/%2 KiB) - ETA %3 + (%1/%2 Kib) - ETA %3 @@ -898,12 +532,16 @@ Linea BPM - Enable use of rubberband batch processor - Abilita il rubberband batch processor + 88200 + 88200 - Rubberbad Batch - Rubberbad Batch + Enable use of rubberband's batch processor + + + + Rubberband Batch + @@ -966,6 +604,14 @@ Saving of this drumkit failed. Salvataggio del drumkit fallito. + + Open Image + + + + Image Files (*.png *.jpg *.jpeg) + + HydrogenApp @@ -985,6 +631,10 @@ Mixer Mixer + + modified + + InstrumentEditor @@ -1057,8 +707,32 @@ Ferma la riproduzione della nota-strumento prima di riprodurre la prossima. - Auto-Stop-Note - Ferma automaticamente la nota + New component name + + + + Component name + + + + Midi out channel + + + + Midi out note + + + + Component volume + + + + Don't change the layers' gain based on velocity + + + + Select pattern size + Seleziona la dimensione del pattern @@ -1111,6 +785,22 @@ Solo Solo + + Copy notes ... + + + + Only for this pattern + + + + For all patterns + + + + Paste notes ... + + InstrumentRack @@ -1330,11 +1020,8 @@ LayerPreview - Layer %1: Min. velocity = %2, Max. velocity = %3 - - - - Velocity = %1 + Dec. = %1 +MIDI = %2 @@ -1461,10 +1148,6 @@ &Debug - &Project - &Progetto - - &Tools &Strumenti @@ -1635,6 +1318,40 @@ Report bug Segnala bug + + Export &LilyPond file + + + + Donate + + + + +The LilyPond export is an experimental feature. +It should work like a charm provided that you use the GM-kit, and that you do not use triplet + + + + + LilyPond file (*.ly) + + + + Export LilyPond file + + + + +The current playlist contains unsaved changes. +Do you want to discard the changes? + + + + + Pro&ject + + MasterMixerLine @@ -1668,6 +1385,17 @@ + MidiSenseWidget + + This element is not midi operable. + + + + Waiting for midi input... + + + + MidiTable Event @@ -2304,10 +2032,6 @@ Browser della Playlist - No song selected! - Nessuna canzone selezionata! - - Playlist: set song no. %1 Playlist: imposta canzone n. %1 @@ -2319,6 +2043,29 @@ &New Playlist &Nuova Playlist + + File not found: + + + + No valid song selected! + + + + +The current playlist contains unsaved changes. +Do you want to discard the changes? + + + + + &Discard + Annulla le &modifiche + + + &Cancel + &Annulla + PlaylistDialog_UI @@ -2395,6 +2142,30 @@ &Cancel &Annulla + + Automatic + + + + Steps + + + + Fixed + + + + <b>PulseAudio Driver</b><br> + + + + Number of steps + + + + Color (Hue value) + + PreferencesDialog_UI @@ -2447,10 +2218,6 @@ Seleziona caratteri - <i>After a font change the application must be restarted.</i> - <i>Riavviare l'applicazione per usare i nuovi caratteri.</i> - - Polyphony Polifonia @@ -2702,6 +2469,30 @@ Tabbed Tab + + TextLabel + + + + Coloring method for Song Editor elements + + + + <html><head/><body><p><span style=" font-style:italic;">After changing a font or the interface layout the application must be restarted.</span></p></body></html> + + + + Use relative paths for playlist + + + + Use output note as input note + + + + Discard midi messages after action has been triggered + + SampleEditor @@ -3104,10 +2895,6 @@ Modalità pattern singolo - not_categorized - Nessuna categoria - - Enable time line edit Abilita la modifica del timeline @@ -3311,13 +3098,41 @@ - Browse - Cerca - - Export Esporta + + Drumkit + Drumkit + + + Component + + + + Path + + + + Version + + + + Browse... + Cerca... + + + 0.9.7 and higher + + + + 0.9.6 and lower + + + + Cancel + Annulla + SoundLibraryImportDialog @@ -3378,8 +3193,12 @@ Pattern - License: %1 - Licenza: %1 + Drumkit License: %1 + + + + Image License: %1 + @@ -3401,10 +3220,6 @@ Nome libreria - Sound library Info - Informazioni su libreria - - Author... Autore... @@ -3429,10 +3244,6 @@ 1 - License... - Licenza... - - Edit server list Modifica lista server @@ -3440,6 +3251,18 @@ Close Chiudi + + TextLabel + + + + Image License... + + + + Drumkit License... + + SoundLibraryPanel @@ -3512,6 +3335,17 @@ Drumkit deletion failed. + + The existing kit has %1 instruments but the new one only has %2. +The first %2 instruments will be replaced with the new intruments and will keep their notes, but some of the remaining instruments have notes. +Would you like to keep or discard the remaining instruments and notes? + + + + + Keep + + SoundLibraryPropertiesDialog_UI @@ -3532,10 +3366,6 @@ Informazioni - License - Licenza - - Save Salva @@ -3547,6 +3377,22 @@ Save changes made to instruments into sound library Salva le modifiche fatte agli strumenti nella libreria suoni + + Drumkit License + + + + Image + + + + Browse + Cerca + + + Image License + + SoundLibraryRepositoryDialog @@ -3589,8 +3435,20 @@ Fornisci un nome valido - Saving of this drumkit failed. - Salvataggio drumkit fallito. + A library with the same name already exists. Do you want to overwrite the existing library? + + + + Saving of this library failed. + + + + Open Image + + + + Image Files (*.png *.jpg *.jpeg) + @@ -3623,6 +3481,18 @@ Save Salva + + Image + + + + Browse + Cerca + + + Image License + + SoundLibraryTree Binary files /tmp/tmpktOUQO/kmAosGw3t1/hydrogen-0.9.6.1/data/i18n/hydrogen.ja.qm and /tmp/tmpktOUQO/ALHtWJIToj/hydrogen-0.9.7/data/i18n/hydrogen.ja.qm differ diff -Nru hydrogen-0.9.6.1/data/i18n/hydrogen.ja.ts hydrogen-0.9.7/data/i18n/hydrogen.ja.ts --- hydrogen-0.9.6.1/data/i18n/hydrogen.ja.ts 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/data/i18n/hydrogen.ja.ts 2016-11-05 08:22:50.000000000 +0000 @@ -1,6 +1,6 @@ - + AboutDialog @@ -16,12 +16,16 @@ <b>ウェブサイト</b><br> - <b>Mailing lists</b><br> - <b>メーリングリスト</b><br> + <b>Main coder and maintainer:</b><br> + - <b>Main coder and mantainer:</b><br> - <b>中心開発者やメンテナー:</b><br> + <b>Thanks to:</b> + + + + <b>Development mailing list</b><br> + @@ -55,355 +59,6 @@ Alt+O - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This program is distributed under the terms of the GPL v2.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU GENERAL PUBLIC LICENSE</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Version 2, June 1991</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Copyright (C) 1989, 1991 Free Software Foundation, Inc.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 675 Mass Ave, Cambridge, MA 02139, USA</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Everyone is permitted to copy and distribute verbatim copies</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> of this license document, but changing it is not allowed.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Preamble</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> The licenses for most software are designed to take away your</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">freedom to share and change it. By contrast, the GNU General Public</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">License is intended to guarantee your freedom to share and change free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">software--to make sure the software is free for all its users. This</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">General Public License applies to most of the Free Software</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Foundation's software and to any other program whose authors commit to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">using it. (Some other Free Software Foundation software is covered by</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the GNU Library General Public License instead.) You can apply it to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">your programs, too.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> When we speak of free software, we are referring to freedom, not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">price. Our General Public Licenses are designed to make sure that you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">have the freedom to distribute copies of free software (and charge for</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this service if you wish), that you receive source code or can get it</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">if you want it, that you can change the software or use pieces of it</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">in new free programs; and that you know you can do these things.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> To protect your rights, we need to make restrictions that forbid</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">anyone to deny you these rights or to ask you to surrender the rights.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">These restrictions translate to certain responsibilities for you if you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute copies of the software, or if you modify it.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> For example, if you distribute copies of such a program, whether</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">gratis or for a fee, you must give the recipients all the rights that</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">you have. You must make sure that they, too, receive or can get the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">source code. And you must show them these terms so they know their</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">rights.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> We protect your rights with two steps: (1) copyright the software, and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">(2) offer you this license which gives you legal permission to copy,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute and/or modify the software.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Also, for each author's protection and ours, we want to make certain</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that everyone understands that there is no warranty for this free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">software. If the software is modified by someone else and passed on, we</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">want its recipients to know that what they have is not the original, so</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that any problems introduced by others will not reflect on the original</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">authors' reputations.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Finally, any free program is threatened constantly by software</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patents. We wish to avoid the danger that redistributors of a free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">program will individually obtain patent licenses, in effect making the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">program proprietary. To prevent this, we have made it clear that any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patent must be licensed for everyone's free use or not licensed at all.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> The precise terms and conditions for copying, distribution and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">modification follow.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU GENERAL PUBLIC LICENSE</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 0. This License applies to any program or other work which contains</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">a notice placed by the copyright holder saying it may be distributed</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">under the terms of this General Public License. The &quot;Program&quot;, below,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">refers to any such program or work, and a &quot;work based on the Program&quot;</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">means either the Program or any derivative work under copyright law:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that is to say, a work containing the Program or a portion of it,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">either verbatim or with modifications and/or translated into another</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">language. (Hereinafter, translation is included without limitation in</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the term &quot;modification&quot;.) Each licensee is addressed as &quot;you&quot;.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Activities other than copying, distribution and modification are not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">covered by this License; they are outside its scope. The act of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">running the Program is not restricted, and the output from the Program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">is covered only if its contents constitute a work based on the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program (independent of having been made by running the Program).</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Whether that is true depends on what the Program does.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 1. You may copy and distribute verbatim copies of the Program's</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">source code as you receive it, in any medium, provided that you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">conspicuously and appropriately publish on each copy an appropriate</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">copyright notice and disclaimer of warranty; keep intact all the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">notices that refer to this License and to the absence of any warranty;</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">and give any other recipients of the Program a copy of this License</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">along with the Program.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You may charge a fee for the physical act of transferring a copy, and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">you may at your option offer warranty protection in exchange for a fee.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 2. You may modify your copy or copies of the Program or any portion</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of it, thus forming a work based on the Program, and copy and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute such modifications or work under the terms of Section 1</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">above, provided that you also meet all of these conditions:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a) You must cause the modified files to carry prominent notices</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> stating that you changed the files and the date of any change.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> b) You must cause any work that you distribute or publish, that in</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> whole or in part contains or is derived from the Program or any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> part thereof, to be licensed as a whole at no charge to all third</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> parties under the terms of this License.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> c) If the modified program normally reads commands interactively</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> when run, you must cause it, when started running for such</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> interactive use in the most ordinary way, to print or display an</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> announcement including an appropriate copyright notice and a</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> notice that there is no warranty (or else, saying that you provide</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a warranty) and that users may redistribute the program under</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> these conditions, and telling the user how to view a copy of this</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> License. (Exception: if the Program itself is interactive but</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> does not normally print such an announcement, your work based on</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> the Program is not required to print an announcement.)</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">These requirements apply to the modified work as a whole. If</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">identifiable sections of that work are not derived from the Program,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">and can be reasonably considered independent and separate works in</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">themselves, then this License, and its terms, do not apply to those</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">sections when you distribute them as separate works. But when you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute the same sections as part of a whole which is a work based</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">on the Program, the distribution of the whole must be on the terms of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License, whose permissions for other licensees extend to the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">entire whole, and thus to each and every part regardless of who wrote it.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Thus, it is not the intent of this section to claim rights or contest</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">your rights to work written entirely by you; rather, the intent is to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">exercise the right to control the distribution of derivative or</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">collective works based on the Program.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">In addition, mere aggregation of another work not based on the Program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">with the Program (or with a work based on the Program) on a volume of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">a storage or distribution medium does not bring the other work under</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the scope of this License.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 3. You may copy and distribute the Program (or a work based on it,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">under Section 2) in object code or executable form under the terms of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Sections 1 and 2 above provided that you also do one of the following:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a) Accompany it with the complete corresponding machine-readable</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> source code, which must be distributed under the terms of Sections</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 1 and 2 above on a medium customarily used for software interchange; or,</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> b) Accompany it with a written offer, valid for at least three</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> years, to give any third party, for a charge no more than your</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> cost of physically performing source distribution, a complete</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> machine-readable copy of the corresponding source code, to be</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> distributed under the terms of Sections 1 and 2 above on a medium</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> customarily used for software interchange; or,</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> c) Accompany it with the information you received as to the offer</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> to distribute corresponding source code. (This alternative is</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> allowed only for noncommercial distribution and only if you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> received the program in object code or executable form with such</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> an offer, in accord with Subsection b above.)</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">The source code for a work means the preferred form of the work for</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">making modifications to it. For an executable work, complete source</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">code means all the source code for all modules it contains, plus any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">associated interface definition files, plus the scripts used to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">control compilation and installation of the executable. However, as a</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">special exception, the source code distributed need not include</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">anything that is normally distributed (in either source or binary</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">form) with the major components (compiler, kernel, and so on) of the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">operating system on which the executable runs, unless that component</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">itself accompanies the executable.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If distribution of executable or object code is made by offering</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">access to copy from a designated place, then offering equivalent</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">access to copy the source code from the same place counts as</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribution of the source code, even though third parties are not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">compelled to copy the source along with the object code.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 4. You may not copy, modify, sublicense, or distribute the Program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">except as expressly provided under this License. Any attempt</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">otherwise to copy, modify, sublicense or distribute the Program is</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">void, and will automatically terminate your rights under this License.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">However, parties who have received copies, or rights, from you under</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License will not have their licenses terminated so long as such</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">parties remain in full compliance.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 5. You are not required to accept this License, since you have not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">signed it. However, nothing else grants you permission to modify or</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute the Program or its derivative works. These actions are</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">prohibited by law if you do not accept this License. Therefore, by</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">modifying or distributing the Program (or any work based on the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program), you indicate your acceptance of this License to do so, and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">all its terms and conditions for copying, distributing or modifying</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the Program or works based on it.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 6. Each time you redistribute the Program (or any work based on the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program), the recipient automatically receives a license from the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">original licensor to copy, distribute or modify the Program subject to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">these terms and conditions. You may not impose any further</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">restrictions on the recipients' exercise of the rights granted herein.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You are not responsible for enforcing compliance by third parties to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 7. If, as a consequence of a court judgment or allegation of patent</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">infringement or for any other reason (not limited to patent issues),</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">conditions are imposed on you (whether by court order, agreement or</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">otherwise) that contradict the conditions of this License, they do not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">excuse you from the conditions of this License. If you cannot</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute so as to satisfy simultaneously your obligations under this</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">License and any other pertinent obligations, then as a consequence you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">may not distribute the Program at all. For example, if a patent</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">license would not permit royalty-free redistribution of the Program by</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">all those who receive copies directly or indirectly through you, then</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the only way you could satisfy both it and this License would be to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">refrain entirely from distribution of the Program.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If any portion of this section is held invalid or unenforceable under</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">any particular circumstance, the balance of the section is intended to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">apply and the section as a whole is intended to apply in other</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">circumstances.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">It is not the purpose of this section to induce you to infringe any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patents or other property right claims or to contest validity of any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">such claims; this section has the sole purpose of protecting the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">integrity of the free software distribution system, which is</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">implemented by public license practices. Many people have made</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">generous contributions to the wide range of software distributed</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">through that system in reliance on consistent application of that</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">system; it is up to the author/donor to decide if he or she is willing</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to distribute software through any other system and a licensee cannot</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">impose that choice.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This section is intended to make thoroughly clear what is believed to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be a consequence of the rest of this License.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 8. If the distribution and/or use of the Program is restricted in</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">certain countries either by patents or by copyrighted interfaces, the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">original copyright holder who places the Program under this License</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">may add an explicit geographical distribution limitation excluding</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">those countries, so that distribution is permitted only in or among</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">countries not thus excluded. In such case, this License incorporates</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the limitation as if written in the body of this License.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 9. The Free Software Foundation may publish revised and/or new versions</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of the General Public License from time to time. Such new versions will</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be similar in spirit to the present version, but may differ in detail to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">address new problems or concerns.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Each version is given a distinguishing version number. If the Program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">specifies a version number of this License which applies to it and &quot;any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">later version&quot;, you have the option of following the terms and conditions</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">either of that version or of any later version published by the Free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Software Foundation. If the Program does not specify a version number of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License, you may choose any version ever published by the Free Software</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Foundation.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 10. If you wish to incorporate parts of the Program into other free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">programs whose distribution conditions are different, write to the author</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to ask for permission. For software which is copyrighted by the Free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Software Foundation, write to the Free Software Foundation; we sometimes</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">make exceptions for this. Our decision will be guided by the two goals</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of preserving the free status of all derivatives of our free software and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of promoting the sharing and reuse of software generally.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> NO WARRANTY</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROVIDE THE PROGRAM &quot;AS IS&quot; WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">REPAIR OR CORRECTION.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">POSSIBILITY OF SUCH DAMAGES.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> END OF TERMS AND CONDITIONS</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> How to Apply These Terms to Your New Programs</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> If you develop a new program, and you want it to be of the greatest</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">possible use to the public, the best way to achieve this is to make it</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">free software which everyone can redistribute and change under these terms.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> To do so, attach the following notices to the program. It is safest</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to attach them to the start of each source file to most effectively</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">convey the exclusion of warranty; and each file should have at least</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the &quot;copyright&quot; line and a pointer to where the full notice is found.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> &lt;one line to give the program's name and a brief idea of what it does.&gt;</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Copyright (C) 19yy &lt;name of author&gt;</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This program is free software; you can redistribute it and/or modify</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> it under the terms of the GNU General Public License as published by</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> the Free Software Foundation; either version 2 of the License, or</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> (at your option) any later version.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This program is distributed in the hope that it will be useful,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> but WITHOUT ANY WARRANTY; without even the implied warranty of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU General Public License for more details.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> You should have received a copy of the GNU General Public License</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> along with this program; if not, write to the Free Software</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Also add information on how to contact you by electronic and paper mail.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If the program is interactive, make it output a short notice like this</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">when it starts in an interactive mode:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Gnomovision version 69, Copyright (C) 19yy name of author</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This is free software, and you are welcome to redistribute it</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> under certain conditions; type `show c' for details.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">The hypothetical commands `show w' and `show c' should show the appropriate</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">parts of the General Public License. Of course, the commands you use may</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be called something other than `show w' and `show c'; they could even be</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">mouse-clicks or menu items--whatever suits your program.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You should also get your employer (if you work as a programmer) or your</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">school, if any, to sign a &quot;copyright disclaimer&quot; for the program, if</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">necessary. Here is a sample; alter the names:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Yoyodyne, Inc., hereby disclaims all copyright interest in the program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> `Gnomovision' (which makes passes at compilers) written by James Hacker.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> &lt;signature of Ty Coon&gt;, 1 April 1989</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Ty Coon, President of Vice</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This General Public License does not permit incorporating your program into</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">proprietary programs. If your program is a subroutine library, you may</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">consider it more useful to permit linking proprietary applications with the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">library. If this is what you want to do, use the GNU Library General</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Public License instead of this License.</span></p></body></html> - - AudioEngineInfoForm @@ -614,6 +269,25 @@ + ComponentMixerLine + + Mute + ミュート + + + Solo + ソロ + + + Component name + + + + Set instrument volume [%1] + インストルメントの音量設定 [%1] + + + Director Director @@ -628,92 +302,52 @@ - DownloadWidget + DonationDialog - (%1/%2 KiB) - ETA %3 - + Donations + - DrumkitManager_UI - - Drumkit name - ドラムキット名 - - - Delete drumkit - ドラムキットの削除 - - - Load drumkit - ドラムキットの読み込み - - - Load - 読み込み - - - Author - 作者 - + DonationDialog_UI - Info - 情報 + Form + - Save - 保存 + Donate! + - Browse - 参照 + Choose random entry. + - Import - インポート + <html><head/><body><p align="justify">Hydrogen is an open source project which is developed by multiple people in their spare time. By making a donation you can say &quot;thank you&quot; to the involved persons.</p></body></html> + - Drumkit filename - ドラムキットのファイル名 + Sebastian Moors (aka mauser): Maintainer / Developer + - Export - エクスポート + Michael Wolkstein (aka wolke): Forum hosting + + + + Download - Drumkit directory - ドラムキットのディレクトリ + Importing item failed: %1 + + + + DownloadWidget - Form1 + (%1/%2 KiB) - ETA %3 - - ### Drumkit author - ### ドラムキットの作者 - - - ### Drumkit info - ### ドラムキットの情報 - - - ### The drumkit will be installed zncxbmzbxcmznxbcmz - ### ドラムキットがインストールされます zncxbmzbxcmznxbcmz - - - ### Drumkit name - ### ドラムキットの名前 - - - <b> -Download more drumkits at <br> -http://www.hydrogen-music.org -</b> - <b> -以下のURLから、より多くのドラムキットをダウンロードできます<br> -http://www.hydrogen-music.org -</b> - ExportSongDialog @@ -899,11 +533,15 @@ - Enable use of rubberband batch processor + 88200 + + + + Enable use of rubberband's batch processor - Rubberbad Batch + Rubberband Batch @@ -967,6 +605,14 @@ Saving of this drumkit failed. + + Open Image + + + + Image Files (*.png *.jpg *.jpeg) + + HydrogenApp @@ -986,6 +632,10 @@ Mixer ミキサー + + modified + + InstrumentEditor @@ -1058,8 +708,32 @@ 次のノートサンプルがセットされたら現在のインストルメントノートの再生を停止する。 - Auto-Stop-Note - ノート再生の自動停止 + New component name + + + + Component name + + + + Midi out channel + + + + Midi out note + + + + Component volume + + + + Don't change the layers' gain based on velocity + + + + Select pattern size + パターンサイズの選択 @@ -1112,6 +786,22 @@ Solo ソロ + + Copy notes ... + + + + Only for this pattern + + + + For all patterns + + + + Paste notes ... + + InstrumentRack @@ -1354,11 +1044,8 @@ LayerPreview - Layer %1: Min. velocity = %2, Max. velocity = %3 - - - - Velocity = %1 + Dec. = %1 +MIDI = %2 @@ -1485,10 +1172,6 @@ デバッグ(&B) - &Project - プロジェクト(&P) - - Save &as... 名前を付けて保存(&A)... @@ -1658,6 +1341,40 @@ Report bug + + Export &LilyPond file + + + + Donate + + + + +The LilyPond export is an experimental feature. +It should work like a charm provided that you use the GM-kit, and that you do not use triplet + + + + + LilyPond file (*.ly) + + + + Export LilyPond file + + + + +The current playlist contains unsaved changes. +Do you want to discard the changes? + + + + + Pro&ject + + MasterMixerLine @@ -1691,6 +1408,17 @@ + MidiSenseWidget + + This element is not midi operable. + + + + Waiting for midi input... + + + + MidiTable Event @@ -2327,10 +2055,6 @@ プレイリストブラウザー - No song selected! - ソングが選択されていません! - - Playlist: set song no. %1 プレイリスト: ソング No. %1 に設定 @@ -2342,6 +2066,29 @@ &New Playlist + + File not found: + + + + No valid song selected! + + + + +The current playlist contains unsaved changes. +Do you want to discard the changes? + + + + + &Discard + 破棄(&D) + + + &Cancel + キャンセル(&C) + PlaylistDialog_UI @@ -2418,6 +2165,30 @@ &Cancel キャンセル(&C) + + Automatic + + + + Steps + + + + Fixed + + + + <b>PulseAudio Driver</b><br> + + + + Number of steps + + + + Color (Hue value) + + PreferencesDialog_UI @@ -2470,10 +2241,6 @@ フォントの選択 - <i>After a font change the application must be restarted.</i> - <i>フォントの変更は再起動後に有効となります。</i> - - Sample rate サンプルレート @@ -2725,6 +2492,30 @@ Tabbed + + TextLabel + + + + Coloring method for Song Editor elements + + + + <html><head/><body><p><span style=" font-style:italic;">After changing a font or the interface layout the application must be restarted.</span></p></body></html> + + + + Use relative paths for playlist + + + + Use output note as input note + + + + Discard midi messages after action has been triggered + + SampleEditor @@ -3137,10 +2928,6 @@ シングルパターンモード - not_categorized - 未分類 - - Enable time line edit タイムライン編集を有効にする @@ -3344,13 +3131,41 @@ ダイアログ - Browse - 参照 - - Export エクスポート + + Drumkit + + + + Component + + + + Path + + + + Version + + + + Browse... + 参照... + + + 0.9.7 and higher + + + + 0.9.6 and lower + + + + Cancel + キャンセル + SoundLibraryImportDialog @@ -3411,8 +3226,12 @@ パターン - License: %1 - ライセンス: %1 + Drumkit License: %1 + + + + Image License: %1 + @@ -3434,10 +3253,6 @@ サウンドライブラリー名 - Sound library Info - サウンドライブラリー情報 - - Author... 作者... @@ -3462,10 +3277,6 @@ - License... - ライセンス... - - Edit server list サーバーリストの編集 @@ -3473,6 +3284,18 @@ Close 閉じる + + TextLabel + + + + Image License... + + + + Drumkit License... + + SoundLibraryPanel @@ -3545,6 +3368,17 @@ Drumkit deletion failed. + + The existing kit has %1 instruments but the new one only has %2. +The first %2 instruments will be replaced with the new intruments and will keep their notes, but some of the remaining instruments have notes. +Would you like to keep or discard the remaining instruments and notes? + + + + + Keep + + SoundLibraryPropertiesDialog_UI @@ -3565,10 +3399,6 @@ 情報 - License - ライセンス - - Save 保存 @@ -3580,6 +3410,22 @@ Save changes made to instruments into sound library インストルメントの変更をサウンドライブラリーに保存します + + Drumkit License + + + + Image + + + + Browse + 参照 + + + Image License + + SoundLibraryRepositoryDialog @@ -3622,7 +3468,19 @@ - Saving of this drumkit failed. + A library with the same name already exists. Do you want to overwrite the existing library? + + + + Saving of this library failed. + + + + Open Image + + + + Image Files (*.png *.jpg *.jpeg) @@ -3656,6 +3514,18 @@ Save 保存 + + Image + + + + Browse + 参照 + + + Image License + + SoundLibraryTree Binary files /tmp/tmpktOUQO/kmAosGw3t1/hydrogen-0.9.6.1/data/i18n/hydrogen.nl.qm and /tmp/tmpktOUQO/ALHtWJIToj/hydrogen-0.9.7/data/i18n/hydrogen.nl.qm differ diff -Nru hydrogen-0.9.6.1/data/i18n/hydrogen.nl.ts hydrogen-0.9.7/data/i18n/hydrogen.nl.ts --- hydrogen-0.9.6.1/data/i18n/hydrogen.nl.ts 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/data/i18n/hydrogen.nl.ts 2016-11-05 08:22:50.000000000 +0000 @@ -1,6 +1,6 @@ - + AboutDialog @@ -16,12 +16,16 @@ <b>Website</b><br> - <b>Mailing lists</b><br> - <b>Mailing lijst</b><br> + <b>Main coder and maintainer:</b><br> + - <b>Main coder and mantainer:</b><br> - <b>Hoofd programmeur:</b><br> + <b>Thanks to:</b> + + + + <b>Development mailing list</b><br> + @@ -54,355 +58,6 @@ Alt+O Alt+O - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This program is distributed under the terms of the GPL v2.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU GENERAL PUBLIC LICENSE</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Version 2, June 1991</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Copyright (C) 1989, 1991 Free Software Foundation, Inc.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 675 Mass Ave, Cambridge, MA 02139, USA</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Everyone is permitted to copy and distribute verbatim copies</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> of this license document, but changing it is not allowed.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Preamble</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> The licenses for most software are designed to take away your</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">freedom to share and change it. By contrast, the GNU General Public</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">License is intended to guarantee your freedom to share and change free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">software--to make sure the software is free for all its users. This</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">General Public License applies to most of the Free Software</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Foundation's software and to any other program whose authors commit to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">using it. (Some other Free Software Foundation software is covered by</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the GNU Library General Public License instead.) You can apply it to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">your programs, too.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> When we speak of free software, we are referring to freedom, not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">price. Our General Public Licenses are designed to make sure that you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">have the freedom to distribute copies of free software (and charge for</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this service if you wish), that you receive source code or can get it</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">if you want it, that you can change the software or use pieces of it</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">in new free programs; and that you know you can do these things.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> To protect your rights, we need to make restrictions that forbid</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">anyone to deny you these rights or to ask you to surrender the rights.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">These restrictions translate to certain responsibilities for you if you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute copies of the software, or if you modify it.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> For example, if you distribute copies of such a program, whether</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">gratis or for a fee, you must give the recipients all the rights that</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">you have. You must make sure that they, too, receive or can get the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">source code. And you must show them these terms so they know their</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">rights.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> We protect your rights with two steps: (1) copyright the software, and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">(2) offer you this license which gives you legal permission to copy,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute and/or modify the software.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Also, for each author's protection and ours, we want to make certain</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that everyone understands that there is no warranty for this free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">software. If the software is modified by someone else and passed on, we</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">want its recipients to know that what they have is not the original, so</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that any problems introduced by others will not reflect on the original</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">authors' reputations.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Finally, any free program is threatened constantly by software</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patents. We wish to avoid the danger that redistributors of a free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">program will individually obtain patent licenses, in effect making the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">program proprietary. To prevent this, we have made it clear that any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patent must be licensed for everyone's free use or not licensed at all.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> The precise terms and conditions for copying, distribution and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">modification follow.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU GENERAL PUBLIC LICENSE</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 0. This License applies to any program or other work which contains</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">a notice placed by the copyright holder saying it may be distributed</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">under the terms of this General Public License. The &quot;Program&quot;, below,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">refers to any such program or work, and a &quot;work based on the Program&quot;</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">means either the Program or any derivative work under copyright law:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that is to say, a work containing the Program or a portion of it,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">either verbatim or with modifications and/or translated into another</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">language. (Hereinafter, translation is included without limitation in</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the term &quot;modification&quot;.) Each licensee is addressed as &quot;you&quot;.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Activities other than copying, distribution and modification are not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">covered by this License; they are outside its scope. The act of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">running the Program is not restricted, and the output from the Program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">is covered only if its contents constitute a work based on the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program (independent of having been made by running the Program).</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Whether that is true depends on what the Program does.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 1. You may copy and distribute verbatim copies of the Program's</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">source code as you receive it, in any medium, provided that you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">conspicuously and appropriately publish on each copy an appropriate</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">copyright notice and disclaimer of warranty; keep intact all the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">notices that refer to this License and to the absence of any warranty;</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">and give any other recipients of the Program a copy of this License</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">along with the Program.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You may charge a fee for the physical act of transferring a copy, and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">you may at your option offer warranty protection in exchange for a fee.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 2. You may modify your copy or copies of the Program or any portion</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of it, thus forming a work based on the Program, and copy and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute such modifications or work under the terms of Section 1</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">above, provided that you also meet all of these conditions:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a) You must cause the modified files to carry prominent notices</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> stating that you changed the files and the date of any change.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> b) You must cause any work that you distribute or publish, that in</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> whole or in part contains or is derived from the Program or any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> part thereof, to be licensed as a whole at no charge to all third</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> parties under the terms of this License.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> c) If the modified program normally reads commands interactively</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> when run, you must cause it, when started running for such</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> interactive use in the most ordinary way, to print or display an</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> announcement including an appropriate copyright notice and a</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> notice that there is no warranty (or else, saying that you provide</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a warranty) and that users may redistribute the program under</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> these conditions, and telling the user how to view a copy of this</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> License. (Exception: if the Program itself is interactive but</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> does not normally print such an announcement, your work based on</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> the Program is not required to print an announcement.)</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">These requirements apply to the modified work as a whole. If</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">identifiable sections of that work are not derived from the Program,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">and can be reasonably considered independent and separate works in</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">themselves, then this License, and its terms, do not apply to those</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">sections when you distribute them as separate works. But when you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute the same sections as part of a whole which is a work based</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">on the Program, the distribution of the whole must be on the terms of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License, whose permissions for other licensees extend to the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">entire whole, and thus to each and every part regardless of who wrote it.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Thus, it is not the intent of this section to claim rights or contest</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">your rights to work written entirely by you; rather, the intent is to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">exercise the right to control the distribution of derivative or</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">collective works based on the Program.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">In addition, mere aggregation of another work not based on the Program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">with the Program (or with a work based on the Program) on a volume of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">a storage or distribution medium does not bring the other work under</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the scope of this License.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 3. You may copy and distribute the Program (or a work based on it,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">under Section 2) in object code or executable form under the terms of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Sections 1 and 2 above provided that you also do one of the following:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a) Accompany it with the complete corresponding machine-readable</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> source code, which must be distributed under the terms of Sections</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 1 and 2 above on a medium customarily used for software interchange; or,</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> b) Accompany it with a written offer, valid for at least three</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> years, to give any third party, for a charge no more than your</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> cost of physically performing source distribution, a complete</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> machine-readable copy of the corresponding source code, to be</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> distributed under the terms of Sections 1 and 2 above on a medium</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> customarily used for software interchange; or,</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> c) Accompany it with the information you received as to the offer</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> to distribute corresponding source code. (This alternative is</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> allowed only for noncommercial distribution and only if you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> received the program in object code or executable form with such</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> an offer, in accord with Subsection b above.)</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">The source code for a work means the preferred form of the work for</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">making modifications to it. For an executable work, complete source</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">code means all the source code for all modules it contains, plus any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">associated interface definition files, plus the scripts used to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">control compilation and installation of the executable. However, as a</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">special exception, the source code distributed need not include</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">anything that is normally distributed (in either source or binary</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">form) with the major components (compiler, kernel, and so on) of the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">operating system on which the executable runs, unless that component</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">itself accompanies the executable.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If distribution of executable or object code is made by offering</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">access to copy from a designated place, then offering equivalent</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">access to copy the source code from the same place counts as</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribution of the source code, even though third parties are not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">compelled to copy the source along with the object code.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 4. You may not copy, modify, sublicense, or distribute the Program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">except as expressly provided under this License. Any attempt</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">otherwise to copy, modify, sublicense or distribute the Program is</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">void, and will automatically terminate your rights under this License.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">However, parties who have received copies, or rights, from you under</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License will not have their licenses terminated so long as such</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">parties remain in full compliance.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 5. You are not required to accept this License, since you have not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">signed it. However, nothing else grants you permission to modify or</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute the Program or its derivative works. These actions are</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">prohibited by law if you do not accept this License. Therefore, by</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">modifying or distributing the Program (or any work based on the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program), you indicate your acceptance of this License to do so, and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">all its terms and conditions for copying, distributing or modifying</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the Program or works based on it.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 6. Each time you redistribute the Program (or any work based on the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program), the recipient automatically receives a license from the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">original licensor to copy, distribute or modify the Program subject to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">these terms and conditions. You may not impose any further</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">restrictions on the recipients' exercise of the rights granted herein.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You are not responsible for enforcing compliance by third parties to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 7. If, as a consequence of a court judgment or allegation of patent</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">infringement or for any other reason (not limited to patent issues),</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">conditions are imposed on you (whether by court order, agreement or</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">otherwise) that contradict the conditions of this License, they do not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">excuse you from the conditions of this License. If you cannot</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute so as to satisfy simultaneously your obligations under this</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">License and any other pertinent obligations, then as a consequence you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">may not distribute the Program at all. For example, if a patent</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">license would not permit royalty-free redistribution of the Program by</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">all those who receive copies directly or indirectly through you, then</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the only way you could satisfy both it and this License would be to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">refrain entirely from distribution of the Program.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If any portion of this section is held invalid or unenforceable under</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">any particular circumstance, the balance of the section is intended to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">apply and the section as a whole is intended to apply in other</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">circumstances.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">It is not the purpose of this section to induce you to infringe any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patents or other property right claims or to contest validity of any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">such claims; this section has the sole purpose of protecting the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">integrity of the free software distribution system, which is</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">implemented by public license practices. Many people have made</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">generous contributions to the wide range of software distributed</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">through that system in reliance on consistent application of that</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">system; it is up to the author/donor to decide if he or she is willing</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to distribute software through any other system and a licensee cannot</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">impose that choice.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This section is intended to make thoroughly clear what is believed to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be a consequence of the rest of this License.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 8. If the distribution and/or use of the Program is restricted in</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">certain countries either by patents or by copyrighted interfaces, the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">original copyright holder who places the Program under this License</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">may add an explicit geographical distribution limitation excluding</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">those countries, so that distribution is permitted only in or among</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">countries not thus excluded. In such case, this License incorporates</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the limitation as if written in the body of this License.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 9. The Free Software Foundation may publish revised and/or new versions</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of the General Public License from time to time. Such new versions will</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be similar in spirit to the present version, but may differ in detail to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">address new problems or concerns.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Each version is given a distinguishing version number. If the Program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">specifies a version number of this License which applies to it and &quot;any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">later version&quot;, you have the option of following the terms and conditions</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">either of that version or of any later version published by the Free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Software Foundation. If the Program does not specify a version number of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License, you may choose any version ever published by the Free Software</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Foundation.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 10. If you wish to incorporate parts of the Program into other free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">programs whose distribution conditions are different, write to the author</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to ask for permission. For software which is copyrighted by the Free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Software Foundation, write to the Free Software Foundation; we sometimes</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">make exceptions for this. Our decision will be guided by the two goals</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of preserving the free status of all derivatives of our free software and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of promoting the sharing and reuse of software generally.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> NO WARRANTY</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROVIDE THE PROGRAM &quot;AS IS&quot; WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">REPAIR OR CORRECTION.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">POSSIBILITY OF SUCH DAMAGES.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> END OF TERMS AND CONDITIONS</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> How to Apply These Terms to Your New Programs</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> If you develop a new program, and you want it to be of the greatest</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">possible use to the public, the best way to achieve this is to make it</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">free software which everyone can redistribute and change under these terms.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> To do so, attach the following notices to the program. It is safest</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to attach them to the start of each source file to most effectively</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">convey the exclusion of warranty; and each file should have at least</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the &quot;copyright&quot; line and a pointer to where the full notice is found.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> &lt;one line to give the program's name and a brief idea of what it does.&gt;</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Copyright (C) 19yy &lt;name of author&gt;</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This program is free software; you can redistribute it and/or modify</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> it under the terms of the GNU General Public License as published by</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> the Free Software Foundation; either version 2 of the License, or</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> (at your option) any later version.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This program is distributed in the hope that it will be useful,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> but WITHOUT ANY WARRANTY; without even the implied warranty of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU General Public License for more details.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> You should have received a copy of the GNU General Public License</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> along with this program; if not, write to the Free Software</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Also add information on how to contact you by electronic and paper mail.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If the program is interactive, make it output a short notice like this</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">when it starts in an interactive mode:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Gnomovision version 69, Copyright (C) 19yy name of author</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This is free software, and you are welcome to redistribute it</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> under certain conditions; type `show c' for details.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">The hypothetical commands `show w' and `show c' should show the appropriate</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">parts of the General Public License. Of course, the commands you use may</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be called something other than `show w' and `show c'; they could even be</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">mouse-clicks or menu items--whatever suits your program.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You should also get your employer (if you work as a programmer) or your</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">school, if any, to sign a &quot;copyright disclaimer&quot; for the program, if</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">necessary. Here is a sample; alter the names:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Yoyodyne, Inc., hereby disclaims all copyright interest in the program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> `Gnomovision' (which makes passes at compilers) written by James Hacker.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> &lt;signature of Ty Coon&gt;, 1 April 1989</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Ty Coon, President of Vice</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This General Public License does not permit incorporating your program into</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">proprietary programs. If your program is a subroutine library, you may</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">consider it more useful to permit linking proprietary applications with the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">library. If this is what you want to do, use the GNU Library General</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Public License instead of this License.</span></p></body></html> - - AudioEngineInfoForm @@ -613,6 +268,25 @@ + ComponentMixerLine + + Mute + Dempen + + + Solo + Solo + + + Component name + + + + Set instrument volume [%1] + Instrument volume [%1] + + + Director Director @@ -627,91 +301,51 @@ - DownloadWidget + DonationDialog - (%1/%2 KiB) - ETA %3 - (%1/%2 KiB) - Geschatte tijd: %3 + Donations + - DrumkitManager_UI + DonationDialog_UI - Form1 - Form1 - - - Load - Laden - - - Load drumkit - Drumkit laden - - - Delete drumkit - Verwijderen - - - ### Drumkit info - ### Drumkit info - - - ### Drumkit author - ### Drumkit auteur - - - ### Drumkit name - ### Drumkit naam - - - Save - Opslaan - - - Author - Auteur - - - Info - Info - - - Drumkit name - Drumkit naam + Form + - Import - Importeren + Donate! + - Browse - Bladeren + Choose random entry. + - Drumkit filename - Drumkit bestandsnaam + <html><head/><body><p align="justify">Hydrogen is an open source project which is developed by multiple people in their spare time. By making a donation you can say &quot;thank you&quot; to the involved persons.</p></body></html> + - ### The drumkit will be installed zncxbmzbxcmznxbcmz - ### De drumkit zal geïnstalleerd worden zncxbmzbxcmznxbcmz + Sebastian Moors (aka mauser): Maintainer / Developer + - <b> -Download more drumkits at <br> -http://www.hydrogen-music.org -</b> - <b> -Dowload meer drumkits op <br> -http://www.hydrogen-music.org -</b> + Michael Wolkstein (aka wolke): Forum hosting + + + + Download - Export - Exporteren + Importing item failed: %1 + + + + DownloadWidget - Drumkit directory - Drumkit map + (%1/%2 KiB) - ETA %3 + (%1/%2 KiB) - Geschatte tijd: %3 @@ -897,11 +531,15 @@ - Enable use of rubberband batch processor + 88200 + 88200 + + + Enable use of rubberband's batch processor - Rubberbad Batch + Rubberband Batch @@ -965,6 +603,14 @@ Saving of this drumkit failed. + + Open Image + + + + Image Files (*.png *.jpg *.jpeg) + + HydrogenApp @@ -984,6 +630,10 @@ Mixer Mixer + + modified + + InstrumentEditor @@ -1056,9 +706,33 @@ - Auto-Stop-Note + New component name + + + + Component name + + Midi out channel + + + + Midi out note + + + + Component volume + + + + Don't change the layers' gain based on velocity + + + + Select pattern size + Selecteer patroon groote + InstrumentLine @@ -1110,6 +784,22 @@ Solo Solo + + Copy notes ... + + + + Only for this pattern + + + + For all patterns + + + + Paste notes ... + + InstrumentRack @@ -1329,11 +1019,8 @@ LayerPreview - Layer %1: Min. velocity = %2, Max. velocity = %3 - - - - Velocity = %1 + Dec. = %1 +MIDI = %2 @@ -1456,10 +1143,6 @@ Jack driver: fout in het poort register - &Project - &Project - - Save &as... Opslaan &als ... @@ -1633,6 +1316,40 @@ Report bug + + Export &LilyPond file + + + + Donate + + + + +The LilyPond export is an experimental feature. +It should work like a charm provided that you use the GM-kit, and that you do not use triplet + + + + + LilyPond file (*.ly) + + + + Export LilyPond file + + + + +The current playlist contains unsaved changes. +Do you want to discard the changes? + + + + + Pro&ject + + MasterMixerLine @@ -1666,6 +1383,17 @@ + MidiSenseWidget + + This element is not midi operable. + + + + Waiting for midi input... + + + + MidiTable Event @@ -2298,10 +2026,6 @@ - No song selected! - - - Playlist: set song no. %1 @@ -2313,6 +2037,29 @@ &New Playlist + + File not found: + + + + No valid song selected! + + + + +The current playlist contains unsaved changes. +Do you want to discard the changes? + + + + + &Discard + &Negeren + + + &Cancel + &Annuleren + PlaylistDialog_UI @@ -2388,6 +2135,30 @@ &Cancel &Annuleren + + Automatic + + + + Steps + + + + Fixed + + + + <b>PulseAudio Driver</b><br> + + + + Number of steps + + + + Color (Hue value) + + PreferencesDialog_UI @@ -2592,10 +2363,6 @@ Meters afval snelheid - <i>After a font change the application must be restarted.</i> - <i>Na het wijzigen van een lettertype moet het programma herstart worden.</i> - - &Reopen last used song &Heropen laatst gebruikte opname @@ -2695,6 +2462,30 @@ Tabbed + + TextLabel + + + + Coloring method for Song Editor elements + + + + <html><head/><body><p><span style=" font-style:italic;">After changing a font or the interface layout the application must be restarted.</span></p></body></html> + + + + Use relative paths for playlist + + + + Use output note as input note + + + + Discard midi messages after action has been triggered + + SampleEditor @@ -3095,10 +2886,6 @@ - not_categorized - - - Enable time line edit @@ -3301,13 +3088,41 @@ - Browse - Verkennen - - Export Exporteren + + Drumkit + + + + Component + + + + Path + + + + Version + + + + Browse... + Bladeren ... + + + 0.9.7 and higher + + + + 0.9.6 and lower + + + + Cancel + Annuleren + SoundLibraryImportDialog @@ -3368,8 +3183,12 @@ Patronen - License: %1 - Licentie: %1 + Drumkit License: %1 + + + + Image License: %1 + @@ -3391,10 +3210,6 @@ Geluid bibliotheek naam - Sound library Info - Geluid bibliotheek info - - Author... Auteur ... @@ -3419,10 +3234,6 @@ 1 - License... - Licentie ... - - Edit server list Bewerk server lijst @@ -3430,6 +3241,18 @@ Close Sluiten + + TextLabel + + + + Image License... + + + + Drumkit License... + + SoundLibraryPanel @@ -3502,6 +3325,17 @@ Drumkit deletion failed. + + The existing kit has %1 instruments but the new one only has %2. +The first %2 instruments will be replaced with the new intruments and will keep their notes, but some of the remaining instruments have notes. +Would you like to keep or discard the remaining instruments and notes? + + + + + Keep + + SoundLibraryPropertiesDialog_UI @@ -3522,10 +3356,6 @@ Informatie - License - Licientie - - Save Opslaan @@ -3537,6 +3367,22 @@ Save changes made to instruments into sound library Gemaakte wijzigingen opslaan in geluids bibliotheek + + Drumkit License + + + + Image + + + + Browse + Bladeren + + + Image License + + SoundLibraryRepositoryDialog @@ -3579,7 +3425,19 @@ - Saving of this drumkit failed. + A library with the same name already exists. Do you want to overwrite the existing library? + + + + Saving of this library failed. + + + + Open Image + + + + Image Files (*.png *.jpg *.jpeg) @@ -3613,6 +3471,18 @@ Save Opslaan + + Image + + + + Browse + Bladeren + + + Image License + + SoundLibraryTree Binary files /tmp/tmpktOUQO/kmAosGw3t1/hydrogen-0.9.6.1/data/i18n/hydrogen.pl.qm and /tmp/tmpktOUQO/ALHtWJIToj/hydrogen-0.9.7/data/i18n/hydrogen.pl.qm differ diff -Nru hydrogen-0.9.6.1/data/i18n/hydrogen.pl.ts hydrogen-0.9.7/data/i18n/hydrogen.pl.ts --- hydrogen-0.9.6.1/data/i18n/hydrogen.pl.ts 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/data/i18n/hydrogen.pl.ts 2016-11-05 08:22:50.000000000 +0000 @@ -1,6 +1,6 @@ - + AboutDialog @@ -16,12 +16,16 @@ <b>Strona projektu</b><br> - <b>Mailing lists</b><br> - <b>Listy dyskusyjne</b><br> + <b>Main coder and maintainer:</b><br> + - <b>Main coder and mantainer:</b><br> - <b>Główny programista i opiekun:</b><br> + <b>Thanks to:</b> + + + + <b>Development mailing list</b><br> + @@ -54,355 +58,6 @@ &License &Licencja - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This program is distributed under the terms of the GPL v2.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU GENERAL PUBLIC LICENSE</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Version 2, June 1991</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Copyright (C) 1989, 1991 Free Software Foundation, Inc.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 675 Mass Ave, Cambridge, MA 02139, USA</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Everyone is permitted to copy and distribute verbatim copies</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> of this license document, but changing it is not allowed.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Preamble</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> The licenses for most software are designed to take away your</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">freedom to share and change it. By contrast, the GNU General Public</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">License is intended to guarantee your freedom to share and change free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">software--to make sure the software is free for all its users. This</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">General Public License applies to most of the Free Software</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Foundation's software and to any other program whose authors commit to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">using it. (Some other Free Software Foundation software is covered by</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the GNU Library General Public License instead.) You can apply it to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">your programs, too.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> When we speak of free software, we are referring to freedom, not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">price. Our General Public Licenses are designed to make sure that you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">have the freedom to distribute copies of free software (and charge for</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this service if you wish), that you receive source code or can get it</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">if you want it, that you can change the software or use pieces of it</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">in new free programs; and that you know you can do these things.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> To protect your rights, we need to make restrictions that forbid</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">anyone to deny you these rights or to ask you to surrender the rights.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">These restrictions translate to certain responsibilities for you if you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute copies of the software, or if you modify it.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> For example, if you distribute copies of such a program, whether</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">gratis or for a fee, you must give the recipients all the rights that</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">you have. You must make sure that they, too, receive or can get the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">source code. And you must show them these terms so they know their</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">rights.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> We protect your rights with two steps: (1) copyright the software, and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">(2) offer you this license which gives you legal permission to copy,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute and/or modify the software.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Also, for each author's protection and ours, we want to make certain</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that everyone understands that there is no warranty for this free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">software. If the software is modified by someone else and passed on, we</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">want its recipients to know that what they have is not the original, so</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that any problems introduced by others will not reflect on the original</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">authors' reputations.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Finally, any free program is threatened constantly by software</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patents. We wish to avoid the danger that redistributors of a free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">program will individually obtain patent licenses, in effect making the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">program proprietary. To prevent this, we have made it clear that any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patent must be licensed for everyone's free use or not licensed at all.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> The precise terms and conditions for copying, distribution and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">modification follow.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU GENERAL PUBLIC LICENSE</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 0. This License applies to any program or other work which contains</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">a notice placed by the copyright holder saying it may be distributed</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">under the terms of this General Public License. The &quot;Program&quot;, below,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">refers to any such program or work, and a &quot;work based on the Program&quot;</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">means either the Program or any derivative work under copyright law:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that is to say, a work containing the Program or a portion of it,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">either verbatim or with modifications and/or translated into another</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">language. (Hereinafter, translation is included without limitation in</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the term &quot;modification&quot;.) Each licensee is addressed as &quot;you&quot;.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Activities other than copying, distribution and modification are not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">covered by this License; they are outside its scope. The act of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">running the Program is not restricted, and the output from the Program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">is covered only if its contents constitute a work based on the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program (independent of having been made by running the Program).</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Whether that is true depends on what the Program does.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 1. You may copy and distribute verbatim copies of the Program's</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">source code as you receive it, in any medium, provided that you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">conspicuously and appropriately publish on each copy an appropriate</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">copyright notice and disclaimer of warranty; keep intact all the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">notices that refer to this License and to the absence of any warranty;</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">and give any other recipients of the Program a copy of this License</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">along with the Program.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You may charge a fee for the physical act of transferring a copy, and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">you may at your option offer warranty protection in exchange for a fee.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 2. You may modify your copy or copies of the Program or any portion</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of it, thus forming a work based on the Program, and copy and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute such modifications or work under the terms of Section 1</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">above, provided that you also meet all of these conditions:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a) You must cause the modified files to carry prominent notices</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> stating that you changed the files and the date of any change.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> b) You must cause any work that you distribute or publish, that in</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> whole or in part contains or is derived from the Program or any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> part thereof, to be licensed as a whole at no charge to all third</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> parties under the terms of this License.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> c) If the modified program normally reads commands interactively</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> when run, you must cause it, when started running for such</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> interactive use in the most ordinary way, to print or display an</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> announcement including an appropriate copyright notice and a</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> notice that there is no warranty (or else, saying that you provide</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a warranty) and that users may redistribute the program under</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> these conditions, and telling the user how to view a copy of this</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> License. (Exception: if the Program itself is interactive but</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> does not normally print such an announcement, your work based on</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> the Program is not required to print an announcement.)</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">These requirements apply to the modified work as a whole. If</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">identifiable sections of that work are not derived from the Program,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">and can be reasonably considered independent and separate works in</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">themselves, then this License, and its terms, do not apply to those</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">sections when you distribute them as separate works. But when you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute the same sections as part of a whole which is a work based</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">on the Program, the distribution of the whole must be on the terms of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License, whose permissions for other licensees extend to the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">entire whole, and thus to each and every part regardless of who wrote it.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Thus, it is not the intent of this section to claim rights or contest</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">your rights to work written entirely by you; rather, the intent is to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">exercise the right to control the distribution of derivative or</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">collective works based on the Program.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">In addition, mere aggregation of another work not based on the Program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">with the Program (or with a work based on the Program) on a volume of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">a storage or distribution medium does not bring the other work under</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the scope of this License.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 3. You may copy and distribute the Program (or a work based on it,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">under Section 2) in object code or executable form under the terms of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Sections 1 and 2 above provided that you also do one of the following:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a) Accompany it with the complete corresponding machine-readable</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> source code, which must be distributed under the terms of Sections</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 1 and 2 above on a medium customarily used for software interchange; or,</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> b) Accompany it with a written offer, valid for at least three</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> years, to give any third party, for a charge no more than your</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> cost of physically performing source distribution, a complete</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> machine-readable copy of the corresponding source code, to be</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> distributed under the terms of Sections 1 and 2 above on a medium</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> customarily used for software interchange; or,</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> c) Accompany it with the information you received as to the offer</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> to distribute corresponding source code. (This alternative is</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> allowed only for noncommercial distribution and only if you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> received the program in object code or executable form with such</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> an offer, in accord with Subsection b above.)</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">The source code for a work means the preferred form of the work for</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">making modifications to it. For an executable work, complete source</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">code means all the source code for all modules it contains, plus any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">associated interface definition files, plus the scripts used to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">control compilation and installation of the executable. However, as a</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">special exception, the source code distributed need not include</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">anything that is normally distributed (in either source or binary</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">form) with the major components (compiler, kernel, and so on) of the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">operating system on which the executable runs, unless that component</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">itself accompanies the executable.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If distribution of executable or object code is made by offering</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">access to copy from a designated place, then offering equivalent</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">access to copy the source code from the same place counts as</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribution of the source code, even though third parties are not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">compelled to copy the source along with the object code.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 4. You may not copy, modify, sublicense, or distribute the Program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">except as expressly provided under this License. Any attempt</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">otherwise to copy, modify, sublicense or distribute the Program is</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">void, and will automatically terminate your rights under this License.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">However, parties who have received copies, or rights, from you under</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License will not have their licenses terminated so long as such</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">parties remain in full compliance.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 5. You are not required to accept this License, since you have not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">signed it. However, nothing else grants you permission to modify or</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute the Program or its derivative works. These actions are</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">prohibited by law if you do not accept this License. Therefore, by</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">modifying or distributing the Program (or any work based on the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program), you indicate your acceptance of this License to do so, and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">all its terms and conditions for copying, distributing or modifying</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the Program or works based on it.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 6. Each time you redistribute the Program (or any work based on the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program), the recipient automatically receives a license from the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">original licensor to copy, distribute or modify the Program subject to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">these terms and conditions. You may not impose any further</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">restrictions on the recipients' exercise of the rights granted herein.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You are not responsible for enforcing compliance by third parties to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 7. If, as a consequence of a court judgment or allegation of patent</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">infringement or for any other reason (not limited to patent issues),</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">conditions are imposed on you (whether by court order, agreement or</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">otherwise) that contradict the conditions of this License, they do not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">excuse you from the conditions of this License. If you cannot</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute so as to satisfy simultaneously your obligations under this</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">License and any other pertinent obligations, then as a consequence you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">may not distribute the Program at all. For example, if a patent</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">license would not permit royalty-free redistribution of the Program by</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">all those who receive copies directly or indirectly through you, then</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the only way you could satisfy both it and this License would be to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">refrain entirely from distribution of the Program.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If any portion of this section is held invalid or unenforceable under</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">any particular circumstance, the balance of the section is intended to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">apply and the section as a whole is intended to apply in other</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">circumstances.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">It is not the purpose of this section to induce you to infringe any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patents or other property right claims or to contest validity of any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">such claims; this section has the sole purpose of protecting the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">integrity of the free software distribution system, which is</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">implemented by public license practices. Many people have made</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">generous contributions to the wide range of software distributed</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">through that system in reliance on consistent application of that</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">system; it is up to the author/donor to decide if he or she is willing</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to distribute software through any other system and a licensee cannot</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">impose that choice.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This section is intended to make thoroughly clear what is believed to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be a consequence of the rest of this License.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 8. If the distribution and/or use of the Program is restricted in</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">certain countries either by patents or by copyrighted interfaces, the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">original copyright holder who places the Program under this License</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">may add an explicit geographical distribution limitation excluding</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">those countries, so that distribution is permitted only in or among</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">countries not thus excluded. In such case, this License incorporates</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the limitation as if written in the body of this License.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 9. The Free Software Foundation may publish revised and/or new versions</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of the General Public License from time to time. Such new versions will</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be similar in spirit to the present version, but may differ in detail to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">address new problems or concerns.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Each version is given a distinguishing version number. If the Program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">specifies a version number of this License which applies to it and &quot;any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">later version&quot;, you have the option of following the terms and conditions</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">either of that version or of any later version published by the Free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Software Foundation. If the Program does not specify a version number of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License, you may choose any version ever published by the Free Software</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Foundation.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 10. If you wish to incorporate parts of the Program into other free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">programs whose distribution conditions are different, write to the author</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to ask for permission. For software which is copyrighted by the Free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Software Foundation, write to the Free Software Foundation; we sometimes</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">make exceptions for this. Our decision will be guided by the two goals</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of preserving the free status of all derivatives of our free software and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of promoting the sharing and reuse of software generally.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> NO WARRANTY</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROVIDE THE PROGRAM &quot;AS IS&quot; WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">REPAIR OR CORRECTION.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">POSSIBILITY OF SUCH DAMAGES.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> END OF TERMS AND CONDITIONS</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> How to Apply These Terms to Your New Programs</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> If you develop a new program, and you want it to be of the greatest</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">possible use to the public, the best way to achieve this is to make it</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">free software which everyone can redistribute and change under these terms.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> To do so, attach the following notices to the program. It is safest</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to attach them to the start of each source file to most effectively</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">convey the exclusion of warranty; and each file should have at least</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the &quot;copyright&quot; line and a pointer to where the full notice is found.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> &lt;one line to give the program's name and a brief idea of what it does.&gt;</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Copyright (C) 19yy &lt;name of author&gt;</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This program is free software; you can redistribute it and/or modify</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> it under the terms of the GNU General Public License as published by</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> the Free Software Foundation; either version 2 of the License, or</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> (at your option) any later version.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This program is distributed in the hope that it will be useful,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> but WITHOUT ANY WARRANTY; without even the implied warranty of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU General Public License for more details.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> You should have received a copy of the GNU General Public License</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> along with this program; if not, write to the Free Software</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Also add information on how to contact you by electronic and paper mail.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If the program is interactive, make it output a short notice like this</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">when it starts in an interactive mode:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Gnomovision version 69, Copyright (C) 19yy name of author</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This is free software, and you are welcome to redistribute it</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> under certain conditions; type `show c' for details.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">The hypothetical commands `show w' and `show c' should show the appropriate</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">parts of the General Public License. Of course, the commands you use may</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be called something other than `show w' and `show c'; they could even be</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">mouse-clicks or menu items--whatever suits your program.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You should also get your employer (if you work as a programmer) or your</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">school, if any, to sign a &quot;copyright disclaimer&quot; for the program, if</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">necessary. Here is a sample; alter the names:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Yoyodyne, Inc., hereby disclaims all copyright interest in the program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> `Gnomovision' (which makes passes at compilers) written by James Hacker.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> &lt;signature of Ty Coon&gt;, 1 April 1989</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Ty Coon, President of Vice</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This General Public License does not permit incorporating your program into</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">proprietary programs. If your program is a subroutine library, you may</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">consider it more useful to permit linking proprietary applications with the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">library. If this is what you want to do, use the GNU Library General</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Public License instead of this License.</span></p></body></html> - - AudioEngineInfoForm @@ -613,6 +268,25 @@ + ComponentMixerLine + + Mute + Wyciszenie + + + Solo + Solo + + + Component name + + + + Set instrument volume [%1] + Ustawia głośność instrumentu [%1] + + + Director Director @@ -627,89 +301,51 @@ - DownloadWidget + DonationDialog - (%1/%2 KiB) - ETA %3 + Donations - DrumkitManager_UI + DonationDialog_UI - Form1 - Formularz1 - - - Load - Ładuj - - - ### Drumkit author - ### Autor zestawu - - - Delete drumkit - Usuń zestaw perkusyjny - - - ### Drumkit name - ### nazwa zestawu - - - ### Drumkit info - ### informacje o zestawie - - - Load drumkit - Ładuj zestaw perkusyjny - - - Save - Zachowaj - - - Author - Autor - - - Info - Informacja - - - Drumkit name - Nazwa zestawu + Form + - Import - Import + Donate! + - Drumkit filename - nazwa pliku zestawu + Choose random entry. + - Browse - Przeglądaj + <html><head/><body><p align="justify">Hydrogen is an open source project which is developed by multiple people in their spare time. By making a donation you can say &quot;thank you&quot; to the involved persons.</p></body></html> + - <b> -Download more drumkits at <br> -http://www.hydrogen-music.org -</b> - <b>Więcej zestawów perkusyjnych ściągniesz z <br>http://www.hydrogen-music.org -</b> + Sebastian Moors (aka mauser): Maintainer / Developer + - ### The drumkit will be installed zncxbmzbxcmznxbcmz - ### Zestaw perkusyjny zostanie zainstalowany + Michael Wolkstein (aka wolke): Forum hosting + + + + Download - Export - Eksportuj + Importing item failed: %1 + + + + DownloadWidget - Drumkit directory - katalog zestawów + (%1/%2 KiB) - ETA %3 + @@ -895,11 +531,15 @@ - Enable use of rubberband batch processor + 88200 + 88200 + + + Enable use of rubberband's batch processor - Rubberbad Batch + Rubberband Batch @@ -962,6 +602,14 @@ Saving of this drumkit failed. + + Open Image + + + + Image Files (*.png *.jpg *.jpeg) + + HydrogenApp @@ -981,6 +629,10 @@ Mixer Mikser + + modified + + InstrumentEditor @@ -1053,9 +705,33 @@ - Auto-Stop-Note + New component name + + + + Component name + + + + Midi out channel + + + + Midi out note + + + + Component volume + + Don't change the layers' gain based on velocity + + + + Select pattern size + Wybór rozmiaru układu rytmicznego + InstrumentLine @@ -1107,6 +783,22 @@ Solo Solo + + Copy notes ... + + + + Only for this pattern + + + + For all patterns + + + + Paste notes ... + + InstrumentRack @@ -1323,11 +1015,8 @@ LayerPreview - Layer %1: Min. velocity = %2, Max. velocity = %3 - - - - Velocity = %1 + Dec. = %1 +MIDI = %2 @@ -1338,10 +1027,6 @@ Hydrogen Gotowy. - &Project - &Projekt - - &New &Nowy @@ -1626,6 +1311,40 @@ Report bug + + Export &LilyPond file + + + + Donate + + + + +The LilyPond export is an experimental feature. +It should work like a charm provided that you use the GM-kit, and that you do not use triplet + + + + + LilyPond file (*.ly) + + + + Export LilyPond file + + + + +The current playlist contains unsaved changes. +Do you want to discard the changes? + + + + + Pro&ject + + MasterMixerLine @@ -1659,6 +1378,17 @@ + MidiSenseWidget + + This element is not midi operable. + + + + Waiting for midi input... + + + + MidiTable Event @@ -2291,10 +2021,6 @@ - No song selected! - - - Playlist: set song no. %1 @@ -2306,6 +2032,29 @@ &New Playlist + + File not found: + + + + No valid song selected! + + + + +The current playlist contains unsaved changes. +Do you want to discard the changes? + + + + + &Discard + &Porzuć + + + &Cancel + &Anuluj + PlaylistDialog_UI @@ -2381,6 +2130,30 @@ &Cancel &Anuluj + + Automatic + + + + Steps + + + + Fixed + + + + <b>PulseAudio Driver</b><br> + + + + Number of steps + + + + Color (Hue value) + + PreferencesDialog_UI @@ -2593,10 +2366,6 @@ Czcionka miksera - <i>After a font change the application must be restarted.</i> - <i>Po zmianie czcionki program musi zostać ponownie uruchomiony.</i> - - Restart output @@ -2688,6 +2457,30 @@ Tabbed + + TextLabel + + + + Coloring method for Song Editor elements + + + + <html><head/><body><p><span style=" font-style:italic;">After changing a font or the interface layout the application must be restarted.</span></p></body></html> + + + + Use relative paths for playlist + + + + Use output note as input note + + + + Discard midi messages after action has been triggered + + SampleEditor @@ -3088,10 +2881,6 @@ - not_categorized - - - Enable time line edit @@ -3294,13 +3083,41 @@ Dialog - Browse - Przeglądaj - - Export Eksportuj + + Drumkit + + + + Component + + + + Path + + + + Version + + + + Browse... + Przeglądaj... + + + 0.9.7 and higher + + + + 0.9.6 and lower + + + + Cancel + Anuluj + SoundLibraryImportDialog @@ -3361,7 +3178,11 @@ Układy - License: %1 + Drumkit License: %1 + + + + Image License: %1 @@ -3384,10 +3205,6 @@ Nazwa Biblioteki Dźwięków - Sound library Info - Informacje o Bibliotece Dźwięków - - Author... Autor... @@ -3412,15 +3229,23 @@ 1 - License... + Edit server list - Edit server list + Close - Close + TextLabel + + + + Image License... + + + + Drumkit License... @@ -3494,6 +3319,17 @@ Drumkit deletion failed. + + The existing kit has %1 instruments but the new one only has %2. +The first %2 instruments will be replaced with the new intruments and will keep their notes, but some of the remaining instruments have notes. +Would you like to keep or discard the remaining instruments and notes? + + + + + Keep + + SoundLibraryPropertiesDialog_UI @@ -3514,10 +3350,6 @@ Informacja - License - - - Save @@ -3529,6 +3361,22 @@ Save changes made to instruments into sound library + + Drumkit License + + + + Image + + + + Browse + Przeglądaj + + + Image License + + SoundLibraryRepositoryDialog @@ -3571,7 +3419,19 @@ - Saving of this drumkit failed. + A library with the same name already exists. Do you want to overwrite the existing library? + + + + Saving of this library failed. + + + + Open Image + + + + Image Files (*.png *.jpg *.jpeg) @@ -3605,6 +3465,18 @@ Save + + Image + + + + Browse + Przeglądaj + + + Image License + + SoundLibraryTree Binary files /tmp/tmpktOUQO/kmAosGw3t1/hydrogen-0.9.6.1/data/i18n/hydrogen.pt_BR.qm and /tmp/tmpktOUQO/ALHtWJIToj/hydrogen-0.9.7/data/i18n/hydrogen.pt_BR.qm differ diff -Nru hydrogen-0.9.6.1/data/i18n/hydrogen.pt_BR.ts hydrogen-0.9.7/data/i18n/hydrogen.pt_BR.ts --- hydrogen-0.9.6.1/data/i18n/hydrogen.pt_BR.ts 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/data/i18n/hydrogen.pt_BR.ts 2016-11-05 08:22:50.000000000 +0000 @@ -1,6 +1,6 @@ - + AboutDialog @@ -16,11 +16,15 @@ - <b>Mailing lists</b><br> + <b>Main coder and maintainer:</b><br> - <b>Main coder and mantainer:</b><br> + <b>Thanks to:</b> + + + + <b>Development mailing list</b><br> @@ -54,355 +58,6 @@ ### - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This program is distributed under the terms of the GPL v2.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU GENERAL PUBLIC LICENSE</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Version 2, June 1991</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Copyright (C) 1989, 1991 Free Software Foundation, Inc.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 675 Mass Ave, Cambridge, MA 02139, USA</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Everyone is permitted to copy and distribute verbatim copies</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> of this license document, but changing it is not allowed.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Preamble</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> The licenses for most software are designed to take away your</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">freedom to share and change it. By contrast, the GNU General Public</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">License is intended to guarantee your freedom to share and change free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">software--to make sure the software is free for all its users. This</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">General Public License applies to most of the Free Software</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Foundation's software and to any other program whose authors commit to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">using it. (Some other Free Software Foundation software is covered by</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the GNU Library General Public License instead.) You can apply it to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">your programs, too.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> When we speak of free software, we are referring to freedom, not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">price. Our General Public Licenses are designed to make sure that you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">have the freedom to distribute copies of free software (and charge for</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this service if you wish), that you receive source code or can get it</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">if you want it, that you can change the software or use pieces of it</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">in new free programs; and that you know you can do these things.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> To protect your rights, we need to make restrictions that forbid</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">anyone to deny you these rights or to ask you to surrender the rights.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">These restrictions translate to certain responsibilities for you if you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute copies of the software, or if you modify it.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> For example, if you distribute copies of such a program, whether</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">gratis or for a fee, you must give the recipients all the rights that</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">you have. You must make sure that they, too, receive or can get the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">source code. And you must show them these terms so they know their</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">rights.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> We protect your rights with two steps: (1) copyright the software, and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">(2) offer you this license which gives you legal permission to copy,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute and/or modify the software.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Also, for each author's protection and ours, we want to make certain</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that everyone understands that there is no warranty for this free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">software. If the software is modified by someone else and passed on, we</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">want its recipients to know that what they have is not the original, so</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that any problems introduced by others will not reflect on the original</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">authors' reputations.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Finally, any free program is threatened constantly by software</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patents. We wish to avoid the danger that redistributors of a free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">program will individually obtain patent licenses, in effect making the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">program proprietary. To prevent this, we have made it clear that any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patent must be licensed for everyone's free use or not licensed at all.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> The precise terms and conditions for copying, distribution and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">modification follow.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU GENERAL PUBLIC LICENSE</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 0. This License applies to any program or other work which contains</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">a notice placed by the copyright holder saying it may be distributed</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">under the terms of this General Public License. The &quot;Program&quot;, below,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">refers to any such program or work, and a &quot;work based on the Program&quot;</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">means either the Program or any derivative work under copyright law:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that is to say, a work containing the Program or a portion of it,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">either verbatim or with modifications and/or translated into another</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">language. (Hereinafter, translation is included without limitation in</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the term &quot;modification&quot;.) Each licensee is addressed as &quot;you&quot;.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Activities other than copying, distribution and modification are not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">covered by this License; they are outside its scope. The act of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">running the Program is not restricted, and the output from the Program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">is covered only if its contents constitute a work based on the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program (independent of having been made by running the Program).</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Whether that is true depends on what the Program does.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 1. You may copy and distribute verbatim copies of the Program's</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">source code as you receive it, in any medium, provided that you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">conspicuously and appropriately publish on each copy an appropriate</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">copyright notice and disclaimer of warranty; keep intact all the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">notices that refer to this License and to the absence of any warranty;</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">and give any other recipients of the Program a copy of this License</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">along with the Program.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You may charge a fee for the physical act of transferring a copy, and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">you may at your option offer warranty protection in exchange for a fee.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 2. You may modify your copy or copies of the Program or any portion</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of it, thus forming a work based on the Program, and copy and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute such modifications or work under the terms of Section 1</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">above, provided that you also meet all of these conditions:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a) You must cause the modified files to carry prominent notices</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> stating that you changed the files and the date of any change.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> b) You must cause any work that you distribute or publish, that in</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> whole or in part contains or is derived from the Program or any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> part thereof, to be licensed as a whole at no charge to all third</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> parties under the terms of this License.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> c) If the modified program normally reads commands interactively</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> when run, you must cause it, when started running for such</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> interactive use in the most ordinary way, to print or display an</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> announcement including an appropriate copyright notice and a</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> notice that there is no warranty (or else, saying that you provide</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a warranty) and that users may redistribute the program under</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> these conditions, and telling the user how to view a copy of this</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> License. (Exception: if the Program itself is interactive but</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> does not normally print such an announcement, your work based on</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> the Program is not required to print an announcement.)</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">These requirements apply to the modified work as a whole. If</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">identifiable sections of that work are not derived from the Program,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">and can be reasonably considered independent and separate works in</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">themselves, then this License, and its terms, do not apply to those</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">sections when you distribute them as separate works. But when you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute the same sections as part of a whole which is a work based</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">on the Program, the distribution of the whole must be on the terms of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License, whose permissions for other licensees extend to the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">entire whole, and thus to each and every part regardless of who wrote it.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Thus, it is not the intent of this section to claim rights or contest</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">your rights to work written entirely by you; rather, the intent is to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">exercise the right to control the distribution of derivative or</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">collective works based on the Program.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">In addition, mere aggregation of another work not based on the Program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">with the Program (or with a work based on the Program) on a volume of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">a storage or distribution medium does not bring the other work under</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the scope of this License.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 3. You may copy and distribute the Program (or a work based on it,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">under Section 2) in object code or executable form under the terms of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Sections 1 and 2 above provided that you also do one of the following:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a) Accompany it with the complete corresponding machine-readable</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> source code, which must be distributed under the terms of Sections</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 1 and 2 above on a medium customarily used for software interchange; or,</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> b) Accompany it with a written offer, valid for at least three</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> years, to give any third party, for a charge no more than your</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> cost of physically performing source distribution, a complete</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> machine-readable copy of the corresponding source code, to be</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> distributed under the terms of Sections 1 and 2 above on a medium</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> customarily used for software interchange; or,</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> c) Accompany it with the information you received as to the offer</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> to distribute corresponding source code. (This alternative is</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> allowed only for noncommercial distribution and only if you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> received the program in object code or executable form with such</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> an offer, in accord with Subsection b above.)</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">The source code for a work means the preferred form of the work for</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">making modifications to it. For an executable work, complete source</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">code means all the source code for all modules it contains, plus any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">associated interface definition files, plus the scripts used to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">control compilation and installation of the executable. However, as a</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">special exception, the source code distributed need not include</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">anything that is normally distributed (in either source or binary</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">form) with the major components (compiler, kernel, and so on) of the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">operating system on which the executable runs, unless that component</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">itself accompanies the executable.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If distribution of executable or object code is made by offering</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">access to copy from a designated place, then offering equivalent</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">access to copy the source code from the same place counts as</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribution of the source code, even though third parties are not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">compelled to copy the source along with the object code.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 4. You may not copy, modify, sublicense, or distribute the Program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">except as expressly provided under this License. Any attempt</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">otherwise to copy, modify, sublicense or distribute the Program is</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">void, and will automatically terminate your rights under this License.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">However, parties who have received copies, or rights, from you under</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License will not have their licenses terminated so long as such</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">parties remain in full compliance.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 5. You are not required to accept this License, since you have not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">signed it. However, nothing else grants you permission to modify or</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute the Program or its derivative works. These actions are</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">prohibited by law if you do not accept this License. Therefore, by</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">modifying or distributing the Program (or any work based on the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program), you indicate your acceptance of this License to do so, and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">all its terms and conditions for copying, distributing or modifying</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the Program or works based on it.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 6. Each time you redistribute the Program (or any work based on the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program), the recipient automatically receives a license from the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">original licensor to copy, distribute or modify the Program subject to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">these terms and conditions. You may not impose any further</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">restrictions on the recipients' exercise of the rights granted herein.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You are not responsible for enforcing compliance by third parties to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 7. If, as a consequence of a court judgment or allegation of patent</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">infringement or for any other reason (not limited to patent issues),</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">conditions are imposed on you (whether by court order, agreement or</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">otherwise) that contradict the conditions of this License, they do not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">excuse you from the conditions of this License. If you cannot</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute so as to satisfy simultaneously your obligations under this</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">License and any other pertinent obligations, then as a consequence you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">may not distribute the Program at all. For example, if a patent</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">license would not permit royalty-free redistribution of the Program by</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">all those who receive copies directly or indirectly through you, then</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the only way you could satisfy both it and this License would be to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">refrain entirely from distribution of the Program.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If any portion of this section is held invalid or unenforceable under</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">any particular circumstance, the balance of the section is intended to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">apply and the section as a whole is intended to apply in other</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">circumstances.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">It is not the purpose of this section to induce you to infringe any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patents or other property right claims or to contest validity of any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">such claims; this section has the sole purpose of protecting the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">integrity of the free software distribution system, which is</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">implemented by public license practices. Many people have made</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">generous contributions to the wide range of software distributed</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">through that system in reliance on consistent application of that</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">system; it is up to the author/donor to decide if he or she is willing</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to distribute software through any other system and a licensee cannot</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">impose that choice.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This section is intended to make thoroughly clear what is believed to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be a consequence of the rest of this License.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 8. If the distribution and/or use of the Program is restricted in</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">certain countries either by patents or by copyrighted interfaces, the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">original copyright holder who places the Program under this License</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">may add an explicit geographical distribution limitation excluding</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">those countries, so that distribution is permitted only in or among</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">countries not thus excluded. In such case, this License incorporates</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the limitation as if written in the body of this License.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 9. The Free Software Foundation may publish revised and/or new versions</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of the General Public License from time to time. Such new versions will</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be similar in spirit to the present version, but may differ in detail to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">address new problems or concerns.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Each version is given a distinguishing version number. If the Program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">specifies a version number of this License which applies to it and &quot;any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">later version&quot;, you have the option of following the terms and conditions</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">either of that version or of any later version published by the Free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Software Foundation. If the Program does not specify a version number of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License, you may choose any version ever published by the Free Software</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Foundation.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 10. If you wish to incorporate parts of the Program into other free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">programs whose distribution conditions are different, write to the author</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to ask for permission. For software which is copyrighted by the Free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Software Foundation, write to the Free Software Foundation; we sometimes</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">make exceptions for this. Our decision will be guided by the two goals</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of preserving the free status of all derivatives of our free software and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of promoting the sharing and reuse of software generally.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> NO WARRANTY</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROVIDE THE PROGRAM &quot;AS IS&quot; WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">REPAIR OR CORRECTION.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">POSSIBILITY OF SUCH DAMAGES.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> END OF TERMS AND CONDITIONS</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> How to Apply These Terms to Your New Programs</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> If you develop a new program, and you want it to be of the greatest</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">possible use to the public, the best way to achieve this is to make it</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">free software which everyone can redistribute and change under these terms.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> To do so, attach the following notices to the program. It is safest</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to attach them to the start of each source file to most effectively</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">convey the exclusion of warranty; and each file should have at least</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the &quot;copyright&quot; line and a pointer to where the full notice is found.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> &lt;one line to give the program's name and a brief idea of what it does.&gt;</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Copyright (C) 19yy &lt;name of author&gt;</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This program is free software; you can redistribute it and/or modify</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> it under the terms of the GNU General Public License as published by</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> the Free Software Foundation; either version 2 of the License, or</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> (at your option) any later version.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This program is distributed in the hope that it will be useful,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> but WITHOUT ANY WARRANTY; without even the implied warranty of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU General Public License for more details.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> You should have received a copy of the GNU General Public License</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> along with this program; if not, write to the Free Software</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Also add information on how to contact you by electronic and paper mail.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If the program is interactive, make it output a short notice like this</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">when it starts in an interactive mode:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Gnomovision version 69, Copyright (C) 19yy name of author</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This is free software, and you are welcome to redistribute it</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> under certain conditions; type `show c' for details.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">The hypothetical commands `show w' and `show c' should show the appropriate</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">parts of the General Public License. Of course, the commands you use may</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be called something other than `show w' and `show c'; they could even be</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">mouse-clicks or menu items--whatever suits your program.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You should also get your employer (if you work as a programmer) or your</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">school, if any, to sign a &quot;copyright disclaimer&quot; for the program, if</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">necessary. Here is a sample; alter the names:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Yoyodyne, Inc., hereby disclaims all copyright interest in the program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> `Gnomovision' (which makes passes at compilers) written by James Hacker.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> &lt;signature of Ty Coon&gt;, 1 April 1989</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Ty Coon, President of Vice</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This General Public License does not permit incorporating your program into</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">proprietary programs. If your program is a subroutine library, you may</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">consider it more useful to permit linking proprietary applications with the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">library. If this is what you want to do, use the GNU Library General</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Public License instead of this License.</span></p></body></html> - - AudioEngineInfoForm @@ -613,6 +268,25 @@ + ComponentMixerLine + + Mute + Mudo + + + Solo + Solo + + + Component name + + + + Set instrument volume [%1] + Ajustar volume do instrumento [%1] + + + Director Director @@ -627,91 +301,50 @@ - DownloadWidget + DonationDialog - (%1/%2 KiB) - ETA %3 + Donations - DrumkitManager_UI - - Load - Carregar - - - Load drumkit - Carregar kit de bateria - - - Delete drumkit - Remover kit de bateria - - - ### Drumkit info - ### Informa�es sobre kit de bateria - - - ### Drumkit author - ### Autor do kit de beteria - - - ### Drumkit name - ### Nome do kit de bateria - - - Save - Salvar - - - Author - Autor - - - Info - Informa�o - - - Drumkit name - Nome do kit de bateria - + DonationDialog_UI - Import - Importar + Form + - Browse - Procurar + Donate! + - Drumkit filename - Nome do arquivo do kit + Choose random entry. + - ### The drumkit will be installed zncxbmzbxcmznxbcmz - ### O kit de bateria ser�instalado + <html><head/><body><p align="justify">Hydrogen is an open source project which is developed by multiple people in their spare time. By making a donation you can say &quot;thank you&quot; to the involved persons.</p></body></html> + - Export - Exportar + Sebastian Moors (aka mauser): Maintainer / Developer + - Drumkit directory - Diret�io do kit de bateria + Michael Wolkstein (aka wolke): Forum hosting + + + + Download - <b> -Download more drumkits at <br> -http://www.hydrogen-music.org -</b> - <b> -Obtenha mais kits em <br> -http://www.hydrogen-music.org -</b> - + Importing item failed: %1 + + + + DownloadWidget - Form1 + (%1/%2 KiB) - ETA %3 @@ -898,11 +531,15 @@ - Enable use of rubberband batch processor + 88200 - Rubberbad Batch + Enable use of rubberband's batch processor + + + + Rubberband Batch @@ -965,6 +602,14 @@ Saving of this drumkit failed. + + Open Image + + + + Image Files (*.png *.jpg *.jpeg) + + HydrogenApp @@ -984,6 +629,10 @@ Mixer Mixer + + modified + + InstrumentEditor @@ -1056,9 +705,33 @@ - Auto-Stop-Note + New component name + + + + Component name + + + + Midi out channel + + + + Midi out note + + Component volume + + + + Don't change the layers' gain based on velocity + + + + Select pattern size + Selecionar tamanho do padr� + InstrumentLine @@ -1110,6 +783,22 @@ Solo Solo + + Copy notes ... + + + + Only for this pattern + + + + For all patterns + + + + Paste notes ... + + InstrumentRack @@ -1328,11 +1017,8 @@ LayerPreview - Layer %1: Min. velocity = %2, Max. velocity = %3 - - - - Velocity = %1 + Dec. = %1 +MIDI = %2 @@ -1459,10 +1145,6 @@ De&bug - &Project - - - Save &as... @@ -1631,6 +1313,40 @@ Report bug + + Export &LilyPond file + + + + Donate + + + + +The LilyPond export is an experimental feature. +It should work like a charm provided that you use the GM-kit, and that you do not use triplet + + + + + LilyPond file (*.ly) + + + + Export LilyPond file + + + + +The current playlist contains unsaved changes. +Do you want to discard the changes? + + + + + Pro&ject + + MasterMixerLine @@ -1664,6 +1380,17 @@ + MidiSenseWidget + + This element is not midi operable. + + + + Waiting for midi input... + + + + MidiTable Event @@ -2298,10 +2025,6 @@ - No song selected! - - - Playlist: set song no. %1 @@ -2313,6 +2036,29 @@ &New Playlist + + File not found: + + + + No valid song selected! + + + + +The current playlist contains unsaved changes. +Do you want to discard the changes? + + + + + &Discard + &Descartar + + + &Cancel + &Cancelar + PlaylistDialog_UI @@ -2388,6 +2134,30 @@ &Cancel &Cancelar + + Automatic + + + + Steps + + + + Fixed + + + + <b>PulseAudio Driver</b><br> + + + + Number of steps + + + + Color (Hue value) + + PreferencesDialog_UI @@ -2452,10 +2222,6 @@ Medidores de velocidade de queda - <i>After a font change the application must be restarted.</i> - <i>Ap� modificar a fonte a aplica�o deve ser reiniciada.</i> - - &Cancel &Cancelar @@ -2695,6 +2461,30 @@ Tabbed + + TextLabel + + + + Coloring method for Song Editor elements + + + + <html><head/><body><p><span style=" font-style:italic;">After changing a font or the interface layout the application must be restarted.</span></p></body></html> + + + + Use relative paths for playlist + + + + Use output note as input note + + + + Discard midi messages after action has been triggered + + SampleEditor @@ -3094,10 +2884,6 @@ - not_categorized - - - Enable time line edit @@ -3300,13 +3086,41 @@ - Browse - Procurar - - Export Exportar + + Drumkit + + + + Component + + + + Path + + + + Version + + + + Browse... + Procurar... + + + 0.9.7 and higher + + + + 0.9.6 and lower + + + + Cancel + Cancelar + SoundLibraryImportDialog @@ -3367,7 +3181,11 @@ Padr�s - License: %1 + Drumkit License: %1 + + + + Image License: %1 @@ -3390,10 +3208,6 @@ - Sound library Info - - - Author... @@ -3418,15 +3232,23 @@ - License... + Edit server list - Edit server list + Close - Close + TextLabel + + + + Image License... + + + + Drumkit License... @@ -3500,6 +3322,17 @@ Drumkit deletion failed. + + The existing kit has %1 instruments but the new one only has %2. +The first %2 instruments will be replaced with the new intruments and will keep their notes, but some of the remaining instruments have notes. +Would you like to keep or discard the remaining instruments and notes? + + + + + Keep + + SoundLibraryPropertiesDialog_UI @@ -3520,10 +3353,6 @@ - License - Lincen� - - Save @@ -3535,6 +3364,22 @@ Save changes made to instruments into sound library + + Drumkit License + + + + Image + + + + Browse + Procurar + + + Image License + + SoundLibraryRepositoryDialog @@ -3577,7 +3422,19 @@ - Saving of this drumkit failed. + A library with the same name already exists. Do you want to overwrite the existing library? + + + + Saving of this library failed. + + + + Open Image + + + + Image Files (*.png *.jpg *.jpeg) @@ -3611,6 +3468,18 @@ Save + + Image + + + + Browse + Procurar + + + Image License + + SoundLibraryTree Binary files /tmp/tmpktOUQO/kmAosGw3t1/hydrogen-0.9.6.1/data/i18n/hydrogen.ru.qm and /tmp/tmpktOUQO/ALHtWJIToj/hydrogen-0.9.7/data/i18n/hydrogen.ru.qm differ diff -Nru hydrogen-0.9.6.1/data/i18n/hydrogen.ru.ts hydrogen-0.9.7/data/i18n/hydrogen.ru.ts --- hydrogen-0.9.6.1/data/i18n/hydrogen.ru.ts 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/data/i18n/hydrogen.ru.ts 2016-11-05 08:22:50.000000000 +0000 @@ -1,6 +1,6 @@ - + AboutDialog @@ -16,12 +16,16 @@ <b>Веб-сайт</b><br> - <b>Mailing lists</b><br> - <b>Списки рассылки:</b><br> + <b>Main coder and maintainer:</b><br> + - <b>Main coder and mantainer:</b><br> - <b>Ответственный за выпуск, основной разработчик:</b><br> + <b>Thanks to:</b> + + + + <b>Development mailing list</b><br> + @@ -54,355 +58,6 @@ ### ### - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This program is distributed under the terms of the GPL v2.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU GENERAL PUBLIC LICENSE</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Version 2, June 1991</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Copyright (C) 1989, 1991 Free Software Foundation, Inc.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 675 Mass Ave, Cambridge, MA 02139, USA</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Everyone is permitted to copy and distribute verbatim copies</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> of this license document, but changing it is not allowed.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Preamble</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> The licenses for most software are designed to take away your</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">freedom to share and change it. By contrast, the GNU General Public</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">License is intended to guarantee your freedom to share and change free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">software--to make sure the software is free for all its users. This</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">General Public License applies to most of the Free Software</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Foundation's software and to any other program whose authors commit to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">using it. (Some other Free Software Foundation software is covered by</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the GNU Library General Public License instead.) You can apply it to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">your programs, too.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> When we speak of free software, we are referring to freedom, not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">price. Our General Public Licenses are designed to make sure that you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">have the freedom to distribute copies of free software (and charge for</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this service if you wish), that you receive source code or can get it</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">if you want it, that you can change the software or use pieces of it</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">in new free programs; and that you know you can do these things.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> To protect your rights, we need to make restrictions that forbid</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">anyone to deny you these rights or to ask you to surrender the rights.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">These restrictions translate to certain responsibilities for you if you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute copies of the software, or if you modify it.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> For example, if you distribute copies of such a program, whether</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">gratis or for a fee, you must give the recipients all the rights that</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">you have. You must make sure that they, too, receive or can get the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">source code. And you must show them these terms so they know their</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">rights.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> We protect your rights with two steps: (1) copyright the software, and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">(2) offer you this license which gives you legal permission to copy,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute and/or modify the software.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Also, for each author's protection and ours, we want to make certain</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that everyone understands that there is no warranty for this free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">software. If the software is modified by someone else and passed on, we</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">want its recipients to know that what they have is not the original, so</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that any problems introduced by others will not reflect on the original</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">authors' reputations.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Finally, any free program is threatened constantly by software</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patents. We wish to avoid the danger that redistributors of a free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">program will individually obtain patent licenses, in effect making the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">program proprietary. To prevent this, we have made it clear that any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patent must be licensed for everyone's free use or not licensed at all.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> The precise terms and conditions for copying, distribution and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">modification follow.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU GENERAL PUBLIC LICENSE</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 0. This License applies to any program or other work which contains</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">a notice placed by the copyright holder saying it may be distributed</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">under the terms of this General Public License. The &quot;Program&quot;, below,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">refers to any such program or work, and a &quot;work based on the Program&quot;</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">means either the Program or any derivative work under copyright law:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that is to say, a work containing the Program or a portion of it,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">either verbatim or with modifications and/or translated into another</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">language. (Hereinafter, translation is included without limitation in</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the term &quot;modification&quot;.) Each licensee is addressed as &quot;you&quot;.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Activities other than copying, distribution and modification are not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">covered by this License; they are outside its scope. The act of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">running the Program is not restricted, and the output from the Program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">is covered only if its contents constitute a work based on the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program (independent of having been made by running the Program).</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Whether that is true depends on what the Program does.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 1. You may copy and distribute verbatim copies of the Program's</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">source code as you receive it, in any medium, provided that you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">conspicuously and appropriately publish on each copy an appropriate</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">copyright notice and disclaimer of warranty; keep intact all the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">notices that refer to this License and to the absence of any warranty;</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">and give any other recipients of the Program a copy of this License</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">along with the Program.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You may charge a fee for the physical act of transferring a copy, and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">you may at your option offer warranty protection in exchange for a fee.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 2. You may modify your copy or copies of the Program or any portion</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of it, thus forming a work based on the Program, and copy and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute such modifications or work under the terms of Section 1</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">above, provided that you also meet all of these conditions:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a) You must cause the modified files to carry prominent notices</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> stating that you changed the files and the date of any change.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> b) You must cause any work that you distribute or publish, that in</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> whole or in part contains or is derived from the Program or any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> part thereof, to be licensed as a whole at no charge to all third</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> parties under the terms of this License.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> c) If the modified program normally reads commands interactively</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> when run, you must cause it, when started running for such</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> interactive use in the most ordinary way, to print or display an</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> announcement including an appropriate copyright notice and a</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> notice that there is no warranty (or else, saying that you provide</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a warranty) and that users may redistribute the program under</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> these conditions, and telling the user how to view a copy of this</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> License. (Exception: if the Program itself is interactive but</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> does not normally print such an announcement, your work based on</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> the Program is not required to print an announcement.)</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">These requirements apply to the modified work as a whole. If</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">identifiable sections of that work are not derived from the Program,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">and can be reasonably considered independent and separate works in</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">themselves, then this License, and its terms, do not apply to those</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">sections when you distribute them as separate works. But when you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute the same sections as part of a whole which is a work based</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">on the Program, the distribution of the whole must be on the terms of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License, whose permissions for other licensees extend to the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">entire whole, and thus to each and every part regardless of who wrote it.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Thus, it is not the intent of this section to claim rights or contest</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">your rights to work written entirely by you; rather, the intent is to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">exercise the right to control the distribution of derivative or</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">collective works based on the Program.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">In addition, mere aggregation of another work not based on the Program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">with the Program (or with a work based on the Program) on a volume of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">a storage or distribution medium does not bring the other work under</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the scope of this License.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 3. You may copy and distribute the Program (or a work based on it,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">under Section 2) in object code or executable form under the terms of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Sections 1 and 2 above provided that you also do one of the following:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a) Accompany it with the complete corresponding machine-readable</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> source code, which must be distributed under the terms of Sections</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 1 and 2 above on a medium customarily used for software interchange; or,</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> b) Accompany it with a written offer, valid for at least three</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> years, to give any third party, for a charge no more than your</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> cost of physically performing source distribution, a complete</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> machine-readable copy of the corresponding source code, to be</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> distributed under the terms of Sections 1 and 2 above on a medium</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> customarily used for software interchange; or,</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> c) Accompany it with the information you received as to the offer</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> to distribute corresponding source code. (This alternative is</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> allowed only for noncommercial distribution and only if you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> received the program in object code or executable form with such</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> an offer, in accord with Subsection b above.)</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">The source code for a work means the preferred form of the work for</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">making modifications to it. For an executable work, complete source</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">code means all the source code for all modules it contains, plus any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">associated interface definition files, plus the scripts used to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">control compilation and installation of the executable. However, as a</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">special exception, the source code distributed need not include</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">anything that is normally distributed (in either source or binary</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">form) with the major components (compiler, kernel, and so on) of the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">operating system on which the executable runs, unless that component</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">itself accompanies the executable.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If distribution of executable or object code is made by offering</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">access to copy from a designated place, then offering equivalent</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">access to copy the source code from the same place counts as</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribution of the source code, even though third parties are not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">compelled to copy the source along with the object code.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 4. You may not copy, modify, sublicense, or distribute the Program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">except as expressly provided under this License. Any attempt</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">otherwise to copy, modify, sublicense or distribute the Program is</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">void, and will automatically terminate your rights under this License.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">However, parties who have received copies, or rights, from you under</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License will not have their licenses terminated so long as such</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">parties remain in full compliance.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 5. You are not required to accept this License, since you have not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">signed it. However, nothing else grants you permission to modify or</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute the Program or its derivative works. These actions are</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">prohibited by law if you do not accept this License. Therefore, by</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">modifying or distributing the Program (or any work based on the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program), you indicate your acceptance of this License to do so, and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">all its terms and conditions for copying, distributing or modifying</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the Program or works based on it.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 6. Each time you redistribute the Program (or any work based on the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program), the recipient automatically receives a license from the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">original licensor to copy, distribute or modify the Program subject to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">these terms and conditions. You may not impose any further</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">restrictions on the recipients' exercise of the rights granted herein.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You are not responsible for enforcing compliance by third parties to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 7. If, as a consequence of a court judgment or allegation of patent</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">infringement or for any other reason (not limited to patent issues),</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">conditions are imposed on you (whether by court order, agreement or</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">otherwise) that contradict the conditions of this License, they do not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">excuse you from the conditions of this License. If you cannot</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute so as to satisfy simultaneously your obligations under this</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">License and any other pertinent obligations, then as a consequence you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">may not distribute the Program at all. For example, if a patent</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">license would not permit royalty-free redistribution of the Program by</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">all those who receive copies directly or indirectly through you, then</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the only way you could satisfy both it and this License would be to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">refrain entirely from distribution of the Program.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If any portion of this section is held invalid or unenforceable under</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">any particular circumstance, the balance of the section is intended to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">apply and the section as a whole is intended to apply in other</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">circumstances.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">It is not the purpose of this section to induce you to infringe any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patents or other property right claims or to contest validity of any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">such claims; this section has the sole purpose of protecting the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">integrity of the free software distribution system, which is</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">implemented by public license practices. Many people have made</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">generous contributions to the wide range of software distributed</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">through that system in reliance on consistent application of that</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">system; it is up to the author/donor to decide if he or she is willing</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to distribute software through any other system and a licensee cannot</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">impose that choice.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This section is intended to make thoroughly clear what is believed to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be a consequence of the rest of this License.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 8. If the distribution and/or use of the Program is restricted in</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">certain countries either by patents or by copyrighted interfaces, the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">original copyright holder who places the Program under this License</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">may add an explicit geographical distribution limitation excluding</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">those countries, so that distribution is permitted only in or among</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">countries not thus excluded. In such case, this License incorporates</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the limitation as if written in the body of this License.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 9. The Free Software Foundation may publish revised and/or new versions</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of the General Public License from time to time. Such new versions will</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be similar in spirit to the present version, but may differ in detail to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">address new problems or concerns.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Each version is given a distinguishing version number. If the Program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">specifies a version number of this License which applies to it and &quot;any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">later version&quot;, you have the option of following the terms and conditions</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">either of that version or of any later version published by the Free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Software Foundation. If the Program does not specify a version number of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License, you may choose any version ever published by the Free Software</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Foundation.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 10. If you wish to incorporate parts of the Program into other free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">programs whose distribution conditions are different, write to the author</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to ask for permission. For software which is copyrighted by the Free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Software Foundation, write to the Free Software Foundation; we sometimes</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">make exceptions for this. Our decision will be guided by the two goals</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of preserving the free status of all derivatives of our free software and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of promoting the sharing and reuse of software generally.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> NO WARRANTY</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROVIDE THE PROGRAM &quot;AS IS&quot; WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">REPAIR OR CORRECTION.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">POSSIBILITY OF SUCH DAMAGES.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> END OF TERMS AND CONDITIONS</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> How to Apply These Terms to Your New Programs</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> If you develop a new program, and you want it to be of the greatest</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">possible use to the public, the best way to achieve this is to make it</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">free software which everyone can redistribute and change under these terms.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> To do so, attach the following notices to the program. It is safest</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to attach them to the start of each source file to most effectively</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">convey the exclusion of warranty; and each file should have at least</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the &quot;copyright&quot; line and a pointer to where the full notice is found.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> &lt;one line to give the program's name and a brief idea of what it does.&gt;</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Copyright (C) 19yy &lt;name of author&gt;</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This program is free software; you can redistribute it and/or modify</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> it under the terms of the GNU General Public License as published by</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> the Free Software Foundation; either version 2 of the License, or</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> (at your option) any later version.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This program is distributed in the hope that it will be useful,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> but WITHOUT ANY WARRANTY; without even the implied warranty of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU General Public License for more details.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> You should have received a copy of the GNU General Public License</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> along with this program; if not, write to the Free Software</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Also add information on how to contact you by electronic and paper mail.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If the program is interactive, make it output a short notice like this</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">when it starts in an interactive mode:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Gnomovision version 69, Copyright (C) 19yy name of author</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This is free software, and you are welcome to redistribute it</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> under certain conditions; type `show c' for details.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">The hypothetical commands `show w' and `show c' should show the appropriate</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">parts of the General Public License. Of course, the commands you use may</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be called something other than `show w' and `show c'; they could even be</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">mouse-clicks or menu items--whatever suits your program.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You should also get your employer (if you work as a programmer) or your</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">school, if any, to sign a &quot;copyright disclaimer&quot; for the program, if</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">necessary. Here is a sample; alter the names:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Yoyodyne, Inc., hereby disclaims all copyright interest in the program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> `Gnomovision' (which makes passes at compilers) written by James Hacker.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> &lt;signature of Ty Coon&gt;, 1 April 1989</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Ty Coon, President of Vice</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This General Public License does not permit incorporating your program into</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">proprietary programs. If your program is a subroutine library, you may</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">consider it more useful to permit linking proprietary applications with the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">library. If this is what you want to do, use the GNU Library General</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Public License instead of this License.</span></p></body></html> - - AudioEngineInfoForm @@ -613,6 +268,25 @@ + ComponentMixerLine + + Mute + Тихо + + + Solo + Соло + + + Component name + + + + Set instrument volume [%1] + Установить громкость инструмента [%1] + + + Director Director @@ -627,91 +301,51 @@ - DownloadWidget + DonationDialog - (%1/%2 KiB) - ETA %3 - (%1/%2 КиБ) - ETA %3 + Donations + - DrumkitManager_UI - - Drumkit name - Название драмкита - - - Delete drumkit - Удалить драмкит - - - Load drumkit - Загрузить драмкит - + DonationDialog_UI - Load - Загрузка - - - Author - Автор - - - Info - Информация - - - Save - Сохранение - - - Browse - Просмотр - - - Import - Импорт - - - Drumkit filename - Имя файла драмкита - - - Export - Экспорт + Form + Form - Drumkit directory - Каталог с драмкитами + Donate! + - ### Drumkit author - ### Автор драмкита + Choose random entry. + - ### Drumkit info - ### О драмките + <html><head/><body><p align="justify">Hydrogen is an open source project which is developed by multiple people in their spare time. By making a donation you can say &quot;thank you&quot; to the involved persons.</p></body></html> + - ### The drumkit will be installed zncxbmzbxcmznxbcmz - ### Драмкит будет установлен zncxbmzbxcmznxbcm + Sebastian Moors (aka mauser): Maintainer / Developer + - <b> -Download more drumkits at <br> -http://www.hydrogen-music.org -</b> - <b> -Дополнительные драмкиты можно скачать -на сайте http://www.hydrogen-music.org<br> -</b> + Michael Wolkstein (aka wolke): Forum hosting + + + + Download - Form1 - Form1 + Importing item failed: %1 + + + + DownloadWidget - ### Drumkit name - ### Название драмкита + (%1/%2 KiB) - ETA %3 + (%1/%2 КиБ) - ETA %3 @@ -898,10 +532,6 @@ - Enable use of rubberband batch processor - Использовать пакетный обработчик Rubberband - - Enable use of rubberband's batch processor Использовать пакетный обработчик Rubberband @@ -909,6 +539,10 @@ Rubberband Batch + + 88200 + 88200 + FileBrowser @@ -970,6 +604,14 @@ Saving of this drumkit failed. + + Open Image + + + + Image Files (*.png *.jpg *.jpeg) + + HydrogenApp @@ -989,6 +631,10 @@ Mixer Микшер + + modified + + InstrumentEditor @@ -1061,9 +707,33 @@ Остановить воспроизведение текущей ноты при переходе к сэмплу следующей. - Auto-Stop-Note + New component name + + Component name + + + + Midi out channel + + + + Midi out note + + + + Component volume + + + + Don't change the layers' gain based on velocity + + + + Select pattern size + Выбрать размер паттерна + InstrumentLine @@ -1502,10 +1172,6 @@ Отла&дка - &Project - Прое&кт - - &Tools С&ервис @@ -1677,6 +1343,40 @@ Report bug Сообщить об ошибке + + Export &LilyPond file + + + + Donate + + + + +The LilyPond export is an experimental feature. +It should work like a charm provided that you use the GM-kit, and that you do not use triplet + + + + + LilyPond file (*.ly) + + + + Export LilyPond file + + + + +The current playlist contains unsaved changes. +Do you want to discard the changes? + + + + + Pro&ject + + MasterMixerLine @@ -1710,6 +1410,17 @@ + MidiSenseWidget + + This element is not midi operable. + + + + Waiting for midi input... + + + + MidiTable Event @@ -1997,7 +1708,7 @@ Lead and Lag - + Смещение во времени @@ -2343,10 +2054,6 @@ Редактор списка воспроизведения - No song selected! - Ни одна композиция не выбрана! - - Playlist: set song no. %1 @@ -2366,6 +2073,21 @@ No valid song selected! + + +The current playlist contains unsaved changes. +Do you want to discard the changes? + + + + + &Discard + &Отказаться от изменений + + + &Cancel + О&тменить + PlaylistDialog_UI @@ -2446,6 +2168,26 @@ <b>PulseAudio Driver</b><br> <b>Драйвер PulseAudio</b><br> + + Automatic + + + + Steps + + + + Fixed + + + + Number of steps + + + + Color (Hue value) + + PreferencesDialog_UI @@ -2574,10 +2316,6 @@ Выбрать шрифт - <i>After a font change the application must be restarted.</i> - <i>После изменения шрифта приложение необходимо перезапустить.</i> - - Polyphony Полифония @@ -2753,6 +2491,30 @@ Tabbed Со вкладками + + TextLabel + + + + Coloring method for Song Editor elements + + + + <html><head/><body><p><span style=" font-style:italic;">After changing a font or the interface layout the application must be restarted.</span></p></body></html> + + + + Use relative paths for playlist + + + + Use output note as input note + + + + Discard midi messages after action has been triggered + + SampleEditor @@ -3161,10 +2923,6 @@ - not_categorized - Без категории - - Pattern %1 Паттерн %1 @@ -3368,13 +3126,41 @@ Диалог - Browse - Просмотр - - Export Экспорт + + Drumkit + Драмкит + + + Component + + + + Path + + + + Version + + + + Browse... + Просмотреть... + + + 0.9.7 and higher + + + + 0.9.6 and lower + + + + Cancel + Отменить + SoundLibraryImportDialog @@ -3435,8 +3221,12 @@ Паттерны - License: %1 - Лицензия: %1 + Drumkit License: %1 + + + + Image License: %1 + @@ -3458,10 +3248,6 @@ Название библиотеки звуков - Sound library Info - Сводка по звуковой библиотеке - - Author... Автор... @@ -3486,10 +3272,6 @@ 1 - License... - Лицензия... - - Edit server list Изменить список серверов @@ -3497,6 +3279,18 @@ Close Закрыть + + TextLabel + + + + Image License... + + + + Drumkit License... + + SoundLibraryPanel @@ -3569,6 +3363,17 @@ Drumkit deletion failed. + + The existing kit has %1 instruments but the new one only has %2. +The first %2 instruments will be replaced with the new intruments and will keep their notes, but some of the remaining instruments have notes. +Would you like to keep or discard the remaining instruments and notes? + + + + + Keep + + SoundLibraryPropertiesDialog_UI @@ -3589,10 +3394,6 @@ Информация - License - Лицензия - - Save Сохранить @@ -3604,6 +3405,22 @@ Save changes made to instruments into sound library Сохранить в библиотеку изменения, внесенные в инструменты + + Drumkit License + + + + Image + + + + Browse + Просмотр + + + Image License + + SoundLibraryRepositoryDialog @@ -3646,7 +3463,19 @@ Укажите хотя бы корректное название - Saving of this drumkit failed. + A library with the same name already exists. Do you want to overwrite the existing library? + + + + Saving of this library failed. + + + + Open Image + + + + Image Files (*.png *.jpg *.jpeg) @@ -3680,6 +3509,18 @@ Save Сохранить + + Image + + + + Browse + Просмотр + + + Image License + + SoundLibraryTree Binary files /tmp/tmpktOUQO/kmAosGw3t1/hydrogen-0.9.6.1/data/i18n/hydrogen.sr.qm and /tmp/tmpktOUQO/ALHtWJIToj/hydrogen-0.9.7/data/i18n/hydrogen.sr.qm differ diff -Nru hydrogen-0.9.6.1/data/i18n/hydrogen.sr.ts hydrogen-0.9.7/data/i18n/hydrogen.sr.ts --- hydrogen-0.9.6.1/data/i18n/hydrogen.sr.ts 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/data/i18n/hydrogen.sr.ts 2016-11-05 08:22:50.000000000 +0000 @@ -1,6 +1,6 @@ - + AboutDialog @@ -16,12 +16,16 @@ <b>Веб страна</b><br> - <b>Mailing lists</b><br> - <b>Дописне листе</b><br> + <b>Main coder and maintainer:</b><br> + - <b>Main coder and mantainer:</b><br> - <b>Главни програмер и одржавалац:</b><br> + <b>Thanks to:</b> + + + + <b>Development mailing list</b><br> + @@ -54,355 +58,6 @@ &License &Лиценца - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This program is distributed under the terms of the GPL v2.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU GENERAL PUBLIC LICENSE</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Version 2, June 1991</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Copyright (C) 1989, 1991 Free Software Foundation, Inc.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 675 Mass Ave, Cambridge, MA 02139, USA</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Everyone is permitted to copy and distribute verbatim copies</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> of this license document, but changing it is not allowed.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Preamble</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> The licenses for most software are designed to take away your</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">freedom to share and change it. By contrast, the GNU General Public</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">License is intended to guarantee your freedom to share and change free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">software--to make sure the software is free for all its users. This</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">General Public License applies to most of the Free Software</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Foundation's software and to any other program whose authors commit to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">using it. (Some other Free Software Foundation software is covered by</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the GNU Library General Public License instead.) You can apply it to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">your programs, too.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> When we speak of free software, we are referring to freedom, not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">price. Our General Public Licenses are designed to make sure that you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">have the freedom to distribute copies of free software (and charge for</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this service if you wish), that you receive source code or can get it</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">if you want it, that you can change the software or use pieces of it</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">in new free programs; and that you know you can do these things.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> To protect your rights, we need to make restrictions that forbid</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">anyone to deny you these rights or to ask you to surrender the rights.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">These restrictions translate to certain responsibilities for you if you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute copies of the software, or if you modify it.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> For example, if you distribute copies of such a program, whether</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">gratis or for a fee, you must give the recipients all the rights that</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">you have. You must make sure that they, too, receive or can get the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">source code. And you must show them these terms so they know their</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">rights.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> We protect your rights with two steps: (1) copyright the software, and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">(2) offer you this license which gives you legal permission to copy,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute and/or modify the software.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Also, for each author's protection and ours, we want to make certain</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that everyone understands that there is no warranty for this free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">software. If the software is modified by someone else and passed on, we</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">want its recipients to know that what they have is not the original, so</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that any problems introduced by others will not reflect on the original</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">authors' reputations.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Finally, any free program is threatened constantly by software</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patents. We wish to avoid the danger that redistributors of a free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">program will individually obtain patent licenses, in effect making the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">program proprietary. To prevent this, we have made it clear that any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patent must be licensed for everyone's free use or not licensed at all.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> The precise terms and conditions for copying, distribution and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">modification follow.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU GENERAL PUBLIC LICENSE</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 0. This License applies to any program or other work which contains</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">a notice placed by the copyright holder saying it may be distributed</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">under the terms of this General Public License. The &quot;Program&quot;, below,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">refers to any such program or work, and a &quot;work based on the Program&quot;</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">means either the Program or any derivative work under copyright law:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that is to say, a work containing the Program or a portion of it,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">either verbatim or with modifications and/or translated into another</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">language. (Hereinafter, translation is included without limitation in</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the term &quot;modification&quot;.) Each licensee is addressed as &quot;you&quot;.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Activities other than copying, distribution and modification are not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">covered by this License; they are outside its scope. The act of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">running the Program is not restricted, and the output from the Program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">is covered only if its contents constitute a work based on the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program (independent of having been made by running the Program).</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Whether that is true depends on what the Program does.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 1. You may copy and distribute verbatim copies of the Program's</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">source code as you receive it, in any medium, provided that you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">conspicuously and appropriately publish on each copy an appropriate</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">copyright notice and disclaimer of warranty; keep intact all the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">notices that refer to this License and to the absence of any warranty;</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">and give any other recipients of the Program a copy of this License</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">along with the Program.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You may charge a fee for the physical act of transferring a copy, and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">you may at your option offer warranty protection in exchange for a fee.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 2. You may modify your copy or copies of the Program or any portion</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of it, thus forming a work based on the Program, and copy and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute such modifications or work under the terms of Section 1</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">above, provided that you also meet all of these conditions:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a) You must cause the modified files to carry prominent notices</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> stating that you changed the files and the date of any change.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> b) You must cause any work that you distribute or publish, that in</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> whole or in part contains or is derived from the Program or any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> part thereof, to be licensed as a whole at no charge to all third</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> parties under the terms of this License.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> c) If the modified program normally reads commands interactively</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> when run, you must cause it, when started running for such</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> interactive use in the most ordinary way, to print or display an</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> announcement including an appropriate copyright notice and a</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> notice that there is no warranty (or else, saying that you provide</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a warranty) and that users may redistribute the program under</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> these conditions, and telling the user how to view a copy of this</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> License. (Exception: if the Program itself is interactive but</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> does not normally print such an announcement, your work based on</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> the Program is not required to print an announcement.)</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">These requirements apply to the modified work as a whole. If</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">identifiable sections of that work are not derived from the Program,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">and can be reasonably considered independent and separate works in</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">themselves, then this License, and its terms, do not apply to those</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">sections when you distribute them as separate works. But when you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute the same sections as part of a whole which is a work based</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">on the Program, the distribution of the whole must be on the terms of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License, whose permissions for other licensees extend to the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">entire whole, and thus to each and every part regardless of who wrote it.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Thus, it is not the intent of this section to claim rights or contest</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">your rights to work written entirely by you; rather, the intent is to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">exercise the right to control the distribution of derivative or</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">collective works based on the Program.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">In addition, mere aggregation of another work not based on the Program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">with the Program (or with a work based on the Program) on a volume of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">a storage or distribution medium does not bring the other work under</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the scope of this License.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 3. You may copy and distribute the Program (or a work based on it,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">under Section 2) in object code or executable form under the terms of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Sections 1 and 2 above provided that you also do one of the following:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a) Accompany it with the complete corresponding machine-readable</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> source code, which must be distributed under the terms of Sections</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 1 and 2 above on a medium customarily used for software interchange; or,</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> b) Accompany it with a written offer, valid for at least three</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> years, to give any third party, for a charge no more than your</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> cost of physically performing source distribution, a complete</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> machine-readable copy of the corresponding source code, to be</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> distributed under the terms of Sections 1 and 2 above on a medium</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> customarily used for software interchange; or,</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> c) Accompany it with the information you received as to the offer</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> to distribute corresponding source code. (This alternative is</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> allowed only for noncommercial distribution and only if you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> received the program in object code or executable form with such</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> an offer, in accord with Subsection b above.)</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">The source code for a work means the preferred form of the work for</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">making modifications to it. For an executable work, complete source</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">code means all the source code for all modules it contains, plus any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">associated interface definition files, plus the scripts used to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">control compilation and installation of the executable. However, as a</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">special exception, the source code distributed need not include</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">anything that is normally distributed (in either source or binary</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">form) with the major components (compiler, kernel, and so on) of the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">operating system on which the executable runs, unless that component</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">itself accompanies the executable.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If distribution of executable or object code is made by offering</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">access to copy from a designated place, then offering equivalent</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">access to copy the source code from the same place counts as</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribution of the source code, even though third parties are not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">compelled to copy the source along with the object code.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 4. You may not copy, modify, sublicense, or distribute the Program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">except as expressly provided under this License. Any attempt</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">otherwise to copy, modify, sublicense or distribute the Program is</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">void, and will automatically terminate your rights under this License.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">However, parties who have received copies, or rights, from you under</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License will not have their licenses terminated so long as such</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">parties remain in full compliance.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 5. You are not required to accept this License, since you have not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">signed it. However, nothing else grants you permission to modify or</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute the Program or its derivative works. These actions are</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">prohibited by law if you do not accept this License. Therefore, by</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">modifying or distributing the Program (or any work based on the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program), you indicate your acceptance of this License to do so, and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">all its terms and conditions for copying, distributing or modifying</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the Program or works based on it.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 6. Each time you redistribute the Program (or any work based on the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program), the recipient automatically receives a license from the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">original licensor to copy, distribute or modify the Program subject to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">these terms and conditions. You may not impose any further</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">restrictions on the recipients' exercise of the rights granted herein.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You are not responsible for enforcing compliance by third parties to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 7. If, as a consequence of a court judgment or allegation of patent</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">infringement or for any other reason (not limited to patent issues),</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">conditions are imposed on you (whether by court order, agreement or</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">otherwise) that contradict the conditions of this License, they do not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">excuse you from the conditions of this License. If you cannot</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute so as to satisfy simultaneously your obligations under this</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">License and any other pertinent obligations, then as a consequence you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">may not distribute the Program at all. For example, if a patent</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">license would not permit royalty-free redistribution of the Program by</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">all those who receive copies directly or indirectly through you, then</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the only way you could satisfy both it and this License would be to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">refrain entirely from distribution of the Program.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If any portion of this section is held invalid or unenforceable under</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">any particular circumstance, the balance of the section is intended to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">apply and the section as a whole is intended to apply in other</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">circumstances.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">It is not the purpose of this section to induce you to infringe any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patents or other property right claims or to contest validity of any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">such claims; this section has the sole purpose of protecting the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">integrity of the free software distribution system, which is</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">implemented by public license practices. Many people have made</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">generous contributions to the wide range of software distributed</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">through that system in reliance on consistent application of that</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">system; it is up to the author/donor to decide if he or she is willing</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to distribute software through any other system and a licensee cannot</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">impose that choice.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This section is intended to make thoroughly clear what is believed to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be a consequence of the rest of this License.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 8. If the distribution and/or use of the Program is restricted in</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">certain countries either by patents or by copyrighted interfaces, the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">original copyright holder who places the Program under this License</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">may add an explicit geographical distribution limitation excluding</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">those countries, so that distribution is permitted only in or among</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">countries not thus excluded. In such case, this License incorporates</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the limitation as if written in the body of this License.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 9. The Free Software Foundation may publish revised and/or new versions</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of the General Public License from time to time. Such new versions will</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be similar in spirit to the present version, but may differ in detail to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">address new problems or concerns.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Each version is given a distinguishing version number. If the Program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">specifies a version number of this License which applies to it and &quot;any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">later version&quot;, you have the option of following the terms and conditions</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">either of that version or of any later version published by the Free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Software Foundation. If the Program does not specify a version number of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License, you may choose any version ever published by the Free Software</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Foundation.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 10. If you wish to incorporate parts of the Program into other free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">programs whose distribution conditions are different, write to the author</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to ask for permission. For software which is copyrighted by the Free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Software Foundation, write to the Free Software Foundation; we sometimes</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">make exceptions for this. Our decision will be guided by the two goals</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of preserving the free status of all derivatives of our free software and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of promoting the sharing and reuse of software generally.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> NO WARRANTY</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROVIDE THE PROGRAM &quot;AS IS&quot; WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">REPAIR OR CORRECTION.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">POSSIBILITY OF SUCH DAMAGES.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> END OF TERMS AND CONDITIONS</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> How to Apply These Terms to Your New Programs</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> If you develop a new program, and you want it to be of the greatest</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">possible use to the public, the best way to achieve this is to make it</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">free software which everyone can redistribute and change under these terms.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> To do so, attach the following notices to the program. It is safest</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to attach them to the start of each source file to most effectively</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">convey the exclusion of warranty; and each file should have at least</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the &quot;copyright&quot; line and a pointer to where the full notice is found.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> &lt;one line to give the program's name and a brief idea of what it does.&gt;</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Copyright (C) 19yy &lt;name of author&gt;</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This program is free software; you can redistribute it and/or modify</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> it under the terms of the GNU General Public License as published by</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> the Free Software Foundation; either version 2 of the License, or</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> (at your option) any later version.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This program is distributed in the hope that it will be useful,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> but WITHOUT ANY WARRANTY; without even the implied warranty of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU General Public License for more details.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> You should have received a copy of the GNU General Public License</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> along with this program; if not, write to the Free Software</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Also add information on how to contact you by electronic and paper mail.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If the program is interactive, make it output a short notice like this</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">when it starts in an interactive mode:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Gnomovision version 69, Copyright (C) 19yy name of author</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This is free software, and you are welcome to redistribute it</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> under certain conditions; type `show c' for details.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">The hypothetical commands `show w' and `show c' should show the appropriate</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">parts of the General Public License. Of course, the commands you use may</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be called something other than `show w' and `show c'; they could even be</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">mouse-clicks or menu items--whatever suits your program.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You should also get your employer (if you work as a programmer) or your</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">school, if any, to sign a &quot;copyright disclaimer&quot; for the program, if</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">necessary. Here is a sample; alter the names:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Yoyodyne, Inc., hereby disclaims all copyright interest in the program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> `Gnomovision' (which makes passes at compilers) written by James Hacker.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> &lt;signature of Ty Coon&gt;, 1 April 1989</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Ty Coon, President of Vice</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This General Public License does not permit incorporating your program into</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">proprietary programs. If your program is a subroutine library, you may</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">consider it more useful to permit linking proprietary applications with the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">library. If this is what you want to do, use the GNU Library General</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Public License instead of this License.</span></p></body></html> - - AudioEngineInfoForm @@ -613,6 +268,25 @@ + ComponentMixerLine + + Mute + Утишај + + + Solo + Соло + + + Component name + + + + Set instrument volume [%1] + Поставите гласнођу инструмента [%1] + + + Director Director @@ -627,91 +301,51 @@ - DownloadWidget + DonationDialog - (%1/%2 KiB) - ETA %3 - (%1/%2 KiB) - ETA %3 + Donations + - DrumkitManager_UI - - Form1 - Формулар1 - - - Load - Учитај - - - Load drumkit - Учитај бубњеве - - - ### Drumkit author - ### Створитељ бубњева - - - ### Drumkit name - ### Назив бубњева - - - ### Drumkit info - ### Подаци о бубњевима - - - Delete drumkit - Уклони бубњеве - - - Save - Сачувај - - - Author - Аутор - + DonationDialog_UI - Info - Подаци - - - Drumkit name - Назив бубњева + Form + Формулар - Import - Увези + Donate! + - Drumkit filename - Датотека бубњева + Choose random entry. + - Browse - Разгледај + <html><head/><body><p align="justify">Hydrogen is an open source project which is developed by multiple people in their spare time. By making a donation you can say &quot;thank you&quot; to the involved persons.</p></body></html> + - ### The drumkit will be installed zncxbmzbxcmznxbcmz - ### Бубњеви ће бити инсталирани zncxbmzbxcmznxbcmz + Sebastian Moors (aka mauser): Maintainer / Developer + - Export - Извоз + Michael Wolkstein (aka wolke): Forum hosting + + + + Download - Drumkit directory - Директоријум бубњева + Importing item failed: %1 + + + + DownloadWidget - <b> -Download more drumkits at <br> -http://www.hydrogen-music.org -</b> - <b> -Преузмите још бубњева са: <br> -http://www.hydrogen-music.org -</b> + (%1/%2 KiB) - ETA %3 + (%1/%2 KiB) - ETA %3 @@ -905,6 +539,10 @@ Rubberband Batch + + 88200 + 88200 + FileBrowser @@ -966,6 +604,14 @@ Saving of this drumkit failed. Није успело чување ових бубњева. + + Open Image + + + + Image Files (*.png *.jpg *.jpeg) + + HydrogenApp @@ -985,6 +631,10 @@ Mixer Миксета + + modified + + InstrumentEditor @@ -1053,13 +703,37 @@ Слојеви - Auto-Stop-Note + Stop the current playing instrument-note before trigger the next note sample. - Stop the current playing instrument-note before trigger the next note sample. + New component name + + Component name + + + + Midi out channel + + + + Midi out note + + + + Component volume + + + + Don't change the layers' gain based on velocity + + + + Select pattern size + Одабери величину мустре + InstrumentLine @@ -1495,10 +1169,6 @@ O прогр&аму - &Project - &Пројекат - - &Export song Изв&ези песму @@ -1669,6 +1339,40 @@ Don't show this message anymore Не приказуј више ову поруку + + Export &LilyPond file + + + + Donate + + + + +The LilyPond export is an experimental feature. +It should work like a charm provided that you use the GM-kit, and that you do not use triplet + + + + + LilyPond file (*.ly) + + + + Export LilyPond file + + + + +The current playlist contains unsaved changes. +Do you want to discard the changes? + + + + + Pro&ject + + MasterMixerLine @@ -1702,6 +1406,17 @@ + MidiSenseWidget + + This element is not midi operable. + + + + Waiting for midi input... + + + + MidiTable Event @@ -2357,6 +2072,21 @@ Playlist: set song no. %1 Листа: Постави песму бр. %1 + + +The current playlist contains unsaved changes. +Do you want to discard the changes? + + + + + &Discard + &Одбаци + + + &Cancel + &Поништи + PlaylistDialog_UI @@ -2437,6 +2167,26 @@ <b>PulseAudio Driver</b><br> <b>ПулсеАудио посредник</b><br> + + Automatic + + + + Steps + + + + Fixed + + + + Number of steps + + + + Color (Hue value) + + PreferencesDialog_UI @@ -2529,10 +2279,6 @@ Фонт миксете - <i>After a font change the application must be restarted.</i> - <i>Промене фонта су видљиве по поновном покретању програма.</i> - - Style Стил @@ -2744,6 +2490,30 @@ Tabbed у посебним језичцима + + TextLabel + + + + Coloring method for Song Editor elements + + + + <html><head/><body><p><span style=" font-style:italic;">After changing a font or the interface layout the application must be restarted.</span></p></body></html> + + + + Use relative paths for playlist + + + + Use output note as input note + + + + Discard midi messages after action has been triggered + + SampleEditor @@ -3156,10 +2926,6 @@ Режим једне мустре - not_categorized - не_сврстано - - Pattern %1 Мустра %1 @@ -3363,13 +3129,41 @@ Прозорче - Browse - Разгледај - - Export Извоз + + Drumkit + Бубњеви + + + Component + + + + Path + + + + Version + + + + Browse... + Разгледај... + + + 0.9.7 and higher + + + + 0.9.6 and lower + + + + Cancel + Поништи + SoundLibraryImportDialog @@ -3430,8 +3224,12 @@ Песме - License: %1 - Лиценца: %1 + Drumkit License: %1 + + + + Image License: %1 + @@ -3457,10 +3255,6 @@ Назив бубњева - Sound library Info - Подаци о бубњевима - - Author... Аутор... @@ -3481,10 +3275,6 @@ Инсталирај - License... - Лиценца... - - Edit server list Уреди списак сервера @@ -3492,6 +3282,18 @@ Close Затвори + + TextLabel + + + + Image License... + + + + Drumkit License... + + SoundLibraryPanel @@ -3567,14 +3369,21 @@ Drumkit deletion failed. Није успело уклањање бубњева. + + The existing kit has %1 instruments but the new one only has %2. +The first %2 instruments will be replaced with the new intruments and will keep their notes, but some of the remaining instruments have notes. +Would you like to keep or discard the remaining instruments and notes? + + + + + Keep + + SoundLibraryPropertiesDialog_UI - License - Лиценца - - Name Назив @@ -3602,6 +3411,22 @@ Save changes made to instruments into sound library Сачувај измењени инструмент у бубњеве + + Drumkit License + + + + Image + + + + Browse + Разгледај + + + Image License + + SoundLibraryRepositoryDialog @@ -3644,8 +3469,20 @@ Унесите бар ваљано име - Saving of this drumkit failed. - Није успело чување ових бубњева. + A library with the same name already exists. Do you want to overwrite the existing library? + + + + Saving of this library failed. + + + + Open Image + + + + Image Files (*.png *.jpg *.jpeg) + @@ -3678,6 +3515,18 @@ Save Сачувај + + Image + + + + Browse + Разгледај + + + Image License + + SoundLibraryTree Binary files /tmp/tmpktOUQO/kmAosGw3t1/hydrogen-0.9.6.1/data/i18n/hydrogen.sv.qm and /tmp/tmpktOUQO/ALHtWJIToj/hydrogen-0.9.7/data/i18n/hydrogen.sv.qm differ diff -Nru hydrogen-0.9.6.1/data/i18n/hydrogen.sv.ts hydrogen-0.9.7/data/i18n/hydrogen.sv.ts --- hydrogen-0.9.6.1/data/i18n/hydrogen.sv.ts 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/data/i18n/hydrogen.sv.ts 2016-11-05 08:22:50.000000000 +0000 @@ -1,6 +1,6 @@ - + AboutDialog @@ -12,15 +12,19 @@ <b>Project sida</b><br> - <b>Main coder and mantainer:</b><br> - <b>Huvud kodare och mantainer:</b><br> + <b>Website</b><br> + - <b>Website</b><br> + <b>Main coder and maintainer:</b><br> + + + + <b>Thanks to:</b> - <b>Mailing lists</b><br> + <b>Development mailing list</b><br> @@ -54,355 +58,6 @@ ### - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This program is distributed under the terms of the GPL v2.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU GENERAL PUBLIC LICENSE</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Version 2, June 1991</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Copyright (C) 1989, 1991 Free Software Foundation, Inc.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 675 Mass Ave, Cambridge, MA 02139, USA</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Everyone is permitted to copy and distribute verbatim copies</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> of this license document, but changing it is not allowed.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Preamble</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> The licenses for most software are designed to take away your</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">freedom to share and change it. By contrast, the GNU General Public</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">License is intended to guarantee your freedom to share and change free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">software--to make sure the software is free for all its users. This</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">General Public License applies to most of the Free Software</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Foundation's software and to any other program whose authors commit to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">using it. (Some other Free Software Foundation software is covered by</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the GNU Library General Public License instead.) You can apply it to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">your programs, too.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> When we speak of free software, we are referring to freedom, not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">price. Our General Public Licenses are designed to make sure that you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">have the freedom to distribute copies of free software (and charge for</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this service if you wish), that you receive source code or can get it</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">if you want it, that you can change the software or use pieces of it</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">in new free programs; and that you know you can do these things.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> To protect your rights, we need to make restrictions that forbid</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">anyone to deny you these rights or to ask you to surrender the rights.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">These restrictions translate to certain responsibilities for you if you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute copies of the software, or if you modify it.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> For example, if you distribute copies of such a program, whether</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">gratis or for a fee, you must give the recipients all the rights that</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">you have. You must make sure that they, too, receive or can get the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">source code. And you must show them these terms so they know their</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">rights.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> We protect your rights with two steps: (1) copyright the software, and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">(2) offer you this license which gives you legal permission to copy,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute and/or modify the software.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Also, for each author's protection and ours, we want to make certain</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that everyone understands that there is no warranty for this free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">software. If the software is modified by someone else and passed on, we</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">want its recipients to know that what they have is not the original, so</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that any problems introduced by others will not reflect on the original</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">authors' reputations.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Finally, any free program is threatened constantly by software</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patents. We wish to avoid the danger that redistributors of a free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">program will individually obtain patent licenses, in effect making the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">program proprietary. To prevent this, we have made it clear that any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patent must be licensed for everyone's free use or not licensed at all.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> The precise terms and conditions for copying, distribution and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">modification follow.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU GENERAL PUBLIC LICENSE</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 0. This License applies to any program or other work which contains</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">a notice placed by the copyright holder saying it may be distributed</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">under the terms of this General Public License. The &quot;Program&quot;, below,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">refers to any such program or work, and a &quot;work based on the Program&quot;</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">means either the Program or any derivative work under copyright law:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that is to say, a work containing the Program or a portion of it,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">either verbatim or with modifications and/or translated into another</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">language. (Hereinafter, translation is included without limitation in</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the term &quot;modification&quot;.) Each licensee is addressed as &quot;you&quot;.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Activities other than copying, distribution and modification are not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">covered by this License; they are outside its scope. The act of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">running the Program is not restricted, and the output from the Program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">is covered only if its contents constitute a work based on the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program (independent of having been made by running the Program).</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Whether that is true depends on what the Program does.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 1. You may copy and distribute verbatim copies of the Program's</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">source code as you receive it, in any medium, provided that you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">conspicuously and appropriately publish on each copy an appropriate</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">copyright notice and disclaimer of warranty; keep intact all the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">notices that refer to this License and to the absence of any warranty;</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">and give any other recipients of the Program a copy of this License</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">along with the Program.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You may charge a fee for the physical act of transferring a copy, and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">you may at your option offer warranty protection in exchange for a fee.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 2. You may modify your copy or copies of the Program or any portion</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of it, thus forming a work based on the Program, and copy and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute such modifications or work under the terms of Section 1</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">above, provided that you also meet all of these conditions:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a) You must cause the modified files to carry prominent notices</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> stating that you changed the files and the date of any change.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> b) You must cause any work that you distribute or publish, that in</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> whole or in part contains or is derived from the Program or any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> part thereof, to be licensed as a whole at no charge to all third</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> parties under the terms of this License.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> c) If the modified program normally reads commands interactively</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> when run, you must cause it, when started running for such</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> interactive use in the most ordinary way, to print or display an</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> announcement including an appropriate copyright notice and a</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> notice that there is no warranty (or else, saying that you provide</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a warranty) and that users may redistribute the program under</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> these conditions, and telling the user how to view a copy of this</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> License. (Exception: if the Program itself is interactive but</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> does not normally print such an announcement, your work based on</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> the Program is not required to print an announcement.)</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">These requirements apply to the modified work as a whole. If</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">identifiable sections of that work are not derived from the Program,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">and can be reasonably considered independent and separate works in</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">themselves, then this License, and its terms, do not apply to those</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">sections when you distribute them as separate works. But when you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute the same sections as part of a whole which is a work based</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">on the Program, the distribution of the whole must be on the terms of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License, whose permissions for other licensees extend to the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">entire whole, and thus to each and every part regardless of who wrote it.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Thus, it is not the intent of this section to claim rights or contest</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">your rights to work written entirely by you; rather, the intent is to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">exercise the right to control the distribution of derivative or</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">collective works based on the Program.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">In addition, mere aggregation of another work not based on the Program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">with the Program (or with a work based on the Program) on a volume of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">a storage or distribution medium does not bring the other work under</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the scope of this License.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 3. You may copy and distribute the Program (or a work based on it,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">under Section 2) in object code or executable form under the terms of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Sections 1 and 2 above provided that you also do one of the following:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a) Accompany it with the complete corresponding machine-readable</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> source code, which must be distributed under the terms of Sections</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 1 and 2 above on a medium customarily used for software interchange; or,</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> b) Accompany it with a written offer, valid for at least three</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> years, to give any third party, for a charge no more than your</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> cost of physically performing source distribution, a complete</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> machine-readable copy of the corresponding source code, to be</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> distributed under the terms of Sections 1 and 2 above on a medium</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> customarily used for software interchange; or,</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> c) Accompany it with the information you received as to the offer</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> to distribute corresponding source code. (This alternative is</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> allowed only for noncommercial distribution and only if you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> received the program in object code or executable form with such</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> an offer, in accord with Subsection b above.)</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">The source code for a work means the preferred form of the work for</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">making modifications to it. For an executable work, complete source</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">code means all the source code for all modules it contains, plus any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">associated interface definition files, plus the scripts used to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">control compilation and installation of the executable. However, as a</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">special exception, the source code distributed need not include</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">anything that is normally distributed (in either source or binary</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">form) with the major components (compiler, kernel, and so on) of the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">operating system on which the executable runs, unless that component</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">itself accompanies the executable.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If distribution of executable or object code is made by offering</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">access to copy from a designated place, then offering equivalent</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">access to copy the source code from the same place counts as</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribution of the source code, even though third parties are not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">compelled to copy the source along with the object code.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 4. You may not copy, modify, sublicense, or distribute the Program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">except as expressly provided under this License. Any attempt</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">otherwise to copy, modify, sublicense or distribute the Program is</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">void, and will automatically terminate your rights under this License.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">However, parties who have received copies, or rights, from you under</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License will not have their licenses terminated so long as such</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">parties remain in full compliance.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 5. You are not required to accept this License, since you have not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">signed it. However, nothing else grants you permission to modify or</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute the Program or its derivative works. These actions are</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">prohibited by law if you do not accept this License. Therefore, by</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">modifying or distributing the Program (or any work based on the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program), you indicate your acceptance of this License to do so, and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">all its terms and conditions for copying, distributing or modifying</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the Program or works based on it.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 6. Each time you redistribute the Program (or any work based on the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program), the recipient automatically receives a license from the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">original licensor to copy, distribute or modify the Program subject to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">these terms and conditions. You may not impose any further</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">restrictions on the recipients' exercise of the rights granted herein.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You are not responsible for enforcing compliance by third parties to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 7. If, as a consequence of a court judgment or allegation of patent</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">infringement or for any other reason (not limited to patent issues),</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">conditions are imposed on you (whether by court order, agreement or</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">otherwise) that contradict the conditions of this License, they do not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">excuse you from the conditions of this License. If you cannot</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute so as to satisfy simultaneously your obligations under this</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">License and any other pertinent obligations, then as a consequence you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">may not distribute the Program at all. For example, if a patent</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">license would not permit royalty-free redistribution of the Program by</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">all those who receive copies directly or indirectly through you, then</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the only way you could satisfy both it and this License would be to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">refrain entirely from distribution of the Program.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If any portion of this section is held invalid or unenforceable under</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">any particular circumstance, the balance of the section is intended to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">apply and the section as a whole is intended to apply in other</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">circumstances.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">It is not the purpose of this section to induce you to infringe any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patents or other property right claims or to contest validity of any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">such claims; this section has the sole purpose of protecting the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">integrity of the free software distribution system, which is</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">implemented by public license practices. Many people have made</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">generous contributions to the wide range of software distributed</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">through that system in reliance on consistent application of that</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">system; it is up to the author/donor to decide if he or she is willing</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to distribute software through any other system and a licensee cannot</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">impose that choice.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This section is intended to make thoroughly clear what is believed to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be a consequence of the rest of this License.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 8. If the distribution and/or use of the Program is restricted in</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">certain countries either by patents or by copyrighted interfaces, the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">original copyright holder who places the Program under this License</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">may add an explicit geographical distribution limitation excluding</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">those countries, so that distribution is permitted only in or among</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">countries not thus excluded. In such case, this License incorporates</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the limitation as if written in the body of this License.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 9. The Free Software Foundation may publish revised and/or new versions</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of the General Public License from time to time. Such new versions will</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be similar in spirit to the present version, but may differ in detail to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">address new problems or concerns.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Each version is given a distinguishing version number. If the Program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">specifies a version number of this License which applies to it and &quot;any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">later version&quot;, you have the option of following the terms and conditions</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">either of that version or of any later version published by the Free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Software Foundation. If the Program does not specify a version number of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License, you may choose any version ever published by the Free Software</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Foundation.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 10. If you wish to incorporate parts of the Program into other free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">programs whose distribution conditions are different, write to the author</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to ask for permission. For software which is copyrighted by the Free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Software Foundation, write to the Free Software Foundation; we sometimes</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">make exceptions for this. Our decision will be guided by the two goals</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of preserving the free status of all derivatives of our free software and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of promoting the sharing and reuse of software generally.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> NO WARRANTY</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROVIDE THE PROGRAM &quot;AS IS&quot; WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">REPAIR OR CORRECTION.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">POSSIBILITY OF SUCH DAMAGES.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> END OF TERMS AND CONDITIONS</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> How to Apply These Terms to Your New Programs</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> If you develop a new program, and you want it to be of the greatest</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">possible use to the public, the best way to achieve this is to make it</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">free software which everyone can redistribute and change under these terms.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> To do so, attach the following notices to the program. It is safest</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to attach them to the start of each source file to most effectively</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">convey the exclusion of warranty; and each file should have at least</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the &quot;copyright&quot; line and a pointer to where the full notice is found.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> &lt;one line to give the program's name and a brief idea of what it does.&gt;</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Copyright (C) 19yy &lt;name of author&gt;</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This program is free software; you can redistribute it and/or modify</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> it under the terms of the GNU General Public License as published by</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> the Free Software Foundation; either version 2 of the License, or</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> (at your option) any later version.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This program is distributed in the hope that it will be useful,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> but WITHOUT ANY WARRANTY; without even the implied warranty of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU General Public License for more details.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> You should have received a copy of the GNU General Public License</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> along with this program; if not, write to the Free Software</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Also add information on how to contact you by electronic and paper mail.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If the program is interactive, make it output a short notice like this</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">when it starts in an interactive mode:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Gnomovision version 69, Copyright (C) 19yy name of author</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This is free software, and you are welcome to redistribute it</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> under certain conditions; type `show c' for details.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">The hypothetical commands `show w' and `show c' should show the appropriate</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">parts of the General Public License. Of course, the commands you use may</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be called something other than `show w' and `show c'; they could even be</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">mouse-clicks or menu items--whatever suits your program.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You should also get your employer (if you work as a programmer) or your</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">school, if any, to sign a &quot;copyright disclaimer&quot; for the program, if</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">necessary. Here is a sample; alter the names:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Yoyodyne, Inc., hereby disclaims all copyright interest in the program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> `Gnomovision' (which makes passes at compilers) written by James Hacker.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> &lt;signature of Ty Coon&gt;, 1 April 1989</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Ty Coon, President of Vice</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This General Public License does not permit incorporating your program into</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">proprietary programs. If your program is a subroutine library, you may</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">consider it more useful to permit linking proprietary applications with the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">library. If this is what you want to do, use the GNU Library General</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Public License instead of this License.</span></p></body></html> - - AudioEngineInfoForm @@ -613,6 +268,25 @@ + ComponentMixerLine + + Mute + Ljudlöst + + + Solo + + + + Component name + + + + Set instrument volume [%1] + + + + Director Director @@ -627,90 +301,50 @@ - DownloadWidget + DonationDialog - (%1/%2 KiB) - ETA %3 + Donations - DrumkitManager_UI - - Load - Ladda - - - Load drumkit - Ladda drumkit - - - Delete drumkit - Ta bort drumkit - + DonationDialog_UI - ### Drumkit author - ### Drumkit upphovsman - - - ### Drumkit name - ### Drumkit namn - - - Save - Spara - - - Author - Upphovsman - - - Drumkit name - Drumkit namn - - - Import - Importera - - - Browse - Bläddra - - - Drumkit filename - Drumkit filnamn + Form + - ### The drumkit will be installed zncxbmzbxcmznxbcmz - ### Detta drumkit kommer att installeras zncxbmzbxcmznxbcmz + Donate! + - <b> -Download more drumkits at <br> -http://www.hydrogen-music.org -</b> - <b> -Ladda ner mer drumkit på <br> -http://www.hydrogen-music.org -</b> + Choose random entry. + - Export - Exportera + <html><head/><body><p align="justify">Hydrogen is an open source project which is developed by multiple people in their spare time. By making a donation you can say &quot;thank you&quot; to the involved persons.</p></body></html> + - Drumkit directory - Drumkit katalog + Sebastian Moors (aka mauser): Maintainer / Developer + - Form1 + Michael Wolkstein (aka wolke): Forum hosting + + + Download - ### Drumkit info + Importing item failed: %1 + + + DownloadWidget - Info + (%1/%2 KiB) - ETA %3 @@ -897,11 +531,15 @@ - Enable use of rubberband batch processor + 88200 - Rubberbad Batch + Enable use of rubberband's batch processor + + + + Rubberband Batch @@ -964,6 +602,14 @@ Saving of this drumkit failed. + + Open Image + + + + Image Files (*.png *.jpg *.jpeg) + + HydrogenApp @@ -983,6 +629,10 @@ Mixer + + modified + + InstrumentEditor @@ -1055,9 +705,33 @@ - Auto-Stop-Note + New component name + + + + Component name + + Midi out channel + + + + Midi out note + + + + Component volume + + + + Don't change the layers' gain based on velocity + + + + Select pattern size + Välj mönster storlek + InstrumentLine @@ -1109,6 +783,22 @@ Solo + + Copy notes ... + + + + Only for this pattern + + + + For all patterns + + + + Paste notes ... + + InstrumentRack @@ -1322,11 +1012,8 @@ LayerPreview - Layer %1: Min. velocity = %2, Max. velocity = %3 - - - - Velocity = %1 + Dec. = %1 +MIDI = %2 @@ -1445,10 +1132,6 @@ Jack drivrutin: fel i port register - &Project - - - Save &as... @@ -1625,6 +1308,40 @@ Report bug + + Export &LilyPond file + + + + Donate + + + + +The LilyPond export is an experimental feature. +It should work like a charm provided that you use the GM-kit, and that you do not use triplet + + + + + LilyPond file (*.ly) + + + + Export LilyPond file + + + + +The current playlist contains unsaved changes. +Do you want to discard the changes? + + + + + Pro&ject + + MasterMixerLine @@ -1658,6 +1375,17 @@ + MidiSenseWidget + + This element is not midi operable. + + + + Waiting for midi input... + + + + MidiTable Event @@ -2290,10 +2018,6 @@ - No song selected! - - - Playlist: set song no. %1 @@ -2305,6 +2029,29 @@ &New Playlist + + File not found: + + + + No valid song selected! + + + + +The current playlist contains unsaved changes. +Do you want to discard the changes? + + + + + &Discard + &No + + + &Cancel + &Avbryt + PlaylistDialog_UI @@ -2380,6 +2127,30 @@ &Cancel &Avbryt + + Automatic + + + + Steps + + + + Fixed + + + + <b>PulseAudio Driver</b><br> + + + + Number of steps + + + + Color (Hue value) + + PreferencesDialog_UI @@ -2452,10 +2223,6 @@ Mixer teckensnitt - <i>After a font change the application must be restarted.</i> - <i>Efter en teckensnitts ändring så måste applikation startas om.</i> - - Form1 @@ -2687,6 +2454,30 @@ Tabbed + + TextLabel + + + + Coloring method for Song Editor elements + + + + <html><head/><body><p><span style=" font-style:italic;">After changing a font or the interface layout the application must be restarted.</span></p></body></html> + + + + Use relative paths for playlist + + + + Use output note as input note + + + + Discard midi messages after action has been triggered + + SampleEditor @@ -3087,10 +2878,6 @@ - not_categorized - - - Enable time line edit @@ -3293,13 +3080,41 @@ - Browse - Bläddra - - Export Exportera + + Drumkit + + + + Component + + + + Path + + + + Version + + + + Browse... + + + + 0.9.7 and higher + + + + 0.9.6 and lower + + + + Cancel + Avbryt + SoundLibraryImportDialog @@ -3360,7 +3175,11 @@ Mönster - License: %1 + Drumkit License: %1 + + + + Image License: %1 @@ -3383,10 +3202,6 @@ - Sound library Info - - - Author... @@ -3411,15 +3226,23 @@ - License... + Edit server list - Edit server list + Close - Close + TextLabel + + + + Image License... + + + + Drumkit License... @@ -3493,6 +3316,17 @@ Drumkit deletion failed. + + The existing kit has %1 instruments but the new one only has %2. +The first %2 instruments will be replaced with the new intruments and will keep their notes, but some of the remaining instruments have notes. +Would you like to keep or discard the remaining instruments and notes? + + + + + Keep + + SoundLibraryPropertiesDialog_UI @@ -3513,10 +3347,6 @@ - License - - - Save @@ -3528,6 +3358,22 @@ Save changes made to instruments into sound library + + Drumkit License + + + + Image + + + + Browse + Bläddra + + + Image License + + SoundLibraryRepositoryDialog @@ -3570,7 +3416,19 @@ - Saving of this drumkit failed. + A library with the same name already exists. Do you want to overwrite the existing library? + + + + Saving of this library failed. + + + + Open Image + + + + Image Files (*.png *.jpg *.jpeg) @@ -3604,6 +3462,18 @@ Save + + Image + + + + Browse + Bläddra + + + Image License + + SoundLibraryTree Binary files /tmp/tmpktOUQO/kmAosGw3t1/hydrogen-0.9.6.1/data/img/gray/drumkitManager/background_options.png and /tmp/tmpktOUQO/ALHtWJIToj/hydrogen-0.9.7/data/img/gray/drumkitManager/background_options.png differ Binary files /tmp/tmpktOUQO/kmAosGw3t1/hydrogen-0.9.6.1/data/img/gray/drumkitManager/btn_export_off.png and /tmp/tmpktOUQO/ALHtWJIToj/hydrogen-0.9.7/data/img/gray/drumkitManager/btn_export_off.png differ Binary files /tmp/tmpktOUQO/kmAosGw3t1/hydrogen-0.9.6.1/data/img/gray/drumkitManager/btn_export_on.png and /tmp/tmpktOUQO/ALHtWJIToj/hydrogen-0.9.7/data/img/gray/drumkitManager/btn_export_on.png differ Binary files /tmp/tmpktOUQO/kmAosGw3t1/hydrogen-0.9.6.1/data/img/gray/drumkitManager/btn_export_over.png and /tmp/tmpktOUQO/ALHtWJIToj/hydrogen-0.9.7/data/img/gray/drumkitManager/btn_export_over.png differ Binary files /tmp/tmpktOUQO/kmAosGw3t1/hydrogen-0.9.6.1/data/img/gray/drumkitManager/btn_import_off.png and /tmp/tmpktOUQO/ALHtWJIToj/hydrogen-0.9.7/data/img/gray/drumkitManager/btn_import_off.png differ Binary files /tmp/tmpktOUQO/kmAosGw3t1/hydrogen-0.9.6.1/data/img/gray/drumkitManager/btn_import_on.png and /tmp/tmpktOUQO/ALHtWJIToj/hydrogen-0.9.7/data/img/gray/drumkitManager/btn_import_on.png differ Binary files /tmp/tmpktOUQO/kmAosGw3t1/hydrogen-0.9.6.1/data/img/gray/drumkitManager/btn_import_over.png and /tmp/tmpktOUQO/ALHtWJIToj/hydrogen-0.9.7/data/img/gray/drumkitManager/btn_import_over.png differ Binary files /tmp/tmpktOUQO/kmAosGw3t1/hydrogen-0.9.6.1/data/img/gray/drumkitManager/btn_new_off.png and /tmp/tmpktOUQO/ALHtWJIToj/hydrogen-0.9.7/data/img/gray/drumkitManager/btn_new_off.png differ Binary files /tmp/tmpktOUQO/kmAosGw3t1/hydrogen-0.9.6.1/data/img/gray/drumkitManager/btn_new_on.png and /tmp/tmpktOUQO/ALHtWJIToj/hydrogen-0.9.7/data/img/gray/drumkitManager/btn_new_on.png differ Binary files /tmp/tmpktOUQO/kmAosGw3t1/hydrogen-0.9.6.1/data/img/gray/drumkitManager/btn_new_over.png and /tmp/tmpktOUQO/ALHtWJIToj/hydrogen-0.9.7/data/img/gray/drumkitManager/btn_new_over.png differ Binary files /tmp/tmpktOUQO/kmAosGw3t1/hydrogen-0.9.6.1/data/img/gray/drumkitManager/btn_save_off.png and /tmp/tmpktOUQO/ALHtWJIToj/hydrogen-0.9.7/data/img/gray/drumkitManager/btn_save_off.png differ Binary files /tmp/tmpktOUQO/kmAosGw3t1/hydrogen-0.9.6.1/data/img/gray/drumkitManager/btn_save_on.png and /tmp/tmpktOUQO/ALHtWJIToj/hydrogen-0.9.7/data/img/gray/drumkitManager/btn_save_on.png differ Binary files /tmp/tmpktOUQO/kmAosGw3t1/hydrogen-0.9.6.1/data/img/gray/drumkitManager/btn_save_over.png and /tmp/tmpktOUQO/ALHtWJIToj/hydrogen-0.9.7/data/img/gray/drumkitManager/btn_save_over.png differ Binary files /tmp/tmpktOUQO/kmAosGw3t1/hydrogen-0.9.6.1/data/img/gray/instrumentEditor/btn_dropdown_off.png and /tmp/tmpktOUQO/ALHtWJIToj/hydrogen-0.9.7/data/img/gray/instrumentEditor/btn_dropdown_off.png differ Binary files /tmp/tmpktOUQO/kmAosGw3t1/hydrogen-0.9.6.1/data/img/gray/instrumentEditor/btn_dropdown_on.png and /tmp/tmpktOUQO/ALHtWJIToj/hydrogen-0.9.7/data/img/gray/instrumentEditor/btn_dropdown_on.png differ Binary files /tmp/tmpktOUQO/kmAosGw3t1/hydrogen-0.9.6.1/data/img/gray/instrumentEditor/btn_dropdown_over.png and /tmp/tmpktOUQO/ALHtWJIToj/hydrogen-0.9.7/data/img/gray/instrumentEditor/btn_dropdown_over.png differ Binary files /tmp/tmpktOUQO/kmAosGw3t1/hydrogen-0.9.6.1/data/img/gray/instrumentEditor/instrumentTab_new.png and /tmp/tmpktOUQO/ALHtWJIToj/hydrogen-0.9.7/data/img/gray/instrumentEditor/instrumentTab_new.png differ Binary files /tmp/tmpktOUQO/kmAosGw3t1/hydrogen-0.9.6.1/data/img/gray/instrumentEditor/layerTabsupernew.png and /tmp/tmpktOUQO/ALHtWJIToj/hydrogen-0.9.7/data/img/gray/instrumentEditor/layerTabsupernew.png differ Binary files /tmp/tmpktOUQO/kmAosGw3t1/hydrogen-0.9.6.1/data/img/gray/mixerPanel/componentmixerline_background.png and /tmp/tmpktOUQO/ALHtWJIToj/hydrogen-0.9.7/data/img/gray/mixerPanel/componentmixerline_background.png differ Binary files /tmp/tmpktOUQO/kmAosGw3t1/hydrogen-0.9.6.1/data/img/h2-icon.bmp and /tmp/tmpktOUQO/ALHtWJIToj/hydrogen-0.9.7/data/img/h2-icon.bmp differ Binary files /tmp/tmpktOUQO/kmAosGw3t1/hydrogen-0.9.6.1/data/img/h2-icon.ico and /tmp/tmpktOUQO/ALHtWJIToj/hydrogen-0.9.7/data/img/h2-icon.ico differ diff -Nru hydrogen-0.9.6.1/data/xsd/drumkit.xsd hydrogen-0.9.7/data/xsd/drumkit.xsd --- hydrogen-0.9.6.1/data/xsd/drumkit.xsd 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/data/xsd/drumkit.xsd 2016-11-05 08:22:50.000000000 +0000 @@ -20,6 +20,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -50,6 +74,7 @@ + @@ -61,12 +86,16 @@ + + + + - + @@ -81,6 +110,15 @@ + + + + + + + + + diff -Nru hydrogen-0.9.6.1/debian/changelog hydrogen-0.9.7/debian/changelog --- hydrogen-0.9.6.1/debian/changelog 2015-08-11 06:43:35.000000000 +0000 +++ hydrogen-0.9.7/debian/changelog 2016-11-29 22:01:10.000000000 +0000 @@ -1,8 +1,46 @@ -hydrogen (0.9.6.1-1build1) wily; urgency=medium +hydrogen (0.9.7-1) unstable; urgency=medium - * No-change rebuild against libjack-jackd2-0v5 + * New upstream version 0.9.7 + * Split package. + * hydrogen - binary + * hydrogen-data * architecture-independent data files + * demo_songs, drumkits, translations + * hydrogen-doc * documentation + * debian/patches + * Patches refreshed. + * Renumbering patches. + * Add patch to fix install path for upstream man pages. + * 1008-desktop.patch not needed anymore. + * portaudio patch refreshed/enabled. + * Add patch fixing CXX FLAGS. + * Add spelling patch. + * Patches forwarded. + * debian/control + * Bump Standards. + * Fix VCS fields. + * Add me as uploader also to control.in file. + * debian/copyright + * Update copyright_hints. + * Update copyright file. + * debian/rules + * Fix hardening. + * Set dh/compat 10. + * Remove menu file. + * Improve README.source file. + * Set section doc for doc package. + * Add link to SVG icon. (Closes: #795474) + * Build docs. (Closes: #629107) + * Thanks to James Cowgill! + * Set libportmidi-dev linux-any to build on non-linux archs (Closes: #591301). + * Add hydrogen-data.lintian-overrides file. + * Don't create xmp icon. + * Not install xpm icon any more. + * Remove B-D for image conversion - not needed any more. + * Don't sign tags. + * Handle upstream git files by d/gbp.conf rather then d/copyright. + * Install upstream man pages and hydrogen.appdata.xml. - -- Steve Langasek Tue, 11 Aug 2015 06:43:35 +0000 + -- Jaromír Mikeš Tue, 29 Nov 2016 22:01:10 +0000 hydrogen (0.9.6.1-1) unstable; urgency=medium diff -Nru hydrogen-0.9.6.1/debian/compat hydrogen-0.9.7/debian/compat --- hydrogen-0.9.6.1/debian/compat 2014-10-21 12:18:39.000000000 +0000 +++ hydrogen-0.9.7/debian/compat 2016-11-29 18:58:01.000000000 +0000 @@ -1 +1 @@ -9 +10 diff -Nru hydrogen-0.9.6.1/debian/control hydrogen-0.9.7/debian/control --- hydrogen-0.9.6.1/debian/control 2015-08-11 06:43:35.000000000 +0000 +++ hydrogen-0.9.7/debian/control 2016-11-29 18:58:01.000000000 +0000 @@ -1,15 +1,14 @@ Source: hydrogen Section: sound Priority: optional -Maintainer: Ubuntu Developers -XSBC-Original-Maintainer: Debian Multimedia Maintainers +Maintainer: Debian Multimedia Maintainers Uploaders: Jonas Smedegaard , Jaromír Mikeš Build-Depends: - cdbs (>= 0.4.70~), - devscripts, - debhelper (>= 9), + cdbs, + licensecheck, + debhelper (>= 10~), dh-buildinfo, cmake, libqt4-dev, @@ -25,24 +24,23 @@ libjack-dev, liblrdf-dev, libsndfile1-dev (>= 1.0.18), - librubberband-dev, portaudio19-dev, - libportmidi-dev, - libpulse-dev, - librsvg2-bin, - netpbm -Standards-Version: 3.9.6 + libportmidi-dev [linux-any], + libpulse-dev +Standards-Version: 3.9.8 Homepage: http://www.hydrogen-music.org/ -Vcs-Git: git://anonscm.debian.org/pkg-multimedia/hydrogen.git +Vcs-Git: https://anonscm.debian.org/git/pkg-multimedia/hydrogen.git Vcs-Browser: https://anonscm.debian.org/cgit/pkg-multimedia/hydrogen.git Package: hydrogen Architecture: any Depends: ${misc:Depends}, - ${shlibs:Depends} + ${shlibs:Depends}, + hydrogen-data (= ${source:Version}) Recommends: hydrogen-drumkits, + hydrogen-doc, rubberband-cli Description: advanced drum machine/step sequencer Hydrogen is an advanced drum machine. It's main goal is to bring @@ -74,3 +72,29 @@ * Import/export of drumkits. * Export song to wav file. * Export song to midi file. + +Package: hydrogen-data +Architecture: all +Multi-Arch: foreign +Depends: ${misc:Depends} +Recommends: hydrogen +Breaks: hydrogen (<< 0.9.7-1~) +Replaces: hydrogen (<< 0.9.7-1~) +Description: advanced drum machine/step sequencer (data) + Hydrogen is an advanced drum machine. It's main goal is to bring + professional yet simple and intuitive pattern-based drum programming. + . + This package contains the architecture-independent data files. + +Package: hydrogen-doc +Section: doc +Architecture: all +Multi-Arch: foreign +Depends: ${misc:Depends} +Breaks: hydrogen (<< 0.9.7-1~) +Replaces: hydrogen (<< 0.9.7-1~) +Description: advanced drum machine/step sequencer (doc) + Hydrogen is an advanced drum machine. It's main goal is to bring + professional yet simple and intuitive pattern-based drum programming. + . + This package contains the architecture-independent documentation. diff -Nru hydrogen-0.9.6.1/debian/control.in hydrogen-0.9.7/debian/control.in --- hydrogen-0.9.6.1/debian/control.in 2015-08-11 06:43:35.000000000 +0000 +++ hydrogen-0.9.7/debian/control.in 2016-11-29 18:58:01.000000000 +0000 @@ -1,24 +1,26 @@ Source: hydrogen Section: sound Priority: optional -Maintainer: Ubuntu Developers -XSBC-Original-Maintainer: Debian Multimedia Maintainers +Maintainer: Debian Multimedia Maintainers Uploaders: - Jonas Smedegaard + Jonas Smedegaard , + Jaromír Mikeš Build-Depends: @cdbs@ -Standards-Version: 3.9.3 +Standards-Version: 3.9.8 Homepage: http://www.hydrogen-music.org/ -Vcs-Git: git://git.debian.org/git/pkg-multimedia/hydrogen.git -Vcs-Browser: http://git.debian.org/?p=pkg-multimedia/hydrogen.git;a=summary +Vcs-Git: https://anonscm.debian.org/git/pkg-multimedia/hydrogen.git +Vcs-Browser: https://anonscm.debian.org/cgit/pkg-multimedia/hydrogen.git Package: hydrogen Architecture: any Depends: ${misc:Depends}, - ${shlibs:Depends} + ${shlibs:Depends}, + hydrogen-data (= ${source:Version}) Recommends: hydrogen-drumkits, + hydrogen-doc, rubberband-cli Description: advanced drum machine/step sequencer Hydrogen is an advanced drum machine. It's main goal is to bring @@ -50,3 +52,29 @@ * Import/export of drumkits. * Export song to wav file. * Export song to midi file. + +Package: hydrogen-data +Architecture: all +Multi-Arch: foreign +Depends: ${misc:Depends} +Recommends: hydrogen +Breaks: hydrogen (<< 0.9.7-1~) +Replaces: hydrogen (<< 0.9.7-1~) +Description: advanced drum machine/step sequencer (data) + Hydrogen is an advanced drum machine. It's main goal is to bring + professional yet simple and intuitive pattern-based drum programming. + . + This package contains the architecture-independent data files. + +Package: hydrogen-doc +Section: doc +Architecture: all +Multi-Arch: foreign +Depends: ${misc:Depends} +Breaks: hydrogen (<< 0.9.7-1~) +Replaces: hydrogen (<< 0.9.7-1~) +Description: advanced drum machine/step sequencer (doc) + Hydrogen is an advanced drum machine. It's main goal is to bring + professional yet simple and intuitive pattern-based drum programming. + . + This package contains the architecture-independent documentation. diff -Nru hydrogen-0.9.6.1/debian/copyright hydrogen-0.9.7/debian/copyright --- hydrogen-0.9.6.1/debian/copyright 2014-10-21 13:07:36.000000000 +0000 +++ hydrogen-0.9.7/debian/copyright 2016-11-29 18:58:01.000000000 +0000 @@ -10,17 +10,85 @@ 2008, Sebastian Moors License: GPL-2+ -Files: */ladspa.h -Copyright: - 2000-2002, Richard W.E. Furse - 2000-2002, Paul Barton-Davis - 2000-2002, Stefan Westerfeld +Files: src/core/include/hydrogen/IO/JackMidiDriver.h + src/core/src/IO/jack_midi_driver.cpp +Copyright: 2011, Hans Petter Selasky +License: BSD-2-clause + +Files: src/core/include/hydrogen/LashClient.h + src/core/src/lash/LashClient.cpp +Copyright: (c) 2002-2005 by Alex >Comix< Cominu comix@users.sourceforge.net +License: GPL-2+ + +Files: src/gui/src/SoundLibrary/SoundLibraryRepositoryDialog.cpp + src/gui/src/SoundLibrary/SoundLibraryRepositoryDialog.h +Copyright: (c) 2002-2007 by Alex >Comix< Cominu comix@users.sourceforge.net +License: GPL-2+ + +Files: src/core/include/hydrogen/IO/CoreMidiDriver.h + src/core/src/IO/coremidi_driver.cpp +Copyright: (c) 2002-2008 by Alex >Comix< Cominu comix@users.sourceforge.net + (c) 2005-2006 by Jonathan Dempsey +License: GPL-2+ + +Files: src/core/include/hydrogen/IO/CoreAudioDriver.h + src/core/src/IO/coreaudio_driver.cpp +Copyright: (c) 2005 by Jonathan Dempsey jonathandempsey@fastmail.fm +License: GPL-2+ + +Files: src/core/include/hydrogen/lilypond/lilypond.h + src/core/src/lilypond/lilypond.cpp +Copyright: (c) 2015 by Sacha Delanoue +License: GPL-2+ + +Files: src/core/include/hydrogen/fx/ladspa.h + src/plugins/wasp/include/ladspa.h +Copyright: 2000-2002, Richard W.E. Furse, Paul Barton-Davis, License: LGPL-2.1+ +Files: src/core/include/hydrogen/smf/SMF.h +Copyright: (c) 2002-2004 by Alex >Comix< Cominu comix@users.sourceforge.net +License: GPL-2+ + +Files: src/core/src/smf/smf.cpp +Copyright: (c) 2002-2004 by Alex >Comix< Cominu[comix@users.sourceforge.net +License: GPL-2+ + +Files: src/gui/src/main.cpp +Copyright: (c) 2002-2008 by Alex >Comix< Cominu comix@users.sourceforge.net + 2002-2008, Alessandro Cominu + 2008-2016, The hydrogen development team +License: GPL-2+ + +Files: src/gui/src/LadspaFXSelector.cpp +Copyright: (c) 2002-2008 by Alex >Comix< Cominu comix@users.sourceforge.net +License: GPL-2+ + +Files: src/core/include/hydrogen/smf/SMFEvent.h +Copyright: (c) 2002-2008 by Alex >Comix< Cominu comix@users.sourceforge.net +License: GPL-2+ + +Files: src/core/src/smf/smf_event.cpp +Copyright: (c) 2002-2008 by Alex >Comix< Cominu comix@users.sourceforge.net +License: GPL-2+ + +Files: src/www/hydrogen.php +Copyright: (c) 2008 by Sebastian Moors mauser@smoors.de +License: GPL-2+ + +Files: src/cli/main.cpp +Copyright: (c) 2013 by Sebastian Moors, Pawel Piatek + 2002-2008, Alessandro Cominu +License: GPL-2+ + +Files: src/core/include/hydrogen/nsm.h +Copyright: 2012, Jonathan Moore Liles +License: ISC + Files: debian/* Copyright: 2010-2011, Jonas Smedegaard - 2014 Jaromír Mikeš + 2014-2016, Jaromír Mikeš License: GPL-2+ License: GPL-2+ @@ -57,3 +125,40 @@ You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . + +License: BSD-2-clause + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + . + THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE. + +License: ISC + Permission to use, copy, modify, and/or distribute this software for + any purpose with or without fee is hereby granted, provided that the + above copyright notice and this permission notice appear in all + copies. + . + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL + WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE + AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + PERFORMANCE OF THIS SOFTWARE. diff -Nru hydrogen-0.9.6.1/debian/copyright_hints hydrogen-0.9.7/debian/copyright_hints --- hydrogen-0.9.6.1/debian/copyright_hints 2014-10-21 11:56:30.000000000 +0000 +++ hydrogen-0.9.7/debian/copyright_hints 2016-11-29 18:58:01.000000000 +0000 @@ -1,227 +1,237 @@ -Format: http://svn.debian.org/wsvn/dep/web/deps/dep5.mdwn?rev=166 +Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: FIXME Upstream-Contact: FIXME Source: FIXME Disclaimer: Autogenerated by CDBS -Files: extra/hydrogenPlayer/HydrogenPlayer.cpp - gui/src/AboutDialog.cpp - gui/src/AboutDialog.h - gui/src/AudioEngineInfoForm.cpp - gui/src/AudioEngineInfoForm.h - gui/src/AudioFileBrowser/AudioFileBrowser.cpp - gui/src/AudioFileBrowser/AudioFileBrowser.h - gui/src/AudioFileBrowser/SampleWaveDisplay.cpp - gui/src/AudioFileBrowser/SampleWaveDisplay.h - gui/src/Director.cpp - gui/src/Director.h - gui/src/EventListener.h - gui/src/ExportSongDialog.cpp - gui/src/ExportSongDialog.h - gui/src/HelpBrowser.cpp - gui/src/HelpBrowser.h - gui/src/HydrogenApp.cpp - gui/src/HydrogenApp.h - gui/src/InstrumentEditor/InstrumentEditor.cpp - gui/src/InstrumentEditor/InstrumentEditor.h - gui/src/InstrumentEditor/InstrumentEditorPanel.cpp - gui/src/InstrumentEditor/InstrumentEditorPanel.h - gui/src/InstrumentEditor/LayerPreview.cpp - gui/src/InstrumentEditor/LayerPreview.h - gui/src/InstrumentEditor/WaveDisplay.cpp - gui/src/InstrumentEditor/WaveDisplay.h - gui/src/InstrumentRack.cpp - gui/src/InstrumentRack.h - gui/src/LadspaFXProperties.cpp - gui/src/LadspaFXProperties.h - gui/src/LadspaFXSelector.cpp - gui/src/LadspaFXSelector.h - gui/src/MainForm.cpp - gui/src/MainForm.h - gui/src/Mixer/Mixer.cpp - gui/src/Mixer/Mixer.h - gui/src/Mixer/MixerLine.cpp - gui/src/Mixer/MixerLine.h - gui/src/PatternEditor/DrumPatternEditor.cpp - gui/src/PatternEditor/DrumPatternEditor.h - gui/src/PatternEditor/NotePropertiesRuler.cpp - gui/src/PatternEditor/NotePropertiesRuler.h - gui/src/PatternEditor/PatternEditorInstrumentList.cpp - gui/src/PatternEditor/PatternEditorInstrumentList.h - gui/src/PatternEditor/PatternEditorPanel.cpp - gui/src/PatternEditor/PatternEditorPanel.h - gui/src/PatternEditor/PatternEditorRuler.cpp - gui/src/PatternEditor/PatternEditorRuler.h - gui/src/PatternEditor/PianoRollEditor.cpp - gui/src/PatternEditor/PianoRollEditor.h - gui/src/PatternFillDialog.cpp - gui/src/PatternFillDialog.h - gui/src/PatternPropertiesDialog.cpp - gui/src/PatternPropertiesDialog.h - gui/src/PlayerControl.cpp - gui/src/PlayerControl.h - gui/src/PlaylistEditor/PlaylistDialog.cpp - gui/src/PlaylistEditor/PlaylistDialog.h - gui/src/PreferencesDialog.cpp - gui/src/PreferencesDialog.h - gui/src/SampleEditor/DetailWaveDisplay.cpp - gui/src/SampleEditor/DetailWaveDisplay.h - gui/src/SampleEditor/MainSampleWaveDisplay.cpp - gui/src/SampleEditor/MainSampleWaveDisplay.h - gui/src/SampleEditor/SampleEditor.cpp - gui/src/SampleEditor/SampleEditor.h - gui/src/SampleEditor/TargetWaveDisplay.cpp - gui/src/SampleEditor/TargetWaveDisplay.h - gui/src/Skin.h - gui/src/SongEditor/SongEditor.cpp - gui/src/SongEditor/SongEditor.h - gui/src/SongEditor/SongEditorPanel.cpp - gui/src/SongEditor/SongEditorPanel.h - gui/src/SongEditor/SongEditorPanelBpmWidget.cpp - gui/src/SongEditor/SongEditorPanelBpmWidget.h - gui/src/SongEditor/SongEditorPanelTagWidget.cpp - gui/src/SongEditor/SongEditorPanelTagWidget.h - gui/src/SongPropertiesDialog.cpp - gui/src/SongPropertiesDialog.h - gui/src/SoundLibrary/FileBrowser.cpp - gui/src/SoundLibrary/FileBrowser.h - gui/src/SoundLibrary/SoundLibraryExportDialog.cpp - gui/src/SoundLibrary/SoundLibraryExportDialog.h - gui/src/SoundLibrary/SoundLibraryImportDialog.cpp - gui/src/SoundLibrary/SoundLibraryImportDialog.h - gui/src/SoundLibrary/SoundLibraryPanel.cpp - gui/src/SoundLibrary/SoundLibraryPanel.h - gui/src/SoundLibrary/SoundLibraryPropertiesDialog.cpp - gui/src/SoundLibrary/SoundLibraryPropertiesDialog.h - gui/src/SoundLibrary/SoundLibraryRepositoryDialog.cpp - gui/src/SoundLibrary/SoundLibraryRepositoryDialog.h - gui/src/SoundLibrary/SoundLibrarySaveDialog.cpp - gui/src/SoundLibrary/SoundLibrarySaveDialog.h - gui/src/SoundLibrary/SoundLibraryTree.cpp - gui/src/SoundLibrary/SoundLibraryTree.h - gui/src/SplashScreen.cpp - gui/src/SplashScreen.h - gui/src/VirtualPatternDialog.cpp - gui/src/VirtualPatternDialog.h - gui/src/main.cpp - gui/src/widgets/Button.cpp - gui/src/widgets/Button.h - gui/src/widgets/ClickableLabel.cpp - gui/src/widgets/ClickableLabel.h - gui/src/widgets/CpuLoadWidget.cpp - gui/src/widgets/CpuLoadWidget.h - gui/src/widgets/DownloadWidget.cpp - gui/src/widgets/DownloadWidget.h - gui/src/widgets/Fader.cpp - gui/src/widgets/Fader.h - gui/src/widgets/LCD.cpp - gui/src/widgets/LCD.h - gui/src/widgets/LCDCombo.cpp - gui/src/widgets/LCDCombo.h - gui/src/widgets/MidiActivityWidget.cpp - gui/src/widgets/MidiActivityWidget.h - gui/src/widgets/MidiLearnable.h - gui/src/widgets/MidiSenseWidget.cpp - gui/src/widgets/MidiSenseWidget.h - gui/src/widgets/PixmapWidget.cpp - gui/src/widgets/PixmapWidget.h - gui/src/widgets/Rotary.cpp - gui/src/widgets/Rotary.h - gui/src/widgets/midiTable.cpp - gui/src/widgets/midiTable.h - libs/hydrogen/include/hydrogen/IO/AudioOutput.h - libs/hydrogen/include/hydrogen/IO/JackOutput.h - libs/hydrogen/include/hydrogen/IO/MidiCommon.h - libs/hydrogen/include/hydrogen/IO/MidiInput.h - libs/hydrogen/include/hydrogen/IO/MidiOutput.h - libs/hydrogen/include/hydrogen/IO/NullDriver.h - libs/hydrogen/include/hydrogen/IO/TransportInfo.h - libs/hydrogen/include/hydrogen/LashClient.h - libs/hydrogen/include/hydrogen/LocalFileMng.h - libs/hydrogen/include/hydrogen/Object.h - libs/hydrogen/include/hydrogen/Pattern.h - libs/hydrogen/include/hydrogen/Preferences.h - libs/hydrogen/include/hydrogen/Song.h - libs/hydrogen/include/hydrogen/SoundLibrary.h - libs/hydrogen/include/hydrogen/action.h - libs/hydrogen/include/hydrogen/adsr.h - libs/hydrogen/include/hydrogen/audio_engine.h - libs/hydrogen/include/hydrogen/event_queue.h - libs/hydrogen/include/hydrogen/fx/Effects.h - libs/hydrogen/include/hydrogen/fx/LadspaFX.h - libs/hydrogen/include/hydrogen/globals.h - libs/hydrogen/include/hydrogen/h2_exception.h - libs/hydrogen/include/hydrogen/hydrogen.h - libs/hydrogen/include/hydrogen/instrument.h - libs/hydrogen/include/hydrogen/midiMap.h - libs/hydrogen/include/hydrogen/note.h - libs/hydrogen/include/hydrogen/playlist.h - libs/hydrogen/include/hydrogen/sample.h - libs/hydrogen/include/hydrogen/sampler/Sampler.h - libs/hydrogen/include/hydrogen/smf/SMF.h - libs/hydrogen/include/hydrogen/smf/SMFEvent.h - libs/hydrogen/include/hydrogen/synth/Synth.h - libs/hydrogen/include/hydrogen/util.h - libs/hydrogen/src/IO/AlsaAudioDriver.h - libs/hydrogen/src/IO/AlsaMidiDriver.h - libs/hydrogen/src/IO/CoreAudioDriver.h - libs/hydrogen/src/IO/DiskWriterDriver.h - libs/hydrogen/src/IO/FakeDriver.h - libs/hydrogen/src/IO/OssDriver.h - libs/hydrogen/src/IO/PortAudioDriver.h - libs/hydrogen/src/IO/PortMidiDriver.h - libs/hydrogen/src/IO/alsa_audio_driver.cpp - libs/hydrogen/src/IO/alsa_midi_driver.cpp - libs/hydrogen/src/IO/coreaudio_driver.cpp - libs/hydrogen/src/IO/disk_writer_driver.cpp - libs/hydrogen/src/IO/fake_driver.cpp - libs/hydrogen/src/IO/jack_output.cpp - libs/hydrogen/src/IO/midi_input.cpp - libs/hydrogen/src/IO/midi_output.cpp - libs/hydrogen/src/IO/null_driver.cpp - libs/hydrogen/src/IO/oss_driver.cpp - libs/hydrogen/src/IO/portmidi_driver.cpp - libs/hydrogen/src/IO/transport_info.cpp - libs/hydrogen/src/action.cpp - libs/hydrogen/src/adsr.cpp - libs/hydrogen/src/audio_engine.cpp - libs/hydrogen/src/event_queue.cpp - libs/hydrogen/src/fx/effects.cpp - libs/hydrogen/src/fx/ladspa_fx.cpp - libs/hydrogen/src/hydrogen.cpp - libs/hydrogen/src/instrument.cpp - libs/hydrogen/src/lash/LashClient.cpp - libs/hydrogen/src/local_file_mgr.cpp - libs/hydrogen/src/midiMap.cpp - libs/hydrogen/src/note.cpp - libs/hydrogen/src/object.cpp - libs/hydrogen/src/pattern.cpp - libs/hydrogen/src/playlist.cpp - libs/hydrogen/src/preferences.cpp - libs/hydrogen/src/sample.cpp - libs/hydrogen/src/sampler/sampler.cpp - libs/hydrogen/src/smf/smf.cpp - libs/hydrogen/src/smf/smf_event.cpp - libs/hydrogen/src/song.cpp - libs/hydrogen/src/sound_library.cpp - libs/hydrogen/src/synth/synth.cpp - libs/hydrogen/src/util.cpp -Copyright: 2002-2004, Alex >Comix< Cominu [comix@users.sourceforge.net - 2002-2005, Alex >Comix< Cominu [comix@users.sourceforge.net - 2002-2007, Alex >Comix< Cominu [comix@users.sourceforge.net - 2002-2008, Alex >Comix< Cominu [comix@users.sourceforge.net +Files: src/core/include/hydrogen/IO/AlsaAudioDriver.h + src/core/include/hydrogen/IO/AlsaMidiDriver.h + src/core/include/hydrogen/IO/AudioOutput.h + src/core/include/hydrogen/IO/DiskWriterDriver.h + src/core/include/hydrogen/IO/FakeDriver.h + src/core/include/hydrogen/IO/JackOutput.h + src/core/include/hydrogen/IO/MidiCommon.h + src/core/include/hydrogen/IO/MidiInput.h + src/core/include/hydrogen/IO/MidiOutput.h + src/core/include/hydrogen/IO/NullDriver.h + src/core/include/hydrogen/IO/OssDriver.h + src/core/include/hydrogen/IO/PortAudioDriver.h + src/core/include/hydrogen/IO/PortMidiDriver.h + src/core/include/hydrogen/IO/PulseAudioDriver.h + src/core/include/hydrogen/IO/TransportInfo.h + src/core/include/hydrogen/LocalFileMng.h + src/core/include/hydrogen/Preferences.h + src/core/include/hydrogen/audio_engine.h + src/core/include/hydrogen/basics/adsr.h + src/core/include/hydrogen/basics/drumkit.h + src/core/include/hydrogen/basics/drumkit_component.h + src/core/include/hydrogen/basics/instrument.h + src/core/include/hydrogen/basics/instrument_component.h + src/core/include/hydrogen/basics/instrument_layer.h + src/core/include/hydrogen/basics/instrument_list.h + src/core/include/hydrogen/basics/note.h + src/core/include/hydrogen/basics/pattern.h + src/core/include/hydrogen/basics/pattern_list.h + src/core/include/hydrogen/basics/sample.h + src/core/include/hydrogen/basics/song.h + src/core/include/hydrogen/event_queue.h + src/core/include/hydrogen/fx/Effects.h + src/core/include/hydrogen/fx/LadspaFX.h + src/core/include/hydrogen/globals.h + src/core/include/hydrogen/h2_exception.h + src/core/include/hydrogen/hydrogen.h + src/core/include/hydrogen/logger.h + src/core/include/hydrogen/midi_action.h + src/core/include/hydrogen/midi_map.h + src/core/include/hydrogen/nsm_client.h + src/core/include/hydrogen/object.h + src/core/include/hydrogen/playlist.h + src/core/include/hydrogen/rt_clock.h + src/core/include/hydrogen/sampler/Sampler.h + src/core/include/hydrogen/synth/Synth.h + src/core/include/hydrogen/timeline.h + src/core/src/IO/alsa_audio_driver.cpp + src/core/src/IO/alsa_midi_driver.cpp + src/core/src/IO/disk_writer_driver.cpp + src/core/src/IO/fake_driver.cpp + src/core/src/IO/jack_output.cpp + src/core/src/IO/midi_input.cpp + src/core/src/IO/midi_output.cpp + src/core/src/IO/null_driver.cpp + src/core/src/IO/oss_driver.cpp + src/core/src/IO/portmidi_driver.cpp + src/core/src/IO/pulse_audio_driver.cpp + src/core/src/IO/transport_info.cpp + src/core/src/audio_engine.cpp + src/core/src/basics/adsr.cpp + src/core/src/basics/drumkit.cpp + src/core/src/basics/drumkit_component.cpp + src/core/src/basics/instrument.cpp + src/core/src/basics/instrument_component.cpp + src/core/src/basics/instrument_layer.cpp + src/core/src/basics/instrument_list.cpp + src/core/src/basics/note.cpp + src/core/src/basics/pattern.cpp + src/core/src/basics/pattern_list.cpp + src/core/src/basics/sample.cpp + src/core/src/basics/song.cpp + src/core/src/event_queue.cpp + src/core/src/fx/effects.cpp + src/core/src/fx/ladspa_fx.cpp + src/core/src/hydrogen.cpp + src/core/src/local_file_mgr.cpp + src/core/src/logger.cpp + src/core/src/midi_action.cpp + src/core/src/midi_map.cpp + src/core/src/nsm_client.cpp + src/core/src/object.cpp + src/core/src/playlist.cpp + src/core/src/preferences.cpp + src/core/src/sampler/sampler.cpp + src/core/src/synth/synth.cpp + src/core/src/timeline.cpp + src/gui/src/AboutDialog.cpp + src/gui/src/AboutDialog.h + src/gui/src/AudioEngineInfoForm.cpp + src/gui/src/AudioEngineInfoForm.h + src/gui/src/AudioFileBrowser/AudioFileBrowser.cpp + src/gui/src/AudioFileBrowser/AudioFileBrowser.h + src/gui/src/AudioFileBrowser/SampleWaveDisplay.cpp + src/gui/src/AudioFileBrowser/SampleWaveDisplay.h + src/gui/src/Director.cpp + src/gui/src/Director.h + src/gui/src/DonationDialog.cpp + src/gui/src/DonationDialog.h + src/gui/src/EventListener.h + src/gui/src/ExportSongDialog.cpp + src/gui/src/ExportSongDialog.h + src/gui/src/HelpBrowser.cpp + src/gui/src/HelpBrowser.h + src/gui/src/HydrogenApp.cpp + src/gui/src/HydrogenApp.h + src/gui/src/InstrumentEditor/InstrumentEditor.cpp + src/gui/src/InstrumentEditor/InstrumentEditor.h + src/gui/src/InstrumentEditor/InstrumentEditorPanel.cpp + src/gui/src/InstrumentEditor/InstrumentEditorPanel.h + src/gui/src/InstrumentEditor/LayerPreview.cpp + src/gui/src/InstrumentEditor/LayerPreview.h + src/gui/src/InstrumentEditor/WaveDisplay.cpp + src/gui/src/InstrumentEditor/WaveDisplay.h + src/gui/src/InstrumentRack.cpp + src/gui/src/InstrumentRack.h + src/gui/src/LadspaFXProperties.cpp + src/gui/src/LadspaFXProperties.h + src/gui/src/LadspaFXSelector.h + src/gui/src/MainForm.cpp + src/gui/src/MainForm.h + src/gui/src/Mixer/Mixer.cpp + src/gui/src/Mixer/Mixer.h + src/gui/src/Mixer/MixerLine.cpp + src/gui/src/Mixer/MixerLine.h + src/gui/src/PatternEditor/DrumPatternEditor.cpp + src/gui/src/PatternEditor/DrumPatternEditor.h + src/gui/src/PatternEditor/NotePropertiesRuler.cpp + src/gui/src/PatternEditor/NotePropertiesRuler.h + src/gui/src/PatternEditor/PatternEditorInstrumentList.cpp + src/gui/src/PatternEditor/PatternEditorInstrumentList.h + src/gui/src/PatternEditor/PatternEditorPanel.cpp + src/gui/src/PatternEditor/PatternEditorPanel.h + src/gui/src/PatternEditor/PatternEditorRuler.cpp + src/gui/src/PatternEditor/PatternEditorRuler.h + src/gui/src/PatternEditor/PianoRollEditor.cpp + src/gui/src/PatternEditor/PianoRollEditor.h + src/gui/src/PatternFillDialog.cpp + src/gui/src/PatternFillDialog.h + src/gui/src/PatternPropertiesDialog.cpp + src/gui/src/PatternPropertiesDialog.h + src/gui/src/PlayerControl.cpp + src/gui/src/PlayerControl.h + src/gui/src/PlaylistEditor/PlaylistDialog.cpp + src/gui/src/PlaylistEditor/PlaylistDialog.h + src/gui/src/PreferencesDialog.cpp + src/gui/src/PreferencesDialog.h + src/gui/src/SampleEditor/DetailWaveDisplay.cpp + src/gui/src/SampleEditor/DetailWaveDisplay.h + src/gui/src/SampleEditor/MainSampleWaveDisplay.cpp + src/gui/src/SampleEditor/MainSampleWaveDisplay.h + src/gui/src/SampleEditor/SampleEditor.cpp + src/gui/src/SampleEditor/SampleEditor.h + src/gui/src/SampleEditor/TargetWaveDisplay.cpp + src/gui/src/SampleEditor/TargetWaveDisplay.h + src/gui/src/Skin.h + src/gui/src/SongEditor/SongEditor.cpp + src/gui/src/SongEditor/SongEditor.h + src/gui/src/SongEditor/SongEditorPanel.cpp + src/gui/src/SongEditor/SongEditorPanel.h + src/gui/src/SongEditor/SongEditorPanelBpmWidget.cpp + src/gui/src/SongEditor/SongEditorPanelBpmWidget.h + src/gui/src/SongEditor/SongEditorPanelTagWidget.cpp + src/gui/src/SongEditor/SongEditorPanelTagWidget.h + src/gui/src/SongPropertiesDialog.cpp + src/gui/src/SongPropertiesDialog.h + src/gui/src/SoundLibrary/FileBrowser.cpp + src/gui/src/SoundLibrary/FileBrowser.h + src/gui/src/SoundLibrary/SoundLibraryExportDialog.cpp + src/gui/src/SoundLibrary/SoundLibraryExportDialog.h + src/gui/src/SoundLibrary/SoundLibraryImportDialog.cpp + src/gui/src/SoundLibrary/SoundLibraryImportDialog.h + src/gui/src/SoundLibrary/SoundLibraryPanel.cpp + src/gui/src/SoundLibrary/SoundLibraryPanel.h + src/gui/src/SoundLibrary/SoundLibraryPropertiesDialog.cpp + src/gui/src/SoundLibrary/SoundLibraryPropertiesDialog.h + src/gui/src/SoundLibrary/SoundLibrarySaveDialog.cpp + src/gui/src/SoundLibrary/SoundLibrarySaveDialog.h + src/gui/src/SoundLibrary/SoundLibraryTree.cpp + src/gui/src/SoundLibrary/SoundLibraryTree.h + src/gui/src/SplashScreen.cpp + src/gui/src/SplashScreen.h + src/gui/src/VirtualPatternDialog.cpp + src/gui/src/VirtualPatternDialog.h + src/gui/src/widgets/Button.cpp + src/gui/src/widgets/Button.h + src/gui/src/widgets/ClickableLabel.cpp + src/gui/src/widgets/ClickableLabel.h + src/gui/src/widgets/CpuLoadWidget.cpp + src/gui/src/widgets/CpuLoadWidget.h + src/gui/src/widgets/DownloadWidget.cpp + src/gui/src/widgets/DownloadWidget.h + src/gui/src/widgets/Fader.cpp + src/gui/src/widgets/Fader.h + src/gui/src/widgets/LCD.cpp + src/gui/src/widgets/LCD.h + src/gui/src/widgets/LCDCombo.cpp + src/gui/src/widgets/LCDCombo.h + src/gui/src/widgets/MidiActivityWidget.cpp + src/gui/src/widgets/MidiActivityWidget.h + src/gui/src/widgets/MidiLearnable.h + src/gui/src/widgets/MidiSenseWidget.cpp + src/gui/src/widgets/MidiSenseWidget.h + src/gui/src/widgets/MidiTable.cpp + src/gui/src/widgets/MidiTable.h + src/gui/src/widgets/PixmapWidget.cpp + src/gui/src/widgets/PixmapWidget.h + src/gui/src/widgets/Rotary.cpp + src/gui/src/widgets/Rotary.h + src/player/main.cpp +Copyright: (c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net License: GPL-2+ FIXME Files: AUTHORS + CMakeLists.txt ChangeLog DEVELOPERS + Doxyfile.in INSTALL.txt + README.md README.txt - Sconstruct - all.pro + build.sh + cmake/rtclock/CMakeLists.txt + cmake/rtclock/rtclock.c + cmake/sscanf/CMakeLists.txt + cmake/sscanf/sscanf.c + cmake/uninstall.cmake.in data/DefaultSong.h2song - data/click.wav data/demo_songs/GM_kit_Diddley.h2song data/demo_songs/GM_kit_Jazzy.h2song data/demo_songs/GM_kit_demo1.h2song @@ -231,27 +241,15 @@ data/demo_songs/tutorial_georgyporgy.h2song data/doc/Makefile data/doc/README.DOCUMENTATION.txt - data/doc/img/GUI_Sections.svg - data/doc/img/SoundlibraryHierarchy.svg + data/doc/TODO data/doc/img/Tutorial2.h2song - data/doc/infoSplash/news-070620.html - data/doc/infoSplash/news-081104.html data/doc/manual.docbook data/doc/manual.html data/doc/manual.pot - data/doc/manual_ca.html data/doc/manual_en.html - data/doc/manual_es.html - data/doc/manual_fr.html - data/doc/manual_it.html data/doc/manual_it.po - data/doc/manual_nl.html - data/doc/manual_nl.po data/doc/tutorial.docbook data/doc/tutorial.pot - data/doc/tutorial_en.html - data/doc/tutorial_fr.html - data/doc/tutorial_it.html data/doc/tutorial_it.po data/drumkits/GMkit/drumkit.xml data/drumkits/TR808EmulationKit/drumkit.xml @@ -263,414 +261,1062 @@ data/img/gray/icon.svg data/img/gray/lcd/LCDSmallFontSetRed.xcf data/new_tutorial/tutorial_en.html + data/xsd/drumkit.xsd + data/xsd/drumkit_pattern.xsd debian/README.source debian/TODO debian/compat debian/control debian/control.in debian/gbp.conf - debian/install - debian/links - debian/menu - debian/patches/09_portaudio_v2.patch + debian/hydrogen-data.install + debian/hydrogen-data.lintian-overrides + debian/hydrogen-doc.install + debian/hydrogen.install + debian/hydrogen.links + debian/patches/1000_portaudio_v2.patch debian/patches/1001_rubberband_path.patch - debian/patches/1002_relax_SCons_linux2_resolving.patch + debian/patches/1006_porttime.patch + debian/patches/1008-ftbfs-gcc-4.7.diff + debian/patches/1010-spelling.patch + debian/patches/1015-man_path.patch debian/patches/README debian/patches/series debian/source/format debian/watch - docs/Doxyfile - docs/docs.h - extra/extra.pro - extra/hydrogenPlayer/hydrogenPlayer.pro - extra/hydrogenSynth/HydrogenSynth.cpp - extra/hydrogenSynth/hydrogenSynth.pro - extra/serverTools/metaInfo.inc - features.pri - gui/gui.pro - gui/src/AudioFileBrowser/AudioFileBrowser_UI.ui - gui/src/Director_UI.ui - gui/src/PlaylistEditor/PlaylistDialog_UI.ui - gui/src/SampleEditor/SampleEditor_UI.ui - gui/src/SongEditor/SongEditorPanelBpmWidget_UI.ui - gui/src/SongEditor/SongEditorPanelTagWidget_UI.ui - gui/src/SoundLibrary/SoundLibraryExportDialog_UI.ui - gui/src/SoundLibrary/SoundLibraryImportDialog_UI.ui - gui/src/SoundLibrary/SoundLibraryPropertiesDialog_UI.ui - gui/src/SoundLibrary/SoundLibraryRepositoryDialog_UI.ui - gui/src/SoundLibrary/SoundLibrarySaveDialog_UI.ui - gui/src/UI/AudioEngineInfoForm_UI.ui - gui/src/UI/DrumkitManager_UI.ui - gui/src/UI/ExportSongDialog_UI.ui - gui/src/UI/PatternFillDialog_UI.ui - gui/src/UI/PatternPropertiesDialog_UI.ui - gui/src/UI/PreferencesDialog_UI.ui - gui/src/UI/SongPropertiesDialog_UI.ui - gui/src/UI/VirtualPatternDialog_UI.ui - gui/src/precompiled.h - hydrogen.desktop - hydrogen.desktop.in - hydrogen.kdevelop - libs/hydrogen/hydrogen.pro - libs/hydrogen/include/hydrogen/timehelper.h - libs/hydrogen/src/IO/portaudio_driver.cpp - libs/hydrogen/src/Precompiled.h - libs/hydrogen/src/table/TableExponential.h - libs/hydrogen/src/table/getTableValue.h - libs/hydrogen/src/timehelper.cpp - libs/libs.pro linux/debian/compat linux/debian/control + linux/debian/install linux/debian/rules - linux/hydrogen.desktop - macos/Hydrogen.icns + macos/DS_Store macos/Info.plist - macos/fixlibs.sh + macos/build_dmg.sh macos/hydrogen.sh - no_gui/no_gui.pro - patches/hydrogen-682-osx-scons.diff - patches/portaudio.patch - patches/portmidi.patch - plugins/plugins.pro - plugins/wasp/AUTHORS - plugins/wasp/ChangeLog - plugins/wasp/include/Gd.h - plugins/wasp/include/LFO.h - plugins/wasp/include/waveshaper.h - plugins/wasp/wasp.pro - plugins/wasp/wasp_booster/booster.c - plugins/wasp/wasp_booster/wasp_booster.pro - plugins/wasp/wasp_noisifier/noisifier.c - plugins/wasp/wasp_noisifier/wasp_noisifier.pro - plugins/wasp/wasp_xshaper/wasp_xshaper.pro - plugins/wasp/wasp_xshaper/xshaper.c - reformat_sources.sh - version.h -Copyright: *No copyright* + src/cli/CMakeLists.txt + src/core/CMakeLists.txt + src/core/include/hydrogen/config.h.in + src/core/include/hydrogen/helpers/filesystem.h + src/core/include/hydrogen/helpers/legacy.h + src/core/include/hydrogen/helpers/xml.h + src/core/include/hydrogen/timehelper.h + src/core/include/hydrogen/version.h + src/core/src/IO/portaudio_driver.cpp + src/core/src/basics/exponential_tables.h + src/core/src/helpers/filesystem.cpp + src/core/src/helpers/legacy.cpp + src/core/src/helpers/xml.cpp + src/core/src/timehelper.cpp + src/core/src/version.cpp + src/gui/CMakeLists.txt + src/gui/src/AudioFileBrowser/AudioFileBrowser_UI.ui + src/gui/src/PlaylistEditor/PlaylistDialog_UI.ui + src/gui/src/SampleEditor/SampleEditor_UI.ui + src/gui/src/SongEditor/SongEditorPanelBpmWidget_UI.ui + src/gui/src/SongEditor/SongEditorPanelTagWidget_UI.ui + src/gui/src/SoundLibrary/SoundLibraryDatastructures.cpp + src/gui/src/SoundLibrary/SoundLibraryDatastructures.h + src/gui/src/SoundLibrary/SoundLibraryExportDialog_UI.ui + src/gui/src/SoundLibrary/SoundLibraryImportDialog_UI.ui + src/gui/src/SoundLibrary/SoundLibraryPropertiesDialog_UI.ui + src/gui/src/SoundLibrary/SoundLibraryRepositoryDialog_UI.ui + src/gui/src/SoundLibrary/SoundLibrarySaveDialog_UI.ui + src/gui/src/UI/AudioEngineInfoForm_UI.ui + src/gui/src/UI/Director_UI.ui + src/gui/src/UI/DonationDialog.ui + src/gui/src/UI/ExportSongDialog_UI.ui + src/gui/src/UI/PatternFillDialog_UI.ui + src/gui/src/UI/PatternPropertiesDialog_UI.ui + src/gui/src/UI/PreferencesDialog_UI.ui + src/gui/src/UI/SongPropertiesDialog_UI.ui + src/gui/src/UI/VirtualPatternDialog_UI.ui + src/gui/src/UndoActions.h + src/gui/src/precompiled.h + src/player/CMakeLists.txt + src/plugins/plugins.pro + src/plugins/wasp/AUTHORS + src/plugins/wasp/ChangeLog + src/plugins/wasp/wasp.pro + src/plugins/wasp/wasp_booster/wasp_booster.pro + src/plugins/wasp/wasp_noisifier/wasp_noisifier.pro + src/plugins/wasp/wasp_xshaper/wasp_xshaper.pro + src/synth/CMakeLists.txt + src/synth/main.cpp + src/tests/CMakeLists.txt + src/tests/adsr_test.cpp + src/tests/adsr_test.h + src/tests/data/pattern/pat.h2pattern + src/tests/main.cpp + src/tests/pattern_test.cpp + src/tests/pattern_test.h + src/tests/rubberband.cpp + src/tests/xml_test.cpp + src/tests/xml_test.h + src/www/metaInfo.inc + tools/clean + tools/reformat + windows/README.md + windows/cross_compile.sh + windows/hydrogen.exe.manifest + windows/icon.rc + windows/mxe_installer.sh +Copyright: NONE License: UNKNOWN FIXME Files: data/i18n/hydrogen.de.ts - data/i18n/hydrogen.es.ts - data/i18n/hydrogen.ja.ts + data/i18n/hydrogen.hr.ts data/i18n/hydrogen.nl.ts - data/i18n/hydrogen.pl.ts data/i18n/hydrogen.pt_BR.ts data/i18n/hydrogen.ru.ts + data/i18n/hydrogen.sr.ts data/i18n/hydrogen.sv.ts -Copyright: </span></p></body></html> - 1989, 1991 Free Software Foundation, Inc.</p> - 19yy &lt;name of author&gt;</p> - 19yy name of author</p> - HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR</p> - HOLDERS AND/OR OTHER PARTIES</p> - disclaimer" for the program, if</p> - holder saying it may be distributed</p> - holder who places the Program under this License</p> - interest in the program</p> - law:</p> - the software, and</p> -License: GPL + debian/patches/1005_name_shouldnt_repeat_genericname.patch + src/tests/data/drumkit/crash.wav + src/tests/data/drumkit/hh.wav + src/tests/data/drumkit/snare.wav +Copyright: +License: UNKNOWN FIXME -Files: COPYING - plugins/wasp/LICENSE -Copyright: 1989, 1991 Free Software Foundation, Inc - - HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR - HOLDERS AND/OR OTHER PARTIES - disclaimer" for the program, if - holder saying it may be distributed - holder who places the Program under this License - interest in the program - law: - the software, and - year name of author +Files: src/plugins/wasp/include/Gd.h + src/plugins/wasp/include/LFO.h + src/plugins/wasp/include/waveshaper.h + src/plugins/wasp/wasp_booster/booster.c + src/plugins/wasp/wasp_noisifier/noisifier.c + src/plugins/wasp/wasp_xshaper/xshaper.c +Copyright: 2005, Artemiy Pavlov +License: UNKNOWN + FIXME + +Files: cmake/CompileHelper.cmake + cmake/FindHelper.cmake + cmake/FindLadspa.cmake + cmake/StatusSupportOptions.cmake +Copyright: 2009, Jérémy Zurcher, +License: UNKNOWN + FIXME + +Files: src/core/include/hydrogen/IO/JackMidiDriver.h + src/core/src/IO/jack_midi_driver.cpp +Copyright: 2011, Hans Petter Selasky +License: BSD-2-clause + FIXME + +Files: src/core/include/hydrogen/LashClient.h + src/core/src/lash/LashClient.cpp +Copyright: (c) 2002-2005 by Alex >Comix< Cominu [comix@users.sourceforge.net License: GPL-2+ FIXME -Files: libs/hydrogen/include/hydrogen/IO/CoreMidiDriver.h - libs/hydrogen/src/IO/coremidi_driver.cpp -Copyright: 2002-2008, Alex >Comix< Cominu [comix@users.sourceforge.net - 2005-2006, Jonathan Dempsey +Files: src/gui/src/SoundLibrary/SoundLibraryRepositoryDialog.cpp + src/gui/src/SoundLibrary/SoundLibraryRepositoryDialog.h +Copyright: (c) 2002-2007 by Alex >Comix< Cominu [comix@users.sourceforge.net License: GPL-2+ FIXME -Files: libs/hydrogen/include/hydrogen/fx/ladspa.h - plugins/wasp/include/ladspa.h -Copyright: 2000-2002, Richard W.E. Furse, Paul Barton-Davis - applying to the plugin. If no applies the -License: LGPL-2.1+ +Files: src/core/include/hydrogen/IO/CoreMidiDriver.h + src/core/src/IO/coremidi_driver.cpp +Copyright: (c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net + (c) 2005-2006 by Jonathan Dempsey +License: GPL-2+ FIXME -Files: data/i18n/hydrogen.fr.ts -Copyright: </span></p></body></html> - </span></p></body></html> - 1989, 1991 Free Software Foundation, Inc.</p> - 19yy name of author</p> - CD "41 kHz, 16 bit PCM" - CD "44,1kHz, 16 bit PCM" - HOLDERS AND/OR OTHER PARTIES</p> - de la Liste de Lecture - des couches - en bonne qualit "48kHz" - enregistr. - holder saying it may be distributed</p> - holder who places the Program under this License</p> - humanise - ou le panoramique - par Rubberband si les bpm changent - à -License: GPL +Files: src/core/include/hydrogen/IO/CoreAudioDriver.h + src/core/src/IO/coreaudio_driver.cpp +Copyright: (c) 2005 by Jonathan Dempsey [jonathandempsey@fastmail.fm +License: GPL-2+ FIXME -Files: data/i18n/hydrogen.it.ts -Copyright: </span></p></body></html> - </span></p></body></html> - 1989, 1991 Free Software Foundation, Inc.</p> - 19yy &lt;name of author&gt;</p> - 19yy name of author</p> - HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR</p> - HOLDERS AND/OR OTHER PARTIES</p> - disclaimer" for the program, if</p> - holder saying it may be distributed</p> - holder who places the Program under this License</p> - interest in the program</p> - law:</p> - stato un errore importando la Sound Library. - the software, and</p> -License: GPL +Files: src/core/include/hydrogen/lilypond/lilypond.h + src/core/src/lilypond/lilypond.cpp +Copyright: (c) 2015 by Sacha Delanoue +License: GPL-2+ FIXME -Files: data/i18n/hydrogen.hr.ts -Copyright: </span></p></body></html> - </span></p></body></html> - 1989, 1991 Free Software Foundation, Inc.</p> - 19yy &lt;name of author&gt;</p> - 19yy name of author</p> - HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR</p> - HOLDERS AND/OR OTHER PARTIES</p> - disclaimer" for the program, if</p> - holder saying it may be distributed</p> - holder who places the Program under this License</p> - interest in the program</p> - law:</p> - the software, and</p> -License: GPL +Files: COPYING + src/plugins/wasp/LICENSE +Copyright: 1989, 1991, Free Software Foundation, Inc. + + disclaimer" for the program, if + ed by the Free + ed interfaces, the + interest in the program + the software, and + year name of author +License: GPL-2+ FIXME -Files: data/i18n/hydrogen.cs.ts -Copyright: </span></p></body></html> - 1989, 1991 Free Software Foundation, Inc.</p> - 19yy &lt;name of author&gt;</p> - 19yy name of author</p> - HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR</p> - HOLDERS AND/OR OTHER PARTIES</p> - bicí sady s tímto jmnem. - bicí sady - disclaimer" for the program, if</p> - holder saying it may be distributed</p> - holder who places the Program under this License</p> - interest in the program</p> - knihovny - law:</p> - noty - skladby do WAV - skladby - snímky - the software, and</p> - změnit patern během přehrávání. - změny nástrojů do knihovny zvuků - zvukov knihovny -License: GPL +Files: src/core/include/hydrogen/fx/ladspa.h + src/plugins/wasp/include/ladspa.h +Copyright: 2000-2002, Richard W.E. Furse, Paul Barton-Davis, + applying to the plugin. If no Copyright applies the +License: LGPL-2.1+ FIXME Files: data/i18n/hydrogen.ca.ts -Copyright: </span></p></body></html> - 1989, 1991 Free Software Foundation, Inc.</p> - 19yy &lt;name of author&gt;</p> - 19yy name of author</p> - HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR</p> - HOLDERS AND/OR OTHER PARTIES</p> - disclaimer" for the program, if</p> - espais en blanc - holder saying it may be distributed</p> - holder who places the Program under this License</p> - interest in the program</p> - law:</p> - the software, and</p> +Copyright: 1989, 1991, Free Software Foundation, Inc.</p> + 19yy &lt;name of author&gt;</p> + 19yy name of author</p> + disclaimer" for the program, if</p> + ed by the Free</p> + ed interfaces, the</p> + espais en blanc + interest in the program</p> + s funciona amb el controlador JACK. + s kits de bateria a <br> + s llargues que 10 minuts! + s possible canviar la mida del patró durant la reproducció. + s possible, només es poden desar canvis a instruments en la llibreria de sò actual + the software, and</p> License: GPL FIXME -Files: data/i18n/hydrogen.hu_HU.ts -Copyright: </span></p></body></html> - 1989, 1991 Free Software Foundation, Inc.</p> - 19yy &lt;name of author&gt;</p> - 19yy name of author</p> - HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR</p> - HOLDERS AND/OR OTHER PARTIES</p> - disclaimer" for the program, if</p> - holder saying it may be distributed</p> - holder who places the Program under this License</p> - interest in the program</p> - law:</p> - mozgatása - the software, and</p> +Files: src/gui/src/UI/about_dialog.ui +Copyright: 1989, 1991, Free Software Foundation, Inc.</span></p> + 19yy &lt;name of author&gt;</span></p> + 19yy name of author</span></p> + disclaimer&quot; for the program, if</span></p> + ed by the Free</span></p> + ed interfaces, the</span></p> + interest in the program</span></p> + the software, and</span></p> License: GPL FIXME -Files: gui/src/UI/about_dialog.ui -Copyright: 1989, 1991 Free Software Foundation, Inc.</p> - 19yy &lt;name of author&gt;</p> - 19yy name of author</p> - HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR</p> - HOLDERS AND/OR OTHER PARTIES</p> - disclaimer" for the program, if</p> - holder saying it may be distributed</p> - holder who places the Program under this License</p> - interest in the program</p> - law:</p> - the software, and</p> -License: GPL +Files: src/core/include/hydrogen/smf/SMF.h +Copyright: (c) 2002-2004 by Alex >Comix< Cominu [comix@users.sourceforge.net +License: GPL-2+ FIXME -Files: debian/rules -Copyright: 2010-2011, Jonas Smedegaard -License: GPL +Files: src/core/src/smf/smf.cpp +Copyright: (c) 2002-2004 by Alex >Comix< Cominu [comix@users.sourceforge.net + NoticeMetaEvent( pSong->__author , 0 ) ); +License: GPL-2+ + FIXME + +Files: src/gui/src/main.cpp +Copyright: (c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net + 2002-2008, Alessandro Cominu" << endl; + 2008-2016, The hydrogen development team" << endl; +License: GPL-2+ FIXME -Files: libs/hydrogen/include/hydrogen/data_path.h -Copyright: 2002-200/ Alessandro Cominu - 2005, Jonathan Dempsey +Files: src/gui/src/LadspaFXSelector.cpp +Copyright: (c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net + Lbl->setText( QString("") ); + Lbl->setText( pFXInfo->m_sCopyright ); License: GPL-2+ FIXME -Files: no_gui/main.cpp -Copyright: 2002-2008, Alessandro Cominu" << endl; - 2009, Sebastian Moors +Files: src/core/include/hydrogen/smf/SMFEvent.h +Copyright: (c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net + NoticeMetaEvent : public SMFEvent + NoticeMetaEvent( const QString& sAuthor, unsigned nDeltaTime ); License: GPL-2+ FIXME -Files: libs/hydrogen/src/data_path.cpp -Copyright: 2002-2008, Jonathan Dempsey, Alessandro Cominu - 2005, Jonathan Dempsey +Files: src/core/src/smf/smf_event.cpp +Copyright: (c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net + NoticeMetaEvent::SMFCopyRightNoticeMetaEvent( const QString& sAuthor, unsigned nTicks ) + NoticeMetaEvent::__class_name = "SMFCopyRightNoticeMetaEvent"; + NoticeMetaEvent::getBuffer() License: GPL-2+ FIXME -Files: extra/serverTools/hydrogen.php -Copyright: 2008, Sebastian Moors [mauser@smoors.de +Files: src/www/hydrogen.php +Copyright: (c) 2008 by Sebastian Moors [mauser@smoors.de License: GPL-2+ FIXME -Files: qt4.py -Copyright: 2001-2007, The SCons Foundation - HOLDERS BE -License: MIT/X11 (BSD like) +Files: src/cli/main.cpp +Copyright: (c) 2013 by Sebastian Moors, Pawel Piatek + 2002-2008, Alessandro Cominu" << endl; +License: GPL-2+ FIXME -Files: gui/src/UI/LadspaFXSelector_UI.ui -Copyright: </span></p></body></html> +Files: debian/rules +Copyright: 2010-2011, Jonas Smedegaard +License: GPL-2+ + FIXME + +Files: src/core/include/hydrogen/nsm.h +Copyright: 2012, Jonathan Moore Liles +License: ISC + FIXME + +Files: data/doc/MidiInstrumentMapping.ods +Copyright: ¾5²°‰Ó#òwû§äÆ⬒®ÔTã6æmÌÈ<|——Ö¼’~ËõPKDՀÿJ\00\00h\00\00PK\00\00\00\00\00¶¡@ + jÍÛÑn½n­ì_ª=tù´£ËÿÙý PKcNe&Ò\00\00F\00\00PK\00\00\00\00¶¡@Ë®iòá\00\00á\00\00\00\00\00meta.xml + Îb~ivë#K<‘¬XÜ0V —ÊÊíûwïטø + %âÿoûjn,àq«pgŽõõ=âzþLœÂCÚÒ|LtïH¶÷Ù H\00•gï2bz¶öx¤UÅ5óÛ‚l5l„`´|ʽk«“V5•¨(D„–vˆ,®IrËÉr—Œ)ð®RÈ»¬0Xùܦ)ïxt3ÌÉ%>¤Ù±€Þ†mvÉnhC’ÏÃ*¸~nø,¼wï:ݧxzS´” + v™gºÄ‘ó*¤V8•-ŸË™®Bx + “Dqé½ fïl[*wvî*és¥% + —gN³–) + ¾á0@¡xuå"´«<p÷!O)û|CÓÀ¡TÄìE*F•¾X+Ïå®3qdÖí)Pÿ“þ´¾zŸUø­ìö¡VÞc·èsAP´3ºá«l»Ej¼ + Å)ªXbŸŸõˆhyj‰Ì9êx‡áŠ + Ë¢:z•1ؗœ›ýúÚ®±h­À­±@pC)Äãd!âdÞεŒ„C»HpDü˜DLîníQ¯Å3û¬IÜz? + ݈ou©„HŽ¹4ºâý­ýrS£ùz ›9·>×÷Uô§Lpõ€:Þy[OýJ + ÏЍ˜h{šîQ¾¥ËNÆ~yèÒr9KÕ­ˆiŽ ‡ŒkBá.$ڈÆr¦©/9Waq|†ååïƒvDmëæÿ¡‚Éð*É`å|¾¸'‘Ú}ru< + ×¥ïì­B†eGçžO­ÕC + àeaÆTxƒöÞ§Râ + àöMʇûJ‡¿úA¢ÎR=êâÖócä·§—BwR†O¼T­=½)²Ð»\00ê¥_`~ÆcÐcÂW÷çœìawçFؒ%œCú: Ó·ã¾JB0_¬¯_P; + áæ?»ï°vî™åÐ*HoÍwJs©¬tm~U7ȧuWŸ&'lýÐ0-´Öȶ£­)žHÐåòéÁWç×üëµ + êÜÔVäAMUÖؖ.¾Ÿîـ›Ú±ÀÇ©Ê + êÇ^$-fÞögŒÍYòޱk5-#ÿ + íÌJòôٓT½ÜÖы‚U|ú­âɆÕìçà•=0Þ𭆆•ß9®;«/¶úõÅoûI¿¹+ª·ª0£‘³gÀes6qɍ Gëq—Š ªb3NÍß^ÑÐt“ + îÔ±{/zVÞp‡A*,ºãÌ⮂uM9ò¸NEº,j‘r½S¹òõÇ5S6×6M¹ZN»Yã©r²m˜‰o¸Å6ˆG”šHF„GޏœßÒúŸ5„ÛrŠž7$І1Óµd¤!dvÇ„z`>E@eô¿q«®mfêd ´ÓÐÐi"jQ·ÓŒ" + ø>˜zŒÍ‰(l³ì·Gph†ÅÎu³yw- nዲmA˜,H·2f~€ÀĹ:—ÁÿŒÊtµ| 9F#C‘fWPÛîulûMéÿ™}5• License: UNKNOWN FIXME Files: data/doc/manual_fr.po Copyright: (OSS, Jack, ALSAn PortAudio) avec son tampon et sa " - (faible volume) et plus vous slectionnez une " - (presonnalisable avec le bouton fadeur " - alatoire : applique " - au " - au motif." - avec le " - color en bleu de ce panneau est " - comme des pulsations du type de " - compil avec le support debug." - contenant tous les chantillons composants un kit de batterie ainsi " - dans " - de cartes-son disponibles pour Linux; ceci dit, l'utilisation de ce " - de dmarrage " - de la note depuis " - du bouton " - en 2 modes : mode " - en haut à droite de l'Éditeur de motif)" - en pressant la " - en tirant simplement un " - entière d'ajouter, supprimer ou dplacer " - est utilise principalement pour les " - et " - et ajouter ds " - et appliqu.) Lorsque " - et la " - forte, plus la couleur sera fonce, devenant rouge lorsque vous " - ici " - jouer, tappez la touche virgule 1-2-3-4 avec le tempo... et " - la souris pour crer un motif, mais " - le bon nombre de pulsation (s'il n'est pas djà dmarr, bien sûr). Ce " - les " - par Seq24)... et que vous voulez qu'il " - par dfaut." - par le prfix au moment de la " - pseudo-hasardeuse à chaque note de cet " - que vous avez dfinie. Une nuance lgère de gris " - seul, mulant " - sur Debian, vous pouvez installer les " - sur l'interface OSS qui est support par une vaste " - sur votre système." - slectionne de chaque note de l'instrument " - un volume global ou seul du kit de batterie courant. Elle " - vers le haut ou le bas." - via le menu outils " - vrifie et lancer le script make_helper sans aucun argumen " - leve dans " - à 4/4, vous pouvez taper " - à 800) et, si vous voulez utilisez rubberband pour " - à Drumset, les notes de votre clavier MIDI correspondront à " - à en ajouter." - à la note-MIDI/touche-clavier " - être un esclave, donc, " + (presonnalisable avec le bouton fadeur " + -arrangé en tirant simplement un " + -ouvrir automatiquement la dernière chanson ou " + -ouvrir la chanson sur laquelle vous travaillez à + Hydrogen " + Hydrogen fonctionnera comme 'maitre', sinon, il agira comme " + Note off : il y a 2 " + alisée facilement en utilsant le script " + alors que dans le mode "song", tous mes motifs insérés seront " + ance actuelle de travail d'Hydrogen, lisez - Ouvrir un menu montrant les " + cessite pas Hydrogen " + cessite également un Paramètre d'Action " + changes avec " + chantillon de piano pour l'un de vos instruments, vous serez capable de " + chantillon quand il est ajouté au motif." + chantillons d'instruments et les paramètres dans un kit de batterie dans " + chantillons flac)" + chantillons sonores) dans " + chantillons." + cider ce qui fonctionne le mieux " + cifiant un nom (chemin par défaut " + cision de 16ème), les notes seront placées au prochain ou " + cision des notes) et l'effet 'humanize' (édition au hasard de la " + clencheront l'instrument qui est actuellement " + coloré en bleu de ce panneau est " + compresser le tarball ou allez au répertoire où la copie subversion a été " + compressez le tarball ou allez au répertoire où la copie " + comptez 1-2-3-4 (en tapant sur la touche virgule) " + connecter avant." + contenant tous les échantillons composants un kit de batterie ainsi " + crit dans la table de " + crite ci-dessus). Les endroits où vous pouvez " + crites au dessus), seulement si vous avez un clavier piano complet, car " + crivant le " + crivant un " + crivant une " + cédent 8ème de mesure. Cette contrainte peut être supprimée si vous " + dans " + de cartes-son disponibles pour Linux; ceci dit, l'utilisation de ce " + de démarrage " + diteur de liste de lecture, le rack d'instrument et la fenêtre des " + diteur de motif contient plusieurs contrôles :" + diteur de motif." + du bouton " + e (le volume de la note)" + e : choisissez la durée de la note et " + e avec :" + e dans le panneau de base de l"Éditeur de " + e de Note', vous pouvez ajouter une note en cliquant-gauche, et " + e de la note devient " + e de note + e de note', une note en mode 'note off')" + e du Compteur de Pulsation et le moment où le morceau démarre " + e et le(s) canal(aux) au(x)quel(s) Hydrogen devrait répondre. Vous " + e sur des motifs, ou via un clavier MIDI externe + e un nouveau morceau" + e. Ceci peut vous éviter l'embêtement d'avoir à + e. Une fois terminée, vous pouvez " + en 2 modes : mode " + en haut à + en pressant la " + entière d'ajouter, supprimer ou déplacer " + er des motif, mais c'est à + er ou modifier le motif (la mesure) " + er un " + er un nouveau motif (et demande son nom)." + era 1 sortie par instrument que vous " + es (1, " + es afin d'éviter à + es partout, 1/2, 1/4, etc sur le position de notes " + es, " + est utilisée principalement pour les " + et " + et appliqué.) Lorsque " + faut (par exemple PortAudio), vous pouvez les activer avec :" + faut : désélectionnez-la si vous voulez connecter " + faut" connecte " + filantes :" + finir l'image stéréo de la note (de combien le poid sera dans les sorties " + finir la durée de la note : dans " + férence " + férences générales." + férences peut être accédé via le menu outils " + férences" + férences)." + férences - Ouvre la fenre des préférences " + férencie le motif que vous voulez sélectionner avec cette action MIDI." + férons. Nous pouvons également copier et " + férés. Lors de la fabrication " + galement définir les "bindings" MIDI : lier une note/message MIDI " + galement enregistrer vos beats en cliquant sur le bouton " + galement un oeil sur la valeur de "Polyphonie" : suivant votre " + galement vouloir des valeurs " + galement être modifiés ici." + gatives (-). Afin de trouver les valeurs adéquates, vous devrez prendre un " + glés avant de démarrer Hydrogen (JACK démarre automatiquement lorsque " + goriser les effets)" + jouer, tappez la touche virgule 1-2-3-4 avec le tempo... et " + la souris pour créer un motif, mais " + langer les 1/2 note " + le bon nombre de pulsation (s'il n'est pas déjà + le tampon et le taux d'échantillonnage doivent être " + lecteur de mode " + lection dans l'Éditeur de Motif d'un instrument " + lection de motifs pour copier & coller (Mode Sélection)." + lectionner certaines fonctionnalités d'Hydrogen comme "Créer " + lectionner l'octave." + lectionner une Action depuis la liste déroulante. Notez que certaines " + lectionner" + lectionnera cet instrument. Une fois qu'un instrument est sélectionné, les " + lectionnez Charger. Ceci remplacera " + lectionnez ce " + lectionnez une vélocité élevée dans " + lectionné et ajouter ds " + lectionné ici " + lectionné, " + lectionné, et donc affiché " + lectionné. La hauteur de l'instrument suivra la touche que vous pressez " + lectionné. Pour " + lectionné. Suivant le " + lectionné. Vous pouvez sélectionner une autre propriété de la note depuis " + lectionné." + lectionnée (GMkit par défaut) et ci-dessous, vous pouvez voir " + lectionnée. Vous pouvez ajouter/effacer des notes, et " + les pulsations insérées respecteront " + locité (faible volume) et plus vous sélectionnez une " + locité aléatoire : applique " + locité pseudo-hasardeuse à + locité)." + locité : à + lovité que vous avez définie. Une nuance légère de gris " + lécharge depuis un " + léchargement" + lécharger Hydrogen depuis - Ouvrir un morceau de démo (les " + nements afficheront maintenant ma vameur de la note MIDI " + néral" + néral" (), " + néral, vous pouvez paramétrer 3 effets généraux comme un swing " + nérales" + olcité forte, plus la couleur sera foncée, devenant rouge lorsque vous " + par défaut." + part automatique est activé)." + pend des bibliothèques suivantes :" + pend du kit de batterie qui est chargé. Cette liste " + pendent de la taille (NdT : SIZE) et de la résolution " + placer le motif actuellement sélectionné vers le haut ou le bas." + placer quelques notes avant ou après, sans hasard), le timing (modifie la " + placer. Tirez avec la touche CTRL appuyée pour " + pondra au changement de tempo de cette application. Notez que dans cette " + pétée jusqu'à + quence d'échantillonnage (sauf si vous utilisez JACK, dans ce cas, la " + quence de l'Éditeur de Motif" + quence que vous avez créez pour cet instrument, et rien non plus " + quence). Les morceaux sont un groupe de motifs avec " + quenceur logiciel. Hydrogen se compile sous Linux/x86, bien que ce dernier " + rentes " + sentent la " + si vous travaillez avec une " + solution de 16, vous ne pouvez pas passer à + solution de 8 " + solution de 8 et que vous essayez d'insérer une note entre 2 barres (en " + solution de la grille " + solution de la grille actuellement appliquée." + solution de la grille). Ainsi, vous serez capable de " + sur Debian, vous pouvez installer les " + sur l'interface OSS qui est supporté par une vaste " + sur votre système." + taillée. " + ter 4 effets LADSPA spéciaux pour " + terminé par le préfix au moment de la " + tirer les échantillons, vous devez entrer ici le chemin où rubberband est " + tirer' cette note en cliquant-droit puis en la déplaçant. Ceci " + tiseur (qui est contrôlé par Seq24)... et que vous voulez qu'il " + tiseur logiciel qui peut être utilisé seul, émulant " + tiseur." + tre, vous pouvez " + trer " + trer de 2 à + trer la vitesse de lecture (plage : 30-400 bpm) - Paramétrer les propriétés générales du " + un volume global ou seul du kit de batterie courant. Elle " + utilisation et mixe les instruments et les motifs " + veloppement." + vénement MIDI. La barre graphique du " + ée dans l'Éditeur de Morceau (voir esclave, donc, " +License: UNKNOWN + FIXME + +Files: linux/hydrogen.1 +Copyright: 2002-2008, Alessandro Cominu, + 2008-2016, The hydrogen development team. +License: UNKNOWN + FIXME + +Files: macos/fixlibs.sh +Copyright: 2006, Alessandro Cominu, Artemiy Pavlov +License: UNKNOWN + FIXME + +Files: linux/hydrogen.appdata.xml +Copyright: 2015, Aurelien Leblond --> +License: UNKNOWN + FIXME + +Files: cmake/doxygen.cmake +Copyright: 2009-2010, Tobias Rautenkranz +License: UNKNOWN + FIXME + +Files: data/i18n/hydrogen.pl.ts +Copyright: 1234, {1 License: UNKNOWN FIXME Files: data/doc/manual_ca.po -Copyright: 3 Propietats: Velocitat, balanceig i Principal/intèrval. " - 3 botóns ( " - 7 botons:" - a ser ca. 10ms a un tempo de 120ppm." - a velocitat màxima 0.7, què passarà quan " - afecta als sons fent servir qualsevol plugin LADSPA. Has de " - al corrent del valor de \"Polifonia\": depenent de la càrrega " - cap " - dos modes principals: \"Patró\" i \"Cançó\" (mira fort tocarà + s a l'esquerra, " + s a un " + s accessible des del menú d'eines " + s aguanta el parà + s alt dóna una senyal més alta." + s alta és exactament el " + s altes (que segurament s'han hagut " + s altes atenuades està + s altes que la de tall són " + s amplificada " + s aplicat " + s aquest instrument " + s atenuades (suprimides). Això normalment es por teure en una línea " + s avançats com ara " + s baixa." + s bastant petit: ±2 mig-tons × valor. Utilitzant-lo " + s codi executable, compilat. Pot penjar, petar, congelar, " + s com a " + s control el volum (atenuació)." + s d'una "Sortida " + s d'una mostra a cada moment. Però de moment només en carregarem " + s de portar en ambdues mostres, segurament t'adonarà + s del guany aplicat a nivell de capa, i abans del guany seleccionat " + s detall. " + s detalls." + s detalls.)" + s disparat, el seu volum passa per un contorn ADSR. Els " + s disparat, serà + s disparat." + s disponibles quan s'ha compilat l'aplicació " + s durará mig segon." + s el Mestre del Transport JACK, " + s el grup al que l'instrument " + s el mestre " + s el que un generador de contorns. Mira també " + s es reprodueix el patró actiu, el que és útil per a modificar-" + s està + s extremament dificil conseguir un " + s extès en " + s fort -no sonarà + s fort si la velocitat és més alta. Per tant, si " + s generals i tenen més " + s grups per a enmudir dels que sabrà + s igual al que has clicat." + s l'unic tipus de generador d'contorns, i que només pot controlar el volum. " + s la " + s la freqüència que divideix les " + s la línea de zero. El començament de la teva " + s la mateixa." + s la primera fase d'un contorn ADSR, i és la quantitat de " + s la quantitat de " + s la quantitat de temps " + s lentament. És " + s llarg que la teva mostra.velocitat en " + s permès tenir varis patrons amb el mateix nom." + s pròxima. Aquesta restricció " + s quan toques música més alt del que el teu altaveu " + s que hagi passat el nombre de polsacions correcte, el " + s que hagis disparat " + s reduïda una senyal (volum)." + s repeteix el patró " + s s'utilitza " + s se sentirà + s si vols utilitzar ALSA com a controlador de " + s si vols utilitzar Jack com a " + s si vols utilitzar PortAudio com a controlador de sò)" + s si vols utilitzar lrdf per categoritzar efectes)" + s simple i convenient per als nous usuaris, però no és ben ben " + s sobre el tema a l'article de la Wikipedia " + s, pots voler utilitzar valors diferents depenent de la velocitat " + s, si tens dues mostres que, per elles mateixes, claven els teus " + s. Mentrestant, un humà + totes les mostres de sò que composen un kit de bateria " + té un botó d'ajustament " + és possible canviar el nom del patró. " License: UNKNOWN FIXME -Files: debian/hydrogen.1 -Copyright: 2002\-2008, Alessandro Cominu +Files: data/click.wav +Copyright: Eí`Gh†[N?åûØåÉáðÎ +License: UNKNOWN + FIXME + +Files: src/gui/src/UI/LadspaFXSelector_UI.ui +Copyright: Lbl" > +License: UNKNOWN + FIXME + +Files: src/tests/data/drumkit/kick.wav +Copyright: ZHeðl­l¥c+WÅNÍJ¤HpJÊPzW¬[Œ +License: UNKNOWN + FIXME + +Files: data/i18n/hydrogen.cs.ts +Copyright: bicí sady s tímto jménem. + bicí sady + ho paternu + ho souboru + knihovny + lka: + m + mové bicí sady + můžete pouze uložit změny nástroje do aktuálně nahrané zvukové knihovny + no efektu + noty + r + ru (klávesnice) a napočítaným BPM + ru (klávesnice) a zpožděním startu sekvenceru + ru + skladby do WAV + skladby + snímky + změnit patern během přehrávání. + změny nástrojů do knihovny zvuků +License: UNKNOWN + FIXME + +Files: data/i18n/hydrogen.gl.ts +Copyright: correcta! + executábel polo seu propietario! + n espazos en branco. + posíbel activar o cliente + posíbel cambiar o tamaño do patrón durante a reprodución. + posíbel conectar ao porto de saída + posíbel eliminar a batería cargada neste momento: + posíbel, só se pode gardar os cambios dentro dos instrumentos para a biblioteca de son cargada actualmente + reo + tica + todo de interpolación + un conxunto de batería e non pode ser eliminado. License: UNKNOWN FIXME Files: data/doc/manual_es.po -Copyright: crees que pasará cuando los combines? Está claro, vuelves a saturar la señal." - pasará cuando tengas una intensidad máxima de 1.0? (Una pista: saturación.)" - puede ser un sample. Es común utilizar Hydrogen para disparar sonidos que no son de batería, tales como: clips de audio de personas hablando, un clip de una canción, efectos de sonido, clips de audio de películas, personas famosas hablando. ¡Se creativo!" +Copyright: crees que pasará cuando los combines? Está claro, vuelves a saturar la señal." + ditos, etc." + l. Úsalo como un último recurso." + l; Llenar/Borrar notas llena o borra cada nota del instrumento en el patrón actual (recuerda que llenar un patrón siempre depende de la resolución de rejilla seleccionada) y finalmente Intensidad aleatoria aplica automáticamente una intensidad pseudo-aleatoria a cada nota de ese instrumento en el patrón. A mayor intensidad seleccionada para el instrumento, Hydrogen golperará más fuerte ese instrumento durante la reproducción." + moslo de nuevo:" + n ADSR" + n con el valor de "Polifonía": dependiendo de tu CPU quizá quieras cambiar el número máximo de notas simultáneas para evitar que Hydrogen desborde el driver de audio." + n debería de estar sobre esta línea. Sin embargo, si la señal está un poco por encima o debajo de esta línea, oirás un 'clic' al comienzo y al final del sample cada vez que sea reproducido. Si tu editor de samples no tiene herramientas para arreglar un problema de desviación de CD, puedes eliminarlo poniendo un ligero fundido de entrada y salida en los extremos del sample." + n es posible cambiar el nombre del patrón. Ahora vamos a hacer clic en el botón de Play y mientras se reproduce el patrón vamos a añadir notas en la rejilla del Editor de Patrones () simplemente haciendo clic izquierdo en él: ajusta la resolución de la rejilla y la velocidad de PPM si lo necesitas. Recuerda algunas limitaciones en cuanto a la rejilla: si estás trabajando con una resolución de 16 no puedes volver a una de 8 y quitar una nota de 1/16; por otro lado, si trabajas con una resolución de 8 e intentas insertar una nota entre dos barras (buscando una resolución de 1/16), las notas se colocarán en en la barra anterior o posterior en la rejilla de 1/8 (a menos que elijas off en el LCD de la Resolución de Rejilla; en este caso puedes colocar las notas donde quieras). ¡Asegúrate de seleccionar el patrón correcto en el Editor de Canciones antes de añadir notas en el Editor de Patrones!" + n la zona de frecuencias que se amplifican." + n podemos copiar y pegar patrones: usa el botón izquierdo del ratón para subrayar una zona y arrástralo. Arrastrar con la tecla CTRL pulsada copia los patrones." + n puede añadir efectos a los sonidos usando cualquier librería de efectos LADSPA. Tienes que instalar las fuentes de LADSPA (disponibles en http:www.ladspa.org) y mientras que esto te ofrece una idea aproximada de cómo funciona, en realidad deberías probarlo de verdad instalándote una o más librerías de plugins, que es tan simple como scons && scons install. Estos son algunos sitios donde puedes descargarte librerías de plugins:" + n puedes utilizar or descargar drumkits existentes utilizando ." + n pulsado el botón izquierdo del ratón para seleccionar los que quieres mover o copiar)." + n te permitirá cargar más de un sample a la vez. Pero por ahora, sólo carga uno." + n tiene un ajuste Fino." + pasará cuando tengas una intensidad máxima de 1.0? (Una pista: saturación.)" + puede ser un sample. Es común utilizar Hydrogen para disparar sonidos que no son de batería, tales como: clips de audio de personas hablando, un clip de una canción, efectos de sonido, clips de audio de películas, personas famosas hablando. ¡Se creativo!" + rdate de configurar Hydrogen con:" + rdate de probar la ganancia con notas de intensidad máxima. Si aquí se te clipea la señal, seguramente empeorará según lo procesa Hydrogen." + ricas" + ricos:" + rminos del Sintetizador de Samples" + rminos generales que se encuentran al utilizar Hydrogen, sintetizadores, baterías o samplers. Las definiciones del texto están simplificadas, pero las definiciones aquí son más generales y están más explicadas. Por ejemplo, el texto del manual te llevaría a creer que un ADSR es el único tipo de generador de envolventes (envelope generator), y que sólo controla el volumen. Mientras que sirve para nuevos usuarios, no es del todo correcto." + rminos que deberás entender a la hora de confeccionar un drumkit. (Ver para una explicación más detallada.)" + s de disparar el sonido de cerrado. Al colocar ambos instrumentos en el mismo grupo (grupo #1, por ejemplo)... al disparar el sonido de cerrado el de abierto se parará automáticamente (y vice versa)." + s de la ganancia que has configurado para la capa, y antes de la ganancia configurada para el mezclador. Con la ganancia a 0, el instrumento estará silenciado. Con la ganancia a 1.0, el volumen de los samples no se ajustará (por ej. 0 dB). Si la ganancia se configura a más, los samples se amplificarán." + s de que pulses el número correcto de pulsaciones (si no está reproduciendo ya, claro). De este modo, si tienes el Contador de Pulsaciones fijado para 4/4, puedes pulsar 1-2-3-4, y comenzar a reproducir en el siguiente compás. Cuando muestra la S (de Set BPM), (fijar PPM) el auto-arranque está desactivado." + s de un flujo XML. El archivo XML que debería suministrarse NO es compatible con RSS (ver Hydrogen website para un ejemplo). Para cargar otro drumkit en tu sesión actual de Hydrogen, lee ." + s de un teclado MIDI/secuenciador de software. Hydrogen compila en Linux/x86 y Mac OS X, aunque este último aún es experimental, así que pregunta en la lista de correo de desarrolladores para más detalles." + s del menú de herramientas (tools -> preferences)." + s) ADSR Envelope" + s, selecciona Instrumentos Exportar biblioteca en el menú. Selecciona el drumkit que deseas exportar y dale un nombre de archivo para guardarlo." + stos normalmente no pueden hacer añadidos." + ticamente y por categorías. Cuando acabes, ajusta el nivel en el mezclador y empieza a tocar. Cada control redondo en la parte de efectos (FX) controla el nivel del efecto correspondiente. Si quieres activar/desactivar rápidamente el efecto, haz clic en el botón de Bypass ( )." +License: UNKNOWN + FIXME + +Files: linux/hydrogen.desktop +Copyright: er des séquences rythmiques + szíteni +License: UNKNOWN + FIXME + +Files: data/i18n/hydrogen.fr.ts +Copyright: gler les paramètres de vélocité humanisée [%1 + gler votre éditeur par défaut + gorie du motif + gorie + le morceau sous. + lection automatique du pilote audio</b> + lection + lectionner la longueur du motif + lectionner la résolution de la grille + lectionner la taille du motif + lectionner les propriétés de la note + lectionner un motif virtuel + lectionné sera effacé du disque. + lectionné! + lectionné. + lectionné + locité aléatoire + locité des couches + locité humanisée + locité + léchargement de la bibliothèque de sons... + lécharger et installer + léctionné ! + lément : %1 + lément n'est pas opérable par MIDI. + marrage de l'application + marrage de pilote nécessaire. + marrer la sortie + marrer le pilote? + mo + nements + néral de sortie + néral + part de l'échantillon + part + pertoire + pertoires cachés + quence de motifs. + quence de motifs + quence: %1 Hz + quence: + quenceur + quilibreur + quivalent à + quivaut à + rieur + riphérique audio + rive du compteur de battement + ro de note + récemment + réo + s aux instruments dans la bibliothèque de sons + s avec les nouveaux instruments et conserveront leurs notes, mais certains des instruments restant possèdent des notes. + sactive le métronome + sactiver le support LASH + sactiver + solution: + solé, mais un éditeur en mode console ne fonctionnera pas présentement. + sonance + sur l'échantillon. + sur la vélocité + tails de la sortie audio + tape: ajuster les différences entre le déclencheur du contrôleur/clavier et la départ différé du séquenceur + tape: synchroniser la latence du déclencheur du contrôleur/clavier et le BPM calculé. + thode d'interpolation + thode de colorisation des éléments de l'éditeur de morceau + tique + tiquette "Profondeur d'échantillonnage en Bit:" était beaucoup trop longue + tiquette "Taux d'échantillonnage en Hz:" était beaucoup trop longue + tiquette de l'effet + tiseur + tronome + truire + té importée dans %1 + té + tés de l'effet LADSPA %1 + tés de l'effet LADSPA + tés de la bibliothèque de sons + tés des couches + tés des instruments + tés du morceau + tés du motif + tés... + tés + une police ou l'agencement de l'interface, l'application doit être redémarrée.</span></p></body></html> + veloppement.<br> Merci de nous aider en envoyant des suggestions ou des problèmes sur la <a href="http:lists.sourceforge.net/mailman/listinfo/hydrogen-devel">liste de discussion d'Hydrogen</a>.<br><br>Merci! + veloppeur + veloppé par plusieurs personnes sur leur temps libre. En faisant un don, vous pouvez dire &quot;merci à + vénements clavier/MIDI entrant = Actif + vénements clavier/MIDI sur la grille + vénements entrant du clavier/midi = Inactif + vénements midi = actif + vénements midi = inactif + vénements midi +License: UNKNOWN + FIXME + +Files: data/i18n/hydrogen.hu_HU.ts +Copyright: gsem + mozgatása + mít + nek beállítása + nyek illesztése a hálóhoz = Igen + nyek illesztése a hálóhoz = Nem + nyek illesztése a hálóhoz + ret + s + se - %1 + se + si sebessége + sleltetésű audio meghajtó + sz. + tel + terek módosítása + v + vjegy + zikönyv +License: UNKNOWN + FIXME + +Files: data/i18n/hydrogen.es.ts +Copyright: n la nota del instrumento actual antes de disparar la siguiente nota de sample. + rdida en buena calidad "48 kHz" + reo + tica +License: UNKNOWN + FIXME + +Files: src/tests/data/drumkit/drumkit.xml +Copyright: rémy +License: UNKNOWN + FIXME + +Files: data/i18n/hydrogen.it.ts +Copyright: stato un errore importando la Sound Library. License: UNKNOWN FIXME Files: data/doc/tutorial_fr.po -Copyright: du morceau" - votre travail, il est temps de le faire MIANTENANT. Un simple [CTRL+S +Copyright: votre travail, il est temps de le faire MIANTENANT. Un simple [CTRL+S + é (ex. A-B-C_3+4, le renommer en A-B-C_8 et le modifier comme sur la Fig. 4. Notez que dont les trois caisses claires Jazz de la quatrième mesure ont une intensité respective réglée à + é comme un échantillon (A-B-C_8), puis copiez le et renommez le en Bridge1_4 (c'est à +License: UNKNOWN + FIXME + +Files: macos/Hydrogen.icns +Copyright: ‚¨\00¿€ÔÓ¡„€€ÐЁÏ\00q‡Y\00q‚ËÊÊyY†X\00eÆÅŁ„{€z‘ÃÂÂÁÁ¼„š™\00¬‚¾¼\00šƒb\00µ€Ú\00قØ\00сª\00©ƒ¨¿ÔÔÓÓ¡ƒ‚€\00ЂÏ\00q‡Y\00qË€Ê\00z‡X\00f€Æ€Å\00ƒ{z‘€Á\00¼ƒš™˜¬¾‚¼\00šƒb´ÚÚقØ×рª\00©ƒ¨§¿Ô€Ó\00¡‚ƒ€‚ÏÎq‡Y\00q€ËÊ\00z‡XfÆƁÅ\00‚{‚z‘Á\00¼‚š™˜˜¬€¾ƒ¼\00šƒb´ÚقØ××Ѫª©ƒ¨§§¿€ÓÒ¢„€ÏÎÍs‡YqË˂Ê\00y‡XgƂÅ\00‚{ƒz\00‘‚Á\00¼š™€˜¬¾¾ƒ¼»šƒb´Ù‚Ø€×Ѫ©ƒ¨€§¿ÓÓÒÒ¢€ƒ€€ÏÎÍÍs‡Yq˂ÊÉy‡X\00hƒÅ\00ƒ€{„z\00’ÁÀ½€š™˜¬¾ƒ¼»»šƒb\00´‚؁×Ò©ƒ¨§¿Ó€Ò£ƒ€ÏÏ΀Í\00t‡Y\00q‚ÊÉÈz‡X\00hƒÅƒ{{„zy’€ÁÀÀ½šš™‚˜\00¬ƒ¼€»\00šƒb\00´Ø‚×\00у¨‚§\00¿Ò¤ƒ€€‚Ï΁Í\00v‡Y\00qÊÉÈÈ{‡X\00h‚ÅĄ{„zyy‘ÁÁ€À½š™ƒ˜\00ª‚¼»\00™ƒb\00´€Ø‚×ÖÓ«¨ƒ§\00Ò\00®ƒ€‰Î΁Í\00ƒ‡Y\00{€Ê\00ɀÈ\00‰‡X\00sÅÄȄz€y˜ÁÀ¿›€™ƒ˜—®¼»º™ƒb³Ø؂×ÖÕÕŲ°°€¯€®»ÐÒ͜ + ƒ¨ƒ§¦±€¼»€º¹“ƒT±ÚƒÙØ؁ׂÖ\00ՀԃӃрЀσ΃́ËÊʃÉ\00ȂǁÆÅŃÄ\00‚Á\00Àƒ¿¾¾½‚¼»€º¹¹“ƒT\00°ƒÙØ؁ׂÖ\00ՀԃӃрЀσÎ\00͂́ËÊʃÉ\00ȂǁÆÅŃÄ\00‚Á\00Àƒ¿¾¾½‚¼»€º€¹\00“ƒT\00°‚ÙØ؁׃րԃӃрЀσÎ\00͂́ËÊʃÉ\00ȂǁÆÅŃÄ\00‚Á\00Àƒ¿¾¾½‚¼»€º€¹¸“ƒT\00°ÙØ؁׃րԃӃрЀσÎ\00͂́ËÊʃÉ\00ȂǁÆÅŃÄ\00‚Á\00Àƒ¿¾¾½‚¼»€º€¹¸¸“ƒT\00°€ÙØ؁׃րԃӃрЀσÎ\00͂́ËÊʃÉ\00ȂǁÆÅŃÄÃÁ‚Á\00Àƒ¿¾¾½‚¼»€º€¹€¸\00’ƒT¯ÙÙØ؁׃րԃӃрЀσÎ\00͂́ËÊʃÉ\00ȂǁÆÅŃÄÃÁ‚Á\00Àƒ¿¾¾½‚¼»€º€¹¸\00’ƒT¯ÙØ؁׃րԃӃрЀσÎ\00͂́ËÊʃÉ\00ȂǁÆÅŃÄÃÁ‚Á\00Àƒ¿¾¾½‚¼»€º€¹‚¸\00’ƒT¯Ø؁׃րԃӃрЀσÎ\00͂́ËÊʃÉ\00ȂǁÆÅŃÄÃÁ‚Á\00Àƒ¿¾¾½‚¼»€º€¹ƒ¸\00’ƒT¯Ø×ƒÖ€ÔƒÓƒÑ€Ð€ÏƒÎ\00͂́ËÊʃÉ\00ȂǁÆÅŃÄÃÁ‚Á\00À„¿\00¾½‚¼»€º€¹„¸\00’ƒT\00¯×ƒÖų±€°±°°®·Ð€ÑÐÉ¢‘‘€Ž’·‚Ì˺€rqp€onnx´‚ÇÆƸ€pon€mlls¬ÂÁÁ³‰ˆ€‡†† +License: UNKNOWN + FIXME + +Files: data/img/h2-icon.bmp +Copyright: ‹xé·¤i*€ZpD¡EW±êÕ½³ŸÖXgb½Ñ`Ãڕ<÷ÌSa†ìÀ¦Î¯ + ™ëdW8Ùå‘Á}‘Ï +License: UNKNOWN + FIXME + +Files: data/img/h2-icon.ico +Copyright: ¡ÿÀ§Ÿÿ¼£šÿ¼£šÿ¼¢šÿ¼¢™ÿ¼¢™ÿ¾¤œÿÞÒÎÿßÒÍÿßÑÍÿÞÑÍÿÞÐÍÿÞÑÌÿ¼£›ÿ¯‘‡ÿª‰~ÿ©‰}ÿªˆ~ÿ©ˆ}ÿ©ˆ}ÿ©ˆ}ÿÛÎÉÿÛÍÈÿÛÍÈÿÛÌÇÿÚÍÈÿÚÌÇÿÚÌÇÿʵ®ÿ­Ž„ÿ¨†{ÿ¨†{ÿ¨†{ÿ§†{ÿ¨†zÿ¨†zÿÕÄÀÿØÉÃÿ×ÉÃÿØÈÃÿ×ÈÃÿ×ÇÂÿÖÇÂÿ¹Ÿ–ÿ·›‘ÿ¶™ÿµ™ÿµ™ÿµ™ÿµ˜ÿ¼¢šÿÕÅ¿ÿÕľÿÔÄ¿ÿÔþÿÓþÿÔýÿÆ°¨ÿĬ¤ÿ«£ÿÁª¢ÿª£ÿÁ©¢ÿÁª¢ÿë£ÿÑÀºÿÑÀºÿÑ¿¹ÿÑÀºÿп¹ÿÑ¿¹ÿо¸ÿо¸ÿн·ÿŽbTÿŽbTÿÿÿÿÿŽbTÿŽbTÿŽbTÿæÜÙÿæÜØÿåÛØÿæÛØÿåÚØÿåÛ×ÿäÚ×ÿäÚÖÿäÙÖÿäÙÕÿãØÖÿãØÕÿãØÕÿãØÔÿâØÔÿã×ÓÿâÖÓÿâ×Óÿâ×ÓÿáÖÒÿâÖÒÿáÕÑÿáÕÑÿàÔÐÿáÕÑÿàÔÐÿàÔÐÿßÓÏÿßÓÏÿßÓÎÿßÓÎÿÞÒÎÿßÒÍÿÞÑÌÿÞÑÍÿÞÐÍÿÞÑÌÿÞÐÌÿÝÐËÿÝÏËÿÜÏÊÿÝÎËÿÜÎÊÿÜÎÊÿÛÎÉÿÛÍÉÿÛÍÈÿÛÍÈÿÛÌÇÿÚÍÈÿÚÌÇÿÚÌÇÿÚËÆÿÚËÆÿÚÊÅÿÙÊÅÿÙÊÆÿØÊÅÿÙÉÄÿØÉÄÿØÈÄÿØÉÃÿ×ÉÃÿØÈÃÿ×ÈÃÿ×ÇÂÿÖÇÂÿÖÆÁÿÖÇÁÿÖÆÀÿÕÆÁÿÕÅÀÿÕÅÀÿÕÄ¿ÿÕÄ¿ÿÕľÿÕľÿÔÄ¿ÿÔþÿÓþÿÔýÿÓýÿÓ¼ÿÓ¼ÿÒÁ»ÿÓÁ¼ÿÒÀ»ÿÒÁ»ÿÑÀºÿÑÀºÿÑÀºÿÑ¿¹ÿÑÀºÿп¹ÿÑ¿¹ÿо¸ÿо¸ÿŽbTÿŽbTÿÿÿÿÿŽbTÿŽbTÿŽbTÿæÝÙÿæÜÙÿæÜØÿæÛÙÿæÛØÿåÚØÿåÛ×ÿäÚ×ÿåÚÖÿäÙÖÿäÙÕÿãØÖÿãØÕÿãØÕÿãØÔÿâ×Ôÿã×ÓÿâÖÓÿâ×Óÿâ×ÓÿáÖÒÿâÕÒÿáÕÑÿáÕÑÿàÔÐÿáÕÑÿàÔÐÿàÔÐÿßÓÏÿßÓÏÿßÓÎÿßÓÎÿÞÒÎÿßÒÍÿÞÑÌÿÞÑÍÿÞÐÍÿÞÑÌÿÞÐÌÿÝÐËÿÝÏËÿÜÏÊÿÝÎËÿÜÎÊÿÜÎÊÿÛÎÉÿÛÍÉÿÛÍÈÿÛÍÈÿÛÍÈÿÚÍÈÿÚÌÇÿÚÌÇÿÚËÆÿÚËÆÿÚÊÅÿÙÊÅÿÙÊÅÿØÊÅÿÙÉÄÿØÉÄÿØÈÄÿØÉÃÿ×ÈÃÿØÈÃÿ×ÈÃÿ×ÇÂÿÖÇÂÿÖÆÁÿÖÇÁÿÖÆÀÿÕÆÁÿÕÅÀÿÕÅÀÿÕÄ¿ÿÕÄ¿ÿÕľÿÕľÿÔÿÿÔþÿÓþÿÔýÿÓýÿÓ¼ÿÓ¼ÿÒÁ»ÿÓÁ¼ÿÒÀ»ÿÒÁ»ÿÑÀºÿÑÀºÿÑÀºÿÑ¿¹ÿÑÀºÿп¹ÿÑ¿¹ÿо¸ÿŽbTÿŽbTÿÿÿÿÿŽbTÿŽbTÿŽbTÿçÝÚÿæÝÙÿæÜÙÿåÜØÿæÛÙÿæÛØÿåÚØÿåÛ×ÿäÚ×ÿåÚÖÿäÙÖÿäÙÕÿãØÖÿãØÕÿãØÕÿãØÔÿâ×Ôÿã×ÓÿâÖÓÿâ×Óÿâ×ÓÿâÖÒÿáÕÒÿáÕÑÿáÕÑÿàÔÐÿáÕÑÿàÔÐÿàÔÐÿßÓÏÿßÓÏÿßÓÎÿßÓÎÿßÒÍÿßÒÍÿÞÑÌÿÞÑÍÿÞÐÍÿÞÑÌÿÞÐËÿÝÐËÿÝÏËÿÜÏÊÿÝÎËÿÜÎÊÿÜÎÊÿÛÎÉÿÛÍÉÿÛÍÈÿÛÍÈÿÛÍÈÿÚÍÈÿÚÌÇÿÚÌÇÿÚËÆÿÚËÆÿÚÊÅÿÙÊÅÿÙÊÅÿØÊÅÿÙÉÄÿØÉÄÿØÈÄÿ×ÉÃÿ×ÈÃÿØÈÃÿ×ÈÃÿ×ÇÂÿÖÇÂÿÖÆÁÿÖÇÁÿÖÆÀÿÕÆÁÿÕÅÀÿÕÅÀÿÕÄ¿ÿÕÄ¿ÿÕľÿÕľÿÔÿÿÔþÿÓ¾ÿÔýÿÓýÿÓ¼ÿÓ¼ÿÒÁ»ÿÓÁ¼ÿÒÀ»ÿÒÁ»ÿÑÀºÿÒÀºÿÑÀºÿÑ¿¹ÿÑÀºÿп¹ÿÑ¿¹ÿŽbTÿŽbTÿÿÿÿÿŽbTÿŽbTÿŽbTÿæÝÚÿçÝÚÿæÝÙÿæÜÙÿåÜØÿæÛÙÿæÛØÿåÚØÿåÛ×ÿäÚ×ÿåÚÖÿäÙÖÿäÙÕÿãØÖÿãØÕÿãØÕÿãØÔÿâ×Ôÿã×ÓÿâÖÓÿâ×ÓÿáÖÓÿâÖÒÿáÕÒÿáÕÑÿáÕÑÿàÔÐÿáÔÑÿàÔÐÿàÔÐÿßÓÏÿßÓÏÿßÓÎÿßÓÎÿßÒÍÿßÒÍÿÞÑÌÿÞÑÍÿÞÐÍÿÞÑÌÿÞÐËÿÝÐËÿÝÏËÿÜÏÊÿÝÎËÿÜÎÊÿÜÎÊÿÛÎÉÿÛÍÉÿÛÍÈÿÛÍÈÿÚÍÈÿÚÍÈÿÚÌÇÿÚÌÇÿÚËÆÿÚËÆÿÚÊÅÿÙÊÅÿÙÊÅÿØÊÅÿÙÉÄÿØÉÄÿØÉÃÿ×ÉÃÿ×ÈÃÿØÈÃÿ×ÈÃÿ×ÇÂÿÖÇÂÿÖÆÁÿÖÇÁÿÖÆÀÿÕÆÁÿÕÅÀÿÕÅÀÿÕÄ¿ÿÕÄ¿ÿÕľÿÕľÿÔÿÿÔþÿÓ¾ÿÔýÿÓýÿÓ¼ÿÓ¼ÿÓÁ¼ÿÓÁ¼ÿÒÀ»ÿÒÁ»ÿÑÀºÿÒÀºÿÑ¿¹ÿÑ¿¹ÿÐÀºÿп¹ÿŽbTÿŽbTÿÿÿÿÿŽbTÿŽbTÿŽbTÿçÝÛÿæÝÚÿçÝÚÿæÝÙÿæÜÙÿæÜØÿåÛØÿæÛØÿåÚØÿåÛ×ÿäÚ×ÿåÚÖÿäÙÖÿäÙÕÿãÙÖÿãØÕÿãØÕÿãØÔÿâØÔÿã×Óÿã×Óÿâ×Óÿâ×ÓÿáÖÒÿâÖÒÿáÕÑÿáÕÑÿàÔÐÿáÕÑÿàÔÐÿàÔÐÿßÓÏÿßÓÏÿßÓÎÿßÓÎÿÞÒÎÿßÒÍÿßÑÍÿÞÑÍÿÞÐÍÿÞÑÌÿÞÐÌÿÝÐËÿÝÏËÿÜÏÊÿÝÎËÿÜÎÊÿÜÍÊÿÛÎÉÿÛÎÉÿÜÍÈÿÛÍÈÿÛÍÈÿÚÍÈÿÚÌÇÿÚÌÇÿÚËÆÿÚËÆÿÚÊÅÿÙÊÅÿÙÊÅÿØÊÅÿÙÉÅÿØÉÄÿØÈÄÿØÉÃÿ×ÉÃÿØÈÃÿ×ÈÃÿ×ÇÂÿÖÇÂÿÖÆÁÿÖÇÁÿÖÆÀÿÖÆÁÿÕÅÀÿÕÅÀÿÕÄ¿ÿÕÄ¿ÿÕÄ¿ÿÕľÿÔÿÿÔþÿÓþÿÔýÿÔýÿÓ¼ÿÓ¼ÿÒÁ»ÿÓÁ¼ÿÒÀ»ÿÒÁ»ÿÑÁ»ÿÒÀºÿÑÀºÿÑ¿¹ÿÑÀºÿŽbTÿŽbTÿÿÿÿÿŽbTÿŽbTÿŽbTÿçÞÛÿçÝÛÿæÝÚÿçÝÚÿæÝÙÿæÜÙÿæÜØÿåÛØÿæÛØÿåÚØÿåÛ×ÿäÚ×ÿåÚÖÿäÙÖÿäÙÕÿãØÖÿãØÕÿãØÕÿãØÔÿâ×Ôÿã×ÓÿâÖÓÿâ×Óÿá×ÓÿáÖÒÿâÖÒÿáÕÑÿáÕÑÿàÔÐÿáÕÑÿàÔÐÿàÔÐÿßÓÏÿßÓÏÿßÓÎÿßÓÎÿÞÒÎÿßÒÍÿßÑÍÿÞÑÍÿÞÐÍÿÞÑÌÿÞÐÌÿÝÐËÿÝÏËÿÜÏÊÿÝÎËÿÜÎÊÿÜÍÊÿÛÎÉÿÛÎÉÿÛÍÈÿÛÍÈÿÛÍÈÿÚÍÈÿÚÌÇÿÚÌÇÿÚËÆÿÚËÆÿÚÊÅÿÙÊÅÿÙÊÅÿØÊÅÿÙÉÄÿØÉÄÿØÈÄÿØÉÃÿ×ÉÃÿØÈÃÿ×ÈÃÿ×ÇÂÿÖÇÂÿÖÆÁÿÖÇÁÿÖÆÀÿÕÆÁÿÕÅÀÿÕÅÀÿÕÄ¿ÿÕÄ¿ÿÕÄ¿ÿÕľÿÔÿÿÔþÿÓþÿÔýÿÔýÿÓ¼ÿÓ¼ÿÒÁ»ÿÓÁ¼ÿÒÀ»ÿÒÁ»ÿÑÀºÿÒÀºÿÑÀºÿÑ¿¹ÿŽbTÿŽbTÿÿÿÿÿŽbTÿŽbTÿŽbTÿèÞÛÿçÞÛÿçÝÛÿæÝÚÿçÝÚÿæÝÙÿæÜÙÿæÜØÿåÛØÿæÛØÿåÚØÿåÛ×ÿäÚ×ÿåÚÖÿäÙÖÿäÙÕÿãØÖÿãØÕÿãØÕÿãØÔÿâ×Ôÿã×ÓÿâÖÓÿâ×Óÿá×ÓÿâÖÒÿâÖÒÿáÕÑÿáÕÑÿàÔÐÿáÕÑÿàÔÐÿàÔÐÿßÓÏÿßÓÏÿßÓÎÿßÓÎÿÞÒÍÿßÒÍÿÞÑÌÿÞÑÍÿÞÐÍÿÞÑÌÿÞÐÌÿÝÐËÿÝÏËÿÜÏÊÿÝÎËÿÜÎÊÿÜÍÊÿÛÎÉÿÛÍÉÿÛÍÈÿÛÍÈÿÛÍÈÿÚÍÈÿÚÌÇÿÚÌÇÿÚËÆÿÚËÆÿÚÊÅÿÙÊÅÿÙÊÅÿØÊÅÿÙÉÄÿØÉÄÿØÈÄÿØÉÃÿ×ÉÃÿØÈÃÿ×ÇÃÿ×ÇÂÿÖÇÂÿÖÆÁÿÖÇÁÿÖÆÀÿÕÆÁÿÕÅÀÿÕÅÀÿÕÄ¿ÿÕÄ¿ÿÕľÿÕľÿÔÿÿÔþÿÓþÿÔýÿÓýÿÓ¼ÿÓ¼ÿÒÁ»ÿÓÁ¼ÿÒÀ»ÿÒÁ»ÿÑÀºÿÒÀºÿÑÀºÿŽbTÿŽbTÿÿÿÿÿŽbTÿŽbTÿŽbTÿèßÛÿèÞÛÿçÞÛÿçÝÛÿæÝÚÿçÝÚÿæÝÙÿæÜÙÿæÜØÿæÛÙÿæÛØÿåÚØÿåÛ×ÿäÚ×ÿåÚÖÿäÙÖÿäÙÕÿãØÖÿãØÕÿãØÕÿãØÔÿã×Ôÿã×ÓÿâÖÓÿâ×ÓÿáÖÓÿâÖÒÿáÕÒÿáÕÑÿáÕÑÿàÔÐÿáÕÑÿàÔÐÿàÔÐÿßÓÏÿßÓÏÿßÓÎÿßÓÎÿÞÒÍÿßÒÍÿÞÑÌÿÞÑÍÿÞÐÍÿÞÑÌÿÞÐÌÿÝÐËÿÝÏËÿÜÏÊÿÝÎËÿÜÎÊÿÜÍÊÿÛÎÉÿÛÍÉÿÛÍÈÿÛÍÈÿÛÍÈÿÚÍÈÿÚÌÇÿÚÌÇÿÚËÆÿÚËÆÿÚÊÅÿÙÊÅÿÙÊÅÿØÊÅÿÙÉÄÿØÉÄÿØÉÄÿØÉÃÿ×ÈÃÿØÈÃÿ×ÇÃÿ×ÇÂÿÖÇÂÿÖÆÁÿÖÇÁÿÖÆÀÿÕÆÁÿÕÅÀÿÕÅÀÿÕÄ¿ÿÕÄ¿ÿÕľÿÕľÿÔÿÿÔþÿÓþÿÔýÿÓýÿÓ¼ÿÓ¼ÿÒÁ»ÿÓÁ¼ÿÒÀ»ÿÒÁ»ÿÑÀºÿÒÀºÿŽbTÿŽbTÿÿÿÿÿŽbTÿŽbTÿŽbTÿèÞÜÿèßÛÿèÞÛÿçÞÛÿçÝÛÿæÝÚÿçÝÚÿæÝÙÿåÛØÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿâÖÒÿáÕÒÿáÕÑÿáÕÑÿàÔÐÿáÕÑÿàÔÐÿàÔÐÿßÓÏÿßÓÏÿßÓÎÿßÓÎÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿÔýÿÓýÿÓ¼ÿÓ¼ÿÒÁ»ÿÓÁ¼ÿÒÀ»ÿÒÁ»ÿÑÀºÿŽbTÿŽbTÿÿÿÿÿŽbTÿŽbTÿŽbTÿèßÜÿèÞÜÿèßÛÿèÞÛÿçÞÛÿçÝÛÿæÝÚÿçÝÚÿÆ°¨ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿáÖÓÿâÖÒÿáÕÒÿáÕÑÿáÕÑÿàÔÐÿáÔÑÿàÔÐÿàÔÐÿßÓÏÿßÓÏÿßÓÎÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿÓ¾ÿÔýÿÓýÿÓ¼ÿÓ¼ÿÓÁ¼ÿÓÁ¼ÿÒÀ»ÿÒÁ»ÿŽbTÿŽbTÿÿÿÿÿŽbTÿŽbTÿŽbTÿèßÝÿèßÜÿèÞÜÿèßÛÿèÞÛÿçÞÛÿçÝÛÿæÝÚÿů¨ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿâ×ÓÿáÖÓÿâÖÒÿâÖÒÿáÕÑÿáÕÑÿàÔÐÿáÕÑÿàÔÐÿàÔÐÿßÓÏÿßÓÏÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿÔþÿÓþÿÔýÿÔýÿÓ¼ÿÓ¼ÿÒÁ»ÿÓÁ¼ÿÒÀ»ÿŽbTÿŽbTÿÿÿÿÿŽbTÿŽbTÿŽbTÿèàÝÿéßÝÿèßÜÿèÞÜÿèßÛÿèÞÛÿçÞÛÿçÝÛÿÄ­¦ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿâÖÓÿâ×ÓÿáÖÓÿâÖÒÿâÖÒÿáÕÑÿáÔÑÿàÔÐÿáÕÑÿàÔÐÿàÔÐÿßÓÏÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿÔþÿÔþÿÓþÿÔýÿÔýÿÓ¼ÿÓ¼ÿÒÁ»ÿÓÁ¼ÿŽbTÿŽbTÿÿÿÿÿŽbTÿŽbTÿŽbTÿéàÞÿèàÝÿéßÝÿèßÜÿèÞÜÿèßÛÿèÞÛÿçÞÛÿÄ­¥ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿã×ÓÿâÖÓÿâ×ÓÿáÖÓÿâÖÒÿâÖÒÿáÕÑÿáÔÑÿàÔÐÿáÕÑÿàÔÐÿàÔÐÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿÕľÿÔþÿÔþÿÓþÿÔýÿÓýÿÓ¼ÿÓ¼ÿÒÁ»ÿŽbTÿŽbTÿÿÿÿÿŽbTÿŽbTÿŽbTÿéáÝÿéàÞÿèàÝÿéßÝÿèßÜÿèÞÜÿèßÛÿèÞÛÿì¥ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿã×Ôÿã×ÓÿâÖÓÿâ×ÓÿáÖÓÿâÖÒÿáÕÒÿáÕÑÿáÔÑÿàÔÐÿáÕÑÿàÔÐÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿÕľÿÕľÿÔþÿÔþÿÓþÿÔýÿÓýÿÓ¼ÿÓ¼ÿŽbTÿŽbTÿÿÿÿÿŽbTÿŽbTÿŽbTÿêáÞÿéáÝÿéàÞÿèàÝÿéßÝÿèßÜÿèÞÜÿèßÛÿë£ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿãØÔÿã×Ôÿã×ÓÿâÖÓÿâ×ÓÿáÖÓÿâÖÒÿáÕÒÿáÕÑÿáÔÑÿàÔÐÿáÕÑÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿÕÄ¿ÿÕľÿÕľÿÔþÿÔþÿÓ½ÿÔýÿÓýÿÓ¼ÿŽbTÿŽbTÿÿÿÿÿŽbTÿŽbTÿŽbTÿêâÞÿêáÞÿéáÝÿéàÞÿèàÝÿéßÝÿèßÜÿèÞÜÿë¢ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿãØÕÿãØÔÿã×Ôÿã×ÓÿâÖÓÿâ×ÓÿáÖÓÿâÖÒÿáÕÒÿáÕÑÿáÔÑÿàÔÐÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿͺ´ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿÕÄ¿ÿÕÄ¿ÿÕľÿÕľÿÔþÿÔþÿÓ½ÿÔýÿÓýÿŽbTÿŽbTÿÿÿÿÿŽbTÿŽbTÿŽbTÿêáßÿéáÞÿêáÞÿéáÝÿéàÞÿèàÝÿéßÝÿèßÜÿÁ¨¡ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿãØÕÿãØÕÿãØÔÿâ×Ôÿã×ÓÿâÖÓÿâ×ÓÿáÖÓÿâÖÒÿâÖÒÿáÕÑÿáÕÑÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿλµÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿÖÅÀÿÕÄ¿ÿÕÄ¿ÿÕľÿÕľÿÔþÿÔþÿÓþÿÔýÿŽbTÿŽbTÿÿÿÿÿŽbTÿŽbTÿŽbTÿêâßÿêáßÿéáÞÿêáÞÿéáÝÿéàÞÿèàÝÿéßÝÿÀ§ŸÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿãØÖÿãØÕÿãØÕÿãØÔÿâ×Ôÿã×ÓÿâÖÓÿâ×ÓÿáÖÓÿâÖÒÿâÖÒÿáÕÑÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿλµÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿÕÅÀÿÕÅÀÿÕÄ¿ÿÕÄ¿ÿÕľÿÕľÿÔþÿÔþÿÓþÿŽbTÿŽbTÿÿÿÿÿŽbTÿŽbTÿŽbTÿëâàÿêâßÿêáßÿêâÞÿêáÞÿéáÝÿéàÞÿèàÝÿÀ§ŸÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿäÙÕÿãØÖÿãØÕÿãØÕÿãØÔÿâ×Ôÿã×ÓÿâÖÓÿâ×ÓÿáÖÓÿâÖÒÿâÕÒÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿλµÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿÕÆÁÿÕÅÀÿÕÅÀÿÕÄ¿ÿÕÄ¿ÿÕľÿÕľÿÔþÿÔþÿŽbTÿŽbTÿÿÿÿÿŽbTÿŽbTÿŽbTÿëãàÿëâàÿêâßÿéáßÿêâÞÿêáÞÿéáÝÿéàÞÿ¾¦žÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿäÙÖÿäÙÕÿãØÖÿãØÕÿãØÕÿãØÔÿã×Ôÿã×ÓÿâÖÓÿâ×ÓÿáÖÓÿâÖÒÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿλµÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿÖÆÀÿÕÆÁÿÕÅÀÿÕÅÀÿÕÄ¿ÿÕÄ¿ÿÕľÿÕľÿÔþÿŽbTÿŽbTÿÿÿÿÿŽbTÿŽbTÿŽbTÿêâàÿëãàÿëâàÿêâßÿéáßÿêâÞÿêáÞÿéáÝÿ¾¦ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿäÚÖÿäÙÖÿäÙÕÿãØÖÿãØÕÿãØÕÿãØÔÿã×Ôÿã×ÓÿâÖÓÿâ×ÓÿáÖÓÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿλµÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿÖÇÁÿÖÆÀÿÕÆÁÿÕÅÀÿÕÅÀÿÕÄ¿ÿÕÄ¿ÿÕľÿÕľÿŽbTÿŽbTÿÿÿÿÿŽbTÿŽbTÿŽbTÿëãàÿêâàÿëãàÿêâàÿêâßÿéáßÿêâÞÿêáÞÿ½¤œÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿäÚ×ÿäÚÖÿäÙÖÿäÙÖÿãØÖÿãØÕÿãØÕÿãØÔÿã×Ôÿã×ÓÿâÖÓÿâ×ÓÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿλµÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿ×ÇÁÿÖÇÁÿÖÆÀÿÕÆÁÿÕÅÀÿÕÅÀÿÕÄ¿ÿÔÄ¿ÿÕľÿŽbTÿŽbTÿÿÿÿÿŽbTÿŽbTÿŽbTÿëãáÿëãàÿëâàÿëãàÿëâàÿêâßÿêáßÿéáÞÿ½¤›ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿåÛ×ÿäÚ×ÿåÚÖÿäÙÖÿäÙÕÿãØÖÿãØÕÿãØÕÿãØÔÿâ×Ôÿã×ÓÿâÖÓÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿλµÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿÖÇÂÿÖÆÁÿÖÇÁÿÖÆÀÿÕÆÁÿÕÅÀÿÕÅÀÿÕÄ¿ÿÕÄ¿ÿŽbTÿŽbTÿÿÿÿÿŽbTÿŽbTÿŽbTÿìäáÿëãáÿëãàÿêâàÿëãàÿêâàÿêâßÿêáßÿ¼¢™ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿåÚØÿåÛ×ÿäÚ×ÿåÚÖÿäÙÖÿäÙÕÿãØÖÿãØÕÿãØÕÿãØÔÿã×Ôÿã×ÓÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿλµÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¡}qÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿ×ÇÂÿÖÇÂÿÖÆÁÿÖÇÁÿÖÆÀÿÕÆÁÿÕÅÀÿÕÅÀÿÕÄ¿ÿŽbTÿŽbTÿÿÿÿÿŽbTÿŽbTÿŽbTÿìäâÿìäáÿëãáÿëãàÿêâàÿëãàÿêâàÿêâßÿ»¡™ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿλµÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿ×ÇÃÿ×ÇÂÿÖÆÂÿÖÆÁÿÖÇÁÿÖÆÀÿÕÆÁÿÕÅÀÿÕÅÀÿŽbTÿŽbTÿÿÿÿÿŽbTÿŽbTÿŽbTÿìåâÿìäâÿìäáÿëãáÿëãàÿêâàÿëãàÿêâàÿ¼¡˜ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿλµÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿ×ÈÃÿ×ÇÃÿ×ÇÂÿÖÆÂÿÖÆÁÿÖÆÁÿÖÆÀÿÕÆÁÿÕÅÀÿŽbTÿŽbTÿÿÿÿÿŽbTÿŽbTÿŽbTÿìåãÿìåâÿìäâÿìäáÿëãáÿëãàÿëãáÿëãàÿºŸ—ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿλµÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿ×ÈÂÿ×ÈÃÿ×ÇÂÿ×ÇÂÿÖÆÂÿ×ÇÁÿÖÆÁÿÖÆÀÿÕÆÁÿŽbTÿŽbTÿÿÿÿÿŽbTÿŽbTÿŽbTÿíæãÿìåãÿìåâÿìäâÿìäáÿëãáÿëãàÿëãáÿ¹Ÿ–ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿλµÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿ×ÉÃÿØÈÃÿ×ÈÃÿ×ÇÂÿ×ÇÂÿÖÆÁÿ×ÇÁÿÖÆÁÿÖÆÀÿŽbTÿŽbTÿÿÿÿÿŽbTÿŽbTÿŽbTÿíåãÿíæãÿìåãÿìåâÿìäâÿìäáÿëãáÿëãàÿ¹”ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿλµÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿØÉÃÿ×ÉÃÿ×ÈÃÿØÈÃÿ×ÇÃÿ×ÇÂÿÖÆÂÿÖÆÁÿÖÇÁÿŽbTÿŽbTÿÿÿÿÿŽbTÿŽbTÿŽbTÿîæãÿíåãÿíæãÿìåãÿìåâÿìäâÿìäáÿëãáÿ¸œ”ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿλµÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿØÉÄÿØÉÃÿ×ÉÃÿ×ÈÂÿØÈÃÿ×ÇÂÿ×ÇÂÿÖÆÂÿ×ÇÁÿŽbTÿŽbTÿÿÿÿÿŽbTÿŽbTÿŽbTÿíæäÿîæãÿíåãÿíæãÿìåãÿìåâÿìäâÿìäáÿ·œ’ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿλµÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿÙÉÄÿØÉÄÿØÉÃÿ×ÉÃÿ×ÈÂÿ×ÈÃÿ×ÇÂÿ×ÇÂÿÖÆÂÿŽbTÿŽbTÿÿÿÿÿŽbTÿŽbTÿŽbTÿîçäÿíæäÿîæãÿíåãÿíæãÿìåãÿìåâÿìäâÿ·š‘ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿλµÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÅ®§ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿØÊÅÿÙÉÄÿØÉÄÿØÉÃÿ×ÉÃÿØÈÃÿ×ÈÃÿ×ÇÂÿ×ÇÂÿŽbTÿŽbTÿÿÿÿÿŽbTÿŽbTÿŽbTÿîçåÿîçäÿíæäÿîæãÿíåãÿíæãÿìåãÿìåâÿ·™ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿλµÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿÙÊÅÿØÊÅÿÙÉÄÿØÉÄÿØÉÃÿ×ÉÃÿØÈÃÿ×ÈÃÿ×ÇÂÿŽbTÿŽbTÿÿÿÿÿŽbTÿŽbTÿŽbTÿîèåÿîçåÿîçäÿíæäÿîæãÿíåãÿíæãÿìåãÿ¶™ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿλµÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿÙËÆÿÙÊÅÿØÊÅÿÙÉÄÿØÉÄÿØÉÃÿ×ÉÃÿØÈÃÿ×ÈÃÿŽbTÿŽbTÿÿÿÿÿŽbTÿŽbTÿŽbTÿîèæÿîèåÿíçåÿîçäÿíæäÿîæãÿíåãÿíæãÿ´—ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿλµÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿÚÊÅÿÙËÆÿÙÊÅÿØÊÅÿÙÉÄÿØÉÄÿØÉÃÿ×ÉÃÿ×ÈÂÿŽbTÿŽbTÿÿÿÿÿŽbTÿŽbTÿŽbTÿïèåÿîèæÿîèåÿîçåÿîçäÿíæäÿîæãÿíåãÿ´—ŽÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿλµÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿÚËÆÿÚÊÅÿÙËÆÿÙÊÅÿØÊÅÿÙÉÄÿØÉÄÿØÉÃÿ×ÉÃÿŽbTÿŽbTÿÿÿÿÿŽbTÿŽbTÿŽbTÿïèæÿïèåÿîèæÿîèåÿîçåÿîçäÿíæäÿîæãÿ³•ŒÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿλµÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿÙËÆÿÚËÆÿÚÊÅÿÙËÆÿÙÊÅÿØÊÅÿÙÉÄÿØÉÄÿØÉÃÿŽbTÿŽbTÿÿÿÿÿŽbTÿŽbTÿŽbTÿðéæÿïèæÿïèåÿîèæÿîèåÿîçåÿîçäÿíæäÿ²”ŠÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿλµÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿÚËÇÿÙËÆÿÚËÆÿÚÊÅÿÙËÆÿÙÊÅÿØÊÅÿÙÉÄÿØÉÄÿŽbTÿŽbTÿÿÿÿÿŽbTÿŽbTÿŽbTÿïéçÿðéæÿïèæÿïèåÿîèæÿîèåÿîçåÿîçäÿ²”‹ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿλµÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿÚÌÇÿÚËÇÿÙËÆÿÚËÆÿÚÊÅÿÙÊÆÿÙÊÅÿØÊÅÿÙÉÄÿŽbTÿŽbTÿÿÿÿÿŽbTÿŽbTÿŽbTÿðêçÿïéçÿðéæÿïèæÿïèåÿîèæÿîèåÿîçåÿ²“‰ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿwB1ÿ‹ + ¡ÿàÔÑÿàÔÐÿßÓÐÿßÓÏÿ¥‚vÿ¥‚uÿ¥uÿ¥uÿ¥uÿ¥uÿ¥€uÿ¤€uÿ¥€uÿ¦„yÿÝÐËÿÜÏÊÿÝÎËÿÜÎÊÿл·ÿˆZKÿˆZKÿˆZKÿˆZKÿˆYKÿˆZKÿˆYKÿˆYKÿˆYKÿÚËÆÿÚÊÅÿÙÊÅÿÙÊÆÿÙÊÅÿÙÊÅÿˆYJÿ‡YJÿ‡YJÿ‡YJÿ‡YJÿ‡YJÿ‡YJÿ‡YJÿ‡XJÿÖÇÁÿÖÆÀÿÖÆÀÿÕÅÀÿÕÅÀÿ¡{oÿ¡{oÿ¡|oÿ¡{nÿ + ¢ÿ©¢ÿÁ©¡ÿÁ©¡ÿàÔÐÿáÕÑÿàÔÐÿàÔÐÿ¥‚vÿ¥‚vÿ¥‚vÿ¥‚uÿ¥uÿ¥uÿ¥uÿ¥uÿ¥€uÿ¦ƒxÿÞÐÌÿÝÐËÿÝÏËÿÜÏÊÿ̶±ÿˆZKÿˆZKÿˆZKÿˆZKÿˆZKÿˆZKÿˆYKÿˆZKÿˆYKÿÚÌÇÿÚËÆÿÚËÆÿÚÊÅÿÙÊÅÿÙÊÆÿ‡YJÿˆYJÿˆYJÿ‡YJÿ‡YJÿ‡YJÿ‡YJÿ‡YJÿ‡YJÿÖÇÂÿÖÆÁÿÖÇÁÿÖÆÀÿÕÆÁÿ¡|oÿ¡|oÿ¡{oÿ¡{oÿ¡{nÿ¡{nÿ + ¢ÿ©¢ÿÁ©¡ÿáÕÑÿàÔÐÿáÕÑÿàÔÐÿ¥‚vÿ¥‚vÿ¥‚vÿ¥‚uÿ¥‚uÿ¥uÿ¥uÿ¥uÿ¥uÿ¦‚wÿÞÑÌÿÞÐÌÿÝÐËÿÝÏËÿɵ®ÿˆZKÿˆZKÿˆZKÿˆZKÿˆZKÿˆZKÿˆZKÿˆYKÿˆZKÿÚÌÇÿÚÌÇÿÚËÆÿÚËÆÿÚÊÅÿÙÊÅÿˆYJÿ‡YJÿˆYJÿˆYJÿ‡YJÿ‡YJÿ‡YJÿ‡YJÿ‡YJÿ×ÇÂÿÖÇÂÿÖÆÁÿÖÇÁÿÖÆÀÿ¡|pÿ¡|oÿ¡|oÿ¡{oÿ¡{oÿ¡{nÿ¡{nÿ + ¢ÿª¢ÿÁ©¢ÿ©¢ÿâÖÒÿáÕÑÿáÕÑÿàÔÐÿ¦ƒwÿ¥‚vÿ¥‚vÿ¥‚vÿ¥‚vÿ¥‚uÿ¥‚uÿ¥uÿ¥uÿ¥uÿÞÑÍÿÞÐÍÿÞÑÌÿÞÐÌÿDZ©ÿˆZKÿˆZKÿˆZKÿˆZKÿˆZKÿˆZKÿˆZKÿˆZKÿˆZKÿÚÍÈÿÚÍÈÿÚÌÇÿÚÌÇÿÚËÆÿÚËÆÿˆYJÿˆYJÿˆYJÿ‡YJÿˆYJÿˆYJÿ‡YJÿ‡YJÿ‡YJÿØÈÃÿ×ÈÃÿ×ÇÂÿÖÇÂÿÖÆÁÿ¡|pÿ¡|oÿ¡|pÿ¡|oÿ¡|oÿ¡{oÿ¡{oÿ¡{nÿ¡{nÿ«¤ÿÔþÿÓþÿÔýÿÓýÿ¹ž–ÿ·›’ÿ·›’ÿ·›’ÿ·š’ÿ·›’ÿ¶š‘ÿ¶š‘ÿ¶™ÿ¾¤œÿÑÀºÿп¹ÿÑ¿¹ÿо¸ÿо¸ÿн·ÿн·ÿϽ·ÿŽbTÿŽbTÿÿÿÿÿŽbTÿŽbTÿŽbTÿåÛØÿæÛØÿåÚØÿåÛ×ÿäÚ×ÿäÚÖÿäÙÖÿäÙÕÿ«¤ÿ«¤ÿ«¤ÿ«£ÿ«£ÿª¢ÿª¢ÿª¢ÿª¢ÿáÖÒÿâÖÒÿáÕÑÿáÕÑÿ¥‚vÿ¦ƒwÿ¥‚vÿ¥‚vÿ¥‚vÿ¥‚vÿ¥‚uÿ¥‚uÿ¥uÿ©ˆ}ÿßÑÍÿÞÑÍÿÞÐÍÿÞÑÌÿϼµÿˆZKÿˆZKÿˆZKÿˆZKÿˆZKÿˆZKÿˆZKÿˆZKÿˆZKÿÛÍÈÿÛÌÇÿÚÍÈÿÚÌÇÿÚÌÇÿÚËÆÿˆYJÿˆYJÿˆYJÿˆYJÿ‡YJÿˆYJÿˆYJÿ‡YJÿ‡YJÿ×ÉÃÿØÈÃÿ×ÈÃÿ×ÇÂÿÖÇÂÿ¡|pÿ¡|pÿ¡|oÿ¡|pÿ¡|oÿ¡|oÿ¡{oÿ¡{oÿ¡|oÿDZ©ÿÔÄ¿ÿÔþÿÓþÿÔýÿ½£šÿ·›’ÿ·›’ÿ·›’ÿ·›’ÿ·š’ÿ·›’ÿ¶›’ÿ¶š‘ÿÀ¨ + ¢ÿª¢ÿª¢ÿ©¢ÿ©¢ÿáÕÑÿáÕÑÿàÔÐÿáÕÑÿ¥‚vÿ¥‚vÿ¥‚vÿ¥‚vÿ¥‚uÿ¥‚uÿ¥uÿ¥uÿ¥uÿ¤vÿÞÐÍÿÞÑÌÿÞÐÌÿÝÐËÿȲ¬ÿˆZKÿˆZKÿˆZKÿˆZKÿˆZKÿˆZKÿˆZKÿˆZKÿˆYKÿÚÍÈÿÚÌÇÿÚÌÇÿÚËÆÿÚËÆÿÚÊÅÿˆYJÿˆYJÿ‡YJÿˆYJÿˆYJÿ‡YJÿ‡YJÿ‡YJÿ‡YJÿ×ÈÃÿ×ÇÂÿÖÇÂÿÖÆÁÿÖÇÁÿ¡|oÿ¡|pÿ¡|oÿ¡|oÿ¡{oÿ¡{oÿ¡{nÿ¡{nÿ + ÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿо¸ÿÿÿÿÿÿÿÿÿÿÿÿÿŽbTÿŽbTÿŽbTÿŽbTÿŽbTÿcUÿ©ˆ~ÿ©ˆ}ÿ¨ˆ}ÿ¨ˆ}ÿ¨‡}ÿ©‡}ÿ©‡}ÿ©‡|ÿ©‡|ÿ¨‡|ÿ¨‡|ÿ¨†|ÿ©†|ÿ©†{ÿ©†{ÿ¨†{ÿ¨†{ÿ¨ +License: UNKNOWN + FIXME + +Files: data/doc/manual_nl.po +Copyright: én of alle kanalen te selecteren. In de Voorkomen " +License: UNKNOWN + FIXME + +Files: data/i18n/hydrogen.el.ts +Copyright: ΓΗΣ +License: UNKNOWN + FIXME + +Files: data/i18n/hydrogen.ja.ts +Copyright: ル + ルダーの表示 + ルトのエディターを設定 + ルトの出力ペアへ接続(&D) + ンスポートの on/off + ンスポートはJACKドライバーを使用時のみ動作します。 + ンスポートモード = Off + ンスポートモード = On + ント + ントの選択 + ー + ーです %1 + 現時点では使うことができないのです。 + 用(&A) + 送り +License: UNKNOWN + FIXME + +Files: data/img/gray/icon.icns +Copyright: ÿ‹þã«›ÿÈ•c³Jš)ôÚ@’Å!é5!*äOû´‹B8\00à\00€pàQø´œóŒo%£3—'” + ÿí¤>È͟c»¾T^HÉ­£TŸžÏhTVTlÉý?ã܏õOÚçڏl ÷ј©£²‚ŽïÝ{øï_ÜþÌ·²ýâ?û·Ž£ã—Kø¹þ?~Çþÿ—ÿýÿyú‹¿|‘ûõûÁ?ü/ÿë?i§žtâ3xAôwþƒ_úÛóð~—˜ÑR›4HZ%}`,D‹°ÈœÕ,Š/wN“lûځ¨Ð~Nžï¶ÿö¯~üô/ÿå¿~úWøÇíÁï/M}Ü¿)7yZÍÊ:„±:Žz˜»Ña!‡H{žƒ‘ÎìUì«_ùÂño(åƒOS´‡„Âã$\00†7ŸvbbêsüñÇ?~úÇÿ׿8þ÷ûÐnš’sê¸(âúìÜ08¤‹ [>Ò‘g’[âý7O÷¿Yó License: UNKNOWN FIXME diff -Nru hydrogen-0.9.6.1/debian/gbp.conf hydrogen-0.9.7/debian/gbp.conf --- hydrogen-0.9.6.1/debian/gbp.conf 2014-10-21 11:56:30.000000000 +0000 +++ hydrogen-0.9.7/debian/gbp.conf 2016-11-29 18:58:01.000000000 +0000 @@ -1,5 +1,3 @@ -# Configuration file for git-buildpackage and friends - [DEFAULT] pristine-tar = True -sign-tags = True +filter = */.git* diff -Nru hydrogen-0.9.6.1/debian/hydrogen.1 hydrogen-0.9.7/debian/hydrogen.1 --- hydrogen-0.9.6.1/debian/hydrogen.1 2014-10-21 11:56:30.000000000 +0000 +++ hydrogen-0.9.7/debian/hydrogen.1 1970-01-01 00:00:00.000000000 +0000 @@ -1,34 +0,0 @@ -.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.37.1. -.TH HYDROGEN "1" "March 2010" "hydrogen 0.9.4" "User Commands" -.SH NAME -hydrogen \- simple drum machine/step sequencer -.SH SYNOPSIS -.B hydrogen -[\fI-v\fR] [\fI-h\fR] \fI-s file\fR -.SH DESCRIPTION -Hydrogen 0.9.4 [Mar 22 2010] [http://www.hydrogen\-music.org] -Copyright 2002\-2008 Alessandro Cominu -.PP -Hydrogen comes with ABSOLUTELY NO WARRANTY -This is free software, and you are welcome to redistribute it -under certain conditions. See the file COPYING for details -.HP -\fB\-d\fR, \fB\-\-driver\fR AUDIODRIVER \- Use the selected audio driver (jack, alsa, oss) -.HP -\fB\-s\fR, \fB\-\-song\fR FILE \- Load a song (*.h2song) at startup -.TP -\fB\-\-lash\-no\-start\-server\fR \- If LASH server not running, don't start -it (LASH 0.5.3 and later). -.TP -\fB\-\-lash\-no\-autoresume\fR \- Tell LASH server not to assume I'm returning -from a crash. -.HP -\fB\-n\fR, \fB\-\-nosplash\fR \- Hide splash screen -.HP -\fB\-V[Level]\fR, \fB\-\-verbose\fR[=\fILevel\fR] \- Print a lot of debugging info -.IP -Level, if present, may be None, Error, Warning, Info, Debug or 0xHHHH -.HP -\fB\-v\fR, \fB\-\-version\fR \- Show version info -.HP -\fB\-h\fR, \fB\-\-help\fR \- Show this help message diff -Nru hydrogen-0.9.6.1/debian/hydrogen-data.install hydrogen-0.9.7/debian/hydrogen-data.install --- hydrogen-0.9.6.1/debian/hydrogen-data.install 1970-01-01 00:00:00.000000000 +0000 +++ hydrogen-0.9.7/debian/hydrogen-data.install 2016-11-29 18:58:01.000000000 +0000 @@ -0,0 +1,13 @@ +usr/share/hydrogen/data/img/*.bmp +usr/share/hydrogen/data/img/*.ico +usr/share/hydrogen/data/img/gray/*/* +usr/share/hydrogen/data/img/gray/*.png +usr/share/hydrogen/data/img/gray/*.icns +usr/share/hydrogen/data/img/gray/icon.svg +usr/share/hydrogen/data/demo_songs +usr/share/hydrogen/data/drumkits +usr/share/hydrogen/data/i18n +usr/share/hydrogen/data/xsd +usr/share/hydrogen/data/*.wav +usr/share/hydrogen/data/*.h2song +usr/share/hydrogen/data/*.conf diff -Nru hydrogen-0.9.6.1/debian/hydrogen-data.lintian-overrides hydrogen-0.9.7/debian/hydrogen-data.lintian-overrides --- hydrogen-0.9.6.1/debian/hydrogen-data.lintian-overrides 1970-01-01 00:00:00.000000000 +0000 +++ hydrogen-0.9.7/debian/hydrogen-data.lintian-overrides 2016-11-29 18:58:01.000000000 +0000 @@ -0,0 +1,3 @@ +# This entry not cause any problem. +# This script is used by upstream to regenerate translations +hydrogen-data: script-not-executable usr/share/hydrogen/data/i18n/updateTranslations.sh diff -Nru hydrogen-0.9.6.1/debian/hydrogen-doc.install hydrogen-0.9.7/debian/hydrogen-doc.install --- hydrogen-0.9.6.1/debian/hydrogen-doc.install 1970-01-01 00:00:00.000000000 +0000 +++ hydrogen-0.9.7/debian/hydrogen-doc.install 2016-11-29 18:58:01.000000000 +0000 @@ -0,0 +1,2 @@ +usr/share/hydrogen/data/doc +usr/share/hydrogen/data/new_tutorial diff -Nru hydrogen-0.9.6.1/debian/hydrogen.install hydrogen-0.9.7/debian/hydrogen.install --- hydrogen-0.9.6.1/debian/hydrogen.install 1970-01-01 00:00:00.000000000 +0000 +++ hydrogen-0.9.7/debian/hydrogen.install 2016-11-29 18:58:01.000000000 +0000 @@ -0,0 +1,5 @@ +usr/bin +usr/share/applications +usr/share/hydrogen/data/img/gray/h2-icon.svg +usr/share/appdata/hydrogen.appdata.xml +usr/share/man/man1/hydrogen.1 diff -Nru hydrogen-0.9.6.1/debian/hydrogen.links hydrogen-0.9.7/debian/hydrogen.links --- hydrogen-0.9.6.1/debian/hydrogen.links 1970-01-01 00:00:00.000000000 +0000 +++ hydrogen-0.9.7/debian/hydrogen.links 2016-11-29 18:58:01.000000000 +0000 @@ -0,0 +1,2 @@ +usr/share/hydrogen/data/demo_songs usr/share/doc/hydrogen/examples/demo_songs +usr/share/hydrogen/data/img/gray/h2-icon.svg usr/share/icons/hicolor/scalable/apps/h2-icon.svg diff -Nru hydrogen-0.9.6.1/debian/install hydrogen-0.9.7/debian/install --- hydrogen-0.9.6.1/debian/install 2014-10-21 11:56:30.000000000 +0000 +++ hydrogen-0.9.7/debian/install 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -data/img/gray/h2-icon.xpm usr/share/pixmaps diff -Nru hydrogen-0.9.6.1/debian/links hydrogen-0.9.7/debian/links --- hydrogen-0.9.6.1/debian/links 2014-10-21 11:56:30.000000000 +0000 +++ hydrogen-0.9.7/debian/links 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -usr/share/hydrogen/data/demo_songs usr/share/doc/hydrogen/examples/demo_songs diff -Nru hydrogen-0.9.6.1/debian/menu hydrogen-0.9.7/debian/menu --- hydrogen-0.9.6.1/debian/menu 2014-10-21 11:56:30.000000000 +0000 +++ hydrogen-0.9.7/debian/menu 1970-01-01 00:00:00.000000000 +0000 @@ -1,5 +0,0 @@ -?package(hydrogen):command="/usr/bin/hydrogen" \ -section="Applications/Sound" \ -needs="X11" \ -title="Hydrogen" \ -icon="/usr/share/pixmaps/h2-icon.xpm" diff -Nru hydrogen-0.9.6.1/debian/patches/09_portaudio_v2.patch hydrogen-0.9.7/debian/patches/09_portaudio_v2.patch --- hydrogen-0.9.6.1/debian/patches/09_portaudio_v2.patch 2014-10-21 11:56:30.000000000 +0000 +++ hydrogen-0.9.7/debian/patches/09_portaudio_v2.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,43 +0,0 @@ ---- - src/core/src/IO/PortAudioDriver.h | 3 +++ - src/core/src/IO/portaudio_driver.cpp | 10 ++++++++-- - 2 files changed, 11 insertions(+), 2 deletions(-) - ---- hydrogen.orig/src/core/src/IO/PortAudioDriver.h -+++ hydrogen/src/core/src/IO/PortAudioDriver.h -@@ -30,6 +30,9 @@ - - #ifdef H2CORE_HAVE_PORTAUDIO - -+#define PortAudioStream PaStream -+#define PaTimestamp PaTime -+ - #include - #include - ---- hydrogen.orig/src/core/src/IO/portaudio_driver.cpp -+++ hydrogen/src/core/src/IO/portaudio_driver.cpp -@@ -67,7 +67,13 @@ int PortAudioDriver::connect() - m_pOut_L = new float[ m_nBufferSize ]; - m_pOut_R = new float[ m_nBufferSize ]; - -- int err = Pa_Initialize(); -+ PaError err = Pa_Initialize(); -+ -+ typedef struct -+ { -+ float left_phase; -+ float right_phase; -+ } paTestData; - - - if ( err != paNoError ) { -@@ -83,7 +89,7 @@ int PortAudioDriver::connect() - m_nSampleRate, // sample rate - m_nBufferSize, // frames per buffer - portAudioCallback, /* specify our custom callback */ -- this ); /* pass our data through to callback */ -+ (void*)this ); /* pass our data through to callback */ - - - if ( err != paNoError ) { diff -Nru hydrogen-0.9.6.1/debian/patches/1000_portaudio_v2.patch hydrogen-0.9.7/debian/patches/1000_portaudio_v2.patch --- hydrogen-0.9.6.1/debian/patches/1000_portaudio_v2.patch 1970-01-01 00:00:00.000000000 +0000 +++ hydrogen-0.9.7/debian/patches/1000_portaudio_v2.patch 2016-11-29 18:58:01.000000000 +0000 @@ -0,0 +1,50 @@ +Description: ??? +Author: ??? +Forwarded: mauser@smoors.de +--- + src/core/src/IO/PortAudioDriver.h | 3 +++ + src/core/src/IO/portaudio_driver.cpp | 10 ++++++++-- + 2 files changed, 11 insertions(+), 2 deletions(-) + +Index: hydrogen/src/core/include/hydrogen/IO/PortAudioDriver.h +=================================================================== +--- hydrogen.orig/src/core/include/hydrogen/IO/PortAudioDriver.h ++++ hydrogen/src/core/include/hydrogen/IO/PortAudioDriver.h +@@ -30,6 +30,9 @@ + + #ifdef H2CORE_HAVE_PORTAUDIO + ++#define PortAudioStream PaStream ++#define PaTimestamp PaTime ++ + #include + #include + +Index: hydrogen/src/core/src/IO/portaudio_driver.cpp +=================================================================== +--- hydrogen.orig/src/core/src/IO/portaudio_driver.cpp ++++ hydrogen/src/core/src/IO/portaudio_driver.cpp +@@ -68,7 +68,13 @@ int PortAudioDriver::connect() + m_pOut_L = new float[ m_nBufferSize ]; + m_pOut_R = new float[ m_nBufferSize ]; + +- int err = Pa_Initialize(); ++ PaError err = Pa_Initialize(); ++ ++ typedef struct ++ { ++ float left_phase; ++ float right_phase; ++ } paTestData; + + + if ( err != paNoError ) { +@@ -84,7 +90,7 @@ int PortAudioDriver::connect() + m_nSampleRate, // sample rate + m_nBufferSize, // frames per buffer + portAudioCallback, /* specify our custom callback */ +- this ); /* pass our data through to callback */ ++ (void*)this ); /* pass our data through to callback */ + + + if ( err != paNoError ) { diff -Nru hydrogen-0.9.6.1/debian/patches/1001_rubberband_path.patch hydrogen-0.9.7/debian/patches/1001_rubberband_path.patch --- hydrogen-0.9.6.1/debian/patches/1001_rubberband_path.patch 2014-10-21 11:56:30.000000000 +0000 +++ hydrogen-0.9.7/debian/patches/1001_rubberband_path.patch 2016-11-29 18:58:01.000000000 +0000 @@ -1,10 +1,13 @@ Description: Set patch to rubberband CLI Author: Jonas Smedegaard Last-Update: 2011-03-17 +Forwarded: mauser@smoors.de --- data/hydrogen.default.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) +Index: hydrogen/data/hydrogen.default.conf +=================================================================== --- hydrogen.orig/data/hydrogen.default.conf +++ hydrogen/data/hydrogen.default.conf @@ -19,7 +19,7 @@ @@ -15,4 +18,4 @@ + /usr/bin/rubberband - + diff -Nru hydrogen-0.9.6.1/debian/patches/1005_name_shouldnt_repeat_genericname.patch hydrogen-0.9.7/debian/patches/1005_name_shouldnt_repeat_genericname.patch --- hydrogen-0.9.6.1/debian/patches/1005_name_shouldnt_repeat_genericname.patch 2014-10-21 11:56:30.000000000 +0000 +++ hydrogen-0.9.7/debian/patches/1005_name_shouldnt_repeat_genericname.patch 2016-11-29 18:58:01.000000000 +0000 @@ -11,28 +11,31 @@ Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=640983 Reviewed-by: Alessio Tregli Last-Update: 2012-01-27 -Forwarded: no +Forwarded: mauser@smoors.de --- linux/hydrogen.desktop | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) +Index: hydrogen/linux/hydrogen.desktop +=================================================================== --- hydrogen.orig/linux/hydrogen.desktop +++ hydrogen/linux/hydrogen.desktop -@@ -1,10 +1,5 @@ +@@ -1,11 +1,5 @@ [Desktop Entry] -Name=Hydrogen Drum Machine -Name[de]=Hydrogen Drumsequencer -Name[ru]=Драм-машина Hydrogen -Name[hu]=Hydrogen Dobgép -Name[tr]=Hydrogen Davul Makinası +-Name[fr]=Boîte à rythme Hydrogen - +Name=Hydrogen Comment=Create drum sequences Comment[de]=Schlagzeugsequenzen erstellen Comment[ru]=Создание партий ударных инструментов -@@ -16,15 +11,13 @@ GenericName[de]=Drumsequencer - GenericName[ru]=Драм-машина +@@ -19,16 +13,14 @@ GenericName[ru]=Драм-машина GenericName[tr]=Davul Makinası + GenericName[fr]=Boîte à rythme -Encoding=UTF-8 Version=1.0 @@ -40,6 +43,7 @@ Type=Application -Categories=Application;AudioVideo;Sound;Audio;Qt; +Categories=AudioVideo;Audio;Qt; + Keywords=audio;sound;jackd;sampler;drum; -MimeType=text/xml +MimeType=text/xml; diff -Nru hydrogen-0.9.6.1/debian/patches/1006_porttime.patch hydrogen-0.9.7/debian/patches/1006_porttime.patch --- hydrogen-0.9.6.1/debian/patches/1006_porttime.patch 2014-10-21 12:06:54.000000000 +0000 +++ hydrogen-0.9.7/debian/patches/1006_porttime.patch 2016-11-29 18:58:01.000000000 +0000 @@ -1,6 +1,6 @@ Description: Add missing -lporttime to LDFLAGS to avoid FTBFS. Author: Alessio Treglia -Forwarded: no +Forwarded: mauser@smoors.de --- src/core/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) @@ -9,10 +9,10 @@ =================================================================== --- hydrogen.orig/src/core/CMakeLists.txt +++ hydrogen/src/core/CMakeLists.txt -@@ -47,6 +47,7 @@ TARGET_LINK_LIBRARIES(hydrogen-core-${VE - ${RUBBERBAND_LIBRARIES} +@@ -50,6 +50,7 @@ TARGET_LINK_LIBRARIES(hydrogen-core-${VE ${ZLIB_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} + ${NSMSESSION_LIBRARIES} + -lporttime ) diff -Nru hydrogen-0.9.6.1/debian/patches/1008-desktop.patch hydrogen-0.9.7/debian/patches/1008-desktop.patch --- hydrogen-0.9.6.1/debian/patches/1008-desktop.patch 2014-10-21 12:44:28.000000000 +0000 +++ hydrogen-0.9.7/debian/patches/1008-desktop.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,16 +0,0 @@ -Description: Added "Keywords" to desktop file. -Author: Jaromír Mikeš -Forwarded: no - -Index: hydrogen/linux/hydrogen.desktop -=================================================================== ---- hydrogen.orig/linux/hydrogen.desktop -+++ hydrogen/linux/hydrogen.desktop -@@ -15,6 +15,7 @@ Version=1.0 - - Type=Application - Categories=AudioVideo;Audio;Qt; -+Keywords=audio;sound;jackd;sampler;drum; - - MimeType=text/xml; - diff -Nru hydrogen-0.9.6.1/debian/patches/1008-ftbfs-gcc-4.7.diff hydrogen-0.9.7/debian/patches/1008-ftbfs-gcc-4.7.diff --- hydrogen-0.9.6.1/debian/patches/1008-ftbfs-gcc-4.7.diff 1970-01-01 00:00:00.000000000 +0000 +++ hydrogen-0.9.7/debian/patches/1008-ftbfs-gcc-4.7.diff 2016-11-29 18:58:01.000000000 +0000 @@ -0,0 +1,46 @@ +Description: Fix missing #includes to avoid build failures with GCC 4.7 +Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=667203 +Author: Matthias Klose +Forwarded: mauser@smoors.de +--- + src/core/src/IO/portmidi_driver.cpp | 1 + + src/gui/src/MainForm.cpp | 1 + + src/gui/src/SongEditor/SongEditor.cpp | 1 + + 3 files changed, 3 insertions(+) + +Index: hydrogen/src/core/src/IO/portmidi_driver.cpp +=================================================================== +--- hydrogen.orig/src/core/src/IO/portmidi_driver.cpp ++++ hydrogen/src/core/src/IO/portmidi_driver.cpp +@@ -33,6 +33,7 @@ + #ifdef WIN32 + #include + #endif ++#include + + #ifdef H2CORE_HAVE_PORTMIDI + +Index: hydrogen/src/gui/src/SongEditor/SongEditor.cpp +=================================================================== +--- hydrogen.orig/src/gui/src/SongEditor/SongEditor.cpp ++++ hydrogen/src/gui/src/SongEditor/SongEditor.cpp +@@ -21,6 +21,7 @@ + */ + + #include ++#include + #include + #include + +Index: hydrogen/src/gui/src/MainForm.cpp +=================================================================== +--- hydrogen.orig/src/gui/src/MainForm.cpp ++++ hydrogen/src/gui/src/MainForm.cpp +@@ -20,6 +20,7 @@ + * + */ + ++#include + #include + #include + #include diff -Nru hydrogen-0.9.6.1/debian/patches/1010-spelling.patch hydrogen-0.9.7/debian/patches/1010-spelling.patch --- hydrogen-0.9.6.1/debian/patches/1010-spelling.patch 1970-01-01 00:00:00.000000000 +0000 +++ hydrogen-0.9.7/debian/patches/1010-spelling.patch 2016-11-29 18:58:01.000000000 +0000 @@ -0,0 +1,176 @@ +Description: Fix some spelling. +Author: Jaromír Mikeš +Forwarded: mauser@smoors.de + +Index: hydrogen/src/core/src/IO/jack_output.cpp +=================================================================== +--- hydrogen.orig/src/core/src/IO/jack_output.cpp ++++ hydrogen/src/core/src/IO/jack_output.cpp +@@ -152,13 +152,13 @@ int JackOutput::connect() + INFOLOG( "Could not connect so saved out-ports. Connecting to first pair of in-ports" ); + const char ** portnames = jack_get_ports ( client, NULL, NULL, JackPortIsInput ); + if ( !portnames || !portnames[0] || !portnames[1] ) { +- ERRORLOG( "Could't locate two Jack input port" ); ++ ERRORLOG( "Couldn't locate two Jack input ports" ); + Hydrogen::get_instance()->raiseError( Hydrogen::JACK_CANNOT_CONNECT_OUTPUT_PORT ); + return 2; + } + if ( jack_connect( client, jack_port_name( output_port_1 ), portnames[0] ) != 0 || + jack_connect( client, jack_port_name( output_port_2 ), portnames[1] ) != 0 ) { +- ERRORLOG( "Could't connect to first pair of Jack input ports" ); ++ ERRORLOG( "Couldn't connect to first pair of Jack input ports" ); + Hydrogen::get_instance()->raiseError( Hydrogen::JACK_CANNOT_CONNECT_OUTPUT_PORT ); + return 2; + } +Index: hydrogen/src/core/src/IO/midi_input.cpp +=================================================================== +--- hydrogen.orig/src/core/src/IO/midi_input.cpp ++++ hydrogen/src/core/src/IO/midi_input.cpp +@@ -254,7 +254,7 @@ void MidiInput::handleNoteOnMessage( con + else if(Preferences::get_instance()->m_bMidiFixedMapping ){ + pInstr = instrList->findMidiNote( nNote ); + if(pInstr == NULL) { +- ERRORLOG( QString( "Can't find correponding Intrument for note %1" ).arg( nNote )); ++ ERRORLOG( QString( "Can't find corresponding Instrument for note %1" ).arg( nNote )); + return; + } + nInstrument = instrList->index(pInstr); +Index: hydrogen/src/core/src/helpers/legacy.cpp +=================================================================== +--- hydrogen.orig/src/core/src/helpers/legacy.cpp ++++ hydrogen/src/core/src/helpers/legacy.cpp +@@ -106,7 +106,7 @@ Drumkit* Legacy::load_drumkit( const QSt + DEBUGLOG( "Using back compatibility code. filename node found" ); + QString sFilename = instrument_node.read_string( "filename", "" ); + if( sFilename.isEmpty() ) { +- ERRORLOG( "filename back compability node is empty" ); ++ ERRORLOG( "filename back compatibility node is empty" ); + } else { + + Sample* sample = new Sample( dk_path+"/"+sFilename ); +Index: hydrogen/src/core/src/helpers/xml.cpp +=================================================================== +--- hydrogen.orig/src/core/src/helpers/xml.cpp ++++ hydrogen/src/core/src/helpers/xml.cpp +@@ -159,7 +159,7 @@ bool XMLDoc::write( const QString& filep + { + QFile file( filepath ); + if ( !file.open( QIODevice::WriteOnly | QIODevice::Text | QIODevice::Truncate ) ) { +- ERRORLOG( QString( "Unable to open %1 for writting" ).arg( filepath ) ); ++ ERRORLOG( QString( "Unable to open %1 for writing" ).arg( filepath ) ); + return false; + } + QTextStream out( &file ); +Index: hydrogen/src/core/src/lilypond/lilypond.cpp +=================================================================== +--- hydrogen.orig/src/core/src/lilypond/lilypond.cpp ++++ hydrogen/src/core/src/lilypond/lilypond.cpp +@@ -30,7 +30,7 @@ + * It contains the notation style (states the position of notes), and for this + * it follows the "Guide to Standardized Drumset Notation" by Norman Weinberg. + * +- * Note that the GM-kit uses two unconventionnal intruments: "Stick" and ++ * Note that the GM-kit uses two unconventionnal instruments: "Stick" and + * "Hand Clap", so for those I did what I could and used the recommended + * triangle notehead to distinguish them for drum and cymbal notation. + */ +Index: hydrogen/src/core/src/midi_action.cpp +=================================================================== +--- hydrogen.orig/src/core/src/midi_action.cpp ++++ hydrogen/src/core/src/midi_action.cpp +@@ -87,7 +87,7 @@ bool setSong( int songnumber ) { + * in midi_input.cpp . + * + * Each action has two independ parameters. The two parameters are optional and +-* can be used to carry additional informations, which mean ++* can be used to carry additional information, which mean + * only something to this very Action. They can have totally different meanings for other Actions. + * Example: parameter1 is the Mixer strip and parameter 2 a multiplier for the volume change on this strip + * +Index: hydrogen/src/core/src/preferences.cpp +=================================================================== +--- hydrogen.orig/src/core/src/preferences.cpp ++++ hydrogen/src/core/src/preferences.cpp +@@ -102,7 +102,7 @@ Preferences::Preferences() + + char * ladpath = getenv( "LADSPA_PATH" ); // read the Environment variable LADSPA_PATH + if ( ladpath ) { +- INFOLOG( "Found LADSPA_PATH enviroment variable" ); ++ INFOLOG( "Found LADSPA_PATH environment variable" ); + QString sLadspaPath = QString::fromLocal8Bit(ladpath); + int pos; + while ( ( pos = sLadspaPath.indexOf( ":" ) ) != -1 ) { +Index: hydrogen/src/gui/src/ExportSongDialog.cpp +=================================================================== +--- hydrogen.orig/src/gui/src/ExportSongDialog.cpp ++++ hydrogen/src/gui/src/ExportSongDialog.cpp +@@ -66,7 +66,7 @@ ExportSongDialog::ExportSongDialog(QWidg + setWindowTitle( trUtf8( "Export song" ) ); + + exportTypeCombo->addItem(trUtf8("Export to a single track")); +- exportTypeCombo->addItem(trUtf8("Export to seperate tracks")); ++ exportTypeCombo->addItem(trUtf8("Export to separate tracks")); + exportTypeCombo->addItem(trUtf8("Both")); + + HydrogenApp::get_instance()->addEventListener( this ); +Index: hydrogen/src/gui/src/PatternEditor/DrumPatternEditor.cpp +=================================================================== +--- hydrogen.orig/src/gui/src/PatternEditor/DrumPatternEditor.cpp ++++ hydrogen/src/gui/src/PatternEditor/DrumPatternEditor.cpp +@@ -92,7 +92,7 @@ void DrumPatternEditor::updateEditor() + // check engine state + int state = engine->getState(); + if ( (state != STATE_READY) && (state != STATE_PLAYING) ) { +- ERRORLOG( "FIXME: skipping pattern editor update (state shoud be READY or PLAYING)" ); ++ ERRORLOG( "FIXME: skipping pattern editor update (state should be READY or PLAYING)" ); + return; + } + +Index: hydrogen/src/gui/src/SampleEditor/SampleEditor_UI.ui +=================================================================== +--- hydrogen.orig/src/gui/src/SampleEditor/SampleEditor_UI.ui ++++ hydrogen/src/gui/src/SampleEditor/SampleEditor_UI.ui +@@ -641,7 +641,7 @@ p, li { white-space: pre-wrap; } + <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 4 default processing options</p> + <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 5 equivalent to --no-lamination --window-short (may be good for drums)</p> + <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> +-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">more informations about you can find here:</p> ++<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">you can find more information here:</p> + <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://www.breakfastquay.com/rubberband/ "><span style=" text-decoration: underline; color:#0000ff;">http://www.breakfastquay.com/rubberband/ </span></a></p></body></html> + + +Index: hydrogen/src/gui/src/SoundLibrary/SoundLibraryPanel.cpp +=================================================================== +--- hydrogen.orig/src/gui/src/SoundLibrary/SoundLibraryPanel.cpp ++++ hydrogen/src/gui/src/SoundLibrary/SoundLibraryPanel.cpp +@@ -493,7 +493,7 @@ void SoundLibraryPanel::on_drumkitLoadAc + bool conditionalLoad = false; + bool hasNotes = false; + +- INFOLOG("Old kit has " + QString::number( oldCount ) + " intruments, new one has " + QString::number( newCount ) ); ++ INFOLOG("Old kit has " + QString::number( oldCount ) + " instruments, new one has " + QString::number( newCount ) ); + + if ( newCount < oldCount ) + { +@@ -520,7 +520,7 @@ void SoundLibraryPanel::on_drumkitLoadAc + QMessageBox msgBox; + msgBox.setWindowTitle("Hydrogen"); + msgBox.setIcon( QMessageBox::Warning ); +- msgBox.setText( tr( "The existing kit has %1 instruments but the new one only has %2.\nThe first %2 instruments will be replaced with the new intruments and will keep their notes, but some of the remaining instruments have notes.\nWould you like to keep or discard the remaining instruments and notes?\n").arg( QString::number( oldCount ),QString::number( newCount ) ) ); ++ msgBox.setText( tr( "The existing kit has %1 instruments but the new one only has %2.\nThe first %2 instruments will be replaced with the new instruments and will keep their notes, but some of the remaining instruments have notes.\nWould you like to keep or discard the remaining instruments and notes?\n").arg( QString::number( oldCount ),QString::number( newCount ) ) ); + + msgBox.setStandardButtons(QMessageBox::Save); + msgBox.setButtonText(QMessageBox::Save, trUtf8("Keep")); +Index: hydrogen/src/core/src/local_file_mgr.cpp +=================================================================== +--- hydrogen.orig/src/core/src/local_file_mgr.cpp ++++ hydrogen/src/core/src/local_file_mgr.cpp +@@ -1078,7 +1078,7 @@ bool LocalFileMng::checkTinyXMLCompatMod + return false; + } else { + _WARNINGLOG( QString("File '%1' is being read in " +- "TinyXML compatability mode") ++ "TinyXML compatibility mode") + .arg(filename) ); + return true; + } diff -Nru hydrogen-0.9.6.1/debian/patches/1015-man_path.patch hydrogen-0.9.7/debian/patches/1015-man_path.patch --- hydrogen-0.9.6.1/debian/patches/1015-man_path.patch 1970-01-01 00:00:00.000000000 +0000 +++ hydrogen-0.9.7/debian/patches/1015-man_path.patch 2016-11-29 18:58:01.000000000 +0000 @@ -0,0 +1,17 @@ +Description: Fix install path for man pages. +Author: Jaromír Mikeš +Forwarded: mauser@smoors.de + +Index: hydrogen/CMakeLists.txt +=================================================================== +--- hydrogen.orig/CMakeLists.txt ++++ hydrogen/CMakeLists.txt +@@ -358,7 +358,7 @@ ENDIF() + IF(NOT MINGW AND NOT APPLE) + INSTALL(FILES ${CMAKE_SOURCE_DIR}/linux/hydrogen.appdata.xml DESTINATION "${CMAKE_INSTALL_PREFIX}/share/appdata") + INSTALL(FILES ${CMAKE_SOURCE_DIR}/linux/hydrogen.desktop DESTINATION "${CMAKE_INSTALL_PREFIX}/share/applications") +- INSTALL(FILES ${CMAKE_SOURCE_DIR}/linux/hydrogen.1 DESTINATION "${CMAKE_INSTALL_PREFIX}/man/man1") ++ INSTALL(FILES ${CMAKE_SOURCE_DIR}/linux/hydrogen.1 DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man1") + ENDIF() + + # diff -Nru hydrogen-0.9.6.1/debian/patches/1020-cxx_flags.patch hydrogen-0.9.7/debian/patches/1020-cxx_flags.patch --- hydrogen-0.9.6.1/debian/patches/1020-cxx_flags.patch 1970-01-01 00:00:00.000000000 +0000 +++ hydrogen-0.9.7/debian/patches/1020-cxx_flags.patch 2016-11-29 18:58:01.000000000 +0000 @@ -0,0 +1,17 @@ +Description: Fix CXX Flags. +Author: Jaromír Mikeš +Forwarded: mauser@smoors.de + +Index: hydrogen/CMakeLists.txt +=================================================================== +--- hydrogen.orig/CMakeLists.txt ++++ hydrogen/CMakeLists.txt +@@ -106,7 +106,7 @@ ELSE() + ENDIF() + + #SET(CMAKE_CXX_FLAGS "-fno-implement-inlines -finline-small-functions -findirect-inlining -fpartial-inlining") +-SET(CMAKE_CXX_FLAGS "-O2 -std=gnu++11 -Wno-deprecated-register") ++SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2 -std=gnu++11 -Wno-deprecated-register") + IF (NOT CMAKE_CXX_COMPILER_ID MATCHES "Clang") + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-implement-inlines") + ENDIF() diff -Nru hydrogen-0.9.6.1/debian/patches/ftbfs-gcc-4.7.diff hydrogen-0.9.7/debian/patches/ftbfs-gcc-4.7.diff --- hydrogen-0.9.6.1/debian/patches/ftbfs-gcc-4.7.diff 2014-10-21 11:56:30.000000000 +0000 +++ hydrogen-0.9.7/debian/patches/ftbfs-gcc-4.7.diff 1970-01-01 00:00:00.000000000 +0000 @@ -1,40 +0,0 @@ -Description: Fix missing #includes to avoid build failures with GCC 4.7 -Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=667203 -Author: Matthias Klose -Forwarded: no ---- - src/core/src/IO/portmidi_driver.cpp | 1 + - src/gui/src/MainForm.cpp | 1 + - src/gui/src/SongEditor/SongEditor.cpp | 1 + - 3 files changed, 3 insertions(+) - ---- hydrogen.orig/src/core/src/IO/portmidi_driver.cpp -+++ hydrogen/src/core/src/IO/portmidi_driver.cpp -@@ -32,6 +32,7 @@ - #ifdef WIN32 - #include - #endif -+#include - - #ifdef H2CORE_HAVE_PORTMIDI - ---- hydrogen.orig/src/gui/src/SongEditor/SongEditor.cpp -+++ hydrogen/src/gui/src/SongEditor/SongEditor.cpp -@@ -21,6 +21,7 @@ - */ - - #include -+#include - #include - #include - ---- hydrogen.orig/src/gui/src/MainForm.cpp -+++ hydrogen/src/gui/src/MainForm.cpp -@@ -20,6 +20,7 @@ - * - */ - -+#include - #include - #include - #include diff -Nru hydrogen-0.9.6.1/debian/patches/series hydrogen-0.9.7/debian/patches/series --- hydrogen-0.9.6.1/debian/patches/series 2014-10-21 12:41:20.000000000 +0000 +++ hydrogen-0.9.7/debian/patches/series 2016-11-29 18:58:01.000000000 +0000 @@ -1,6 +1,8 @@ -09_portaudio_v2.patch +1000_portaudio_v2.patch 1001_rubberband_path.patch 1005_name_shouldnt_repeat_genericname.patch 1006_porttime.patch -ftbfs-gcc-4.7.diff -1008-desktop.patch +1008-ftbfs-gcc-4.7.diff +1010-spelling.patch +1015-man_path.patch +1020-cxx_flags.patch diff -Nru hydrogen-0.9.6.1/debian/README.source hydrogen-0.9.7/debian/README.source --- hydrogen-0.9.6.1/debian/README.source 2014-10-21 11:56:30.000000000 +0000 +++ hydrogen-0.9.7/debian/README.source 2016-11-29 18:58:01.000000000 +0000 @@ -9,3 +9,21 @@ -- Jonas Smedegaard Mon, 18 Feb 2013 12:55:37 +0100 + +control.in vs. control +---------------------- + +As is common with CDBS-based packaged, the debian/control file is +generated (though not automatically) from debian/control.in +Therefore, it is recommended to make any changes to the debian/control.in +file and then regenerate the real debian/control using something like the +following: + + debian/rules clean DEB_MAINTAINER_MODE=1 + +Please make sure to check the generated debian/control file (as someone might +have committed changes directly to this file without updating debian/control.in +- which might result in a loss of their changes) + + + -- Jaromír Mikeš Tue, 21 Oct 2014 14:02:46 +0200 diff -Nru hydrogen-0.9.6.1/debian/rules hydrogen-0.9.7/debian/rules --- hydrogen-0.9.6.1/debian/rules 2014-10-21 11:56:30.000000000 +0000 +++ hydrogen-0.9.7/debian/rules 2016-11-29 18:58:01.000000000 +0000 @@ -16,6 +16,8 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . +export DEB_BUILD_MAINT_OPTIONS = hardening=+all + include /usr/share/cdbs/1/rules/upstream-tarball.mk include /usr/share/cdbs/1/rules/utils.mk include /usr/share/cdbs/1/class/cmake.mk @@ -33,49 +35,12 @@ # according to upstream INSTALL.txt this avoids potential clash with Qt3 export QTDIR=/usr/share/qt4 -DEB_INSTALL_MANPAGES_hydrogen = debian/hydrogen.1 - -# Put aside upstream-shipped autogenerated files during build -upstreamtmpfiles = $(wildcard data/doc/*.html data/doc/*.docbook) -upstreamtmpfiles_ = $(patsubst %.upstream,%,$(wildcard data/doc/*.html.upstream data/doc/*.docbook.upstream)) -pre-build:: debian/stamp-upstreamtmpstuff -debian/stamp-upstreamtmpstuff: debian/stamp-copyright-check - for file in $(upstreamtmpfiles); do \ - [ ! -e $$file ] || [ -e $$file.upstream ] || mv $$file $$file.upstream; \ - done - touch $@ -clean:: - for file in $(upstreamtmpfiles_); do \ - [ ! -e $$file.upstream ] || mv -f $$file.upstream $$file; \ - done - rm -f debian/stamp-upstreamtmpstuff - common-build-indep:: debian/docs.stamp debian/docs.stamp: $(MAKE) -C data/doc touch $@ clean:: rm -f debian/docs.stamp - -imgstub = data/img/gray/h2-icon -common-build-arch:: - #inkscape -z -e$(imgstub).png -D -w32 -h32 --export-area-snap $(imgstub).svg - rsvg-convert -w 32 -h 32 -f png -o $(imgstub).png $(imgstub).svg - pngtopnm -alpha $(imgstub).png > $(imgstub).alpha.pgm - pngtopnm $(imgstub).png | ppmtoxpm -alphamask=$(imgstub).alpha.pgm > $(imgstub).xpm - rm -f $(imgstub).png $(imgstub).alpha.pgm -clean:: - rm -f $(imgstub).xpm - -# generate manpage based on --help of script itself -# TODO: make below rule work as part of main build -#common-post-build-arch:: debian/hydrogen.1 -debian/hydrogen.1: hydrogen - help2man --name="simple drum machine/step sequencer" --no-info --output=$@ $(DEB_SRCDIR)/$< -#clean:: -# rm -f debian/hydrogen.1 - -clean:: rm -rf CMakeCache.txt CMakeFiles/ try/ rm -f qt4.pyc version.cpp config.h @@ -89,9 +54,4 @@ CDBS_BUILD_DEPENDS += , libqt4-dev, libz-dev, pkg-config, libarchive-dev CDBS_BUILD_DEPENDS += , docbook-utils, poxml, xmlto, libxml2-utils CDBS_BUILD_DEPENDS += , libasound2-dev [linux-any] -CDBS_BUILD_DEPENDS += , libaudiofile-dev, libjack-dev, liblrdf-dev, libsndfile1-dev (>= 1.0.18), portaudio19-dev, libportmidi-dev - -# Needed for our packaging -# TODO: build-depend on help2man when solved using it with normal builds -#CDBS_BUILD_DEPENDS += , librsvg2-bin, netpbm, help2man -CDBS_BUILD_DEPENDS += , librsvg2-bin, netpbm +CDBS_BUILD_DEPENDS += , libaudiofile-dev, libjack-dev, liblrdf-dev, libsndfile1-dev (>= 1.0.18), portaudio19-dev, libportmidi-dev [linux-any], libpulse-dev diff -Nru hydrogen-0.9.6.1/DEVELOPERS hydrogen-0.9.7/DEVELOPERS --- hydrogen-0.9.6.1/DEVELOPERS 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/DEVELOPERS 2016-11-05 08:22:50.000000000 +0000 @@ -8,14 +8,17 @@ order to make a release has several, easy-to-forget steps. They are: 1. Set the version - a. Configure the correct verion in CMakeLists.txt + a. Configure the correct version in CMakeLists.txt b. Update linux/debian/changelog + c. Check if nothing has changed and update version and date in + linux/hydrogen.1 + 2. Remove the 'developer warning': in data/hydrogen.default.conf change hydrogen_preferences/showDevelWarning to "false". - 3. Commit your changes to trunk. + 3. Commit your changes. 4. Make a tarball of the release (gzipped). Use gzip instead of bzip2 for the folks on Windows. Tarballs should be named: @@ -82,18 +85,18 @@ 4. Use curly braces for all if statements, even one liners. We don't need to minimize the lines of code :) -Good: if(a){ +Good: if( a ){ doB(); } -Error prone: if(a) doB(); +Error prone: if( a ) doB(); - if(a) + if( a ) doB(); 5. Method names follow the camel case naming scheme, starting with a lowercase letter. - Example: void doB(int* myArgument); + Example: void doB( int * myArgument ); 6. Use speaking and self-explaining names for your variables (exception: loop-variables). We don't need to use short likes i,n,aux etc... diff -Nru hydrogen-0.9.6.1/.gitignore hydrogen-0.9.7/.gitignore --- hydrogen-0.9.6.1/.gitignore 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/.gitignore 2016-11-05 08:22:50.000000000 +0000 @@ -6,3 +6,6 @@ /libs/hydrogen/include/hydrogen/config.h /cmake_opts /hydrogen +*.cbp +*.layout +hydrogen.* diff -Nru hydrogen-0.9.6.1/linux/debian/changelog hydrogen-0.9.7/linux/debian/changelog --- hydrogen-0.9.6.1/linux/debian/changelog 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/linux/debian/changelog 2016-11-05 08:22:50.000000000 +0000 @@ -1,4 +1,19 @@ -hydrogen (0.9.6.1) unstable; urgency=low +hydrogen (0.9.7) unstable; urgency=low + * Release 0.9.7 + * The color of the SongEditors squares is now configurable + * Added support for midi cymbal choking + * Added support for midi hihat pressure control + * Added hihat pressure groups + * Added basic non session manager support + * Added instrument components + * Basic lilypond export + * New windows cross compilation script + * Support for soundlibrary images + * Configurable sample selection algorithm + * Support for soundlibraries with images + * Donation dialog + * New midi action: + * SELECT_PREV_PATTERN_RELATIVE * Release 0.9.6 * new build system (cmake) @@ -9,7 +24,6 @@ * some bug fixes * tabbed interface - * Version 0.9.5 * load playlists at startup * midi-learn works now with shift-click on some gui elements @@ -112,5 +126,5 @@ * new statusbar message to display longer messages than 30 chars setScrollStatusBarMessage( QString message, int ms ) - -- Sebastian Moors Mon, 09 Sep 2014 12:00:00 +0200 + -- Alessandro Cominu Mon, 15 Sep 2008 12:00:00 +0200 diff -Nru hydrogen-0.9.6.1/linux/debian/install hydrogen-0.9.7/linux/debian/install --- hydrogen-0.9.6.1/linux/debian/install 1970-01-01 00:00:00.000000000 +0000 +++ hydrogen-0.9.7/linux/debian/install 2016-11-05 08:22:50.000000000 +0000 @@ -0,0 +1 @@ +../data/img/gray/h2-icon.svg usr/share/pixmaps diff -Nru hydrogen-0.9.6.1/linux/debian/rules hydrogen-0.9.7/linux/debian/rules --- hydrogen-0.9.6.1/linux/debian/rules 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/linux/debian/rules 2016-11-05 08:22:50.000000000 +0000 @@ -31,7 +31,8 @@ dh_testdir # Add here commands to configure the package. mkdir ../builddebian - cd ../builddebian; cmake .. -DCMAKE_INSTALL_PREFIX:PATH=$(CURDIR)/debian/hydrogen/usr + cd ../builddebian; cmake .. -DCMAKE_INSTALL_PREFIX=/usr + touch configure-stamp @@ -63,7 +64,7 @@ mkdir -p $(CURDIR)/debian/hydrogen/usr/bin - cd ../builddebian; $(MAKE) install + cd ../builddebian; $(MAKE) install DESTDIR=../linux/debian/hydrogen #remove not used .git dirs find $(CURDIR)/debian/hydrogen/ -name '.git' | xargs rm -rf @@ -82,17 +83,19 @@ binary-arch: build install dh_testdir dh_testroot + dh_install dh_installchangelogs dh_installdocs dh_installman dh_link - dh_strip dh_compress dh_compress -X.py dh_fixperms + dh_strip #dh_python - dh_installdeb + dh_makeshlibs dh_shlibdeps + dh_installdeb dh_gencontrol dh_md5sums dh_builddeb diff -Nru hydrogen-0.9.6.1/linux/hydrogen.1 hydrogen-0.9.7/linux/hydrogen.1 --- hydrogen-0.9.6.1/linux/hydrogen.1 1970-01-01 00:00:00.000000000 +0000 +++ hydrogen-0.9.7/linux/hydrogen.1 2016-11-05 08:22:50.000000000 +0000 @@ -0,0 +1,70 @@ +.TH HYDROGEN "1" "November 2016" "Hydrogen 0.9.7" "User Commands" +.SH NAME +hydrogen \- a simple drum machine/step sequencer. +.SH SYNOPSIS +.PP +.B hydrogen +[\fI-v\fR] [\fI-h\fR] \fI-s file\fR +.SH DESCRIPTION +.PP +Hydrogen 0.9.7 [http://www.hydrogen\-music.org]. +Copyright 2002\-2008 Alessandro Cominu, +Copyright 2008\-2016 The hydrogen development team. +.PP +Hydrogen is an advanced drum machine for GNU/Linux. +It's main goal is to bring professional yet simple and intuitive pattern-based drum programming. +.PP +Hydrogen comes with ABSOLUTELY NO WARRANTY. +This is free software, and you are welcome to redistribute it +under certain conditions. See the file COPYING for details. +.SH OPTIONS +.HP +\fB\-P\fR, \fB\-\-data\fR PATH \- Use an alternate system data path +.HP +\fB\-d\fR, \fB\-\-driver\fR AUDIODRIVER \- Use the selected audio driver (jack, alsa, oss) +.HP +\fB\-s\fR, \fB\-\-song\fR FILE \- Load a song (*.h2song) at startup +.HP +\fB\-S\fR, \fB\-\-jacksessionid\fR ID \- Start a JackSessionHandler session +.HP +\fB\-p\fR, \fB\-\-playlist\fR FILE \- Load a playlist (*.h2playlist) at startup +.HP +\fB\-k\fR, \fB\-\-kit\fR drumkit_name - Load a drumkit at startup +.HP +\fB\-i\fR, \fB\-\-install\fR FILE - install a drumkit (*.h2drumkit) +.HP +\fB\-n\fR, \fB\-\-nosplash\fR \- Hide splash screen +.HP +\fB\-V[Level]\fR, \fB\-\-verbose\fR[=\fILevel\fR] \- Print a lot of debugging info +.IP +Level, if present, may be None, Error, Warning, Info, Debug or 0xHHHH +.HP +\fB\-v\fR, \fB\-\-version\fR \- Show version info +.HP +\fB\-h\fR, \fB\-\-help\fR \- Show this help message +.SH FILES +.TP +.B hydrogen.conf +.PP +Defaults and startup settings for Hydrogen. +.TP +.B data/* +.PP +Can contains user's data such as drumkits, patterns, playlists, songs, ... +.SH ENVIRONMENT +.PP +.B LADSPA_PATH +.HP +Path to LADSPA plugins. +.SH BUGS & FEATURES REQUEST +.PP +If you find any bug or if you would like to propose a new feature, please report it to https://github.com/hydrogen-music/hydrogen/issues +.SH AUTHORS +.PP +The hydrogen development team. See complete list at Hydrogen's "About" Dialog. You can contact them at . +.TP +Subscription to the mailing list can be done here : +.br +http://lists.sourceforge.net/lists/listinfo/hydrogen-devel . +.SH MISC +This manual page was written by Olivier Humbert as a part of the Hydrogen project. diff -Nru hydrogen-0.9.6.1/linux/hydrogen.appdata.xml hydrogen-0.9.7/linux/hydrogen.appdata.xml --- hydrogen-0.9.6.1/linux/hydrogen.appdata.xml 1970-01-01 00:00:00.000000000 +0000 +++ hydrogen-0.9.7/linux/hydrogen.appdata.xml 2016-11-05 08:22:50.000000000 +0000 @@ -0,0 +1,28 @@ + + + + hydrogen.desktop + GPL-2.0+ + GPL-2.0+ + Hydrogen + Hydrogen Drum Machine + Boîte à rythme Hydrogen + +

    Hydrogen is an advanced drum machine. It's main goal is to bring + professional yet simple and intuitive pattern-based drum + programming.

    +

    Hydrogen est une boîte à rythme. Son but est + d'apporter de facon simple et intuitive la programmation d'un + motif rythmique.

    +
    + + + http://www.hydrogen-music.org/hcms/sites/default/files/pictures/main-window.png + The main window showing the application in action + La fenêtre principale montrant l'application en action + + + http://www.hydrogen-music.org/ + hydrogen-devel@lists.sourceforge.net + hydrogen +
    diff -Nru hydrogen-0.9.6.1/linux/hydrogen.desktop hydrogen-0.9.7/linux/hydrogen.desktop --- hydrogen-0.9.6.1/linux/hydrogen.desktop 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/linux/hydrogen.desktop 2016-11-05 08:22:50.000000000 +0000 @@ -4,23 +4,27 @@ Name[ru]=Драм-машина Hydrogen Name[hu]=Hydrogen Dobgép Name[tr]=Hydrogen Davul Makinası +Name[fr]=Boîte à rythme Hydrogen Comment=Create drum sequences Comment[de]=Schlagzeugsequenzen erstellen Comment[ru]=Создание партий ударных инструментов Comment[hu]=Dobszekvenciákat lehet vele készíteni Comment[tr]=Davul partisyonu yaz +Comment[fr]=Créer des séquences rythmiques GenericName=Drum Machine GenericName[de]=Drumsequencer GenericName[ru]=Драм-машина GenericName[tr]=Davul Makinası +GenericName[fr]=Boîte à rythme Encoding=UTF-8 Version=1.0 Type=Application Categories=Application;AudioVideo;Sound;Audio;Qt; +Keywords=audio;sound;jackd;sampler;drum; MimeType=text/xml diff -Nru hydrogen-0.9.6.1/macos/build_dmg.sh hydrogen-0.9.7/macos/build_dmg.sh --- hydrogen-0.9.6.1/macos/build_dmg.sh 1970-01-01 00:00:00.000000000 +0000 +++ hydrogen-0.9.7/macos/build_dmg.sh 2016-11-05 08:22:50.000000000 +0000 @@ -0,0 +1,10 @@ +#!/bin/bash + +DMG_ROOT=`mktemp -d` + +cp -r "hydrogen.app" "$DMG_ROOT" +macdeployqt "$DMG_ROOT/hydrogen.app" +ln -s /Applications "$DMG_ROOT/Applications" +cp macos/DS_Store "$DMG_ROOT/.DS_Store" +hdiutil create -srcfolder "$DMG_ROOT" -volname "Hydrogen" -fs HFS+ -format UDZO hydrogen.dmg +rm -rf "$DMG_ROOT" Binary files /tmp/tmpktOUQO/kmAosGw3t1/hydrogen-0.9.6.1/macos/DS_Store and /tmp/tmpktOUQO/ALHtWJIToj/hydrogen-0.9.7/macos/DS_Store differ diff -Nru hydrogen-0.9.6.1/README.md hydrogen-0.9.7/README.md --- hydrogen-0.9.6.1/README.md 1970-01-01 00:00:00.000000000 +0000 +++ hydrogen-0.9.7/README.md 2016-11-05 08:22:50.000000000 +0000 @@ -0,0 +1,52 @@ +# Hydrogen Drum machine + +Hydrogen is an advanced drum machine for GNU/Linux, Mac and Windows. +It's main goal is to bring professional yet simple and intuitive pattern-based drum programming. + +###Features + +General + + * Very user-friendly, modular, fast and intuitive graphical interface based on QT 4. + * Sample-based stereo audio engine, with import of sound samples in wav, au and aiff formats + * Support of samples in compressed FLAC file. + + + +Sequencer and mixer + + * Pattern-based sequencer, with unlimited number of patterns and ability to chain patterns into a song. + * Up to 192 ticks per pattern with individual level per event and variable pattern length. + * Unlimited instrument tracks with volume, mute, solo, pan capabilities. + * Multi layer support for instruments (up to 16 samples for each instrument). + * Sample Editor, with basic cut and loop functions. + * Time-stretch and pitch functions via rubberband cli. + * Playlist with scripting support + * Advanced tab-tempo + * Director Window with a visual metronome and song position tags + * Timeline with variable tempo + * Import/Export single patterns + * Midi-Learn functionality for many gui elements + * Multiple patterns playing at once. + * Ability to import/export song files. + * Unique human velocity, human time, pitch and swing functions. + + +Other + +* JACK, ALSA, PortAudio and OSS audio drivers. +* ALSA MIDI and PortMidi input with assignable midi-in channel (1..16, ALL). +* Import/export of drumkits. +* Export song to wav, aiff, flac or file. +* Export song to midi file. +* Export song to LilyPond format. + +Installation: + See the INSTALL.txt file. + +HomePage + +http://www.hydrogen-music.org + + +Happy drumming! :^) diff -Nru hydrogen-0.9.6.1/README.txt hydrogen-0.9.7/README.txt --- hydrogen-0.9.6.1/README.txt 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/README.txt 2016-11-05 08:22:50.000000000 +0000 @@ -2,30 +2,40 @@ H Y D R O G E N Drum machine ------------------------------------------------------------------------------ -Hydrogen is an advanced drum machine for GNU/Linux and Mac. +Hydrogen is an advanced drum machine for GNU/Linux, Mac and Windows. It's main goal is to bring professional yet simple and intuitive pattern-based drum programming. Features: -__General__ + General * Very user-friendly, modular, fast and intuitive graphical interface based on QT 4. * Sample-based stereo audio engine, with import of sound samples in .wav, .au and .aiff formats. * Support of samples in compressed FLAC file. -__Sequencer and mixer__ + Sequencer and mixer * Pattern-based sequencer, with unlimited number of patterns and ability to chain patterns into a song. - * Up to 64 ticks per pattern with individual level per event and variable pattern length. - * 32 instrument tracks with volume, mute, solo, pan capabilities. + * Up to 192 ticks per pattern with individual level per event and variable pattern length. + * Unlimited instrument tracks with volume, mute, solo, pan capabilities. * Multi layer support for instruments (up to 16 samples for each instrument). + * Sample Editor, with basic cut and loop functions. + * Time-stretch and pitch functions via rubberband cli. + * Playlist with scripting support + * Advanced tab-tempo + * Director Window with a visual metronome and song position tags + * Timeline with variable tempo + * Import/Export single patterns + * Midi-Learn functionality for many gui elements + * Multiple patterns playing at once. * Ability to import/export song files. * Unique human velocity, human time, pitch and swing functions. - * Multiple patterns playing at once. -__Other__ + + Other * JACK, ALSA, PortAudio and OSS audio drivers. * ALSA MIDI and PortMidi input with assignable midi-in channel (1..16, ALL). * Import/export of drumkits. - * Export song to wav file. + * Export song to wav, aiff, flac or file. * Export song to midi file. + * Export song to LilyPond format. Installation: See the INSTALL.txt file. @@ -36,4 +46,3 @@ Happy drumming! :^) -Alessandro Cominu diff -Nru hydrogen-0.9.6.1/src/cli/main.cpp hydrogen-0.9.7/src/cli/main.cpp --- hydrogen-0.9.6.1/src/cli/main.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/cli/main.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -358,7 +358,7 @@ if ( ! outFilename.isEmpty() ) { pHydrogen->startExportSong ( outFilename, rate, bits ); cout << "Export Progress ... "; - bool ExportMode = true; + ExportMode = true; } // Interactive mode @@ -380,9 +380,11 @@ } break; case EVENT_PLAYLIST_LOADSONG: /* Load new song on MIDI event */ - if ( pPlaylist->loadSong ( event.value ) ) { - pSong = pHydrogen->getSong(); - show_playlist ( pHydrogen, pPlaylist->getActiveSongNumber() ); + if( pPlaylist ){ + if ( pPlaylist->loadSong ( event.value ) ) { + pSong = pHydrogen->getSong(); + show_playlist ( pHydrogen, pPlaylist->getActiveSongNumber() ); + } } break; case EVENT_NONE: /* Sleep if there is no more events */ diff -Nru hydrogen-0.9.6.1/src/core/CMakeLists.txt hydrogen-0.9.7/src/core/CMakeLists.txt --- hydrogen-0.9.6.1/src/core/CMakeLists.txt 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/core/CMakeLists.txt 2016-11-05 08:22:50.000000000 +0000 @@ -22,6 +22,8 @@ ${COREMIDI_INCLUDE_DIR} ${LASH_INCLUDE_DIR} ${LRDF_INCLUDE_DIR} + ${RAPTOR_INCLUDE_DIR} + ${NSMSESSION_INCLUDE_DIR} ${RUBBERBAND_INCLUDE_DIR} ) @@ -47,6 +49,7 @@ ${RUBBERBAND_LIBRARIES} ${ZLIB_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} + ${NSMSESSION_LIBRARIES} ) #SET_TARGET_PROPERTIES(hydrogen-core-${VERSION} PROPERTIES PUBLIC_HEADER "${hydrogen_INCLUDES}" ) diff -Nru hydrogen-0.9.6.1/src/core/include/hydrogen/basics/drumkit_component.h hydrogen-0.9.7/src/core/include/hydrogen/basics/drumkit_component.h --- hydrogen-0.9.6.1/src/core/include/hydrogen/basics/drumkit_component.h 1970-01-01 00:00:00.000000000 +0000 +++ hydrogen-0.9.7/src/core/include/hydrogen/basics/drumkit_component.h 2016-11-05 08:22:50.000000000 +0000 @@ -0,0 +1,166 @@ +/* + * Hydrogen + * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] + * + * http://www.hydrogen-music.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY, without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef H2C_DRUMKITCOMPONENT_H +#define H2C_DRUMKITCOMPONENT_H + +#include +#include + +#include + +namespace H2Core +{ + +class XMLNode; +class ADSR; +class Drumkit; +class InstrumentLayer; + +class DrumkitComponent : public H2Core::Object +{ + H2_OBJECT + public: + DrumkitComponent( const int id, const QString& name ); + DrumkitComponent( DrumkitComponent* other ); + ~DrumkitComponent(); + + void save_to( XMLNode* node ); + static DrumkitComponent* load_from( XMLNode* node, const QString& dk_path ); + + void load_from( DrumkitComponent* component, bool is_live = true ); + + void set_name( const QString& name ); + const QString& get_name() const; + + void set_id( const int id ); + int get_id() const; + + void set_volume( float volume ); + float get_volume() const; + + void set_muted( bool active ); + bool is_muted() const; + + void set_soloed( bool soloed ); + bool is_soloed() const; + + void set_peak_l( float val ); + float get_peak_l() const; + void set_peak_r( float val ); + float get_peak_r() const; + + void reset_outs( uint32_t nFrames ); + void set_outs( int nBufferPos, float valL, float valR ); + float get_out_L( int nBufferPos ); + float get_out_R( int nBufferPos ); + + private: + int __id; + QString __name; + float __volume; + bool __muted; + bool __soloed; + + float __peak_l; + float __peak_r; + + float *__out_L; + float *__out_R; +}; + +// DEFINITIONS + +inline void DrumkitComponent::set_name( const QString& name ) +{ + __name = name; +} + +inline const QString& DrumkitComponent::get_name() const +{ + return __name; +} + +inline void DrumkitComponent::set_id( const int id ) +{ + __id = id; +} + +inline int DrumkitComponent::get_id() const +{ + return __id; +} + +inline void DrumkitComponent::set_volume( float volume ) +{ + __volume = volume; +} + +inline float DrumkitComponent::get_volume() const +{ + return __volume; +} + +inline void DrumkitComponent::set_muted( bool muted ) +{ + __muted = muted; +} + +inline bool DrumkitComponent::is_muted() const +{ + return __muted; +} + +inline void DrumkitComponent::set_soloed( bool soloed ) +{ + __soloed = soloed; +} + +inline bool DrumkitComponent::is_soloed() const +{ + return __soloed; +} + +inline void DrumkitComponent::set_peak_l( float val ) +{ + __peak_l = val; +} + +inline float DrumkitComponent::get_peak_l() const +{ + return __peak_l; +} + +inline void DrumkitComponent::set_peak_r( float val ) +{ + __peak_r = val; +} + +inline float DrumkitComponent::get_peak_r() const +{ + return __peak_r; +} + +}; + + +#endif diff -Nru hydrogen-0.9.6.1/src/core/include/hydrogen/basics/drumkit.h hydrogen-0.9.7/src/core/include/hydrogen/basics/drumkit.h --- hydrogen-0.9.6.1/src/core/include/hydrogen/basics/drumkit.h 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/core/include/hydrogen/basics/drumkit.h 2016-11-05 08:22:50.000000000 +0000 @@ -30,6 +30,7 @@ class XMLNode; class InstrumentList; +class DrumkitComponent; /** * Drumkit info @@ -71,6 +72,15 @@ * unload the instrument samples */ void unload_samples(); + + /** + * check if a user drumkit with the given name + * already exists + * \param dk_path Drumkit path + * \return true on success + */ + static bool user_drumkit_exists( const QString& dk_path ); + /** * save a drumkit, xml file and samples * \param overwrite allows to write over existing drumkit files @@ -89,9 +99,10 @@ * save a drumkit into an xml file * \param dk_path the path to save the drumkit into * \param overwrite allows to write over existing drumkit file + * \param component_id to chose the component to save or -1 for all * \return true on success */ - bool save_file( const QString& dk_path, bool overwrite=false ); + bool save_file( const QString& dk_path, bool overwrite=false, int component_id=-1 ); /** * save a drumkit instruments samples into a directory * \param dk_dir the directory to save the samples into @@ -100,16 +111,25 @@ */ bool save_samples( const QString& dk_dir, bool overwrite=false ); /** + * save the drumkit image into the new directory + * \param dk_dir the directory to save the image into + * \param overwrite allows to write over existing drumkit image file + * \param orig_dir holds the directory we are copying image from + * \return true on success + */ + bool save_image( const QString& dk_dir, bool overwrite=false ); + /** * save a drumkit using given parameters and an instrument list * \param name the name of the drumkit * \param author the author of the drumkit * \param info the info of the drumkit * \param license the license of the drumkit + * \param image the image filename (with full path) of the drumkit * \þaram instruments the instruments to be saved within the drumkit * \oaram overwrite allows to write over existing drumkit files * \return true on success */ - static bool save( const QString& name, const QString& author, const QString& info, const QString& license, InstrumentList* instruments, bool overwrite=false ); + static bool save( const QString& name, const QString& author, const QString& info, const QString& license, const QString& image, const QString& imageLicense, InstrumentList* instruments, std::vector* components, bool overwrite=false ); /** * install a drumkit from a filename * \param path the path to the new drumkit archive @@ -148,30 +168,45 @@ void set_license( const QString& license ); /** __license accessor */ const QString& get_license() const; + /** __image setter */ + void set_image( const QString& image ); + /** __image accessor */ + const QString& get_image() const; + /** __imageLicense setter */ + void set_image_license( const QString& imageLicense ); + /** __imageLicense accessor */ + const QString& get_image_license() const; /** return true if the samples are loaded */ const bool samples_loaded() const; void dump(); + std::vector* get_components(); + void set_components( std::vector* components ); + private: QString __path; ///< absolute drumkit path QString __name; ///< drumkit name QString __author; ///< drumkit author QString __info; ///< drumkit free text QString __license; ///< drumkit license description + QString __image; ///< drumkit image filename + QString __imageLicense; ///< drumkit image license + bool __samples_loaded; ///< true if the instrument samples are loaded InstrumentList* __instruments; ///< the list of instruments /* * save the drumkit within the given XMLNode * \param node the XMLNode to feed */ - void save_to( XMLNode* node ); + void save_to( XMLNode* node, int component_id=-1 ); /** * load a drumkit from an XMLNode * \param node the XMLDode to read from * \param dk_path the directory holding the drumkit data */ static Drumkit* load_from( XMLNode* node, const QString& dk_path ); + std::vector* __components; ///< list of drumkit component }; // DEFINITIONS @@ -231,11 +266,36 @@ return __license; } +inline void Drumkit::set_image( const QString& image ) +{ + __image = image; +} + +inline const QString& Drumkit::get_image() const +{ + return __image; +} + +inline void Drumkit::set_image_license( const QString& imageLicense ) +{ + __imageLicense = imageLicense; +} + +inline const QString& Drumkit::get_image_license() const +{ + return __imageLicense; +} + inline const bool Drumkit::samples_loaded() const { return __samples_loaded; } +inline std::vector* Drumkit::get_components() +{ + return __components; +} + }; #endif // H2C_DRUMKIT_H diff -Nru hydrogen-0.9.6.1/src/core/include/hydrogen/basics/instrument_component.h hydrogen-0.9.7/src/core/include/hydrogen/basics/instrument_component.h --- hydrogen-0.9.6.1/src/core/include/hydrogen/basics/instrument_component.h 1970-01-01 00:00:00.000000000 +0000 +++ hydrogen-0.9.7/src/core/include/hydrogen/basics/instrument_component.h 2016-11-05 08:22:50.000000000 +0000 @@ -0,0 +1,121 @@ +/* + * Hydrogen + * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] + * + * http://www.hydrogen-music.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY, without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef H2C_INSTRUMENTCOMPONENT_H +#define H2C_INSTRUMENTCOMPONENT_H + +#include + +#include + +namespace H2Core +{ + +class XMLNode; +class ADSR; +class Drumkit; +class InstrumentLayer; +class DrumkitComponent; + +class InstrumentComponent : public H2Core::Object +{ + H2_OBJECT + public: + //InstrumentComponent( const int id, const QString& name ); + InstrumentComponent( int related_drumkit_componentID ); + InstrumentComponent( InstrumentComponent* other ); + ~InstrumentComponent(); + + void save_to( XMLNode* node, int component_id ); + static InstrumentComponent* load_from( XMLNode* node, const QString& dk_path ); + + InstrumentLayer* operator[]( int idx ); + InstrumentLayer* get_layer( int idx ); + void set_layer( InstrumentLayer* layer, int idx ); + + void set_drumkit_componentID( int related_drumkit_componentID ); + int get_drumkit_componentID(); + + //void set_name( const QString& name ); + //const QString& get_name() const; + + //void set_id( const int id ); + //int get_id() const; + + void set_gain( float gain ); + float get_gain() const; + + //void set_volume( float volume ); + //float get_volume() const; + + private: + int __related_drumkit_componentID; + //QString __name; + float __gain; + //float __volume; + InstrumentLayer* __layers[MAX_LAYERS]; +}; + +// DEFINITIONS + +inline void InstrumentComponent::set_drumkit_componentID( int related_drumkit_componentID ) +{ + __related_drumkit_componentID = related_drumkit_componentID; +} + +inline int InstrumentComponent::get_drumkit_componentID() +{ + return __related_drumkit_componentID; +} + +inline void InstrumentComponent::set_gain( float gain ) +{ + __gain = gain; +} + +inline float InstrumentComponent::get_gain() const +{ + return __gain; +} + +inline InstrumentLayer* InstrumentComponent::operator[]( int idx ) +{ + assert( idx>=0 && idx =0 && idx =0 && idx * get_components(); + InstrumentComponent* get_component( int DrumkitComponentID ); + + void set_apply_velocity( bool apply_velocity ); + bool get_apply_velocity() const; + private: int __id; ///< instrument id, should be unique @@ -261,13 +276,20 @@ int __midi_out_note; ///< midi out note int __midi_out_channel; ///< midi out channel bool __stop_notes; ///< will the note automatically generate a note off after beeing on + SampleSelectionAlgo __sample_selection_alg; ///< how Hydrogen will chose the sample to use bool __active; ///< is the instrument active? bool __soloed; ///< is the instrument in solo mode? bool __muted; ///< is the instrument muted? int __mute_group; ///< mute group of the instrument int __queued; ///< count the number of notes queued within Sampler::__playing_notes_queue or std::priority_queue m_songNoteQueue float __fx_level[MAX_FX]; ///< Ladspa FX level array - InstrumentLayer* __layers[MAX_LAYERS]; ///< InstrumentLayer array + int __hihat_grp; ///< the instrument is part of a hihat + int __lower_cc; ///< lower cc level + int __higher_cc; ///< higher cc level + bool __is_preview_instrument; ///< is the instrument an hydrogen preview instrument? + bool __is_metronome_instrument; ///< is the instrument an metronome instrument? + std::vector* __components; ///< InstrumentLayer array + bool __apply_velocity; ///< change the sample gain based on velocity }; // DEFINITIONS @@ -506,22 +528,44 @@ return __stop_notes; } -inline InstrumentLayer* Instrument::operator[]( int idx ) +inline void Instrument::set_sample_selection_alg( SampleSelectionAlgo selected_algo) +{ + __sample_selection_alg = selected_algo; +} + +inline Instrument::SampleSelectionAlgo Instrument::sample_selection_alg() const +{ + return __sample_selection_alg; +} + +inline void Instrument::set_hihat_grp( int hihat_grp ) +{ + __hihat_grp = hihat_grp; +} + +inline int Instrument::get_hihat_grp() const +{ + return __hihat_grp; +} + +inline void Instrument::set_lower_cc( int message ) { - assert( idx>=0 && idx =0 && idx =0 && idx * Instrument::get_components() +{ + return __components; +} + +inline void Instrument::set_apply_velocity( bool apply_velocity ) +{ + __apply_velocity = apply_velocity; +} + +inline bool Instrument::get_apply_velocity() const +{ + return __apply_velocity; +} + + }; diff -Nru hydrogen-0.9.6.1/src/core/include/hydrogen/basics/instrument_list.h hydrogen-0.9.7/src/core/include/hydrogen/basics/instrument_list.h --- hydrogen-0.9.6.1/src/core/include/hydrogen/basics/instrument_list.h 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/core/include/hydrogen/basics/instrument_list.h 2016-11-05 08:22:50.000000000 +0000 @@ -109,6 +109,12 @@ */ Instrument* find( const QString& name ); /** + * find an intrument which play the given midi note + * \param note the Midi note of the instrument to find + * \return 0 if not found + */ + Instrument* findMidiNote( const int note ); + /** * swap the instruments of two different indexes * \param idx_a the first index * \param idx_b the second index @@ -133,7 +139,7 @@ * save the intrument list within the given XMLNode * \param node the XMLNode to feed */ - void save_to( XMLNode* node ); + void save_to( XMLNode* node, int component_id ); /** * load an instrument list from an XMLNode * \param node the XMLDode to read from diff -Nru hydrogen-0.9.6.1/src/core/include/hydrogen/basics/note.h hydrogen-0.9.7/src/core/include/hydrogen/basics/note.h --- hydrogen-0.9.6.1/src/core/include/hydrogen/basics/note.h 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/core/include/hydrogen/basics/note.h 2016-11-05 08:22:50.000000000 +0000 @@ -52,6 +52,11 @@ class Instrument; class InstrumentList; +struct SelectedLayerInfo { + int SelectedLayer; ///< selected layer during layer selection + float SamplePosition; ///< place marker for overlapping process() cycles +}; + /** * A note plays an associated instrument with a velocity left and right pan */ @@ -117,6 +122,13 @@ /** __instrument_id accessor */ int get_instrument_id() const; /** + * __specific_compo_id setter + * \param value the new value + */ + void set_specific_compo_id( int value ); + /** __specific_compo_id accessor */ + int get_specific_compo_id() const; + /** * __position setter * \param value the new value */ @@ -188,8 +200,12 @@ void set_just_recorded( bool value ); /** __just_recorder accessor */ bool get_just_recorded() const; - /** __sample_position accessor */ - float get_sample_position() const; + + /* + * selected sample + * */ + SelectedLayerInfo* get_layer_selected( int CompoID ); + /** * __humanize_delay setter * \param value the new value @@ -249,12 +265,6 @@ /** call get value on adsr */ //float get_adsr_value(float v) const { return __adsr->get_value( v ); } - /** - * update sample_position with increment - * \param incr the value to add to current sample position - */ - float update_sample_position( float incr ); - /** return true if instrument, key and octave matches with internal * \param instrument the instrument to match with __instrument * \param key the key to match with __key @@ -272,6 +282,7 @@ private: Instrument* __instrument; ///< the instrument to be played by this note int __instrument_id; ///< the id of the instrument played by this note + int __specific_compo_id; ///< play a specific component, -1 if playing all int __position; ///< note position inside the pattern float __velocity; ///< velocity (intensity) of the note [0;1] float __pan_l; ///< pan of the note (left volume) [0;0.5] @@ -285,7 +296,7 @@ float __cut_off; ///< filter cutoff [0;1] float __resonance; ///< filter resonant frequency [0;1] int __humanize_delay; ///< used in "humanize" function - float __sample_position; ///< place marker for overlapping process() cycles + std::map< int, SelectedLayerInfo* > __layers_selected; float __bpfb_l; ///< left band pass filter buffer float __bpfb_r; ///< right band pass filter buffer float __lpfb_l; ///< left low pass filter buffer @@ -324,6 +335,16 @@ return __instrument_id; } +inline void Note::set_specific_compo_id( int value ) +{ + __specific_compo_id = value; +} + +inline int Note::get_specific_compo_id() const +{ + return __specific_compo_id; +} + inline void Note::set_position( int value ) { __position = value; @@ -409,9 +430,9 @@ return __just_recorded; } -inline float Note::get_sample_position() const +inline SelectedLayerInfo* Note::get_layer_selected( int CompoID ) { - return __sample_position; + return __layers_selected[ CompoID ]; } inline void Note::set_humanize_delay( int value ) @@ -500,14 +521,6 @@ __midi_msg = msg; } - - -inline float Note::update_sample_position( float incr ) -{ - __sample_position += incr; - return __sample_position; -} - inline bool Note::match( Instrument* instrument, Key key, Octave octave ) const { return ( ( __instrument==instrument ) && ( __key==key ) && ( __octave==octave ) ); diff -Nru hydrogen-0.9.6.1/src/core/include/hydrogen/basics/pattern_list.h hydrogen-0.9.7/src/core/include/hydrogen/basics/pattern_list.h --- hydrogen-0.9.6.1/src/core/include/hydrogen/basics/pattern_list.h 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/core/include/hydrogen/basics/pattern_list.h 2016-11-05 08:22:50.000000000 +0000 @@ -78,6 +78,7 @@ * \param idx the index to get the pattern from */ Pattern* get( int idx ); + const Pattern* get( int idx ) const; /** * remove the pattern at a given index, does not delete it * \param idx the index diff -Nru hydrogen-0.9.6.1/src/core/include/hydrogen/basics/sample.h hydrogen-0.9.7/src/core/include/hydrogen/basics/sample.h --- hydrogen-0.9.6.1/src/core/include/hydrogen/basics/sample.h 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/core/include/hydrogen/basics/sample.h 2016-11-05 08:22:50.000000000 +0000 @@ -295,12 +295,6 @@ return __filepath.section( "/", -1 ); } -inline void Sample::set_filename( const QString& filename ) -{ - __filepath.chop( __filepath.section( "/", -1 ).length()); - __filepath.append( filename ); -} - inline void Sample::Sample::set_frames( int frames ) { __frames = frames; diff -Nru hydrogen-0.9.6.1/src/core/include/hydrogen/basics/song.h hydrogen-0.9.7/src/core/include/hydrogen/basics/song.h --- hydrogen-0.9.6.1/src/core/include/hydrogen/basics/song.h 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/core/include/hydrogen/basics/song.h 2016-11-05 08:22:50.000000000 +0000 @@ -43,6 +43,7 @@ class InstrumentList; class Pattern; class Song; +class DrumkitComponent; class PatternList; /** @@ -61,7 +62,7 @@ bool __is_muted; unsigned __resolution; ///< Resolution of the song (number of ticks per quarter) float __bpm; ///< Beats per minute - bool __is_modified; + QString __name; ///< song name QString __author; ///< author of the song QString __license; ///< license of the song @@ -111,6 +112,11 @@ std::vector* get_pattern_group_vector() { return __pattern_group_sequence; } + + const std::vector* get_pattern_group_vector() const { + return __pattern_group_sequence; + } + void set_pattern_group_vector( std::vector* vect ) { __pattern_group_sequence = vect; } @@ -184,23 +190,47 @@ __song_mode = mode; } + void set_is_modified(bool is_modified); + + bool get_is_modified(){ + return __is_modified; + } + + std::vector* get_components() { + return __components; + } + + DrumkitComponent* get_component( int ID ); + void readTempPatternList( QString filename ); + int get_latest_round_robin( float start_velocity ) { + if ( __latest_round_robins.find(start_velocity) == __latest_round_robins.end() ) + return 0; + else + return __latest_round_robins[start_velocity]; + } + void set_latest_round_robin( float start_velocity, int latest_round_robin ) { + __latest_round_robins[start_velocity] = latest_round_robin; + } - private: - float __volume; ///< volume of the song (0.0..1.0) - float __metronome_volume; ///< Metronome volume - QString __notes; - PatternList* __pattern_list; ///< Pattern list - std::vector* __pattern_group_sequence; ///< Sequence of pattern groups - InstrumentList* __instrument_list; ///< Instrument list - QString __filename; - bool __is_loop_enabled; - float __humanize_time_value; - float __humanize_velocity_value; - float __swing_factor; - SongMode __song_mode; + private: + float __volume; ///< volume of the song (0.0..1.0) + float __metronome_volume; ///< Metronome volume + QString __notes; + PatternList* __pattern_list; ///< Pattern list + std::vector* __pattern_group_sequence; ///< Sequence of pattern groups + InstrumentList* __instrument_list; ///< Instrument list + std::vector* __components; ///< list of drumkit component + QString __filename; + bool __is_loop_enabled; + float __humanize_time_value; + float __humanize_velocity_value; + float __swing_factor; + bool __is_modified; + std::map< float, int> __latest_round_robins; + SongMode __song_mode; }; diff -Nru hydrogen-0.9.6.1/src/core/include/hydrogen/config.h.in hydrogen-0.9.7/src/core/include/hydrogen/config.h.in --- hydrogen-0.9.6.1/src/core/include/hydrogen/config.h.in 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/core/include/hydrogen/config.h.in 2016-11-05 08:22:50.000000000 +0000 @@ -22,9 +22,16 @@ #define H2CORE_GIT_REVISION @GIT_REVISION@ #define H2CORE_VERSION "@DISPLAY_VERSION@" +#define MAX_INSTRUMENTS @MAX_INSTRUMENTS@ +#define MAX_COMPONENTS @MAX_COMPONENTS@ +#define MAX_NOTES @MAX_NOTES@ +#define MAX_LAYERS @MAX_LAYERS@ +#define MAX_FX @MAX_FX@ +#define MAX_BUFFER_SIZE @MAX_BUFFER_SIZE@ #cmakedefine HAVE_SSCANF #cmakedefine HAVE_RTCLOCK +#cmakedefine HAVE_JACK_PORT_RENAME #ifndef H2CORE_HAVE_DEBUG #cmakedefine H2CORE_HAVE_DEBUG @@ -53,6 +60,9 @@ #ifndef H2CORE_HAVE_JACKSESSION #cmakedefine H2CORE_HAVE_JACKSESSION #endif +#ifndef H2CORE_HAVE_NSMSESSION +#cmakedefine H2CORE_HAVE_NSMSESSION +#endif #ifndef H2CORE_HAVE_PORTAUDIO #cmakedefine H2CORE_HAVE_PORTAUDIO #endif diff -Nru hydrogen-0.9.6.1/src/core/include/hydrogen/event_queue.h hydrogen-0.9.7/src/core/include/hydrogen/event_queue.h --- hydrogen-0.9.6.1/src/core/include/hydrogen/event_queue.h 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/core/include/hydrogen/event_queue.h 2016-11-05 08:22:50.000000000 +0000 @@ -45,10 +45,11 @@ EVENT_ERROR, EVENT_METRONOME, EVENT_RECALCULATERUBBERBAND, - EVENT_PROGRESS, - EVENT_JACK_SESSION, - EVENT_PLAYLIST_LOADSONG, - EVENT_UNDO_REDO + EVENT_PROGRESS, + EVENT_JACK_SESSION, + EVENT_PLAYLIST_LOADSONG, + EVENT_UNDO_REDO, + EVENT_SONG_MODIFIED }; diff -Nru hydrogen-0.9.6.1/src/core/include/hydrogen/globals.h hydrogen-0.9.7/src/core/include/hydrogen/globals.h --- hydrogen-0.9.6.1/src/core/include/hydrogen/globals.h 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/core/include/hydrogen/globals.h 2016-11-05 08:22:50.000000000 +0000 @@ -22,16 +22,6 @@ #ifndef H2C_GLOBALS_H #define H2C_GLOBALS_H -#define MAX_INSTRUMENTS 1000 - -#define MAX_NOTES 192 - -#define MAX_LAYERS 16 - -#define MAX_FX 4 - -#define MAX_BUFFER_SIZE 8192 - #define MIDI_OUT_NOTE_MIN 0 #define MIDI_OUT_NOTE_MAX 127 #define MIDI_OUT_CHANNEL_MIN -1 @@ -43,4 +33,10 @@ #define UNUSED( v ) (v = v) +// m_nBeatCounter +//100,000 ms in 1 second. +#define US_DIVIDER .000001 +// ~m_nBeatCounter + + #endif // H2C_GLOBALS_H diff -Nru hydrogen-0.9.6.1/src/core/include/hydrogen/hydrogen.h hydrogen-0.9.7/src/core/include/hydrogen/hydrogen.h --- hydrogen-0.9.6.1/src/core/include/hydrogen/hydrogen.h 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/core/include/hydrogen/hydrogen.h 2016-11-05 08:22:50.000000000 +0000 @@ -28,17 +28,19 @@ #include #include #include +#include #include #include #include #include #include +#include // Engine states (It's ok to use ==, <, and > when testing) #define STATE_UNINITIALIZED 1 // Not even the constructors have been called. #define STATE_INITIALIZED 2 // Not ready, but most pointers are now valid or NULL #define STATE_PREPARED 3 // Drivers are set up, but not ready to process audio. -#define STATE_READY 4 // Ready to process audio +#define STATE_READY 4 // Ready to process audio #define STATE_PLAYING 5 // Currently playing a sequence. inline int randomValue( int max ); @@ -54,100 +56,107 @@ H2_OBJECT public: /// Return the Hydrogen instance - static void create_instance(); // Also creates other instances, like AudioEngine - static Hydrogen* get_instance() { assert(__instance); return __instance; }; + static void create_instance(); // Also creates other instances, like AudioEngine + static Hydrogen* get_instance() { assert(__instance); return __instance; }; ~Hydrogen(); // ***** SEQUENCER ******** /// Start the internal sequencer - void sequencer_play(); + void sequencer_play(); /// Stop the internal sequencer - void sequencer_stop(); + void sequencer_stop(); - void midi_noteOn( Note *note ); + void midi_noteOn( Note *note ); ///Last received midi message - QString lastMidiEvent; - int lastMidiEventParameter; + QString lastMidiEvent; + int lastMidiEventParameter; - void sequencer_setNextPattern( int pos, bool appendPattern, bool deletePattern ); - void togglePlaysSelected( void ); + void sequencer_setNextPattern( int pos ); + void togglePlaysSelected( void ); // ***** ~SEQUENCER ******** /// Set/Get current song - Song* getSong() { return __song; } - void setSong( Song *newSong ); + Song* getSong() { return __song; } + void setSong ( Song *newSong ); - void removeSong(); + void removeSong(); - void addRealtimeNote ( int instrument, float velocity, float pan_L=1.0, float pan_R=1.0, float pitch=0.0, bool noteoff=false, bool forcePlay=false, int msg1=0 ); + void addRealtimeNote ( int instrument, + float velocity, + float pan_L=1.0, + float pan_R=1.0, + float pitch=0.0, + bool noteoff=false, + bool forcePlay=false, + int msg1=0 ); - float getMasterPeak_L(); - void setMasterPeak_L( float value ); + float getMasterPeak_L(); + void setMasterPeak_L( float value ); - float getMasterPeak_R(); - void setMasterPeak_R( float value ); + float getMasterPeak_R(); + void setMasterPeak_R( float value ); - void getLadspaFXPeak( int nFX, float *fL, float *fR ); - void setLadspaFXPeak( int nFX, float fL, float fR ); + void getLadspaFXPeak( int nFX, float *fL, float *fR ); + void setLadspaFXPeak( int nFX, float fL, float fR ); - unsigned long getTickPosition(); - unsigned long getRealtimeTickPosition(); - unsigned long getTotalFrames(); + unsigned long getTickPosition(); + unsigned long getRealtimeTickPosition(); + unsigned long getTotalFrames(); - void setRealtimeFrames( unsigned long frames ); - unsigned long getRealtimeFrames(); + void setRealtimeFrames( unsigned long frames ); + unsigned long getRealtimeFrames(); - PatternList * getCurrentPatternList(); - void setCurrentPatternList( PatternList * pPatternList ); + PatternList * getCurrentPatternList(); + void setCurrentPatternList( PatternList * pPatternList ); - PatternList * getNextPatterns(); + PatternList * getNextPatterns(); - int getPatternPos(); - void setPatternPos( int pos ); + int getPatternPos(); + void setPatternPos( int pos ); + int getPosForTick( unsigned long TickPos ); - void triggerRelocateDuringPlay(); + void triggerRelocateDuringPlay(); - long getTickForPosition( int ); + long getTickForPosition( int ); - void restartDrivers(); + void restartDrivers(); - void startExportSong( const QString& filename, int rate, int depth ); - void stopExportSong( bool reconnectOldDriver ); + void startExportSong( const QString& filename, int rate, int depth ); + void stopExportSong( bool reconnectOldDriver ); - AudioOutput* getAudioOutput(); - MidiInput* getMidiInput(); - MidiOutput* getMidiOutput(); + AudioOutput* getAudioOutput(); + MidiInput* getMidiInput(); + MidiOutput* getMidiOutput(); - int getState(); + int getState(); - float getProcessTime(); - float getMaxProcessTime(); + float getProcessTime(); + float getMaxProcessTime(); - int loadDrumkit( Drumkit *drumkitInfo ); + int loadDrumkit( Drumkit *pDrumkitInfo ); + int loadDrumkit( Drumkit *pDrumkitInfo, bool conditional ); + + // Test if an instrument has notes in the pattern (used to test before deleting an insturment) + bool instrumentHasNotes( Instrument *pInst ); /// delete an instrument. If `conditional` is true, and there are patterns that /// use this instrument, it's not deleted anyway - void removeInstrument( int instrumentnumber, bool conditional ); + void removeInstrument( int instrumentnumber, bool conditional ); //return the name of the current drumkit - QString m_currentDrumkit; - - const QString& getCurrentDrumkitname() { - return m_currentDrumkit; - } + QString m_currentDrumkit; - void setCurrentDrumkitname( const QString& currentdrumkitname ) { - this->m_currentDrumkit = currentdrumkitname; - } + const QString& getCurrentDrumkitname(); + void setCurrentDrumkitname( const QString& currentdrumkitname ); - void raiseError( unsigned nErrorCode ); + void raiseError( unsigned nErrorCode ); - void previewSample( Sample *pSample ); - void previewInstrument( Instrument *pInstr ); + void previewSample( Sample *pSample ); + void previewInstrument( Instrument *pInstr ); enum ErrorMessages { UNKNOWN_DRIVER, @@ -158,19 +167,24 @@ JACK_ERROR_IN_PORT_REGISTER }; - void onTapTempoAccelEvent(); - void setTapTempo( float fInterval ); - void setBPM( float fBPM ); - - void restartLadspaFX(); - void setSelectedPatternNumberWithoutGuiEvent( int nPat ); - int getSelectedPatternNumber(); - void setSelectedPatternNumber( int nPat ); + void onTapTempoAccelEvent(); + void setTapTempo( float fInterval ); + void setBPM( float fBPM ); + + void restartLadspaFX(); + void setSelectedPatternNumberWithoutGuiEvent( int nPat ); + int getSelectedPatternNumber(); + void setSelectedPatternNumber( int nPat ); + + int getSelectedInstrumentNumber(); + void setSelectedInstrumentNumber( int nInstrument ); - int getSelectedInstrumentNumber(); - void setSelectedInstrumentNumber( int nInstrument ); #ifdef H2CORE_HAVE_JACK - void renameJackPorts(); + void renameJackPorts(Song* pSong); +#endif + +#ifdef H2CORE_HAVE_NSMSESSION + void startNsmClient(); #endif ///playlist vector @@ -185,87 +199,67 @@ std::vector m_PlayList; ///beatconter - void setbeatsToCount( int beatstocount); - int getbeatsToCount(); - void setNoteLength( float notelength); - float getNoteLength(); - int getBcStatus(); - void handleBeatCounter(); - void setBcOffsetAdjust(); + void setbeatsToCount( int beatstocount); + int getbeatsToCount(); + void setNoteLength( float notelength); + float getNoteLength(); + int getBcStatus(); + void handleBeatCounter(); + void setBcOffsetAdjust(); /// jack time master - unsigned long getHumantimeFrames(); - void setHumantimeFrames(unsigned long hframes); - void offJackMaster(); - void onJackMaster(); - unsigned long getTimeMasterFrames(); - long getTickForHumanPosition( int humanpos ); - float getNewBpmJTM(); - void setNewBpmJTM( float bpmJTM); - void ComputeHumantimeFrames(uint32_t nFrames); - - void __panic(); - int __get_selected_PatterNumber(); - unsigned int __getMidiRealtimeNoteTickPosition(); - - ///sample editor vectors + unsigned long getHumantimeFrames(); + void setHumantimeFrames(unsigned long hframes); + void offJackMaster(); + void onJackMaster(); + unsigned long getTimeMasterFrames(); + long getTickForHumanPosition( int humanpos ); + float getNewBpmJTM(); + void setNewBpmJTM( float bpmJTM); + void ComputeHumantimeFrames(uint32_t nFrames); + + void __panic(); + int __get_selected_PatterNumber(); + unsigned int __getMidiRealtimeNoteTickPosition(); + + void setTimelineBpm(); + float getTimelineBpm( int Beat ); + Timeline* getTimeline() const; - void sortTimelineVector(); - void sortTimelineTagVector(); - -/// timeline vector - struct HTimelineVector - { - int m_htimelinebeat; //beat position in timeline -// int m_htimelinebar; //bar position from current beat - float m_htimelinebpm; //BPM -// bool m_htimelineslide; //true if slide into new tempo -// int m_htimelineslidebeatbegin; //position of slide begin (only beats, no bars) -// int m_htimelineslideend; //position of slide end (only beats, no bars) -// int m_htimelineslidetype; // 0 = slide up, 1 = slide down - }; - std::vector m_timelinevector; - - struct TimelineComparator - { - bool operator()( HTimelineVector const& lhs, HTimelineVector const& rhs) - { - return lhs.m_htimelinebeat < rhs.m_htimelinebeat; - } - }; - - void setTimelineBpm(); - -/// timeline tag vector - struct HTimelineTagVector - { - int m_htimelinetagbeat; //beat position in timeline -// int m_htimelineintensity; //intensity - QString m_htimelinetag; // tag - }; - std::vector m_timelinetagvector; + ///midi lookuptable + int m_nInstrumentLookupTable[MAX_INSTRUMENTS]; - struct TimelineTagComparator - { - bool operator()( HTimelineTagVector const& lhs, HTimelineTagVector const& rhs) - { - return lhs.m_htimelinetagbeat < rhs.m_htimelinetagbeat; - } - }; +private: + static Hydrogen* __instance; - ///midi lookuptable - int m_nInstrumentLookupTable[128]; - //void editInstrumentLookupTable( int instrument, int index); + Song* __song; /// < Current song + void initBeatcounter(void); -private: - static Hydrogen* __instance; + // beatcounter + float m_ntaktoMeterCompute; ///< beatcounter note length + int m_nbeatsToCount; ///< beatcounter beats to count + int m_nEventCount; ///< beatcounter event + int m_nTempoChangeCounter; ///< count tempochanges for timeArray + int m_nBeatCount; ///< beatcounter beat to count + double m_nBeatDiffs[16]; ///< beat diff + timeval m_CurrentTime; ///< timeval + timeval m_LastTime; ///< timeval + double m_nLastBeatTime; ///< timediff + double m_nCurrentBeatTime; ///< timediff + double m_nBeatDiff; ///< timediff + float m_fBeatCountBpm; ///< bpm + int m_nCoutOffset; ///ms default 0 + int m_nStartOffset; ///ms default 0 + //~ beatcounter - Song* __song; /// < Current song // used for song export - Song::SongMode m_oldEngineMode; - bool m_bOldLoopEnabled; + Song::SongMode m_oldEngineMode; + bool m_bOldLoopEnabled; + + //Timline information + Timeline* m_pTimeline; std::list __instrument_death_row; /// Deleting instruments too soon leads to potential crashes. @@ -277,6 +271,25 @@ }; + +/* + * inline methods + */ +inline Timeline* Hydrogen::getTimeline() const +{ + return m_pTimeline; +} + +inline const QString& Hydrogen::getCurrentDrumkitname() +{ + return m_currentDrumkit; +} + +inline void Hydrogen::setCurrentDrumkitname( const QString& currentdrumkitname ) +{ + this->m_currentDrumkit = currentdrumkitname; +} + }; #endif diff -Nru hydrogen-0.9.6.1/src/core/include/hydrogen/IO/AlsaAudioDriver.h hydrogen-0.9.7/src/core/include/hydrogen/IO/AlsaAudioDriver.h --- hydrogen-0.9.6.1/src/core/include/hydrogen/IO/AlsaAudioDriver.h 1970-01-01 00:00:00.000000000 +0000 +++ hydrogen-0.9.7/src/core/include/hydrogen/IO/AlsaAudioDriver.h 2016-11-05 08:22:50.000000000 +0000 @@ -0,0 +1,89 @@ +/* + * Hydrogen + * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] + * + * http://www.hydrogen-music.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY, without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ +#ifndef ALSA_AUDIO_DRIVER_H +#define ALSA_AUDIO_DRIVER_H + +#include +#include + +#ifdef H2CORE_HAVE_ALSA + +#include +#include + +namespace H2Core +{ + +typedef int ( *audioProcessCallback )( uint32_t, void * ); + +class AlsaAudioDriver : public AudioOutput +{ + H2_OBJECT +public: + snd_pcm_t *m_pPlayback_handle; + bool m_bIsRunning; + unsigned long m_nBufferSize; + float* m_pOut_L; + float* m_pOut_R; + int m_nXRuns; + QString m_sAlsaAudioDevice; + audioProcessCallback m_processCallback; + + AlsaAudioDriver( audioProcessCallback processCallback ); + ~AlsaAudioDriver(); + + virtual int init( unsigned nBufferSize ); + virtual int connect(); + virtual void disconnect(); + virtual unsigned getBufferSize(); + virtual unsigned getSampleRate(); + virtual float* getOut_L(); + virtual float* getOut_R(); + + virtual void updateTransportInfo(); + virtual void play(); + virtual void stop(); + virtual void locate( unsigned long nFrame ); + virtual void setBpm( float fBPM ); + +private: + + unsigned int m_nSampleRate; +}; + +#else + +namespace H2Core { + +class AlsaAudioDriver : public NullDriver +{ + H2_OBJECT +public: + AlsaAudioDriver( audioProcessCallback processCallback ) : NullDriver( processCallback ) {} + +}; + +#endif // H2CORE_HAVE_ALSA + +}; + +#endif diff -Nru hydrogen-0.9.6.1/src/core/include/hydrogen/IO/AlsaMidiDriver.h hydrogen-0.9.7/src/core/include/hydrogen/IO/AlsaMidiDriver.h --- hydrogen-0.9.6.1/src/core/include/hydrogen/IO/AlsaMidiDriver.h 1970-01-01 00:00:00.000000000 +0000 +++ hydrogen-0.9.7/src/core/include/hydrogen/IO/AlsaMidiDriver.h 2016-11-05 08:22:50.000000000 +0000 @@ -0,0 +1,66 @@ +/* + * Hydrogen + * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] + * + * http://www.hydrogen-music.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY, without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef ALSA_MIDI_DRIVER_H +#define ALSA_MIDI_DRIVER_H + +#include +#include + +#ifdef H2CORE_HAVE_ALSA + +#include +#include +#include + +namespace H2Core +{ + +/// +/// Alsa Midi Driver +/// Based on Matthias Nagorni alsa sequencer example +/// +class AlsaMidiDriver : public virtual MidiInput, public virtual MidiOutput +{ + H2_OBJECT +public: + AlsaMidiDriver(); + virtual ~AlsaMidiDriver(); + + virtual void open(); + virtual void close(); + virtual std::vector getOutputPortList(); + + void midi_action( snd_seq_t *seq_handle ); + void getPortInfo( const QString& sPortName, int& nClient, int& nPort ); + virtual void handleQueueNote(Note* pNote); + virtual void handleQueueNoteOff( int channel, int key, int velocity ); + virtual void handleQueueAllNoteOff(); + +private: +}; + +}; + +#endif // H2CORE_HAVE_ALSA + +#endif diff -Nru hydrogen-0.9.6.1/src/core/include/hydrogen/IO/CoreAudioDriver.h hydrogen-0.9.7/src/core/include/hydrogen/IO/CoreAudioDriver.h --- hydrogen-0.9.6.1/src/core/include/hydrogen/IO/CoreAudioDriver.h 1970-01-01 00:00:00.000000000 +0000 +++ hydrogen-0.9.7/src/core/include/hydrogen/IO/CoreAudioDriver.h 2016-11-05 08:22:50.000000000 +0000 @@ -0,0 +1,114 @@ +/* + * Hydrogen + * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] + * + * http://hydrogen.sourceforge.net + * + * CoreAudio Driver for Hydrogen + * Copyright(c) 2005 by Jonathan Dempsey [jonathandempsey@fastmail.fm] + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY, without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Rewrote CoreAudio driver, now using AUHAL (2005/03/02 Jonathan Dempsey) + * Cleaned up the code a bit and updated (2005/11/29 Jonathan Dempsey) + * More cleaning . . . (2005/12/31 Jonathan Dempsey) + */ + +#ifndef COREAUDIO_DRIVER_H +#define COREAUDIO_DRIVER_H + +#include +#include + +#ifdef H2CORE_HAVE_COREAUDIO +#include +#include +#include +#endif + +#include +#include + + +typedef int ( *audioProcessCallback )( uint32_t, void * ); + +namespace H2Core +{ + +#ifdef H2CORE_HAVE_COREAUDIO + +class CoreAudioDriver : public AudioOutput +{ + H2_OBJECT +public: + + audioProcessCallback mProcessCallback; + UInt32 m_nBufferSize; + + AudioUnit m_outputUnit; + AudioDeviceID m_outputDevice; + + float* m_pOut_L; + float* m_pOut_R; + + CoreAudioDriver( audioProcessCallback processCallback ); + virtual ~CoreAudioDriver(); + + int init( unsigned bufferSize ); + + unsigned getSampleRate(); + unsigned getBufferSize(); + + int connect(); + void disconnect(); + + float* getOut_L(); + float* getOut_R(); + + + virtual void play(); + virtual void stop(); + virtual void locate( unsigned long nFrame ); + virtual void updateTransportInfo(); + virtual void setBpm( float fBPM ); + + + +private: + void retrieveDefaultDevice(void); + void retrieveBufferSize(void); + void printStreamInfo(void); + + + bool m_bIsRunning; + unsigned m_nSampleRate; + unsigned oSampleRate; +}; + +#else + +class CoreAudioDriver : public NullDriver +{ + H2_OBJECT +public: + CoreAudioDriver( audioProcessCallback processCallback ) : NullDriver ( processCallback ) {} + +}; + +#endif // H2CORE_HAVE_COREAUDIO + +} + +#endif diff -Nru hydrogen-0.9.6.1/src/core/include/hydrogen/IO/DiskWriterDriver.h hydrogen-0.9.7/src/core/include/hydrogen/IO/DiskWriterDriver.h --- hydrogen-0.9.6.1/src/core/include/hydrogen/IO/DiskWriterDriver.h 1970-01-01 00:00:00.000000000 +0000 +++ hydrogen-0.9.7/src/core/include/hydrogen/IO/DiskWriterDriver.h 2016-11-05 08:22:50.000000000 +0000 @@ -0,0 +1,91 @@ +/* + * Hydrogen + * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] + * + * http://www.hydrogen-music.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY, without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef DISK_WRITER_DRIVER_H +#define DISK_WRITER_DRIVER_H + +#include + +#include + +#include +#include + +namespace H2Core +{ + +typedef int ( *audioProcessCallback )( uint32_t, void * ); + +/// +/// Driver for export audio to disk +/// +class DiskWriterDriver : public AudioOutput +{ + H2_OBJECT + public: + + unsigned m_nSampleRate; + QString m_sFilename; + unsigned m_nBufferSize; + int m_nSampleDepth; + audioProcessCallback m_processCallback; + float* m_pOut_L; + float* m_pOut_R; + + DiskWriterDriver( audioProcessCallback processCallback, unsigned nSamplerate, const QString& sFilename, int nSampleDepth ); + ~DiskWriterDriver(); + + int init( unsigned nBufferSize ); + + int connect(); + void disconnect(); + + void write( float* buffer_L, float* buffer_R, unsigned int bufferSize ); + + void audioEngine_process_checkBPMChanged(); + + unsigned getBufferSize() { + return m_nBufferSize; + } + + unsigned getSampleRate(); + float* getOut_L() { + return m_pOut_L; + } + float* getOut_R() { + return m_pOut_R; + } + + virtual void play(); + virtual void stop(); + virtual void locate( unsigned long nFrame ); + virtual void updateTransportInfo(); + virtual void setBpm( float fBPM ); + + private: + + +}; + +}; + +#endif diff -Nru hydrogen-0.9.6.1/src/core/include/hydrogen/IO/FakeDriver.h hydrogen-0.9.7/src/core/include/hydrogen/IO/FakeDriver.h --- hydrogen-0.9.6.1/src/core/include/hydrogen/IO/FakeDriver.h 1970-01-01 00:00:00.000000000 +0000 +++ hydrogen-0.9.7/src/core/include/hydrogen/IO/FakeDriver.h 2016-11-05 08:22:50.000000000 +0000 @@ -0,0 +1,72 @@ +/* + * Hydrogen + * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] + * + * http://www.hydrogen-music.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY, without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef FAKE_DRIVER_H +#define FAKE_DRIVER_H + +#include +#include + +namespace H2Core +{ + +typedef int ( *audioProcessCallback )( uint32_t, void * ); + +/** + * Fake audio driver. Used only for profiling. + */ +class FakeDriver : public AudioOutput +{ + H2_OBJECT +public: + FakeDriver( audioProcessCallback processCallback ); + ~FakeDriver(); + + int init( unsigned nBufferSize ); + int connect(); + void disconnect(); + unsigned getBufferSize() { + return m_nBufferSize; + } + unsigned getSampleRate(); + + float* getOut_L(); + float* getOut_R(); + + virtual void play(); + virtual void stop(); + virtual void locate( unsigned long nFrame ); + virtual void updateTransportInfo(); + virtual void setBpm( float fBPM ); + +private: + audioProcessCallback m_processCallback; + unsigned m_nBufferSize; + float* m_pOut_L; + float* m_pOut_R; + +}; + + +}; + +#endif diff -Nru hydrogen-0.9.6.1/src/core/include/hydrogen/IO/JackMidiDriver.h hydrogen-0.9.7/src/core/include/hydrogen/IO/JackMidiDriver.h --- hydrogen-0.9.6.1/src/core/include/hydrogen/IO/JackMidiDriver.h 1970-01-01 00:00:00.000000000 +0000 +++ hydrogen-0.9.7/src/core/include/hydrogen/IO/JackMidiDriver.h 2016-11-05 08:22:50.000000000 +0000 @@ -0,0 +1,87 @@ +/*- + * Copyright (c) 2011 Hans Petter Selasky + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#ifndef JACK_MIDI_DRIVER_H +#define JACK_MIDI_DRIVER_H + +#include +#include + +#ifdef H2CORE_HAVE_JACK + +#include + +#include +#include +#include + +#include +#include + +#define JACK_MIDI_BUFFER_MAX 64 /* events */ + +namespace H2Core +{ + +class JackMidiDriver : public virtual MidiInput, public virtual MidiOutput +{ + H2_OBJECT +public: + JackMidiDriver(); + virtual ~JackMidiDriver(); + + virtual void open(); + virtual void close(); + virtual std::vector getOutputPortList(); + + void getPortInfo( const QString& sPortName, int& nClient, int& nPort ); + void JackMidiWrite(jack_nframes_t nframes); + void JackMidiRead(jack_nframes_t nframes); + virtual void handleQueueNote(Note* pNote); + virtual void handleQueueNoteOff( int channel, int key, int velocity ); + virtual void handleQueueAllNoteOff(); + +private: + void JackMidiOutEvent(uint8_t *buf, uint8_t len); + + void lock(); + void unlock(); + + jack_port_t *output_port; + jack_port_t *input_port; + jack_client_t *jack_client; + pthread_mutex_t mtx; + int running; + uint8_t jack_buffer[JACK_MIDI_BUFFER_MAX * 4]; + uint32_t rx_in_pos; + uint32_t rx_out_pos; +}; + +}; + +#endif /* H2CORE_HAVE_JACK */ + +#endif diff -Nru hydrogen-0.9.6.1/src/core/include/hydrogen/IO/JackOutput.h hydrogen-0.9.7/src/core/include/hydrogen/IO/JackOutput.h --- hydrogen-0.9.6.1/src/core/include/hydrogen/IO/JackOutput.h 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/core/include/hydrogen/IO/JackOutput.h 2016-11-05 08:22:50.000000000 +0000 @@ -29,6 +29,7 @@ // check if jack support is enabled #ifdef H2CORE_HAVE_JACK +#include #include #include @@ -48,6 +49,7 @@ class Song; class Instrument; +class InstrumentComponent; /// /// Jack (Jack Audio Connection Kit) server driver. @@ -77,19 +79,21 @@ void makeTrackOutputs( Song * ); - void setTrackOutput( int, Instrument * ); + void setTrackOutput( int, Instrument *, InstrumentComponent *, Song * ); void setConnectDefaults( bool flag ) { - connect_out_flag = flag; + m_bConnectOutFlag = flag; } bool getConnectDefaults() { - return connect_out_flag; + return m_bConnectOutFlag; } float* getOut_L(); float* getOut_R(); float* getTrackOut_L( unsigned nTrack ); float* getTrackOut_R( unsigned nTrack ); + float* getTrackOut_L( Instrument *, InstrumentComponent * ); + float* getTrackOut_R( Instrument *, InstrumentComponent * ); int init( unsigned bufferSize ); @@ -109,10 +113,10 @@ protected: //jack timebase callback static void jack_timebase_callback(jack_transport_state_t state, - jack_nframes_t nframes, - jack_position_t *pos, - int new_pos, - void *arg); + jack_nframes_t nframes, + jack_position_t *pos, + int new_pos, + void *arg); //~ jack timebase callback #ifdef H2CORE_HAVE_JACKSESSION @@ -122,36 +126,33 @@ #endif private: - H2Core::Hydrogen *m_pEngine; void relocateBBT(); - long long bbt_frame_offset; - int must_relocate; // A countdown to wait for valid information from another Time Master. - int locate_countdown; // (Unrelated) countdown, for postponing a call to 'locate'. - unsigned long locate_frame; // The frame to locate to (used in 'locateInNCycles'.) - - JackProcessCallback processCallback; - jack_port_t *output_port_1; - jack_port_t *output_port_2; - QString output_port_name_1; - QString output_port_name_2; - int track_port_count; - jack_port_t *track_output_ports_L[MAX_INSTRUMENTS]; - jack_port_t *track_output_ports_R[MAX_INSTRUMENTS]; - jack_transport_state_t m_JackTransportState; - jack_position_t m_JackTransportPos; - bool connect_out_flag; + H2Core::Hydrogen * m_pEngine; + + long long bbt_frame_offset; + int must_relocate; // A countdown to wait for valid information from another Time Master. + int locate_countdown; // (Unrelated) countdown, for postponing a call to 'locate'. + unsigned long locate_frame; // The frame to locate to (used in 'locateInNCycles'.) + + JackProcessCallback processCallback; + jack_port_t * output_port_1; + jack_port_t * output_port_2; + QString output_port_name_1; + QString output_port_name_2; + int track_map[MAX_INSTRUMENTS][MAX_COMPONENTS]; + int track_port_count; + jack_port_t * track_output_ports_L[MAX_INSTRUMENTS]; + jack_port_t * track_output_ports_R[MAX_INSTRUMENTS]; + + jack_transport_state_t m_JackTransportState; + jack_position_t m_JackTransportPos; + + bool m_bConnectOutFlag; //jack timebase callback - jack_nframes_t m_jack_frame_current, - m_jack_frame_last; - jack_transport_state_t m_JackTransportStateLast; - double m_jack_tick; - - bool m_jack_running; - bool m_jack_master; - bool cond; + bool m_bCond; //~ jack timebase callback }; diff -Nru hydrogen-0.9.6.1/src/core/include/hydrogen/IO/MidiInput.h hydrogen-0.9.7/src/core/include/hydrogen/IO/MidiInput.h --- hydrogen-0.9.6.1/src/core/include/hydrogen/IO/MidiInput.h 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/core/include/hydrogen/IO/MidiInput.h 2016-11-05 08:22:50.000000000 +0000 @@ -51,12 +51,13 @@ void handleSysexMessage( const MidiMessage& msg ); void handleControlChangeMessage( const MidiMessage& msg ); void handleProgramChangeMessage( const MidiMessage& msg ); + void handlePolyphonicKeyPressureMessage( const MidiMessage& msg ); protected: bool m_bActive; void handleNoteOnMessage( const MidiMessage& msg ); - void handleNoteOffMessage( const MidiMessage& msg ); + void handleNoteOffMessage( const MidiMessage& msg, bool CymbalChoke ); private: @@ -64,6 +65,8 @@ unsigned long __noteOffTick; unsigned long computeDeltaNoteOnOfftime(); + int __hihat_cc_openess; + }; diff -Nru hydrogen-0.9.6.1/src/core/include/hydrogen/IO/OssDriver.h hydrogen-0.9.7/src/core/include/hydrogen/IO/OssDriver.h --- hydrogen-0.9.6.1/src/core/include/hydrogen/IO/OssDriver.h 1970-01-01 00:00:00.000000000 +0000 +++ hydrogen-0.9.7/src/core/include/hydrogen/IO/OssDriver.h 2016-11-05 08:22:50.000000000 +0000 @@ -0,0 +1,119 @@ +/* + * Hydrogen + * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] + * + * http://www.hydrogen-music.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY, without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef OSS_AUDIO_DRIVER_H +#define OSS_AUDIO_DRIVER_H + +#include +#include + +// check if OSS support is enabled +#ifdef H2CORE_HAVE_OSS + + +#ifdef __NetBSD__ +#include +#else +#include +#endif +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +/* +#ifdef __NetBSD__ + #define AUDIO_DEVICE "/dev/audio" +#else + #define AUDIO_DEVICE "/dev/dsp" +#endif +*/ + +namespace H2Core +{ + +typedef int ( *audioProcessCallback )( uint32_t, void * ); + +/// +/// OSS Audio Driver +/// +class OssDriver : public AudioOutput +{ + H2_OBJECT +public: + OssDriver( audioProcessCallback processCallback ); + ~OssDriver(); + + int init( unsigned bufferSize ); + int connect(); + void disconnect(); + + void write(); + unsigned getBufferSize(); + unsigned getSampleRate(); + float* getOut_L(); + float* getOut_R(); + + virtual void play(); + virtual void stop(); + virtual void locate( unsigned long nFrame ); + virtual void updateTransportInfo(); + virtual void setBpm( float fBPM ); + +private: + /** file descriptor, for writing to /dev/dsp */ + int fd; + + short* audioBuffer; + float* out_L; + float* out_R; + + audioProcessCallback processCallback; + int log2( int n ); + +}; + +#else + +namespace H2Core { + +class OssDriver : public NullDriver +{ + H2_OBJECT +public: + OssDriver( audioProcessCallback processCallback ) : NullDriver( processCallback ) {} + +}; + + + +#endif // OSS support + +}; + +#endif diff -Nru hydrogen-0.9.6.1/src/core/include/hydrogen/IO/PortAudioDriver.h hydrogen-0.9.7/src/core/include/hydrogen/IO/PortAudioDriver.h --- hydrogen-0.9.6.1/src/core/include/hydrogen/IO/PortAudioDriver.h 1970-01-01 00:00:00.000000000 +0000 +++ hydrogen-0.9.7/src/core/include/hydrogen/IO/PortAudioDriver.h 2016-11-05 08:22:50.000000000 +0000 @@ -0,0 +1,94 @@ +/* + * Hydrogen + * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] + * + * http://www.hydrogen-music.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY, without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef PORT_AUDIO_DRIVER_H +#define PORT_AUDIO_DRIVER_H + +#include +#include + +#include + +#ifdef H2CORE_HAVE_PORTAUDIO + +#include +#include + +namespace H2Core +{ + +typedef int ( *audioProcessCallback )( uint32_t, void * ); + +class PortAudioDriver : public AudioOutput +{ + H2_OBJECT +public: + audioProcessCallback m_processCallback; + float* m_pOut_L; + float* m_pOut_R; + unsigned m_nBufferSize; + + PortAudioDriver( audioProcessCallback processCallback ); + virtual ~PortAudioDriver(); + + virtual int init( unsigned nBufferSize ); + virtual int connect(); + virtual void disconnect(); + virtual unsigned getBufferSize(); + virtual unsigned getSampleRate(); + virtual float* getOut_L(); + virtual float* getOut_R(); + + virtual void updateTransportInfo(); + virtual void play(); + virtual void stop(); + virtual void locate( unsigned long nFrame ); + virtual void setBpm( float fBPM ); + +private: + PaStream *m_pStream; + unsigned m_nSampleRate; + +}; + +}; + +#else + +namespace H2Core +{ + +class PortAudioDriver : public NullDriver +{ + H2_OBJECT +public: + PortAudioDriver( audioProcessCallback processCallback ) : NullDriver( processCallback ) {} + +}; + +}; + +#endif + + +#endif + diff -Nru hydrogen-0.9.6.1/src/core/include/hydrogen/IO/PortMidiDriver.h hydrogen-0.9.7/src/core/include/hydrogen/IO/PortMidiDriver.h --- hydrogen-0.9.6.1/src/core/include/hydrogen/IO/PortMidiDriver.h 1970-01-01 00:00:00.000000000 +0000 +++ hydrogen-0.9.7/src/core/include/hydrogen/IO/PortMidiDriver.h 2016-11-05 08:22:50.000000000 +0000 @@ -0,0 +1,63 @@ +/* + * Hydrogen + * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] + * + * http://www.hydrogen-music.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY, without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef PORT_MIDI_DRIVER_H +#define PORT_MIDI_DRIVER_H + +#include +#include + +#ifdef H2CORE_HAVE_PORTMIDI +#include + +namespace H2Core +{ + +class PortMidiDriver : public virtual MidiInput, public virtual MidiOutput +{ + H2_OBJECT +public: + PmStream *m_pMidiIn; + PmStream *m_pMidiOut; + bool m_bRunning; + + PortMidiDriver(); + virtual ~PortMidiDriver(); + + virtual void open(); + virtual void close(); + virtual std::vector getOutputPortList(); + + virtual void handleQueueNote(Note* pNote); + virtual void handleQueueNoteOff( int channel, int key, int velocity ); + virtual void handleQueueAllNoteOff(); + +private: + +}; + +}; + +#endif + +#endif + diff -Nru hydrogen-0.9.6.1/src/core/include/hydrogen/IO/PulseAudioDriver.h hydrogen-0.9.7/src/core/include/hydrogen/IO/PulseAudioDriver.h --- hydrogen-0.9.6.1/src/core/include/hydrogen/IO/PulseAudioDriver.h 1970-01-01 00:00:00.000000000 +0000 +++ hydrogen-0.9.7/src/core/include/hydrogen/IO/PulseAudioDriver.h 2016-11-05 08:22:50.000000000 +0000 @@ -0,0 +1,111 @@ +/* + * Hydrogen + * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] + * + * http://www.hydrogen-music.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY, without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ +#ifndef H2_PULSE_AUDIO_DRIVER_H +#define H2_PULSE_AUDIO_DRIVER_H + + +#include + +#ifdef H2CORE_HAVE_PULSEAUDIO + +#include +#include +#include + +namespace H2Core +{ + + +/// +/// PulseAudio driver. +/// +class PulseAudioDriver : public AudioOutput +{ + H2_OBJECT +public: + typedef int (*audioProcessCallback)(uint32_t, void *); + + PulseAudioDriver(audioProcessCallback processCallback); + ~PulseAudioDriver(); + + virtual int init( unsigned nBufferSize ); + virtual int connect(); + virtual void disconnect(); + virtual unsigned getBufferSize(); + virtual unsigned getSampleRate(); + virtual float* getOut_L(); + virtual float* getOut_R(); + + virtual void updateTransportInfo(); + virtual void play(); + virtual void stop(); + virtual void locate( unsigned long nFrame ); + virtual void setBpm( float fBPM ); + +private: + pthread_t m_thread; + pthread_mutex_t m_mutex; + pthread_cond_t m_cond; + int m_pipe[2]; + audioProcessCallback m_callback; + pa_mainloop* m_main_loop; + pa_context* m_ctx; + pa_stream* m_stream; + bool m_connected; + int m_ready; + unsigned m_sample_rate; + unsigned m_buffer_size; + float* m_outL; + float* m_outR; + + static void* s_thread_body(void*); + int thread_body(); + + static void ctx_state_callback(pa_context* ctx, void* udata); + static void stream_state_callback(pa_stream* stream, void* udata); + static void stream_write_callback(pa_stream* stream, size_t bytes, void* udata); + static void pipe_callback(pa_mainloop_api*, pa_io_event*, int fd, + pa_io_event_flags_t events, void *udata); +}; + +} //namespace H2Core + +#else + +#include + +namespace H2Core { + class PulseAudioDriver : public NullDriver + { + H2_OBJECT + public: + PulseAudioDriver( audioProcessCallback processCallback ) : NullDriver( processCallback ) {} + + }; +} + +#endif //H2CORE_HAVE_PULSEAUDIO + + +#endif //H2_PULSE_AUDIO_DRIVER_H + + diff -Nru hydrogen-0.9.6.1/src/core/include/hydrogen/LashClient.h hydrogen-0.9.7/src/core/include/hydrogen/LashClient.h --- hydrogen-0.9.6.1/src/core/include/hydrogen/LashClient.h 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/core/include/hydrogen/LashClient.h 2016-11-05 08:22:50.000000000 +0000 @@ -27,7 +27,7 @@ #ifndef LASH_CLIENT #define LASH_CLIENT -#include +#include #include #include diff -Nru hydrogen-0.9.6.1/src/core/include/hydrogen/lilypond/lilypond.h hydrogen-0.9.7/src/core/include/hydrogen/lilypond/lilypond.h --- hydrogen-0.9.6.1/src/core/include/hydrogen/lilypond/lilypond.h 1970-01-01 00:00:00.000000000 +0000 +++ hydrogen-0.9.7/src/core/include/hydrogen/lilypond/lilypond.h 2016-11-05 08:22:50.000000000 +0000 @@ -0,0 +1,105 @@ +/* + * Hydrogen + * Copyright(c) 2015 by Sacha Delanoue + * + * http://www.hydrogen-music.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY, without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef LILYPOND_H +#define LILYPOND_H + +#include + +#include +#include +#include + +namespace H2Core { + +class Pattern; +class PatternList; +class Song; + +/// A class to convert a Hydrogen song to LilyPond format +class LilyPond { +public: + LilyPond(); + + /* + * Retreive all needed data from an Hydrogen song + * @param song the Hydrogen song to convert + */ + void extractData( const Song &song ); + + /* + * Write the LilyPond format into a file + * @param sFilename name of output file + */ + void write( const QString &sFilename ) const; + +private: + /* + * This structure represents the notes in a measure. + * A measure is a vector containing the notes in it. + * The index in the main vector is 1/48th of a beat. + * An element in the main vector is the list of notes at this moment. + * A note is represented by its intrument and its velocity. + */ + typedef std::vector > > notes_t; + + /* + * Retreive the information in a PatternList + * @param list the PatternList where the information is + * @param notes where to store the information to + */ + static void addPatternList( const PatternList &list, notes_t ¬es ); + + /* + * Retreive the information in a Pattern + * @param pattern the Pattern where the information is + * @param notes where to store the information to + */ + static void addPattern( const Pattern &pattern, notes_t ¬es ); + + /// Write measures in LilyPond format to stream + void writeMeasures( std::ofstream &stream ) const; + + /// Write upper voice of given measure to stream + void writeUpper( std::ofstream &stream, unsigned nMeasure ) const; + + /// Write lower voice of given measure to stream + void writeLower( std::ofstream &stream, unsigned nMeasure ) const; + + /* + * Write voice of given measure to stream, ignore certain notes + * @param stream the stream to write to + * @param nMeasure the measure to write + * @param whiteList the list of notes to consider, the other are ignored + */ + void writeVoice( std::ofstream &stream, + unsigned nMeasure, + const std::vector &whiteList ) const; + + std::vector m_measures; ///< Representation of the song + QString m_sName; ///< Name of the song + QString m_sAuthor; ///< Author of the song + float m_fBPM; ///< BPM of the song +}; +} + +#endif // LILYPOND_H diff -Nru hydrogen-0.9.6.1/src/core/include/hydrogen/midi_action.h hydrogen-0.9.7/src/core/include/hydrogen/midi_action.h --- hydrogen-0.9.6.1/src/core/include/hydrogen/midi_action.h 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/core/include/hydrogen/midi_action.h 2016-11-05 08:22:50.000000000 +0000 @@ -70,7 +70,7 @@ QStringList actionList; QStringList eventList; - int lastBpmChangeCCParameter; + int m_nLastBpmChangeCCParameter; public: bool handleAction( MidiAction * ); diff -Nru hydrogen-0.9.6.1/src/core/include/hydrogen/nsm_client.h hydrogen-0.9.7/src/core/include/hydrogen/nsm_client.h --- hydrogen-0.9.6.1/src/core/include/hydrogen/nsm_client.h 1970-01-01 00:00:00.000000000 +0000 +++ hydrogen-0.9.7/src/core/include/hydrogen/nsm_client.h 2016-11-05 08:22:50.000000000 +0000 @@ -0,0 +1,66 @@ +/* + * Hydrogen + * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] + * + * http://www.hydrogen-music.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY, without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef NSM_CLIENT_H +#define NSM_CLIENT_H + +#ifdef H2CORE_HAVE_NSMSESSION + +#include +#include + + +/** +* @class NsmClient +* +* @brief Non session manager client implementation +* +* +* @author Sebastian Moors +* +*/ + +class NsmClient : public H2Core::Object +{ + H2_OBJECT + public: + + static NsmClient* __instance; + ~NsmClient(); + + pthread_t m_NsmThread; + + static void create_instance(); + static NsmClient* get_instance() { assert(__instance); return __instance; } + + void createInitialClient(); + + void shutdown(); + + private: + NsmClient(); + +}; + +#endif /* H2CORE_HAVE_NSMSESSION */ + +#endif // NSM_CLIENT_H diff -Nru hydrogen-0.9.6.1/src/core/include/hydrogen/nsm.h hydrogen-0.9.7/src/core/include/hydrogen/nsm.h --- hydrogen-0.9.6.1/src/core/include/hydrogen/nsm.h 1970-01-01 00:00:00.000000000 +0000 +++ hydrogen-0.9.7/src/core/include/hydrogen/nsm.h 2016-11-05 08:22:50.000000000 +0000 @@ -0,0 +1,543 @@ + +/*************************************************************************/ +/* Copyright (C) 2012 Jonathan Moore Liles */ +/* */ +/* Permission to use, copy, modify, and/or distribute this software for */ +/* any purpose with or without fee is hereby granted, provided that the */ +/* above copyright notice and this permission notice appear in all */ +/* copies. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL */ +/* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED */ +/* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE */ +/* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL */ +/* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR */ +/* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER */ +/* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR */ +/* PERFORMANCE OF THIS SOFTWARE. */ +/*************************************************************************/ + + +/*************************************************************/ +/* A simple, callback based C API for NSM clients. */ +/* */ +/* Simplified Example: */ +/* */ +/* #include "nsm.h" */ +/* */ +/* int */ +/* cb_nsm_open ( const char *name, */ +/* const char *display_name, */ +/* const char *client_id, */ +/* char **out_msg, */ +/* void *userdata ) */ +/* { */ +/* do_open_stuff(); */ +/* return ERR_OK; */ +/* } */ +/* */ +/* int */ +/* cb_nsm_save ( char **out_msg, */ +/* void *userdata ) */ +/* { */ +/* do_save_stuff(); */ +/* return ERR_OK; */ +/* } */ +/* */ +/* static nsm_client_t *nsm = 0 */ +/* */ +/* int main( int argc, char **argv ) */ +/* { */ +/* const char *nsm_url = getenv( "NSM_URL" ); */ +/* */ +/* if ( nsm_url ) */ +/* { */ +/* nsm = nsm_new(); */ +/* */ +/* nsm_set_open_callback( nsm, cb_nsm_open, 0 ); */ +/* nsm_set_save_callback( nsm, cb_nsm_save, 0 ); */ +/* */ +/* if ( 0 == nsm_init( nsm, nsm_url ) ) */ +/* { */ +/* nsm_send_announce( nsm, "FOO", "", argv[0] ); */ +/* } */ +/* else */ +/* { */ +/* nsm_free( nsm ); */ +/* nsm = 0; */ +/* } */ +/* } */ +/* } */ +/*************************************************************/ + +#ifndef _NSM_H +#define _NSM_H + +#define NSM_API_VERSION_MAJOR 1 +#define NSM_API_VERSION_MINOR 0 + +#include +#include +#include +#include +#include +#include + +typedef void * nsm_client_t; +typedef int (nsm_open_callback)( const char *name, const char *display_name, const char *client_id, char **out_msg, void *userdata ); +typedef int (nsm_save_callback)( char **out_msg, void *userdata ); +typedef void (nsm_active_callback)( int b, void *userdata ); +typedef void (nsm_session_is_loaded_callback)( void *userdata ); +typedef int (nsm_broadcast_callback)( const char *, lo_message m, void *userdata ); + +#define _NSM() ((struct _nsm_client_t*)nsm) + +#define NSM_EXPORT __attribute__((unused)) static + +/* private parts */ +struct _nsm_client_t +{ + const char *nsm_url; + + lo_server _server; + lo_server_thread _st; + lo_address nsm_addr; + + int nsm_is_active; + char *nsm_client_id; + char *_session_manager_name; + + nsm_open_callback *open; + void *open_userdata; + + nsm_save_callback *save; + void *save_userdata; + + nsm_active_callback *active; + void *active_userdata; + + nsm_session_is_loaded_callback *session_is_loaded; + void *session_is_loaded_userdata; + + nsm_broadcast_callback *broadcast; + void *broadcast_userdata; +}; + +enum +{ + ERR_OK = 0, + ERR_GENERAL = -1, + ERR_INCOMPATIBLE_API = -2, + ERR_BLACKLISTED = -3, + ERR_LAUNCH_FAILED = -4, + ERR_NO_SUCH_FILE = -5, + ERR_NO_SESSION_OPEN = -6, + ERR_UNSAVED_CHANGES = -7, + ERR_NOT_NOW = -8 +}; + +NSM_EXPORT +int +nsm_is_active ( nsm_client_t *nsm ) +{ + return _NSM()->nsm_is_active; +} + +NSM_EXPORT +const char * +nsm_get_session_manager_name ( nsm_client_t *nsm ) +{ + return _NSM()->_session_manager_name; +} + +NSM_EXPORT +nsm_client_t * +nsm_new ( void ) +{ + struct _nsm_client_t *nsm = (struct _nsm_client_t*)malloc( sizeof( struct _nsm_client_t ) ); + + nsm->nsm_url = 0; + + nsm->nsm_is_active = 0; + nsm->nsm_client_id = 0; + + nsm->_server = 0; + nsm->_st = 0; + nsm->nsm_addr = 0; + nsm->_session_manager_name = 0; + + nsm->open = 0; + nsm->save = 0; + nsm->active = 0; + nsm->session_is_loaded = 0; + nsm->broadcast = 0; + + return (nsm_client_t *)nsm; +} + +/*******************************************/ +/* CLIENT TO SERVER INFORMATIONAL MESSAGES */ +/*******************************************/ + +NSM_EXPORT +void +nsm_send_is_dirty ( nsm_client_t *nsm ) +{ + if ( _NSM()->nsm_is_active ) + lo_send_from( _NSM()->nsm_addr, _NSM()->_server, LO_TT_IMMEDIATE, "/nsm/client/is_dirty", "" ); +} + +NSM_EXPORT +void +nsm_send_is_clean ( nsm_client_t *nsm ) +{ + if ( _NSM()->nsm_is_active ) + lo_send_from( _NSM()->nsm_addr, _NSM()->_server, LO_TT_IMMEDIATE, "/nsm/client/is_clean", "" ); +} + +NSM_EXPORT +void +nsm_send_progress ( nsm_client_t *nsm, float p ) +{ + if ( _NSM()->nsm_is_active ) + lo_send_from( _NSM()->nsm_addr, _NSM()->_server, LO_TT_IMMEDIATE, "/nsm/client/progress", "f", p ); +} + +NSM_EXPORT +void +nsm_send_message ( nsm_client_t *nsm, int priority, const char *msg ) +{ + if ( _NSM()->nsm_is_active ) + lo_send_from( _NSM()->nsm_addr, _NSM()->_server, LO_TT_IMMEDIATE, "/nsm/client/message", "is", priority, msg ); +} + +NSM_EXPORT void +nsm_send_announce ( nsm_client_t *nsm, const char *app_name, const char *capabilities, const char *process_name ) +{ + lo_address to = lo_address_new_from_url( _NSM()->nsm_url ); + + if ( ! to ) + { + fprintf( stderr, "NSM: Bad address!" ); + return; + } + + int pid = (int)getpid(); + + lo_send_from( to, _NSM()->_server, LO_TT_IMMEDIATE, "/nsm/server/announce", "sssiii", + app_name, + capabilities, + process_name, + NSM_API_VERSION_MAJOR, + NSM_API_VERSION_MINOR, + pid ); + + lo_address_free( to ); +} + +NSM_EXPORT void +nsm_send_broadcast ( nsm_client_t *nsm, lo_message msg ) +{ + if ( _NSM()->nsm_is_active ) + lo_send_message_from( _NSM()->nsm_addr, _NSM()->_server, "/nsm/server/broadcast", msg ); +} + + + +NSM_EXPORT +void +nsm_check_wait ( nsm_client_t *nsm, int timeout ) +{ + if ( lo_server_wait( _NSM()->_server, timeout ) ) + while ( lo_server_recv_noblock( _NSM()->_server, 0 ) ) {} +} + +NSM_EXPORT +void +nsm_check_nowait (nsm_client_t *nsm ) +{ + nsm_check_wait( nsm, 0 ); +} + + +NSM_EXPORT +void +nsm_thread_start ( nsm_client_t *nsm ) +{ + lo_server_thread_start( _NSM()->_st ); +} + + +NSM_EXPORT +void +nsm_thread_stop ( nsm_client_t *nsm ) +{ + lo_server_thread_stop( _NSM()->_st ); +} + + + +NSM_EXPORT void +nsm_free ( nsm_client_t *nsm ) +{ + if ( _NSM()->_st ) + nsm_thread_stop( nsm ); + + if ( _NSM()->_st ) + lo_server_thread_free( _NSM()->_st ); + else + lo_server_free( _NSM()->_server ); + + free( _NSM() ); +} + +/*****************/ +/* SET CALLBACKS */ +/*****************/ + +NSM_EXPORT +void +nsm_set_open_callback( nsm_client_t *nsm, nsm_open_callback *open_callback, void *userdata ) +{ + _NSM()->open = open_callback; + _NSM()->open_userdata = userdata; +} + +NSM_EXPORT +void +nsm_set_save_callback( nsm_client_t *nsm, nsm_save_callback *save_callback, void *userdata ) +{ + _NSM()->save = save_callback; + _NSM()->save_userdata = userdata; +} + +NSM_EXPORT +void +nsm_set_active_callback( nsm_client_t *nsm, nsm_active_callback *active_callback, void *userdata ) +{ + _NSM()->active = active_callback; + _NSM()->active_userdata = userdata; +} + +NSM_EXPORT +void +nsm_set_session_is_loaded_callback( nsm_client_t *nsm, nsm_session_is_loaded_callback *session_is_loaded_callback, void *userdata ) +{ + _NSM()->session_is_loaded = session_is_loaded_callback; + _NSM()->session_is_loaded_userdata = userdata; +} + + +NSM_EXPORT +void +nsm_set_broadcast_callback( nsm_client_t *nsm, nsm_broadcast_callback *broadcast_callback, void *userdata ) +{ + _NSM()->broadcast = broadcast_callback; + _NSM()->broadcast_userdata = userdata; +} + + + +/****************/ +/* OSC HANDLERS */ +/****************/ + +#undef OSC_REPLY +#undef OSC_REPLY_ERR + +#define OSC_REPLY( value ) lo_send_from( ((struct _nsm_client_t*)user_data)->nsm_addr, ((struct _nsm_client_t*)user_data)->_server, LO_TT_IMMEDIATE, "/reply", "ss", path, value ) +#define OSC_REPLY_P( path, value ) lo_send_from( ((struct _nsm_client_t*)user_data)->nsm_addr, ((struct _nsm_client_t*)user_data)->_server, LO_TT_IMMEDIATE, "/reply", "ss", path, value ) + +#define OSC_REPLY_ERR( errcode, value ) lo_send_from( ((struct _nsm_client_t*)user_data)->nsm_addr, ((struct _nsm_client_t*)user_data)->_server, LO_TT_IMMEDIATE, "/error", "sis", path, errcode, value ) + + +NSM_EXPORT int _nsm_osc_open ( const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data ) +{ + (void) types; + (void) argc; + (void) msg; + + char *out_msg = NULL; + + struct _nsm_client_t *nsm = (struct _nsm_client_t*)user_data; + + nsm->nsm_client_id = strdup( &argv[2]->s ); + + if ( ! nsm->open ) + return 0; + + int r = nsm->open( &argv[0]->s, &argv[1]->s, &argv[2]->s, &out_msg, nsm->open_userdata ); + + if ( r ) + OSC_REPLY_ERR( r, ( out_msg ? out_msg : "") ); + else + OSC_REPLY( "OK" ); + + if ( out_msg ) + free( out_msg ); + + return 0; +} + +NSM_EXPORT int _nsm_osc_save ( const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data ) +{ + (void) types; + (void) argv; + (void) argc; + (void) msg; + + char *out_msg = NULL; + + struct _nsm_client_t *nsm = (struct _nsm_client_t*)user_data; + + if ( ! nsm->save ) + return 0; + + int r = nsm->save(&out_msg, nsm->save_userdata ); + + if ( r ) + { + OSC_REPLY_ERR( r, ( out_msg ? out_msg : "") ); + } + else + { + OSC_REPLY( "OK" ); + } + if ( out_msg ) + free( out_msg ); + + return 0; +} + +NSM_EXPORT int _nsm_osc_announce_reply ( const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data ) +{ + (void) path; + (void) types; + (void) argc; + + if ( strcmp( &argv[0]->s, "/nsm/server/announce" ) ) + return -1; + + struct _nsm_client_t *nsm = (struct _nsm_client_t*)user_data; + + fprintf( stderr, "NSM: Successfully registered. NSM says: %s", &argv[1]->s ); + + nsm->nsm_is_active = 1; + nsm->_session_manager_name = strdup( &argv[2]->s ); + nsm->nsm_addr = lo_address_new_from_url( lo_address_get_url( lo_message_get_source( msg ) )); + + if ( nsm->active ) + nsm->active( nsm->nsm_is_active, nsm->active_userdata ); + + return 0; +} + +NSM_EXPORT int _nsm_osc_error ( const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data ) +{ + (void) path; + (void) types; + (void) argc; + (void) msg; + + if ( strcmp( &argv[0]->s, "/nsm/server/announce" ) ) + return -1; + + struct _nsm_client_t *nsm = (struct _nsm_client_t*)user_data; + + fprintf( stderr, "NSM: Failed to register with NSM server: %s", &argv[2]->s ); + + nsm->nsm_is_active = 0; + + if ( nsm->active ) + nsm->active( nsm->nsm_is_active, nsm->active_userdata ); + + return 0; +} + +NSM_EXPORT int _nsm_osc_session_is_loaded ( const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data ) +{ + (void) path; + (void) types; + (void) argv; + (void) argc; + (void) msg; + + struct _nsm_client_t *nsm = (struct _nsm_client_t*)user_data; + + if ( ! nsm->session_is_loaded ) + return 0; + + nsm->session_is_loaded( nsm->session_is_loaded_userdata ); + + return 0; +} + +NSM_EXPORT int _nsm_osc_broadcast ( const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data ) +{ + (void) types; + (void) argv; + (void) argc; + + struct _nsm_client_t *nsm = (struct _nsm_client_t*)user_data; + + if ( ! nsm->broadcast ) + return 0; + + return nsm->broadcast( path, msg, nsm->broadcast_userdata ); +} + + + +NSM_EXPORT +int +nsm_init ( nsm_client_t *nsm, const char *nsm_url ) +{ + _NSM()->nsm_url = nsm_url; + + lo_address addr = lo_address_new_from_url( nsm_url ); + int proto = lo_address_get_protocol( addr ); + lo_address_free( addr ); + + _NSM()->_server = lo_server_new_with_proto( NULL, proto, NULL ); + + if ( ! _NSM()->_server ) + return -1; + + lo_server_add_method( _NSM()->_server, "/error", "sis", _nsm_osc_error, _NSM() ); + lo_server_add_method( _NSM()->_server, "/reply", "ssss", _nsm_osc_announce_reply, _NSM() ); + lo_server_add_method( _NSM()->_server, "/nsm/client/open", "sss", _nsm_osc_open, _NSM() ); + lo_server_add_method( _NSM()->_server, "/nsm/client/save", "", _nsm_osc_save, _NSM() ); + lo_server_add_method( _NSM()->_server, "/nsm/client/session_is_loaded", "", _nsm_osc_session_is_loaded, _NSM() ); + lo_server_add_method( _NSM()->_server, NULL, NULL, _nsm_osc_broadcast, _NSM() ); + + return 0; +} + + +NSM_EXPORT +int +nsm_init_thread ( nsm_client_t *nsm, const char *nsm_url ) +{ + _NSM()->nsm_url = nsm_url; + + lo_address addr = lo_address_new_from_url( nsm_url ); + int proto = lo_address_get_protocol( addr ); + lo_address_free( addr ); + + _NSM()->_st = lo_server_thread_new_with_proto( NULL, proto, NULL ); + _NSM()->_server = lo_server_thread_get_server( _NSM()->_st ); + + if ( ! _NSM()->_server ) + return -1; + + lo_server_thread_add_method( _NSM()->_st, "/error", "sis", _nsm_osc_error, _NSM() ); + lo_server_thread_add_method( _NSM()->_st, "/reply", "ssss", _nsm_osc_announce_reply, _NSM() ); + lo_server_thread_add_method( _NSM()->_st, "/nsm/client/open", "sss", _nsm_osc_open, _NSM() ); + lo_server_thread_add_method( _NSM()->_st, "/nsm/client/save", "", _nsm_osc_save, _NSM() ); + lo_server_thread_add_method( _NSM()->_st, "/nsm/client/session_is_loaded", "", _nsm_osc_session_is_loaded, _NSM() ); + lo_server_thread_add_method( _NSM()->_st, NULL, NULL, _nsm_osc_broadcast, _NSM() ); + + return 0; +} + +#endif /* NSM_H */ diff -Nru hydrogen-0.9.6.1/src/core/include/hydrogen/playlist.h hydrogen-0.9.7/src/core/include/hydrogen/playlist.h --- hydrogen-0.9.6.1/src/core/include/hydrogen/playlist.h 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/core/include/hydrogen/playlist.h 2016-11-05 08:22:50.000000000 +0000 @@ -23,7 +23,6 @@ #ifndef PLAYLIST_H #define PLAYLIST_H -#include #include #include #include @@ -46,20 +45,14 @@ ~Playlist(); -// std::vector m_PlayList; void setNextSongByNumber(int SongNumber); /* Call from MIDI thread */ bool loadSong (int SongNumber); /* Call from main (e.g. GUI) thread */ void setSelectedSongNr( int songNumber); - int selectedSongNumber; - int activeSongNumber; - int getSelectedSongNr(); void setActiveSongNumber( int ActiveSongNumber); int getActiveSongNumber(); -// QString __playlistName; - const QString& get_filename() { return __filename; } @@ -67,6 +60,14 @@ void set_filename( const QString& filename ) { __filename = filename; } + + void setIsModified(bool IsModified){ + m_bIsModified = IsModified; + } + + bool getIsModified(){ + return m_bIsModified; + } static Playlist* load( const QString& filename ); bool save( const QString& filename ); @@ -75,6 +76,11 @@ static Playlist* __instance; QString __filename; + int m_nSelectedSongNumber; + int m_nActiveSongNumber; + + bool m_bIsModified; + /// Constructor Playlist(); diff -Nru hydrogen-0.9.6.1/src/core/include/hydrogen/Preferences.h hydrogen-0.9.7/src/core/include/hydrogen/Preferences.h --- hydrogen-0.9.6.1/src/core/include/hydrogen/Preferences.h 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/core/include/hydrogen/Preferences.h 2016-11-05 08:22:50.000000000 +0000 @@ -24,7 +24,6 @@ #define PREFERENCES_H #include -//#include #include #include @@ -158,521 +157,340 @@ UI_LAYOUT_TABBED }; - int m_nDefaultUILayout; + QString m_sPreferencesFilename; + QString m_sPreferencesDirectory; - QString m_sPreferencesFilename; - QString m_sPreferencesDirectory; + QString __lastspatternDirectory; + QString __lastsampleDirectory; // audio file browser + bool __playsamplesonclicking; // audio file browser - QString __lastspatternDirectory; - QString __lastsampleDirectory; // audio file browser - bool __playsamplesonclicking; // audio file browser - - bool __playselectedinstrument; // midi keys and keys play instrument or drumset - - int m_nRecPreDelete; //index of record note pre delete function 0 = off - int m_nRecPostDelete; - - bool m_bFollowPlayhead; + bool __playselectedinstrument; // midi keys and keys play instrument or drumset + int m_nRecPreDelete; //index of record note pre delete function 0 = off + int m_nRecPostDelete; + bool m_bFollowPlayhead; // switch to enable / disable lash, only on h2 startup - bool m_brestartLash; - bool m_bsetLash; + bool m_brestartLash; + bool m_bsetLash; //soundlibrarypanel expand song and pattern item - bool __expandSongItem; - bool __expandPatternItem; + bool __expandSongItem; + bool __expandPatternItem; //beatcounter - bool m_bbc; - bool m_mmcsetplay; + bool m_bbc; + bool m_mmcsetplay; - int m_countOffset; - int m_startOffset; + int m_countOffset; + int m_startOffset; //~ beatcounter std::list sServerList; std::list m_patternCategories; - //___ audio engine properties ___ - QString m_sAudioDriver; ///< Audio Driver - bool m_bUseMetronome; ///< Use metronome? - float m_fMetronomeVolume; ///< Metronome volume FIXME: remove this volume!! - unsigned m_nMaxNotes; ///< max notes - unsigned m_nBufferSize; ///< Audio buffer size - unsigned m_nSampleRate; ///< Audio sample rate - - //___ oss driver properties ___ - QString m_sOSSDevice; ///< Device used for output - - //___ MIDI Driver properties - QString m_sMidiDriver; - QString m_sMidiPortName; - int m_nMidiChannelFilter; - bool m_bMidiNoteOffIgnore; - bool m_bMidiDiscardNoteAfterAction; - - //___ alsa audio driver properties ___ - QString m_sAlsaAudioDevice; - - //___ jack driver properties ___ - QString m_sJackPortName1; - QString m_sJackPortName2; - int m_bJackTransportMode; - bool m_bJackConnectDefaults; - bool m_bJackTrackOuts; - int m_nJackTrackOutputMode; + // audio engine properties ___ + QString m_sAudioDriver; ///< Audio Driver + bool m_bUseMetronome; ///< Use metronome? + float m_fMetronomeVolume; ///< Metronome volume FIXME: remove this volume!! + unsigned m_nMaxNotes; ///< max notes + unsigned m_nBufferSize; ///< Audio buffer size + unsigned m_nSampleRate; ///< Audio sample rate + + // OSS driver properties ___ + QString m_sOSSDevice; ///< Device used for output + + // MIDI Driver properties + QString m_sMidiDriver; + QString m_sMidiPortName; + int m_nMidiChannelFilter; + bool m_bMidiNoteOffIgnore; + bool m_bMidiFixedMapping; + bool m_bMidiDiscardNoteAfterAction; + + // alsa audio driver properties ___ + QString m_sAlsaAudioDevice; + + // jack driver properties ___ + QString m_sJackPortName1; + QString m_sJackPortName2; + int m_bJackTransportMode; + bool m_bJackConnectDefaults; + bool m_bJackTrackOuts; + int m_nJackTrackOutputMode; //jack time master - int m_bJackMasterMode ; - //~ jack time master + int m_bJackMasterMode ; + //~ jack driver properties + ///Default text editor (used by Playlisteditor) - QString m_sDefaultEditor; + QString m_sDefaultEditor; ///Rubberband CLI - QString m_rubberBandCLIexecutable; + QString m_rubberBandCLIexecutable; /// Returns an instance of PreferencesMng class - static void create_instance(); + static void create_instance(); static Preferences* get_instance() { assert(__instance); return __instance; } ~Preferences(); /// Load the preferences file - void loadPreferences( bool bGlobal ); + void loadPreferences( bool bGlobal ); /// Save the preferences file - void savePreferences(); + void savePreferences(); - const QString& getDemoPath() { - return demoPath; - } - const QString& getDataDirectory() { - return m_sDataDirectory; - } + const QString& getDemoPath(); + const QString& getDataDirectory(); + const QString& getTmpDirectory(); - const QString& getTmpDirectory(){ - return m_sTmpDirectory; - } + const QString& getDefaultEditor(); + void setDefaultEditor( QString editor); - const QString& getDefaultEditor() { - return m_sDefaultEditor; - } + int getDefaultUILayout(); + void setDefaultUILayout( int layout); - void setDefaultEditor( QString editor){ - m_sDefaultEditor = editor; - } - - int getDefaultUILayout(){ - return m_nDefaultUILayout; - } - - void setDefaultUILayout( int layout){ - m_nDefaultUILayout = layout; - } - - void setShowExportWarning( bool value ) { - m_bShowExportWarning = value; - } - - bool getShowExportWarning() { - return m_bShowExportWarning; - } + void setShowExportWarning( bool value ); + bool getShowExportWarning(); // General - void setRestoreLastSongEnabled( bool restore ) { - m_brestoreLastSong = restore; - } + void setRestoreLastSongEnabled( bool restore ); + void setRestoreLastPlaylistEnabled( bool restore ); + void setUseRelativeFilenamesForPlaylists( bool value ); - void setRestoreLastPlaylistEnabled( bool restore ) { - m_brestoreLastPlaylist = restore; - } + void setShowDevelWarning( bool value ); + bool getShowDevelWarning(); - void setShowDevelWarning( bool value ) { - m_bShowDevelWarning = value; - } + bool isRestoreLastSongEnabled(); + bool isRestoreLastPlaylistEnabled(); + bool isPlaylistUsingRelativeFilenames(); - bool getShowDevelWarning() { - return m_bShowDevelWarning; - } + void setLastSongFilename( const QString& filename ); + const QString& getLastSongFilename(); - bool isRestoreLastSongEnabled() { - return m_brestoreLastSong; - } + void setLastPlaylistFilename( const QString& filename ); + const QString& getLastPlaylistFilename(); - bool isRestoreLastPlaylistEnabled() { - return m_brestoreLastPlaylist; - } + void setHearNewNotes( bool value ); + bool getHearNewNotes(); - void setLastSongFilename( const QString& filename ) { - m_lastSongFilename = filename; - } - const QString& getLastSongFilename() { - return m_lastSongFilename; - } + void setRecordEvents( bool value ); + bool getRecordEvents(); - void setLastPlaylistFilename( const QString& filename ) { - m_lastPlaylistFilename = filename; - } - const QString& getLastPlaylistFilename() { - return m_lastPlaylistFilename; - } + void setDestructiveRecord ( bool value ); + bool getDestructiveRecord(); - void setHearNewNotes( bool value ) { - hearNewNotes = value; - } - bool getHearNewNotes() { - return hearNewNotes; - } + void setPunchInPos ( unsigned pos ); + int getPunchInPos(); - void setRecordEvents( bool value ) { - recordEvents = value; - } - bool getRecordEvents() { - return recordEvents; - } + void setPunchOutPos ( unsigned pos ); + int getPunchOutPos(); - void setDestructiveRecord ( bool value ) { - destructiveRecord = value; - } - bool getDestructiveRecord() { - return destructiveRecord; - } + bool inPunchArea (int pos); + void unsetPunchArea (); - void setPunchInPos ( unsigned pos ) { - punchInPos = pos; - } - int getPunchInPos() { - return punchInPos; - } + void setQuantizeEvents( bool value ); + bool getQuantizeEvents(); - void setPunchOutPos ( unsigned pos ) { - punchOutPos = pos; - } - int getPunchOutPos() { - return punchOutPos; - } + std::vector getRecentFiles(); + void setRecentFiles( std::vector recentFiles ); - bool inPunchArea (int pos) { - // Return true if punch area not defined - if ( punchInPos <= punchOutPos ) { - if ( pos < punchInPos || punchOutPos < pos ) { - return false; - } - } - return true; - } + QStringList getRecentFX(); + void setMostRecentFX( QString ); - void unsetPunchArea () { - punchInPos = 0; - punchOutPos = -1; - } + std::vector getLadspaPath(); + void setLadspaPath( std::vector pathVect ); - void setQuantizeEvents( bool value ) { - quantizeEvents = value; - } - bool getQuantizeEvents() { - return quantizeEvents; - } - std::vector getRecentFiles() { - return m_recentFiles; - } - void setRecentFiles( std::vector recentFiles ); + // GUI Properties + const QString& getQTStyle(); + void setQTStyle( const QString& sStyle ); - QStringList getRecentFX() { - return m_recentFX; - } - void setMostRecentFX( QString ); - std::vector getLadspaPath() { - return m_ladspaPathVect; - } - void setLadspaPath( std::vector pathVect ) { - m_ladspaPathVect = pathVect; - } + const QString& getApplicationFontFamily(); + void setApplicationFontFamily( const QString& family ); - QString getLastNews() { - return m_sLastNews; - } - void setLastNews( const QString& sNews ) { - m_sLastNews = sNews; - } + int getApplicationFontPointSize(); + void setApplicationFontPointSize( int size ); + QString getMixerFontFamily(); + void setMixerFontFamily( const QString& family ); + int getMixerFontPointSize(); + void setMixerFontPointSize( int size ); + float getMixerFalloffSpeed(); + void setMixerFalloffSpeed( float value ); + bool showInstrumentPeaks(); + void setInstrumentPeaks( bool value ); - // GUI Properties - const QString& getQTStyle() { - return m_sQTStyle; - } - void setQTStyle( const QString& sStyle ) { - m_sQTStyle = sStyle; - } - - - const QString& getApplicationFontFamily() { - return applicationFontFamily; - } - void setApplicationFontFamily( const QString& family ) { - applicationFontFamily = family; - } + int getPatternEditorGridResolution(); + void setPatternEditorGridResolution( int value ); - int getApplicationFontPointSize() { - return applicationFontPointSize; - } - void setApplicationFontPointSize( int size ) { - applicationFontPointSize = size; - } + bool isPatternEditorUsingTriplets(); + void setPatternEditorUsingTriplets( bool value ); - QString getMixerFontFamily() { - return mixerFontFamily; - } - void setMixerFontFamily( const QString& family ) { - mixerFontFamily = family; - } - int getMixerFontPointSize() { - return mixerFontPointSize; - } - void setMixerFontPointSize( int size ) { - mixerFontPointSize = size; - } - float getMixerFalloffSpeed() { - return mixerFalloffSpeed; - } - void setMixerFalloffSpeed( float value ) { - mixerFalloffSpeed = value; - } - bool showInstrumentPeaks() { - return m_bShowInstrumentPeaks; - } - void setInstrumentPeaks( bool value ) { - m_bShowInstrumentPeaks = value; - } + bool isFXTabVisible(); + void setFXTabVisible( bool value ); - int getPatternEditorGridResolution() { - return m_nPatternEditorGridResolution; - } - void setPatternEditorGridResolution( int value ) { - m_nPatternEditorGridResolution = value; - } + unsigned getPatternEditorGridHeight(); + void setPatternEditorGridHeight( unsigned value ); - bool isPatternEditorUsingTriplets() { - return m_bPatternEditorUsingTriplets; - } - void setPatternEditorUsingTriplets( bool value ) { - m_bPatternEditorUsingTriplets = value; - } + unsigned getPatternEditorGridWidth(); + void setPatternEditorGridWidth( unsigned value ); - bool isFXTabVisible() { - return m_bIsFXTabVisible; - } - void setFXTabVisible( bool value ) { - m_bIsFXTabVisible = value; - } + void setColoringMethodAuxValue( int value ); + int getColoringMethodAuxValue() const; - unsigned getPatternEditorGridHeight() { - return m_nPatternEditorGridHeight; - } - void setPatternEditorGridHeight( unsigned value ) { - m_nPatternEditorGridHeight = value; - } + void setColoringMethod( int value ); + int getColoringMethod() const; - unsigned getPatternEditorGridWidth() { - return m_nPatternEditorGridWidth; - } - void setPatternEditorGridWidth( unsigned value ) { - m_nPatternEditorGridWidth = value; - } + WindowProperties getMainFormProperties(); + void setMainFormProperties( const WindowProperties& prop ); - WindowProperties getMainFormProperties() { - return mainFormProperties; - } - void setMainFormProperties( const WindowProperties& prop ) { - mainFormProperties = prop; - } + WindowProperties getMixerProperties(); + void setMixerProperties( const WindowProperties& prop ); - WindowProperties getMixerProperties() { - return mixerProperties; - } - void setMixerProperties( const WindowProperties& prop ) { - mixerProperties = prop; - } + WindowProperties getPatternEditorProperties(); + void setPatternEditorProperties( const WindowProperties& prop ); - WindowProperties getPatternEditorProperties() { - return patternEditorProperties; - } - void setPatternEditorProperties( const WindowProperties& prop ) { - patternEditorProperties = prop; - } + WindowProperties getSongEditorProperties(); + void setSongEditorProperties( const WindowProperties& prop ); - WindowProperties getSongEditorProperties() { - return songEditorProperties; - } - void setSongEditorProperties( const WindowProperties& prop ) { - songEditorProperties = prop; - } + WindowProperties getAudioEngineInfoProperties(); + void setAudioEngineInfoProperties( const WindowProperties& prop ); + WindowProperties getLadspaProperties( unsigned nFX ); + void setLadspaProperties( unsigned nFX, const WindowProperties& prop ); - WindowProperties getAudioEngineInfoProperties() { - return audioEngineInfoProperties; - } - void setAudioEngineInfoProperties( const WindowProperties& prop ) { - audioEngineInfoProperties = prop; - } + UIStyle* getDefaultUIStyle(); - WindowProperties getLadspaProperties( unsigned nFX ) { - return m_ladspaProperties[nFX]; - } - void setLadspaProperties( unsigned nFX, const WindowProperties& prop ) { - m_ladspaProperties[nFX] = prop; - } + bool patternModePlaysSelected(); + void setPatternModePlaysSelected( bool b ); + bool useLash(); + void setUseLash( bool b ); - UIStyle* getDefaultUIStyle() { - return m_pDefaultUIStyle; - } + void setMaxBars( int bars ); + int getMaxBars(); - bool patternModePlaysSelected() { - return m_bPatternModePlaysSelected; - } - void setPatternModePlaysSelected( bool b ) { - m_bPatternModePlaysSelected = b; - } + void setWaitForSessionHandler(bool value); + bool getWaitForSessionHandler(); - bool useLash(){ - return m_bUseLash; - } - void setUseLash( bool b ){ - m_bUseLash = b; - } +#ifdef H2CORE_HAVE_JACKSESSION + QString getJackSessionUUID(); + void setJackSessionUUID( QString uuid ); - void setMaxBars( int bars ){ - maxBars = bars; - } + QString getJackSessionApplicationPath(); + void setJackSessionApplicationPath( QString path ); - int getMaxBars(){ - return maxBars; - } +#endif - void setWaitForSessionHandler(bool value){ - waitingForSessionHandler = value; - } - bool getWaitForSessionHandler(){ - return waitingForSessionHandler; - } +#ifdef H2CORE_HAVE_NSMSESSION + void setNsmClientId(const QString& nsmClientId); + QString getNsmClientId(void); -#ifdef H2CORE_HAVE_JACKSESSION - QString getJackSessionUUID(){ - return jackSessionUUID; - } + void setNsmSongName(const QString& nsmSongName); + QString getNsmSongName(void); - void setJackSessionUUID( QString uuid ){ - jackSessionUUID = uuid; - } - QString getJackSessionApplicationPath(){ - return jackSessionApplicationPath; - } +#endif - void setJackSessionApplicationPath( QString path ){ - jackSessionApplicationPath = path; - } + bool getUseTimelineBpm(); + void setUseTimelineBpm( bool val ); -#endif + int getRubberBandCalcTime(); + void setRubberBandCalcTime( int val ); - bool getUseTimelineBpm(){ - return __useTimelineBpm; - } - void setUseTimelineBpm( bool val ){ - __useTimelineBpm = val; - } + int getRubberBandBatchMode(); + void setRubberBandBatchMode( int val ); - int getRubberBandCalcTime(){ - return __rubberBandCalcTime; - } - void setRubberBandCalcTime( int val ){ - __rubberBandCalcTime = val; - } + int getLastOpenTab(); + void setLastOpenTab(int n); - int getRubberBandBatchMode(){ - return m_useTheRubberbandBpmChangeEvent; - } - void setRubberBandBatchMode( int val ){ - m_useTheRubberbandBpmChangeEvent = val; - } + void setH2ProcessName(const QString& processName); - int getLastOpenTab(){ - return m_nLastOpenTab; - } - void setLastOpenTab(int n){ - m_nLastOpenTab = n; - } + QString getH2ProcessName(); private: - static Preferences *__instance; + static Preferences * __instance; - QString m_sDataDirectory; - QString m_sTmpDirectory; + QString m_sDataDirectory; + QString m_sTmpDirectory; /** directory of demo songs */ - QString demoPath; + QString demoPath; //___ General properties ___ - int __rubberBandCalcTime; - bool m_useTheRubberbandBpmChangeEvent; ///rubberband bpm change queue - bool m_bPatternModePlaysSelected; /// Behaviour of Pattern Mode - bool m_brestoreLastSong; ///< Restore last song? - bool m_brestoreLastPlaylist; - bool m_bUseLash; - bool m_bShowDevelWarning; ///< Show development version warning? - bool m_bShowExportWarning; - QString m_lastSongFilename; ///< Last song used - QString m_lastPlaylistFilename; - bool hearNewNotes; + QString m_sH2ProcessName; //Name of hydrogen's main process + int __rubberBandCalcTime; + bool m_useTheRubberbandBpmChangeEvent; ///rubberband bpm change queue + bool m_bPatternModePlaysSelected; /// Behaviour of Pattern Mode + bool m_brestoreLastSong; ///< Restore last song? + bool m_brestoreLastPlaylist; + bool m_bUseLash; + bool m_bShowDevelWarning; ///< Show development version warning? + bool m_bShowExportWarning; + QString m_lastSongFilename; ///< Last song used + QString m_lastPlaylistFilename; + + bool quantizeEvents; + bool recordEvents; + bool destructiveRecord; + bool readPrefFileforotherplaces; + int punchInPos; + int punchOutPos; + int maxBars; + bool hearNewNotes; + + QStringList m_recentFX; std::vector m_recentFiles; - QStringList m_recentFX; std::vector m_ladspaPathVect; - bool quantizeEvents; - bool recordEvents; - bool destructiveRecord; - bool readPrefFileforotherplaces; - int punchInPos; - int punchOutPos; - QString m_sLastNews; - int maxBars; + #ifdef H2CORE_HAVE_JACKSESSION - QString jackSessionUUID; - QString jackSessionApplicationPath; + QString jackSessionUUID; + QString jackSessionApplicationPath; #endif - bool waitingForSessionHandler; - bool __useTimelineBpm; - - //___ GUI properties ___ - QString m_sQTStyle; - int m_nLastOpenTab; - - QString applicationFontFamily; - int applicationFontPointSize; - QString mixerFontFamily; - int mixerFontPointSize; - float mixerFalloffSpeed; - int m_nPatternEditorGridResolution; - bool m_bPatternEditorUsingTriplets; - bool m_bShowInstrumentPeaks; - bool m_bIsFXTabVisible; - unsigned m_nPatternEditorGridHeight; - unsigned m_nPatternEditorGridWidth; - WindowProperties mainFormProperties; - WindowProperties mixerProperties; - WindowProperties patternEditorProperties; - WindowProperties songEditorProperties; - WindowProperties drumkitManagerProperties; - WindowProperties audioEngineInfoProperties; - WindowProperties m_ladspaProperties[MAX_FX]; +#ifdef H2CORE_HAVE_NSMSESSION + QString m_sNsmClientId; + QString m_sNsmSongName; +#endif - UIStyle* m_pDefaultUIStyle; + bool waitingForSessionHandler; + bool __useTimelineBpm; + //___ GUI properties ___ + QString m_sQTStyle; + int m_nLastOpenTab; + int m_nDefaultUILayout; + + + QString applicationFontFamily; + int applicationFontPointSize; + QString mixerFontFamily; + int mixerFontPointSize; + float mixerFalloffSpeed; + int m_nPatternEditorGridResolution; + bool m_bPatternEditorUsingTriplets; + bool m_bShowInstrumentPeaks; + bool m_bIsFXTabVisible; + bool m_bUseRelativeFilenamesForPlaylists; + unsigned m_nPatternEditorGridHeight; + unsigned m_nPatternEditorGridWidth; + WindowProperties mainFormProperties; + WindowProperties mixerProperties; + WindowProperties patternEditorProperties; + WindowProperties songEditorProperties; + WindowProperties drumkitManagerProperties; + WindowProperties audioEngineInfoProperties; + WindowProperties m_ladspaProperties[MAX_FX]; + + UIStyle* m_pDefaultUIStyle; + + //Appearence: SongEditor coloring + int m_nColoringMethod; + int m_nColoringMethodAuxValue; Preferences(); @@ -692,6 +510,416 @@ void readUIStyle( QDomNode parent ); }; + +inline const QString& Preferences::getDemoPath() { + return demoPath; +} +inline const QString& Preferences::getDataDirectory() { + return m_sDataDirectory; +} + +inline const QString& Preferences::getTmpDirectory(){ + return m_sTmpDirectory; +} + +inline const QString& Preferences::getDefaultEditor() { + return m_sDefaultEditor; +} + +inline void Preferences::setDefaultEditor( QString editor){ + m_sDefaultEditor = editor; +} + +inline int Preferences::getDefaultUILayout(){ + return m_nDefaultUILayout; +} + +inline void Preferences::setDefaultUILayout( int layout){ + m_nDefaultUILayout = layout; +} + +inline void Preferences::setShowExportWarning( bool value ) { + m_bShowExportWarning = value; +} + +inline bool Preferences::getShowExportWarning() { + return m_bShowExportWarning; +} + + +// General +inline void Preferences::setRestoreLastSongEnabled( bool restore ) { + m_brestoreLastSong = restore; +} + +inline void Preferences::setRestoreLastPlaylistEnabled( bool restore ) { + m_brestoreLastPlaylist = restore; +} + +inline void Preferences::setUseRelativeFilenamesForPlaylists( bool value ) { + m_bUseRelativeFilenamesForPlaylists= value; +} + +inline void Preferences::setShowDevelWarning( bool value ) { + m_bShowDevelWarning = value; +} + +inline bool Preferences::getShowDevelWarning() { + return m_bShowDevelWarning; +} + +inline bool Preferences::isRestoreLastSongEnabled() { + return m_brestoreLastSong; +} + +inline bool Preferences::isRestoreLastPlaylistEnabled() { + return m_brestoreLastPlaylist; +} + +inline bool Preferences::isPlaylistUsingRelativeFilenames() { + return m_bUseRelativeFilenamesForPlaylists; +} + +inline void Preferences::setLastSongFilename( const QString& filename ) { + m_lastSongFilename = filename; +} +inline const QString& Preferences::getLastSongFilename() { + return m_lastSongFilename; +} + +inline void Preferences::setLastPlaylistFilename( const QString& filename ) { + m_lastPlaylistFilename = filename; +} +inline const QString& Preferences::getLastPlaylistFilename() { + return m_lastPlaylistFilename; +} + +inline void Preferences::setHearNewNotes( bool value ) { + hearNewNotes = value; +} +inline bool Preferences::getHearNewNotes() { + return hearNewNotes; +} + +inline void Preferences::setRecordEvents( bool value ) { + recordEvents = value; +} +inline bool Preferences::getRecordEvents() { + return recordEvents; +} + +inline void Preferences::setDestructiveRecord ( bool value ) { + destructiveRecord = value; +} +inline bool Preferences::getDestructiveRecord() { + return destructiveRecord; +} + +inline void Preferences::setPunchInPos ( unsigned pos ) { + punchInPos = pos; +} +inline int Preferences::getPunchInPos() { + return punchInPos; +} + +inline void Preferences::setPunchOutPos ( unsigned pos ) { + punchOutPos = pos; +} +inline int Preferences::getPunchOutPos() { + return punchOutPos; +} + +inline bool Preferences::inPunchArea (int pos) { + // Return true if punch area not defined + if ( punchInPos <= punchOutPos ) { + if ( pos < punchInPos || punchOutPos < pos ) { + return false; + } + } + return true; +} + +inline void Preferences::unsetPunchArea () { + punchInPos = 0; + punchOutPos = -1; +} + +inline void Preferences::setQuantizeEvents( bool value ) { + quantizeEvents = value; +} +inline bool Preferences::getQuantizeEvents() { + return quantizeEvents; +} + +inline std::vector Preferences::getRecentFiles() { + return m_recentFiles; +} + +inline QStringList Preferences::getRecentFX() { + return m_recentFX; +} + +inline std::vector Preferences::getLadspaPath() { + return m_ladspaPathVect; +} +inline void Preferences::setLadspaPath( std::vector pathVect ) { + m_ladspaPathVect = pathVect; +} + + +// GUI Properties +inline const QString& Preferences::getQTStyle() { + return m_sQTStyle; +} +inline void Preferences::setQTStyle( const QString& sStyle ) { + m_sQTStyle = sStyle; +} + + +inline const QString& Preferences::getApplicationFontFamily() { + return applicationFontFamily; +} +inline void Preferences::setApplicationFontFamily( const QString& family ) { + applicationFontFamily = family; +} + +inline int Preferences::getApplicationFontPointSize() { + return applicationFontPointSize; +} +inline void Preferences::setApplicationFontPointSize( int size ) { + applicationFontPointSize = size; +} + +inline QString Preferences::getMixerFontFamily() { + return mixerFontFamily; +} +inline void Preferences::setMixerFontFamily( const QString& family ) { + mixerFontFamily = family; +} +inline int Preferences::getMixerFontPointSize() { + return mixerFontPointSize; +} +inline void Preferences::setMixerFontPointSize( int size ) { + mixerFontPointSize = size; +} +inline float Preferences::getMixerFalloffSpeed() { + return mixerFalloffSpeed; +} +inline void Preferences::setMixerFalloffSpeed( float value ) { + mixerFalloffSpeed = value; +} +inline bool Preferences::showInstrumentPeaks() { + return m_bShowInstrumentPeaks; +} +inline void Preferences::setInstrumentPeaks( bool value ) { + m_bShowInstrumentPeaks = value; +} + +inline int Preferences::getPatternEditorGridResolution() { + return m_nPatternEditorGridResolution; +} +inline void Preferences::setPatternEditorGridResolution( int value ) { + m_nPatternEditorGridResolution = value; +} + +inline bool Preferences::isPatternEditorUsingTriplets() { + return m_bPatternEditorUsingTriplets; +} +inline void Preferences::setPatternEditorUsingTriplets( bool value ) { + m_bPatternEditorUsingTriplets = value; +} + +inline bool Preferences::isFXTabVisible() { + return m_bIsFXTabVisible; +} +inline void Preferences::setFXTabVisible( bool value ) { + m_bIsFXTabVisible = value; +} + +inline unsigned Preferences::getPatternEditorGridHeight() { + return m_nPatternEditorGridHeight; +} +inline void Preferences::setPatternEditorGridHeight( unsigned value ) { + m_nPatternEditorGridHeight = value; +} + +inline unsigned Preferences::getPatternEditorGridWidth() { + return m_nPatternEditorGridWidth; +} +inline void Preferences::setPatternEditorGridWidth( unsigned value ) { + m_nPatternEditorGridWidth = value; +} + +inline void Preferences::setColoringMethodAuxValue( int value ){ + m_nColoringMethodAuxValue = value; +} + +inline int Preferences::getColoringMethodAuxValue() const{ + return m_nColoringMethodAuxValue; +} + +inline void Preferences::setColoringMethod( int value ){ + m_nColoringMethod = value; +} + +inline int Preferences::getColoringMethod() const{ + return m_nColoringMethod; +} + +inline WindowProperties Preferences::getMainFormProperties() { + return mainFormProperties; +} +inline void Preferences::setMainFormProperties( const WindowProperties& prop ) { + mainFormProperties = prop; +} + +inline WindowProperties Preferences::getMixerProperties() { + return mixerProperties; +} +inline void Preferences::setMixerProperties( const WindowProperties& prop ) { + mixerProperties = prop; +} + +inline WindowProperties Preferences::getPatternEditorProperties() { + return patternEditorProperties; +} +inline void Preferences::setPatternEditorProperties( const WindowProperties& prop ) { + patternEditorProperties = prop; +} + +inline WindowProperties Preferences::getSongEditorProperties() { + return songEditorProperties; +} +inline void Preferences::setSongEditorProperties( const WindowProperties& prop ) { + songEditorProperties = prop; +} + + +inline WindowProperties Preferences::getAudioEngineInfoProperties() { + return audioEngineInfoProperties; +} +inline void Preferences::setAudioEngineInfoProperties( const WindowProperties& prop ) { + audioEngineInfoProperties = prop; +} + +inline WindowProperties Preferences::getLadspaProperties( unsigned nFX ) { + return m_ladspaProperties[nFX]; +} +inline void Preferences::setLadspaProperties( unsigned nFX, const WindowProperties& prop ) { + m_ladspaProperties[nFX] = prop; +} + +inline UIStyle* Preferences::getDefaultUIStyle() { + return m_pDefaultUIStyle; +} + +inline bool Preferences::patternModePlaysSelected() { + return m_bPatternModePlaysSelected; +} +inline void Preferences::setPatternModePlaysSelected( bool b ) { + m_bPatternModePlaysSelected = b; +} + +inline bool Preferences::useLash(){ + return m_bUseLash; +} +inline void Preferences::setUseLash( bool b ){ + m_bUseLash = b; +} + +inline void Preferences::setMaxBars( int bars ){ + maxBars = bars; +} + +inline int Preferences::getMaxBars(){ + return maxBars; +} + +inline void Preferences::setWaitForSessionHandler(bool value){ + waitingForSessionHandler = value; +} + +inline bool Preferences::getWaitForSessionHandler(){ + return waitingForSessionHandler; +} + +#ifdef H2CORE_HAVE_JACKSESSION +inline QString Preferences::getJackSessionUUID(){ + return jackSessionUUID; +} + +inline void Preferences::setJackSessionUUID( QString uuid ){ + jackSessionUUID = uuid; +} + +inline QString Preferences::getJackSessionApplicationPath(){ + return jackSessionApplicationPath; +} + +inline void Preferences::setJackSessionApplicationPath( QString path ){ + jackSessionApplicationPath = path; +} + +#endif + + +#ifdef H2CORE_HAVE_NSMSESSION +inline void Preferences::setNsmClientId(const QString& nsmClientId){ + m_sNsmClientId = nsmClientId; +} + +inline QString Preferences::getNsmClientId(void){ + return m_sNsmClientId; +} + +inline void Preferences::setNsmSongName(const QString& nsmSongName){ + m_sNsmSongName = nsmSongName; +} + +inline QString Preferences::getNsmSongName(void){ + return m_sNsmSongName; +} + +#endif + +inline bool Preferences::getUseTimelineBpm(){ + return __useTimelineBpm; +} +inline void Preferences::setUseTimelineBpm( bool val ){ + __useTimelineBpm = val; +} + +inline int Preferences::getRubberBandCalcTime(){ + return __rubberBandCalcTime; +} +inline void Preferences::setRubberBandCalcTime( int val ){ + __rubberBandCalcTime = val; +} + +inline int Preferences::getRubberBandBatchMode(){ + return m_useTheRubberbandBpmChangeEvent; +} +inline void Preferences::setRubberBandBatchMode( int val ){ + m_useTheRubberbandBpmChangeEvent = val; +} + +inline int Preferences::getLastOpenTab(){ + return m_nLastOpenTab; +} +inline void Preferences::setLastOpenTab(int n){ + m_nLastOpenTab = n; +} + +inline void Preferences::setH2ProcessName(const QString& processName){ + m_sH2ProcessName = processName; +} + +inline QString Preferences::getH2ProcessName() { + return m_sH2ProcessName; +} + + + }; #endif diff -Nru hydrogen-0.9.6.1/src/core/include/hydrogen/sampler/Sampler.h hydrogen-0.9.7/src/core/include/hydrogen/sampler/Sampler.h --- hydrogen-0.9.6.1/src/core/include/hydrogen/sampler/Sampler.h 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/core/include/hydrogen/sampler/Sampler.h 2016-11-05 08:22:50.000000000 +0000 @@ -37,7 +37,10 @@ class Note; class Song; class Sample; +class DrumkitComponent; class Instrument; +struct SelectedLayerInfo; +class InstrumentComponent; class AudioOutput; /// @@ -93,7 +96,7 @@ /// Instrument used for the preview feature. Instrument* __preview_instrument; - unsigned __render_note( Note* pNote, unsigned nBufferSize, Song* pSong ); + bool __render_note( Note* pNote, unsigned nBufferSize, Song* pSong ); InterpolateMode __interpolateMode; @@ -197,9 +200,12 @@ return( a0 * mu * mu2 + a1 * mu2 + a2 * mu + a3 ); }; - int __render_note_no_resample( + bool __render_note_no_resample( Sample *pSample, Note *pNote, + SelectedLayerInfo *pSelectedLayerInfo, + InstrumentComponent *pCompo, + DrumkitComponent *pDrumCompo, int nBufferSize, int nInitialSilence, float cost_L, @@ -209,9 +215,12 @@ Song* pSong ); - int __render_note_resample( + bool __render_note_resample( Sample *pSample, Note *pNote, + SelectedLayerInfo *pSelectedLayerInfo, + InstrumentComponent *pCompo, + DrumkitComponent *pDrumCompo, int nBufferSize, int nInitialSilence, float cost_L, diff -Nru hydrogen-0.9.6.1/src/core/include/hydrogen/smf/SMFEvent.h hydrogen-0.9.7/src/core/include/hydrogen/smf/SMFEvent.h --- hydrogen-0.9.6.1/src/core/include/hydrogen/smf/SMFEvent.h 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/core/include/hydrogen/smf/SMFEvent.h 2016-11-05 08:22:50.000000000 +0000 @@ -100,7 +100,6 @@ H2_OBJECT public: SMFTrackNameMetaEvent( const QString& sTrackName, unsigned nDeltaTime ); - virtual std::vector getBuffer(); private: @@ -109,6 +108,48 @@ }; + +class SMFSetTempoMetaEvent : public SMFEvent +{ + H2_OBJECT +public: + SMFSetTempoMetaEvent( float fBPM, unsigned nDeltaTime ); + virtual std::vector getBuffer(); + +private: + unsigned m_fBPM; + +}; + + + +class SMFCopyRightNoticeMetaEvent : public SMFEvent +{ + H2_OBJECT +public: + SMFCopyRightNoticeMetaEvent( const QString& sAuthor, unsigned nDeltaTime ); + virtual std::vector getBuffer(); + +private: + QString m_sAuthor; + +}; + + + +class SMFTimeSignatureMetaEvent : public SMFEvent +{ + H2_OBJECT +public: + SMFTimeSignatureMetaEvent( unsigned nBeats, unsigned nNote , unsigned nMTPMC , unsigned nTSNP24 , unsigned nTicks ); + virtual std::vector getBuffer(); + // MTPMC = MIDI ticks per metronome click + // TSNP24 = Thirty Second Notes Per 24 MIDI Ticks. +private: + unsigned m_nBeats, m_nNote, m_nMTPMC , m_nTSNP24 , m_nTicks; +}; + + class SMFNoteOnEvent : public SMFEvent { diff -Nru hydrogen-0.9.6.1/src/core/include/hydrogen/smf/SMF.h hydrogen-0.9.7/src/core/include/hydrogen/smf/SMF.h --- hydrogen-0.9.6.1/src/core/include/hydrogen/smf/SMF.h 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/core/include/hydrogen/smf/SMF.h 2016-11-05 08:22:50.000000000 +0000 @@ -55,7 +55,8 @@ { H2_OBJECT public: - SMFTrack( const QString& sTrackName ); + + SMFTrack(); ~SMFTrack(); void addEvent( SMFEvent *pEvent ); diff -Nru hydrogen-0.9.6.1/src/core/include/hydrogen/timeline.h hydrogen-0.9.7/src/core/include/hydrogen/timeline.h --- hydrogen-0.9.6.1/src/core/include/hydrogen/timeline.h 1970-01-01 00:00:00.000000000 +0000 +++ hydrogen-0.9.7/src/core/include/hydrogen/timeline.h 2016-11-05 08:22:50.000000000 +0000 @@ -0,0 +1,81 @@ +/* + * Hydrogen + * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] + * + * http://www.hydrogen-music.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY, without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef TIMELINE_H +#define TIMELINE_H + +#include + +namespace H2Core +{ + class Timeline : public H2Core::Object + { + H2_OBJECT + + public: + Timeline(); + + ///sample editor vectors + void sortTimelineVector(); + void sortTimelineTagVector(); + + /// timeline vector + struct HTimelineVector + { + int m_htimelinebeat; //beat position in timeline + float m_htimelinebpm; //BPM + }; + + /// timeline tag vector + struct HTimelineTagVector + { + int m_htimelinetagbeat; //beat position in timeline + QString m_htimelinetag; // tag + }; + + + std::vector m_timelinevector; + std::vector m_timelinetagvector; + + struct TimelineComparator + { + bool operator()( HTimelineVector const& lhs, HTimelineVector const& rhs) + { + return lhs.m_htimelinebeat < rhs.m_htimelinebeat; + } + }; + + struct TimelineTagComparator + { + bool operator()( HTimelineTagVector const& lhs, HTimelineTagVector const& rhs) + { + return lhs.m_htimelinetagbeat < rhs.m_htimelinetagbeat; + } + }; + + + private: + + }; +}; + +#endif // TIMELINE_H diff -Nru hydrogen-0.9.6.1/src/core/src/basics/adsr.cpp hydrogen-0.9.7/src/core/src/basics/adsr.cpp --- hydrogen-0.9.6.1/src/core/src/basics/adsr.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/core/src/basics/adsr.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -43,7 +43,8 @@ __release( release ), __state( ATTACK ), __ticks( 0.0 ), - __value( 0.0 ) + __value( 0.0 ), + __release_value( 0.0 ) { } ADSR::ADSR( const ADSR* other ) : Object( __class_name ), @@ -53,7 +54,8 @@ __release( other->__release ), __state( other->__state ), __ticks( other->__ticks ), - __value( other->__value ) + __value( other->__value ), + __release_value( other->__release_value ) { } ADSR::~ADSR() { } diff -Nru hydrogen-0.9.6.1/src/core/src/basics/drumkit_component.cpp hydrogen-0.9.7/src/core/src/basics/drumkit_component.cpp --- hydrogen-0.9.6.1/src/core/src/basics/drumkit_component.cpp 1970-01-01 00:00:00.000000000 +0000 +++ hydrogen-0.9.7/src/core/src/basics/drumkit_component.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -0,0 +1,137 @@ +/* + * Hydrogen + * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] + * + * http://www.hydrogen-music.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY, without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#include + +#include + +#include + +#include +#include + +#include +#include +#include +#include +#include + +namespace H2Core +{ + +const char* DrumkitComponent::__class_name = "DrumkitComponent"; + +DrumkitComponent::DrumkitComponent( const int id, const QString& name ) + : Object( __class_name ) + , __id( id ) + , __name( name ) + , __volume( 1.0 ) + , __muted( false ) + , __soloed( false ) + , __out_L( NULL ) + , __out_R( NULL ) +{ + __out_L = new float[ MAX_BUFFER_SIZE ]; + __out_R = new float[ MAX_BUFFER_SIZE ]; +} + +DrumkitComponent::DrumkitComponent( DrumkitComponent* other ) + : Object( __class_name ) + , __id( other->get_id() ) + , __name( other->get_name() ) + , __volume( other->__volume ) + , __muted( other->__muted ) + , __soloed( other->__soloed ) + , __out_L( NULL ) + , __out_R( NULL ) +{ + __out_L = new float[ MAX_BUFFER_SIZE ]; + __out_R = new float[ MAX_BUFFER_SIZE ]; +} + +DrumkitComponent::~DrumkitComponent() +{ + delete[] __out_L; + delete[] __out_R; +} + +void DrumkitComponent::reset_outs( uint32_t nFrames ) +{ + memset( __out_L, 0, nFrames * sizeof( float ) ); + memset( __out_R, 0, nFrames * sizeof( float ) ); +} + +void DrumkitComponent::set_outs( int nBufferPos, float valL, float valR ) +{ + __out_L[nBufferPos] += valL; + __out_R[nBufferPos] += valR; +} + +float DrumkitComponent::get_out_L( int nBufferPos ) +{ + return __out_L[nBufferPos]; +} + +float DrumkitComponent::get_out_R( int nBufferPos ) +{ + return __out_R[nBufferPos]; +} + +void DrumkitComponent::load_from( DrumkitComponent* component, bool is_live ) +{ + if ( is_live ){ + AudioEngine::get_instance()->lock( RIGHT_HERE ); + } + + this->set_id( component->get_id() ); + this->set_name( component->get_name() ); + this->set_muted( component->is_muted() ); + this->set_volume( component->get_volume() ); + + if ( is_live ){ + AudioEngine::get_instance()->unlock(); + } +} + +DrumkitComponent* DrumkitComponent::load_from( XMLNode* node, const QString& dk_path ) +{ + int id = node->read_int( "id", EMPTY_INSTR_ID, false, false ); + if ( id==EMPTY_INSTR_ID ){ + return 0; + } + + DrumkitComponent* pDrumkitComponent = new DrumkitComponent( id, node->read_string( "name", "" ) ); + pDrumkitComponent->set_volume( node->read_float( "volume", 1.0f, true, false ) ); + + return pDrumkitComponent; +} + +void DrumkitComponent::save_to( XMLNode* node ) +{ + XMLNode ComponentNode = node->ownerDocument().createElement( "drumkitComponent" ); + ComponentNode.write_int( "id", __id ); + ComponentNode.write_string( "name", __name ); + ComponentNode.write_float( "volume", __volume ); + node->appendChild( ComponentNode ); +} + +}; diff -Nru hydrogen-0.9.6.1/src/core/src/basics/drumkit.cpp hydrogen-0.9.7/src/core/src/basics/drumkit.cpp --- hydrogen-0.9.6.1/src/core/src/basics/drumkit.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/core/src/basics/drumkit.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -35,8 +35,10 @@ #endif #include +#include #include #include +#include #include #include @@ -48,7 +50,10 @@ const char* Drumkit::__class_name = "Drumkit"; -Drumkit::Drumkit() : Object( __class_name ), __samples_loaded( false ), __instruments( 0 ) { } +Drumkit::Drumkit() : Object( __class_name ), __samples_loaded( false ), __instruments( 0 ), __components( NULL ) +{ + __components = new std::vector (); +} Drumkit::Drumkit( Drumkit* other ) : Object( __class_name ), @@ -57,13 +62,23 @@ __author( other->get_author() ), __info( other->get_info() ), __license( other->get_license() ), - __samples_loaded( other->samples_loaded() ) + __image( other->get_image() ), + __imageLicense( other->get_image_license() ), + __samples_loaded( other->samples_loaded() ), + __components( NULL ) { __instruments = new InstrumentList( other->get_instruments() ); + + __components = new std::vector (); + __components->assign( other->get_components()->begin(), other->get_components()->end() ); + } Drumkit::~Drumkit() { + __components->clear(); + delete __components; + if( __instruments ) delete __instruments; } @@ -113,6 +128,31 @@ drumkit->__author = node->read_string( "author", "undefined author" ); drumkit->__info = node->read_string( "info", "No information available." ); drumkit->__license = node->read_string( "license", "undefined license" ); + drumkit->__image = node->read_string( "image", "" ); + drumkit->__imageLicense = node->read_string( "imageLicense", "undefined license" ); + + + XMLNode componentListNode = node->firstChildElement( "componentList" ); + if ( ! componentListNode.isNull() ) { + XMLNode componentNode = componentListNode.firstChildElement( "drumkitComponent" ); + while ( ! componentNode.isNull() ) { + int id = componentNode.read_int( "id", -1 ); // instrument id + QString sName = componentNode.read_string( "name", "" ); // name + float fVolume = componentNode.read_float( "volume", 1.0 ); // volume + DrumkitComponent* pDrumkitComponent = new DrumkitComponent( id, sName ); + pDrumkitComponent->set_volume( fVolume ); + + drumkit->get_components()->push_back(pDrumkitComponent); + + componentNode = componentNode.nextSiblingElement( "drumkitComponent" ); + } + } + else { + WARNINGLOG( "componentList node not found" ); + DrumkitComponent* pDrumkitComponent = new DrumkitComponent( 0, "Main" ); + drumkit->get_components()->push_back(pDrumkitComponent); + } + XMLNode instruments_node = node->firstChildElement( "instrumentList" ); if ( instruments_node.isNull() ) { WARNINGLOG( "instrumentList node not found" ); @@ -141,20 +181,48 @@ } } -bool Drumkit::save( const QString& name, const QString& author, const QString& info, const QString& license, InstrumentList* instruments, bool overwrite ) -{ +bool Drumkit::save( const QString& name, + const QString& author, + const QString& info, + const QString& license, + const QString& image, + const QString& imageLicense, + InstrumentList* pInstruments, + std::vector* pComponents, + bool overwrite ) +{ + + Drumkit* pDrumkit = new Drumkit(); + pDrumkit->set_name( name ); + pDrumkit->set_author( author ); + pDrumkit->set_info( info ); + pDrumkit->set_license( license ); + + // save the original path + QFileInfo fi( image ); + pDrumkit->set_path( fi.absolutePath() ); + pDrumkit->set_image( fi.fileName() ); + pDrumkit->set_image_license( imageLicense ); + + + pDrumkit->set_instruments( new InstrumentList( pInstruments ) ); // FIXME: why must we do that ? there is something weird with updateInstrumentLines + std::vector* pCopiedVector = new std::vector (); + for (std::vector::iterator it = pComponents->begin() ; it != pComponents->end(); ++it) { + DrumkitComponent* pSrcComponent = *it; + pCopiedVector->push_back( new DrumkitComponent( pSrcComponent ) ); + } + pDrumkit->set_components( pCopiedVector ); + bool ret = pDrumkit->save( overwrite ); + delete pDrumkit; - Drumkit* drumkit = new Drumkit(); - drumkit->set_name( name ); - drumkit->set_author( author ); - drumkit->set_info( info ); - drumkit->set_license( license ); - drumkit->set_instruments( new InstrumentList( instruments ) ); // FIXME: why must we do that ? there is something weird with updateInstrumentLines - bool ret = drumkit->save( overwrite ); - delete drumkit; return ret; } +bool Drumkit::user_drumkit_exists( const QString& name) +{ + return Filesystem::file_exists( QString( Filesystem::usr_drumkits_dir() + "/" + name + "/drumkit.xml") , true /*silent*/); +} + bool Drumkit::save( bool overwrite ) { return save( QString( Filesystem::usr_drumkits_dir() + "/" + __name ), overwrite ); @@ -173,7 +241,7 @@ return ret; } -bool Drumkit::save_file( const QString& dk_path, bool overwrite ) +bool Drumkit::save_file( const QString& dk_path, bool overwrite, int component_id ) { INFOLOG( QString( "Saving drumkit definition into %1" ).arg( dk_path ) ); if( Filesystem::file_exists( dk_path, true ) && !overwrite ) { @@ -183,17 +251,28 @@ XMLDoc doc; doc.set_root( "drumkit_info", "drumkit" ); XMLNode root = doc.firstChildElement( "drumkit_info" ); - save_to( &root ); + save_to( &root, component_id ); return doc.write( dk_path ); } -void Drumkit::save_to( XMLNode* node ) +void Drumkit::save_to( XMLNode* node, int component_id ) { node->write_string( "name", __name ); node->write_string( "author", __author ); node->write_string( "info", __info ); node->write_string( "license", __license ); - __instruments->save_to( node ); + node->write_string( "image", __image ); + node->write_string( "imageLicense", __imageLicense ); + + if( component_id == -1 ) { + XMLNode components_node = node->ownerDocument().createElement( "componentList" ); + for (std::vector::iterator it = __components->begin() ; it != __components->end(); ++it) { + DrumkitComponent* pComponent = *it; + pComponent->save_to( &components_node ); + } + node->appendChild( components_node ); + } + __instruments->save_to( node, component_id ); } bool Drumkit::save_samples( const QString& dk_dir, bool overwrite ) @@ -206,37 +285,67 @@ InstrumentList* instruments = get_instruments(); for( int i = 0; i < instruments->size(); i++ ) { Instrument* instrument = ( *instruments )[i]; - for( int n = 0; n < MAX_LAYERS; n++ ) { - InstrumentLayer* layer = instrument->get_layer( n ); - if( layer ) { - QString src = layer->get_sample()->get_filepath(); - QString dst = dk_dir + "/" + layer->get_sample()->get_filename(); - - if( src != dst ) { - QString original_dst = dst; - - // If the destination path does not have an extension and there is a dot in the path, hell will break loose. QFileInfo maybe? - int insertPosition = original_dst.length(); - if( original_dst.lastIndexOf(".") > 0 ) - insertPosition = original_dst.lastIndexOf("."); - - // If the destination path already exists, try to use basename_1, basename_2, etc. instead of basename. - int tries = 0; - while( Filesystem::file_exists( dst )) { - tries++; - dst = original_dst; - dst.insert( insertPosition, QString("_%1").arg(tries) ); - } + for (std::vector::iterator it = instrument->get_components()->begin() ; it != instrument->get_components()->end(); ++it) { + InstrumentComponent* component = *it; - layer->get_sample()->set_filename( dst ); - - if( !Filesystem::file_copy( src, dst ) ) { - return false; + for( int n = 0; n < MAX_LAYERS; n++ ) { + InstrumentLayer* layer = component->get_layer( n ); + if( layer ) { + QString src = layer->get_sample()->get_filepath(); + QString dst = dk_dir + "/" + layer->get_sample()->get_filename(); + + if( src != dst ) { + QString original_dst = dst; + + // If the destination path does not have an extension and there is a dot in the path, hell will break loose. QFileInfo maybe? + int insertPosition = original_dst.length(); + if( original_dst.lastIndexOf(".") > 0 ) + insertPosition = original_dst.lastIndexOf("."); + + + if(overwrite == false) + { + // If the destination path already exists, try to use basename_1, basename_2, etc. instead of basename. + int tries = 0; + while( Filesystem::file_exists( dst, true )) { + tries++; + dst = original_dst; + dst.insert( insertPosition, QString("_%1").arg(tries) ); + } + } + + layer->get_sample()->set_filename( dst ); + + if( !Filesystem::file_copy( src, dst ) ) { + return false; + } } } } } } + if ( !save_image( dk_dir, overwrite ) ) { + return false; + } + + return true; +} + +bool Drumkit::save_image( const QString& dk_dir, bool overwrite ) +{ + if ( __image.length() > 0 ) + { + QString src = __path + "/" + __image; + QString dst = dk_dir + "/" + __image; + if ( Filesystem::file_exists ( src ) ) + { + if( !Filesystem::file_copy( src, dst ) ) + { + ERRORLOG( QString( "Error copying %1 to %2").arg( src ).arg( dst ) ); + return false; + } + } + } return true; } @@ -246,6 +355,12 @@ __instruments = instruments; } +void Drumkit::set_components( std::vector* components ) +{ + if( __components != 0 ) delete __components; + __components = components; +} + bool Drumkit::remove( const QString& dk_name ) { QString dk_dir = Filesystem::drumkit_path_search( dk_name ); @@ -268,6 +383,9 @@ DEBUGLOG( " |- Name = " + __name ); DEBUGLOG( " |- Author = " + __author ); DEBUGLOG( " |- Info = " + __info ); + DEBUGLOG( " |- Image = " + __image ); + DEBUGLOG( " |- Image = " + __imageLicense ); + DEBUGLOG( " |- Instrument list" ); for ( int i=0; i<__instruments->size(); i++ ) { Instrument* instrument = ( *__instruments )[i]; @@ -276,14 +394,18 @@ .arg( __instruments->size()-1 ) .arg( instrument->get_name() ) ); - for ( int j=0; jget_layer( j ); - if ( layer ) { - Sample* sample = layer->get_sample(); - if ( sample ) { - DEBUGLOG( QString( " |- %1 [%2]" ).arg( sample->get_filepath() ).arg( sample->is_empty() ) ); - } else { - DEBUGLOG( " |- NULL sample" ); + for (std::vector::iterator it = instrument->get_components()->begin() ; it != instrument->get_components()->end(); ++it) { + InstrumentComponent* component = *it; + + for ( int j=0; jget_layer( j ); + if ( layer ) { + Sample* sample = layer->get_sample(); + if ( sample ) { + DEBUGLOG( QString( " |- %1 [%2]" ).arg( sample->get_filepath() ).arg( sample->is_empty() ) ); + } else { + DEBUGLOG( " |- NULL sample" ); + } } } } @@ -297,7 +419,7 @@ int r; struct archive* arch; struct archive_entry* entry; - char newpath[1024]; + arch = archive_read_new(); #if ARCHIVE_VERSION_NUMBER < 3000000 @@ -333,8 +455,10 @@ break; } QString np = dk_dir + archive_entry_pathname( entry ); - strncpy( newpath, np.toLocal8Bit(), 1024 ); - archive_entry_set_pathname( entry, newpath ); + + QByteArray newpath = np.toLocal8Bit(); + + archive_entry_set_pathname( entry, newpath.data() ); r = archive_read_extract( arch, entry, 0 ); if ( r == ARCHIVE_WARN ) { _WARNINGLOG( QString( "archive_read_extract() [%1] %2" ).arg( archive_errno( arch ) ).arg( archive_error_string( arch ) ) ); @@ -373,9 +497,10 @@ fclose( gzd_file ); // UNTAR TAR* tar_file; - char tar_path[1024]; - strncpy( tar_path, gzd_name.toLocal8Bit(), 1024 ); - if ( tar_open( &tar_file, tar_path, NULL, O_RDONLY, 0, TAR_GNU ) == -1 ) { + + QByteArray tar_path = gzd_name.toLocal8Bit(); + + if ( tar_open( &tar_file, tar_path.data(), NULL, O_RDONLY, 0, TAR_GNU ) == -1 ) { _ERRORLOG( QString( "tar_open(): %1" ).arg( QString::fromLocal8Bit( strerror( errno ) ) ) ); return false; } diff -Nru hydrogen-0.9.6.1/src/core/src/basics/instrument_component.cpp hydrogen-0.9.7/src/core/src/basics/instrument_component.cpp --- hydrogen-0.9.6.1/src/core/src/basics/instrument_component.cpp 1970-01-01 00:00:00.000000000 +0000 +++ hydrogen-0.9.7/src/core/src/basics/instrument_component.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -0,0 +1,119 @@ +/* + * Hydrogen + * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] + * + * http://www.hydrogen-music.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY, without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#include + +#include + +#include + +#include +#include + +#include +#include +#include +#include +#include +#include + +namespace H2Core +{ + +const char* InstrumentComponent::__class_name = "InstrumentComponent"; + +InstrumentComponent::InstrumentComponent( int related_drumkit_componentID ) + : Object( __class_name ) + , __related_drumkit_componentID( related_drumkit_componentID ) + , __gain( 1.0 ) +{ + for ( int i=0; i__related_drumkit_componentID ) + , __gain( other->__gain ) +{ + for ( int i=0; iget_layer( i ); + if ( other_layer ) { + __layers[i] = new InstrumentLayer( other_layer, other_layer->get_sample()); + } else { + __layers[i] = 0; + } + } +} + +InstrumentComponent::~InstrumentComponent() +{ + for ( int i=0; iread_int( "component_id", EMPTY_INSTR_ID, false, false ); + if ( id==EMPTY_INSTR_ID ) return 0; + + InstrumentComponent* instrument_component = new InstrumentComponent( id ); + instrument_component->set_gain( node->read_float( "gain", 1.0f, true, false ) ); + XMLNode layer_node = node->firstChildElement( "layer" ); + int n = 0; + while ( !layer_node.isNull() ) { + if ( n >= MAX_LAYERS ) { + ERRORLOG( QString( "n >= MAX_LAYERS (%1)" ).arg( MAX_LAYERS ) ); + break; + } + instrument_component->set_layer( InstrumentLayer::load_from( &layer_node, dk_path ), n ); + n++; + layer_node = layer_node.nextSiblingElement( "layer" ); + } + return instrument_component; +} + +void InstrumentComponent::save_to( XMLNode* node, int component_id ) +{ + XMLNode component_node; + if( component_id == -1 ){ + component_node = node->ownerDocument().createElement( "instrumentComponent" ); + component_node.write_int( "component_id", __related_drumkit_componentID ); + component_node.write_float( "gain", __gain ); + } + for ( int n = 0; n < MAX_LAYERS; n++ ) { + InstrumentLayer* layer = get_layer( n ); + if( layer ) { + if( component_id == -1 ) + layer->save_to( &component_node ); + else + layer->save_to( node ); + } + } + if( component_id == -1 ) + node->appendChild( component_node ); +} + +}; + +/* vim: set softtabstop=4 expandtab: */ diff -Nru hydrogen-0.9.6.1/src/core/src/basics/instrument.cpp hydrogen-0.9.7/src/core/src/basics/instrument.cpp --- hydrogen-0.9.6.1/src/core/src/basics/instrument.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/core/src/basics/instrument.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -32,7 +32,9 @@ #include #include #include +#include #include +#include #include namespace H2Core @@ -55,18 +57,26 @@ , __filter_cutoff( 1.0 ) , __filter_resonance( 0.0 ) , __random_pitch_factor( 0.0 ) - , __midi_out_note( MIDI_MIDDLE_C ) + , __midi_out_note( 36 + id ) , __midi_out_channel( -1 ) , __stop_notes( false ) + , __sample_selection_alg( VELOCITY ) , __active( true ) , __soloed( false ) , __muted( false ) , __mute_group( -1 ) , __queued( 0 ) + , __hihat_grp( -1 ) + , __lower_cc( 0 ) + , __higher_cc( 127 ) + , __components( NULL ) + , __is_preview_instrument(false) + , __is_metronome_instrument(false) + , __apply_velocity( true ) { if ( __adsr==0 ) __adsr = new ADSR(); for ( int i=0; i (); } Instrument::Instrument( Instrument* other ) @@ -87,92 +97,110 @@ , __midi_out_note( other->get_midi_out_note() ) , __midi_out_channel( other->get_midi_out_channel() ) , __stop_notes( other->is_stop_notes() ) + , __sample_selection_alg( other->sample_selection_alg() ) , __active( other->is_active() ) , __soloed( other->is_soloed() ) , __muted( other->is_muted() ) , __mute_group( other->get_mute_group() ) , __queued( other->is_queued() ) + , __hihat_grp( other->get_hihat_grp() ) + , __lower_cc( other->get_lower_cc() ) + , __higher_cc( other->get_higher_cc() ) + , __components( NULL ) + , __is_preview_instrument(false) + , __is_metronome_instrument(false) + , __apply_velocity( other->get_apply_velocity() ) { for ( int i=0; iget_fx_level( i ); - for ( int i=0; iget_layer( i ); - if ( other_layer ) { - __layers[i] = new InstrumentLayer( other_layer ); - } else { - __layers[i] = 0; - } - } + __components = new std::vector (); + __components->assign( other->get_components()->begin(), other->get_components()->end() ); } Instrument::~Instrument() { - for ( int i=0; iclear(); + delete __components; + delete __adsr; __adsr = 0; } Instrument* Instrument::load_instrument( const QString& drumkit_name, const QString& instrument_name ) { - Instrument* i = new Instrument(); - i->load_from( drumkit_name, instrument_name, false ); - return i; -} - -void Instrument::load_from( Drumkit* drumkit, Instrument* instrument, bool is_live ) -{ - for ( int i=0; iget_layer( i ); - InstrumentLayer* my_layer = this->get_layer( i ); - if( src_layer==0 ) { - if ( is_live ) - AudioEngine::get_instance()->lock( RIGHT_HERE ); - this->set_layer( NULL, i ); - if ( is_live ) - AudioEngine::get_instance()->unlock(); - } else { - QString sample_path = drumkit->get_path() + "/" + src_layer->get_sample()->get_filename(); - Sample* sample = Sample::load( sample_path ); - if ( sample==0 ) { - _ERRORLOG( QString( "Error loading sample %1. Creating a new empty layer." ).arg( sample_path ) ); + Instrument* pInstrument = new Instrument(); + pInstrument->load_from( drumkit_name, instrument_name, false ); + return pInstrument; +} + +void Instrument::load_from( Drumkit* pDrumkit, Instrument* pInstrument, bool is_live ) +{ + this->get_components()->clear(); + + for (std::vector::iterator it = pInstrument->get_components()->begin() ; it != pInstrument->get_components()->end(); ++it) { + InstrumentComponent* pSrcComponent = *it; + + InstrumentComponent* pMyComponent = new InstrumentComponent( pSrcComponent->get_drumkit_componentID() ); + pMyComponent->set_gain( pSrcComponent->get_gain() ); + + this->get_components()->push_back( pMyComponent ); + + for ( int i=0; iget_layer( i ); + InstrumentLayer* my_layer = pMyComponent->get_layer( i ); + + if( src_layer==0 ) { if ( is_live ) AudioEngine::get_instance()->lock( RIGHT_HERE ); - this->set_layer( NULL, i ); + pMyComponent->set_layer( NULL, i ); if ( is_live ) AudioEngine::get_instance()->unlock(); } else { - if ( is_live ) - AudioEngine::get_instance()->lock( RIGHT_HERE ); - this->set_layer( new InstrumentLayer( src_layer, sample ), i ); - if ( is_live ) - AudioEngine::get_instance()->unlock(); + QString sample_path = pDrumkit->get_path() + "/" + src_layer->get_sample()->get_filename(); + Sample* sample = Sample::load( sample_path ); + if ( sample==0 ) { + _ERRORLOG( QString( "Error loading sample %1. Creating a new empty layer." ).arg( sample_path ) ); + if ( is_live ) + AudioEngine::get_instance()->lock( RIGHT_HERE ); + pMyComponent->set_layer( NULL, i ); + if ( is_live ) + AudioEngine::get_instance()->unlock(); + } else { + if ( is_live ) + AudioEngine::get_instance()->lock( RIGHT_HERE ); + pMyComponent->set_layer( new InstrumentLayer( src_layer, sample ), i ); + if ( is_live ) + AudioEngine::get_instance()->unlock(); + } } + delete my_layer; } - delete my_layer; } if ( is_live ) AudioEngine::get_instance()->lock( RIGHT_HERE ); - this->set_id( instrument->get_id() ); - this->set_name( instrument->get_name() ); - this->set_drumkit_name( drumkit->get_name() ); - this->set_gain( instrument->get_gain() ); - this->set_volume( instrument->get_volume() ); - this->set_pan_l( instrument->get_pan_l() ); - this->set_pan_r( instrument->get_pan_r() ); - this->set_adsr( new ADSR( *( instrument->get_adsr() ) ) ); - this->set_filter_active( instrument->is_filter_active() ); - this->set_filter_cutoff( instrument->get_filter_cutoff() ); - this->set_filter_resonance( instrument->get_filter_resonance() ); - this->set_random_pitch_factor( instrument->get_random_pitch_factor() ); - this->set_muted( instrument->is_muted() ); - this->set_mute_group( instrument->get_mute_group() ); - this->set_midi_out_channel( instrument->get_midi_out_channel() ); - this->set_midi_out_note( instrument->get_midi_out_note() ); - this->set_stop_notes( instrument->is_stop_notes() ); + this->set_id( pInstrument->get_id() ); + this->set_name( pInstrument->get_name() ); + this->set_drumkit_name( pDrumkit->get_name() ); + this->set_gain( pInstrument->get_gain() ); + this->set_volume( pInstrument->get_volume() ); + this->set_pan_l( pInstrument->get_pan_l() ); + this->set_pan_r( pInstrument->get_pan_r() ); + this->set_adsr( new ADSR( *( pInstrument->get_adsr() ) ) ); + this->set_filter_active( pInstrument->is_filter_active() ); + this->set_filter_cutoff( pInstrument->get_filter_cutoff() ); + this->set_filter_resonance( pInstrument->get_filter_resonance() ); + this->set_random_pitch_factor( pInstrument->get_random_pitch_factor() ); + this->set_muted( pInstrument->is_muted() ); + this->set_mute_group( pInstrument->get_mute_group() ); + this->set_midi_out_channel( pInstrument->get_midi_out_channel() ); + this->set_midi_out_note( pInstrument->get_midi_out_note() ); + this->set_stop_notes( pInstrument->is_stop_notes() ); + this->set_sample_selection_alg( pInstrument->sample_selection_alg() ); + this->set_hihat_grp( pInstrument->get_hihat_grp() ); + this->set_lower_cc( pInstrument->get_lower_cc() ); + this->set_higher_cc( pInstrument->get_higher_cc() ); + this->set_apply_velocity ( pInstrument->get_apply_velocity() ); if ( is_live ) AudioEngine::get_instance()->unlock(); } @@ -180,8 +208,12 @@ void Instrument::load_from( const QString& dk_name, const QString& instrument_name, bool is_live ) { Drumkit* drumkit = Drumkit::load_by_name( dk_name ); - if ( ! drumkit ) return; + if ( ! drumkit ){ + return; + } + assert( drumkit ); + Instrument* instrument = drumkit->get_instruments()->find( instrument_name ); if ( instrument!=0 ) { load_from( drumkit, instrument, is_live ); @@ -192,93 +224,129 @@ Instrument* Instrument::load_from( XMLNode* node, const QString& dk_path, const QString& dk_name ) { int id = node->read_int( "id", EMPTY_INSTR_ID, false, false ); - if ( id==EMPTY_INSTR_ID ) return 0; - Instrument* instrument = new Instrument( id, node->read_string( "name", "" ), 0 ); - instrument->set_drumkit_name( dk_name ); - instrument->set_volume( node->read_float( "volume", 1.0f ) ); - instrument->set_muted( node->read_bool( "isMuted", false ) ); - instrument->set_pan_l( node->read_float( "pan_L", 1.0f ) ); - instrument->set_pan_r( node->read_float( "pan_R", 1.0f ) ); + if ( id==EMPTY_INSTR_ID ){ + return 0; + } + + Instrument* pInstrument = new Instrument( id, node->read_string( "name", "" ), 0 ); + pInstrument->set_drumkit_name( dk_name ); + pInstrument->set_volume( node->read_float( "volume", 1.0f ) ); + pInstrument->set_muted( node->read_bool( "isMuted", false ) ); + pInstrument->set_pan_l( node->read_float( "pan_L", 1.0f ) ); + pInstrument->set_pan_r( node->read_float( "pan_R", 1.0f ) ); // may not exist, but can't be empty - instrument->set_filter_active( node->read_bool( "filterActive", true, false ) ); - instrument->set_filter_cutoff( node->read_float( "filterCutoff", 1.0f, true, false ) ); - instrument->set_filter_resonance( node->read_float( "filterResonance", 0.0f, true, false ) ); - instrument->set_random_pitch_factor( node->read_float( "randomPitchFactor", 0.0f, true, false ) ); + pInstrument->set_apply_velocity( node->read_bool( "applyVelocity", true, false ) ); + pInstrument->set_filter_active( node->read_bool( "filterActive", true, false ) ); + pInstrument->set_filter_cutoff( node->read_float( "filterCutoff", 1.0f, true, false ) ); + pInstrument->set_filter_resonance( node->read_float( "filterResonance", 0.0f, true, false ) ); + pInstrument->set_random_pitch_factor( node->read_float( "randomPitchFactor", 0.0f, true, false ) ); float attack = node->read_float( "Attack", 0.0f, true, false ); float decay = node->read_float( "Decay", 0.0f, true, false ); float sustain = node->read_float( "Sustain", 1.0f, true, false ); float release = node->read_float( "Release", 1000.0f, true, false ); - instrument->set_adsr( new ADSR( attack, decay, sustain, release ) ); - instrument->set_gain( node->read_float( "gain", 1.0f, true, false ) ); - instrument->set_mute_group( node->read_int( "muteGroup", -1, true, false ) ); - instrument->set_midi_out_channel( node->read_int( "midiOutChannel", -1, true, false ) ); - instrument->set_midi_out_note( node->read_int( "midiOutNote", MIDI_MIDDLE_C, true, false ) ); - instrument->set_stop_notes( node->read_bool( "isStopNote", true ,false ) ); + pInstrument->set_adsr( new ADSR( attack, decay, sustain, release ) ); + pInstrument->set_gain( node->read_float( "gain", 1.0f, true, false ) ); + pInstrument->set_mute_group( node->read_int( "muteGroup", -1, true, false ) ); + pInstrument->set_midi_out_channel( node->read_int( "midiOutChannel", -1, true, false ) ); + pInstrument->set_midi_out_note( node->read_int( "midiOutNote", pInstrument->__midi_out_note, true, false ) ); + pInstrument->set_stop_notes( node->read_bool( "isStopNote", true ,false ) ); + + QString sRead_sample_select_algo = node->read_string( "sampleSelectionAlgo", "VELOCITY" ); + if ( sRead_sample_select_algo.compare("VELOCITY") == 0 ) + pInstrument->set_sample_selection_alg( VELOCITY ); + else if ( sRead_sample_select_algo.compare("ROUND_ROBIN") == 0 ) + pInstrument->set_sample_selection_alg( ROUND_ROBIN ); + else if ( sRead_sample_select_algo.compare("RANDOM") == 0 ) + pInstrument->set_sample_selection_alg( RANDOM ); + + pInstrument->set_hihat_grp( node->read_int( "isHihat", -1, true ) ); + pInstrument->set_lower_cc( node->read_int( "lower_cc", 0, true ) ); + pInstrument->set_higher_cc( node->read_int( "higher_cc", 127, true ) ); + for ( int i=0; iset_fx_level( node->read_float( QString( "FX%1Level" ).arg( i+1 ), 0.0 ), i ); + pInstrument->set_fx_level( node->read_float( QString( "FX%1Level" ).arg( i+1 ), 0.0 ), i ); } - int n = 0; - XMLNode layer_node = node->firstChildElement( "layer" ); - while ( !layer_node.isNull() ) { - if ( n >= MAX_LAYERS ) { - ERRORLOG( QString( "n >= MAX_LAYERS (%1)" ).arg( MAX_LAYERS ) ); - break; - } - instrument->set_layer( InstrumentLayer::load_from( &layer_node, dk_path ), n ); - n++; - layer_node = layer_node.nextSiblingElement( "layer" ); + + XMLNode ComponentNode = node->firstChildElement( "instrumentComponent" ); + while ( !ComponentNode.isNull() ) { + pInstrument->get_components()->push_back( InstrumentComponent::load_from( &ComponentNode, dk_path ) ); + ComponentNode = ComponentNode.nextSiblingElement( "instrumentComponent" ); } - return instrument; + return pInstrument; } void Instrument::load_samples() { - for ( int i=0; iload_sample( ); + for (std::vector::iterator it = get_components()->begin() ; it != get_components()->end(); ++it) { + InstrumentComponent* component = *it; + for ( int i=0; iget_layer( i ); + if( layer ) layer->load_sample( ); + } } } void Instrument::unload_samples() { - for ( int i=0; iunload_sample(); + for (std::vector::iterator it = get_components()->begin() ; it != get_components()->end(); ++it) { + InstrumentComponent* component = *it; + for ( int i=0; iget_layer( i ); + if( layer ) layer->unload_sample(); + } } } -void Instrument::save_to( XMLNode* node ) -{ - XMLNode instrument_node = node->ownerDocument().createElement( "instrument" ); - instrument_node.write_int( "id", __id ); - instrument_node.write_string( "name", __name ); - instrument_node.write_float( "volume", __volume ); - instrument_node.write_bool( "isMuted", __muted ); - instrument_node.write_float( "pan_L", __pan_l ); - instrument_node.write_float( "pan_R", __pan_r ); - instrument_node.write_float( "randomPitchFactor", __random_pitch_factor ); - instrument_node.write_float( "gain", __gain ); - instrument_node.write_bool( "filterActive", __filter_active ); - instrument_node.write_float( "filterCutoff", __filter_cutoff ); - instrument_node.write_float( "filterResonance", __filter_resonance ); - instrument_node.write_float( "Attack", __adsr->get_attack() ); - instrument_node.write_float( "Decay", __adsr->get_decay() ); - instrument_node.write_float( "Sustain", __adsr->get_sustain() ); - instrument_node.write_float( "Release", __adsr->get_release() ); - instrument_node.write_int( "muteGroup", __mute_group ); - instrument_node.write_int( "midiOutChannel", __midi_out_channel ); - instrument_node.write_int( "midiOutNote", __midi_out_note ); - instrument_node.write_bool( "isStopNote", __stop_notes ); +void Instrument::save_to( XMLNode* node, int component_id ) +{ + XMLNode InstrumentNode = node->ownerDocument().createElement( "instrument" ); + InstrumentNode.write_int( "id", __id ); + InstrumentNode.write_string( "name", __name ); + InstrumentNode.write_float( "volume", __volume ); + InstrumentNode.write_bool( "isMuted", __muted ); + InstrumentNode.write_float( "pan_L", __pan_l ); + InstrumentNode.write_float( "pan_R", __pan_r ); + InstrumentNode.write_float( "randomPitchFactor", __random_pitch_factor ); + InstrumentNode.write_float( "gain", __gain ); + InstrumentNode.write_bool( "applyVelocity", __apply_velocity ); + InstrumentNode.write_bool( "filterActive", __filter_active ); + InstrumentNode.write_float( "filterCutoff", __filter_cutoff ); + InstrumentNode.write_float( "filterResonance", __filter_resonance ); + InstrumentNode.write_float( "Attack", __adsr->get_attack() ); + InstrumentNode.write_float( "Decay", __adsr->get_decay() ); + InstrumentNode.write_float( "Sustain", __adsr->get_sustain() ); + InstrumentNode.write_float( "Release", __adsr->get_release() ); + InstrumentNode.write_int( "muteGroup", __mute_group ); + InstrumentNode.write_int( "midiOutChannel", __midi_out_channel ); + InstrumentNode.write_int( "midiOutNote", __midi_out_note ); + InstrumentNode.write_bool( "isStopNote", __stop_notes ); + + switch ( __sample_selection_alg ) { + case VELOCITY: + InstrumentNode.write_string( "sampleSelectionAlgo", "VELOCITY" ); + break; + case RANDOM: + InstrumentNode.write_string( "sampleSelectionAlgo", "RANDOM" ); + break; + case ROUND_ROBIN: + InstrumentNode.write_string( "sampleSelectionAlgo", "ROUND_ROBIN" ); + break; + } + + InstrumentNode.write_int( "isHihat", __hihat_grp ); + InstrumentNode.write_int( "lower_cc", __lower_cc ); + InstrumentNode.write_int( "higher_cc", __higher_cc ); + for ( int i=0; isave_to( &instrument_node ); - } + for (std::vector::iterator it = __components->begin() ; it != __components->end(); ++it) { + InstrumentComponent* pComponent = *it; + if( component_id == -1 || pComponent->get_drumkit_componentID() == component_id ) + pComponent->save_to( &InstrumentNode, component_id ); } - node->appendChild( instrument_node ); + + node->appendChild( InstrumentNode ); } void Instrument::set_adsr( ADSR* adsr ) @@ -287,6 +355,16 @@ __adsr = adsr; } +InstrumentComponent* Instrument::get_component( int DrumkitComponentID ) +{ + for (std::vector::iterator it = get_components()->begin() ; it != get_components()->end(); ++it) { + if( (*it)->get_drumkit_componentID() == DrumkitComponentID ) + return *it; + } + + return NULL; +} + }; /* vim: set softtabstop=4 expandtab: */ diff -Nru hydrogen-0.9.6.1/src/core/src/basics/instrument_list.cpp hydrogen-0.9.7/src/core/src/basics/instrument_list.cpp --- hydrogen-0.9.6.1/src/core/src/basics/instrument_list.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/core/src/basics/instrument_list.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -86,11 +86,11 @@ return instruments; } -void InstrumentList::save_to( XMLNode* node ) +void InstrumentList::save_to( XMLNode* node, int component_id ) { XMLNode instruments_node = node->ownerDocument().createElement( "instrumentList" ); for ( int i = 0; i < size(); i++ ) { - ( *this )[i]->save_to( &instruments_node ); + ( *this )[i]->save_to( &instruments_node, component_id ); } node->appendChild( instruments_node ); } @@ -165,6 +165,14 @@ } return 0; } + +Instrument* InstrumentList::findMidiNote( const int note ) +{ + for( int i=0; i<__instruments.size(); i++ ) { + if ( __instruments[i]->get_midi_out_note()==note ) return __instruments[i]; + } + return 0; +} Instrument* InstrumentList::del( int idx ) { diff -Nru hydrogen-0.9.6.1/src/core/src/basics/note.cpp hydrogen-0.9.7/src/core/src/basics/note.cpp --- hydrogen-0.9.6.1/src/core/src/basics/note.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/core/src/basics/note.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -28,6 +28,7 @@ #include #include +#include #include namespace H2Core @@ -40,6 +41,7 @@ : Object( __class_name ), __instrument( instrument ), __instrument_id( 0 ), + __specific_compo_id( -1 ), __position( position ), __velocity( velocity ), __pan_l( PAN_MAX ), @@ -53,7 +55,6 @@ __cut_off( 1.0 ), __resonance( 0.0 ), __humanize_delay( 0 ), - __sample_position( 0.0 ), __bpfb_l( 0.0 ), __bpfb_r( 0.0 ), __lpfb_l( 0.0 ), @@ -66,6 +67,16 @@ if ( __instrument != 0 ) { __adsr = __instrument->copy_adsr(); __instrument_id = __instrument->get_id(); + + for (std::vector::iterator it = __instrument->get_components()->begin() ; it !=__instrument->get_components()->end(); ++it) { + InstrumentComponent *pCompo = *it; + + SelectedLayerInfo *sampleInfo = new SelectedLayerInfo; + sampleInfo->SelectedLayer = -1; + sampleInfo->SamplePosition = 0; + + __layers_selected[ pCompo->get_drumkit_componentID() ] = sampleInfo; + } } set_pan_l(pan_l); @@ -76,6 +87,7 @@ : Object( __class_name ), __instrument( other->get_instrument() ), __instrument_id( 0 ), + __specific_compo_id( -1 ), __position( other->get_position() ), __velocity( other->get_velocity() ), __pan_l( other->get_pan_l() ), @@ -89,7 +101,6 @@ __cut_off( other->get_cut_off() ), __resonance( other->get_resonance() ), __humanize_delay( other->get_humanize_delay() ), - __sample_position( other->get_sample_position() ), __bpfb_l( other->get_bpfb_l() ), __bpfb_r( other->get_bpfb_r() ), __lpfb_l( other->get_lpfb_l() ), @@ -103,6 +114,16 @@ if ( __instrument != 0 ) { __adsr = __instrument->copy_adsr(); __instrument_id = __instrument->get_id(); + + for (std::vector::iterator it = __instrument->get_components()->begin() ; it !=__instrument->get_components()->end(); ++it) { + InstrumentComponent *pCompo = *it; + + SelectedLayerInfo *sampleInfo = new SelectedLayerInfo; + sampleInfo->SelectedLayer = -1; + sampleInfo->SamplePosition = 0; + + __layers_selected[ pCompo->get_drumkit_componentID() ] = sampleInfo; + } } } diff -Nru hydrogen-0.9.6.1/src/core/src/basics/pattern.cpp hydrogen-0.9.7/src/core/src/basics/pattern.cpp --- hydrogen-0.9.6.1/src/core/src/basics/pattern.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/core/src/basics/pattern.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -191,8 +191,9 @@ assert( note ); if ( note->get_instrument() == instrument && ( ( idx_b<=note->get_position()+note->get_length() ) && idx_b>=note->get_position() ) ) return note; } - return 0; } + + return 0; } void Pattern::remove_note( Note* note ) @@ -232,8 +233,8 @@ slate.push_back( note ); __notes.erase( it++ ); } else { - ++it; - } + ++it; + } } if ( locked ) { H2Core::AudioEngine::get_instance()->unlock(); diff -Nru hydrogen-0.9.6.1/src/core/src/basics/pattern_list.cpp hydrogen-0.9.7/src/core/src/basics/pattern_list.cpp --- hydrogen-0.9.6.1/src/core/src/basics/pattern_list.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/core/src/basics/pattern_list.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -97,6 +97,16 @@ return __patterns[idx]; } +const Pattern* PatternList::get( int idx ) const +{ + if ( idx < 0 || idx >= __patterns.size() ) { + ERRORLOG( QString( "idx %1 out of [0;%2]" ).arg( idx ).arg( size() ) ); + return 0; + } + assert( idx >= 0 && idx < __patterns.size() ); + return __patterns[idx]; +} + int PatternList::index( Pattern* pattern ) { for( int i=0; i<__patterns.size(); i++ ) { diff -Nru hydrogen-0.9.6.1/src/core/src/basics/sample.cpp hydrogen-0.9.7/src/core/src/basics/sample.cpp --- hydrogen-0.9.6.1/src/core/src/basics/sample.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/core/src/basics/sample.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -20,13 +20,15 @@ * */ -#include + #include #include #include #include +#include + #ifdef H2CORE_HAVE_RUBBERBAND #include #define RUBBERBAND_BUFFER_OVERSIZE 500 @@ -52,36 +54,36 @@ __data_r( data_r ), __is_modified( false ) { - /* - if( !(filepath.lastIndexOf( "/" ) >0) ) { - ERRORLOG( QString( "sample path : %1 is not ok" ).arg( filepath ) ); - sleep(1); - 0/0; - } - */ assert( filepath.lastIndexOf( "/" ) >0 ); } -Sample::Sample( Sample* other ): Object( __class_name ), - __filepath( other->get_filepath() ), - __frames( other->get_frames() ), - __sample_rate( other->get_sample_rate() ), +Sample::Sample( Sample* pOther ): Object( __class_name ), + __filepath( pOther->get_filepath() ), + __frames( pOther->get_frames() ), + __sample_rate( pOther->get_sample_rate() ), __data_l( 0 ), __data_r( 0 ), - __is_modified( other->get_is_modified() ), - __loops( other->__loops ), - __rubberband( other->__rubberband ) + __is_modified( pOther->get_is_modified() ), + __loops( pOther->__loops ), + __rubberband( pOther->__rubberband ) { __data_l = new float[__frames]; __data_r = new float[__frames]; - memcpy( __data_l, other->get_data_l(), __frames ); - memcpy( __data_r, other->get_data_r(), __frames ); - EnvelopePoint pt; - PanEnvelope* pan = other->get_pan_envelope(); - for( int i=0; isize(); i++ ) __pan_envelope.push_back( pan->at( i ) ); - PanEnvelope* velocity = other->get_velocity_envelope(); - for( int i=0; isize(); i++ ) __velocity_envelope.push_back( velocity->at( i ) ); + memcpy( __data_l, pOther->get_data_l(), __frames ); + memcpy( __data_r, pOther->get_data_r(), __frames ); + PanEnvelope* pPan = pOther->get_pan_envelope(); + for( int i=0; isize(); i++ ) + { + __pan_envelope.push_back( pPan->at( i ) ); + } + + + PanEnvelope* pVelocity = pOther->get_velocity_envelope(); + for( int i=0; isize(); i++ ) + { + __velocity_envelope.push_back( pVelocity->at( i ) ); + } } Sample::~Sample() @@ -90,6 +92,14 @@ if( __data_r!=0 ) delete[] __data_r; } +void Sample::set_filename( const QString& filename ) +{ + QFileInfo Filename = QFileInfo( filename ); + QFileInfo Dest = QFileInfo( __filepath ); + __filepath = QDir(Dest.absolutePath()).filePath( Filename.fileName() ); +} + + Sample* Sample::load( const QString& filepath ) { if( !Filesystem::file_readable( filepath ) ) { @@ -449,16 +459,19 @@ double durationtime = 60.0 / Hydrogen::get_instance()->getNewBpmJTM() * rb.divider/*beats*/; double induration = get_sample_duration(); if ( induration != 0.0 ) ratio = durationtime / induration; + rubberoutframes = int( __frames * ratio + 0.1 ); _INFOLOG( QString( "ratio: %1, rubberoutframes: %2, rubberinframes: %3" ).arg( ratio ).arg ( rubberoutframes ).arg ( __frames ) ); - QObject* parent = 0; - QProcess* rubberband = new QProcess( parent ); + QObject* pParent = 0; + QProcess* pRrubberbandProc = new QProcess( pParent ); + QStringList arguments; QString rCs = QString( " %1" ).arg( rb.c_settings ); float pitch = pow( 1.0594630943593, ( double )rb.pitch ); QString rPs = QString( " %1" ).arg( pitch ); QString rubberResultPath = QDir::tempPath() + "/tmp_rb_result_file.wav"; + arguments << "-D" << QString( " %1" ).arg( durationtime ) //stretch or squash to make output file X seconds long << "--threads" //assume multi-CPU even if only one CPU is identified << "-P" //aim for minimal time distortion @@ -466,8 +479,10 @@ << "-c" << rCs //"crispness" levels << outfilePath //infile << rubberResultPath; //outfile - rubberband->start( program, arguments ); - while( !rubberband->waitForFinished() ) { + + pRrubberbandProc->start( program, arguments ); + + while( ! pRrubberbandProc->waitForFinished() ) { //_ERRORLOG( QString( "prozessing" )); } if ( QFile( rubberResultPath ).exists() == false ) { @@ -475,29 +490,31 @@ return false; } - Sample* rubberbanded = Sample::load( rubberResultPath.toLocal8Bit() ); - if( rubberbanded==0 ) { + Sample* p_Rubberbanded = Sample::load( rubberResultPath.toLocal8Bit() ); + if( p_Rubberbanded==0 ) { return false; } - if( QFile( outfilePath ).remove() ); -// _INFOLOG("remove outfile"); - if( QFile( rubberResultPath ).remove() ); -// _INFOLOG("remove rubberResultFile"); - __frames = rubberbanded->get_frames(); - __data_l = rubberbanded->get_data_l(); - __data_r = rubberbanded->get_data_r(); - rubberbanded->__data_l = 0; - rubberbanded->__data_r = 0; + + QFile( outfilePath ).remove(); + + QFile( rubberResultPath ).remove(); + + __frames = p_Rubberbanded->get_frames(); + __data_l = p_Rubberbanded->get_data_l(); + __data_r = p_Rubberbanded->get_data_r(); + p_Rubberbanded->__data_l = 0; + p_Rubberbanded->__data_r = 0; __is_modified = true; __rubberband = rb; - delete rubberbanded; + delete p_Rubberbanded; } return true; } Sample::Loops::LoopMode Sample::parse_loop_mode( const QString& string ) { - char* mode = string.toLocal8Bit().data(); + QByteArray byteArray = string.toLocal8Bit(); + char* mode = byteArray.data(); for( int i=Loops::FORWARD; i<=Loops::PINGPONG; i++ ) { if( 0 == strncasecmp( mode, __loop_modes[i], sizeof( __loop_modes[i] ) ) ) return ( Loops::LoopMode )i; } diff -Nru hydrogen-0.9.6.1/src/core/src/basics/song.cpp hydrogen-0.9.7/src/core/src/basics/song.cpp --- hydrogen-0.9.6.1/src/core/src/basics/song.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/core/src/basics/song.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -24,15 +24,18 @@ #include -#include + #include #include - +#include #include #include +#include #include +#include #include #include +#include #include #include #include @@ -72,13 +75,11 @@ , __humanize_velocity_value( 0.0 ) , __swing_factor( 0.0 ) , __song_mode( PATTERN_MODE ) + , __components( NULL ) { INFOLOG( QString( "INIT '%1'" ).arg( __name ) ); - //m_bDelayFXEnabled = false; - //m_fDelayFXWetLevel = 0.8; - //m_fDelayFXFeedback = 0.5; - //m_nDelayFXTime = MAX_NOTES / 8; + __components = new std::vector (); } @@ -88,6 +89,9 @@ // delete all patterns delete __pattern_list; + __components->clear(); + delete __components; + if ( __pattern_group_sequence ) { for ( unsigned i = 0; i < __pattern_group_sequence->size(); ++i ) { PatternList* pPatternList = ( *__pattern_group_sequence )[i]; @@ -151,7 +155,7 @@ song->set_instrument_list( pList ); #ifdef H2CORE_HAVE_JACK - Hydrogen::get_instance()->renameJackPorts(); + Hydrogen::get_instance()->renameJackPorts( song ); #endif PatternList* patternList = new PatternList(); @@ -165,7 +169,7 @@ patternSequence->add( emptyPattern ); pPatternGroupVector->push_back( patternSequence ); song->set_pattern_group_vector( pPatternGroupVector ); - song->__is_modified = false; + song->set_is_modified( false ); song->set_filename( "empty_song" ); return song; @@ -188,6 +192,15 @@ return song; } +DrumkitComponent* Song::get_component( int ID ) +{ + for (std::vector::iterator it = __components->begin() ; it != __components->end(); ++it) { + if( (*it)->get_id() == ID ) + return *it; + } + + return NULL; +} void Song::set_swing_factor( float factor ) @@ -201,6 +214,19 @@ __swing_factor = factor; } +void Song::set_is_modified(bool is_modified){ + bool Notify = false; + + if(__is_modified != is_modified){ + Notify = true; + } + + __is_modified = is_modified; + + if(Notify){ + EventQueue::get_instance()->push_event( EVENT_SONG_MODIFIED, -1 ); + } +} void Song::readTempPatternList( QString filename ) { @@ -416,12 +442,25 @@ song->set_humanize_velocity_value( fHumanizeVelocityValue ); song->set_swing_factor( fSwingFactor ); - /* - song->m_bDelayFXEnabled = LocalFileMng::readXmlBool( songNode, "delayFXEnabled", false, false ); - song->m_fDelayFXWetLevel = LocalFileMng::readXmlFloat( songNode, "delayFXWetLevel", 1.0, false, false ); - song->m_fDelayFXFeedback= LocalFileMng::readXmlFloat( songNode, "delayFXFeedback", 0.4, false, false ); - song->m_nDelayFXTime = LocalFileMng::readXmlInt( songNode, "delayFXTime", MAX_NOTES / 4, false, false ); - */ + QDomNode componentListNode = songNode.firstChildElement( "componentList" ); + if ( ( ! componentListNode.isNull() ) ) { + QDomNode componentNode = componentListNode.firstChildElement( "drumkitComponent" ); + while ( ! componentNode.isNull() ) { + int id = LocalFileMng::readXmlInt( componentNode, "id", -1 ); // instrument id + QString sName = LocalFileMng::readXmlString( componentNode, "name", "" ); // name + float fVolume = LocalFileMng::readXmlFloat( componentNode, "volume", 1.0 ); // volume + DrumkitComponent* pDrumkitComponent = new DrumkitComponent( id, sName ); + pDrumkitComponent->set_volume( fVolume ); + + song->get_components()->push_back(pDrumkitComponent); + + componentNode = ( QDomNode ) componentNode.nextSiblingElement( "drumkitComponent" ); + } + } + else { + DrumkitComponent* pDrumkitComponent = new DrumkitComponent( 0, "Main" ); + song->get_components()->push_back(pDrumkitComponent); + } // Instrument List InstrumentList* instrumentList = new InstrumentList(); @@ -452,10 +491,11 @@ int fAttack = LocalFileMng::readXmlInt( instrumentNode, "Attack", 0, false, false ); // Attack int fDecay = LocalFileMng::readXmlInt( instrumentNode, "Decay", 0, false, false ); // Decay float fSustain = LocalFileMng::readXmlFloat( instrumentNode, "Sustain", 1.0, false, false ); // Sustain - int fRelease = LocalFileMng::readXmlInt( instrumentNode, "Release", 1000, false, false ); // Release + int fRelease = LocalFileMng::readXmlFloat( instrumentNode, "Release", 1000.0, false, false ); // Release float fRandomPitchFactor = LocalFileMng::readXmlFloat( instrumentNode, "randomPitchFactor", 0.0f, false, false ); + bool bApplyVelocity = LocalFileMng::readXmlBool( instrumentNode, "applyVelocity", true ); bool bFilterActive = LocalFileMng::readXmlBool( instrumentNode, "filterActive", false ); float fFilterCutoff = LocalFileMng::readXmlFloat( instrumentNode, "filterCutoff", 1.0f, false ); float fFilterResonance = LocalFileMng::readXmlFloat( instrumentNode, "filterResonance", 0.0f, false ); @@ -464,6 +504,8 @@ QString sMidiOutNote = LocalFileMng::readXmlString( instrumentNode, "midiOutNote", "60", false, false ); int nMuteGroup = sMuteGroup.toInt(); bool isStopNote = LocalFileMng::readXmlBool( instrumentNode, "isStopNote", false ); + QString sRead_sample_select_algo = LocalFileMng::readXmlString( instrumentNode, "sampleSelectionAlgo", "VELOCITY" ); + int nMidiOutChannel = sMidiOutChannel.toInt(); int nMidiOutNote = sMidiOutNote.toInt(); @@ -473,6 +515,9 @@ continue; } + int iIsHiHat = LocalFileMng::readXmlInt( instrumentNode, "isHihat", -1, true ); + int iLowerCC = LocalFileMng::readXmlInt( instrumentNode, "lower_cc", 0, true ); + int iHigherCC = LocalFileMng::readXmlInt( instrumentNode, "higher_cc", 127, true ); // create a new instrument Instrument* pInstrument = new Instrument( id, sName, new ADSR( fAttack, fDecay, fSustain, fRelease ) ); @@ -481,6 +526,7 @@ pInstrument->set_pan_l( fPan_L ); pInstrument->set_pan_r( fPan_R ); pInstrument->set_drumkit_name( sDrumkit ); + pInstrument->set_apply_velocity( bApplyVelocity ); pInstrument->set_fx_level( fFX1Level, 0 ); pInstrument->set_fx_level( fFX2Level, 1 ); pInstrument->set_fx_level( fFX3Level, 2 ); @@ -492,6 +538,15 @@ pInstrument->set_gain( fGain ); pInstrument->set_mute_group( nMuteGroup ); pInstrument->set_stop_notes( isStopNote ); + pInstrument->set_hihat_grp( iIsHiHat ); + pInstrument->set_lower_cc( iLowerCC ); + pInstrument->set_higher_cc( iHigherCC ); + if ( sRead_sample_select_algo.compare("VELOCITY") == 0 ) + pInstrument->set_sample_selection_alg( Instrument::VELOCITY ); + else if ( sRead_sample_select_algo.compare("ROUND_ROBIN") == 0 ) + pInstrument->set_sample_selection_alg( Instrument::ROUND_ROBIN ); + else if ( sRead_sample_select_algo.compare("RANDOM") == 0 ) + pInstrument->set_sample_selection_alg( Instrument::RANDOM ); pInstrument->set_midi_out_channel( nMidiOutChannel ); pInstrument->set_midi_out_note( nMidiOutNote ); @@ -524,94 +579,193 @@ ERRORLOG( "Error loading sample: " + sFilename + " not found" ); pInstrument->set_muted( true ); } + InstrumentComponent* pCompo = new InstrumentComponent ( 0 ); InstrumentLayer* pLayer = new InstrumentLayer( pSample ); - pInstrument->set_layer( pLayer, 0 ); + pCompo->set_layer( pLayer, 0 ); + pInstrument->get_components()->push_back( pCompo ); } //~ back compatibility code else { - unsigned nLayer = 0; - QDomNode layerNode = instrumentNode.firstChildElement( "layer" ); - while ( ! layerNode.isNull() ) { - if ( nLayer >= MAX_LAYERS ) { - ERRORLOG( "nLayer > MAX_LAYERS" ); - continue; - } - //bool sIsModified = false; - QString sFilename = LocalFileMng::readXmlString( layerNode, "filename", "" ); - bool sIsModified = LocalFileMng::readXmlBool( layerNode, "ismodified", false ); - Sample::Loops lo; - lo.mode = Sample::parse_loop_mode( LocalFileMng::readXmlString( layerNode, "smode", "forward" ) ); - lo.start_frame = LocalFileMng::readXmlInt( layerNode, "startframe", 0 ); - lo.loop_frame = LocalFileMng::readXmlInt( layerNode, "loopframe", 0 ); - lo.count = LocalFileMng::readXmlInt( layerNode, "loops", 0 ); - lo.end_frame = LocalFileMng::readXmlInt( layerNode, "endframe", 0 ); - Sample::Rubberband ro; - ro.use = LocalFileMng::readXmlInt( layerNode, "userubber", 0, false ); - ro.divider = LocalFileMng::readXmlFloat( layerNode, "rubberdivider", 0.0 ); - ro.c_settings = LocalFileMng::readXmlInt( layerNode, "rubberCsettings", 1 ); - ro.pitch = LocalFileMng::readXmlFloat( layerNode, "rubberPitch", 0.0 ); - - float fMin = LocalFileMng::readXmlFloat( layerNode, "min", 0.0 ); - float fMax = LocalFileMng::readXmlFloat( layerNode, "max", 1.0 ); - float fGain = LocalFileMng::readXmlFloat( layerNode, "gain", 1.0 ); - float fPitch = LocalFileMng::readXmlFloat( layerNode, "pitch", 0.0, false, false ); + bool p_foundAtLeastOneComponent = false; + QDomNode componentNode = instrumentNode.firstChildElement( "instrumentComponent" ); + while ( ! componentNode.isNull() ) { + p_foundAtLeastOneComponent = true; + int id = LocalFileMng::readXmlInt( componentNode, "component_id", 0 ); + InstrumentComponent* pCompo = new InstrumentComponent( id ); + float fGainCompo = LocalFileMng::readXmlFloat( componentNode, "gain", 1.0 ); + pCompo->set_gain( fGainCompo ); + + unsigned nLayer = 0; + QDomNode layerNode = componentNode.firstChildElement( "layer" ); + while ( ! layerNode.isNull() ) { + if ( nLayer >= MAX_LAYERS ) { + ERRORLOG( "nLayer > MAX_LAYERS" ); + continue; + } + //bool sIsModified = false; + QString sFilename = LocalFileMng::readXmlString( layerNode, "filename", "" ); + bool sIsModified = LocalFileMng::readXmlBool( layerNode, "ismodified", false ); + Sample::Loops lo; + lo.mode = Sample::parse_loop_mode( LocalFileMng::readXmlString( layerNode, "smode", "forward" ) ); + lo.start_frame = LocalFileMng::readXmlInt( layerNode, "startframe", 0 ); + lo.loop_frame = LocalFileMng::readXmlInt( layerNode, "loopframe", 0 ); + lo.count = LocalFileMng::readXmlInt( layerNode, "loops", 0 ); + lo.end_frame = LocalFileMng::readXmlInt( layerNode, "endframe", 0 ); + Sample::Rubberband ro; + ro.use = LocalFileMng::readXmlInt( layerNode, "userubber", 0, false ); + ro.divider = LocalFileMng::readXmlFloat( layerNode, "rubberdivider", 0.0 ); + ro.c_settings = LocalFileMng::readXmlInt( layerNode, "rubberCsettings", 1 ); + ro.pitch = LocalFileMng::readXmlFloat( layerNode, "rubberPitch", 0.0 ); + + float fMin = LocalFileMng::readXmlFloat( layerNode, "min", 0.0 ); + float fMax = LocalFileMng::readXmlFloat( layerNode, "max", 1.0 ); + float fGain = LocalFileMng::readXmlFloat( layerNode, "gain", 1.0 ); + float fPitch = LocalFileMng::readXmlFloat( layerNode, "pitch", 0.0, false, false ); - if ( !QFile( sFilename ).exists() && !drumkitPath.isEmpty() ) { - sFilename = drumkitPath + "/" + sFilename; - } + if ( !QFile( sFilename ).exists() && !drumkitPath.isEmpty() ) { + sFilename = drumkitPath + "/" + sFilename; + } - QString program = Preferences::get_instance()->m_rubberBandCLIexecutable; - //test the path. if test fails, disable rubberband - if ( QFile( program ).exists() == false ) { - ro.use = false; - } + QString program = Preferences::get_instance()->m_rubberBandCLIexecutable; + //test the path. if test fails, disable rubberband + if ( QFile( program ).exists() == false ) { + ro.use = false; + } - Sample* pSample = NULL; - if ( !sIsModified ) { - pSample = Sample::load( sFilename ); - } else { - Sample::EnvelopePoint pt; + Sample* pSample = NULL; + if ( !sIsModified ) { + pSample = Sample::load( sFilename ); + } else { + Sample::EnvelopePoint pt; + + Sample::VelocityEnvelope velocity; + QDomNode volumeNode = layerNode.firstChildElement( "volume" ); + while ( ! volumeNode.isNull() ) { + pt.frame = LocalFileMng::readXmlInt( volumeNode, "volume-position", 0 ); + pt.value = LocalFileMng::readXmlInt( volumeNode, "volume-value", 0 ); + velocity.push_back( pt ); + volumeNode = volumeNode.nextSiblingElement( "volume" ); + //ERRORLOG( QString("volume-posi %1").arg(LocalFileMng::readXmlInt( volumeNode, "volume-position", 0)) ); + } + + Sample::VelocityEnvelope pan; + QDomNode panNode = layerNode.firstChildElement( "pan" ); + while ( ! panNode.isNull() ) { + pt.frame = LocalFileMng::readXmlInt( panNode, "pan-position", 0 ); + pt.value = LocalFileMng::readXmlInt( panNode, "pan-value", 0 ); + pan.push_back( pt ); + panNode = panNode.nextSiblingElement( "pan" ); + } - Sample::VelocityEnvelope velocity; - QDomNode volumeNode = layerNode.firstChildElement( "volume" ); - while ( ! volumeNode.isNull() ) { - pt.frame = LocalFileMng::readXmlInt( volumeNode, "volume-position", 0 ); - pt.value = LocalFileMng::readXmlInt( volumeNode, "volume-value", 0 ); - velocity.push_back( pt ); - volumeNode = volumeNode.nextSiblingElement( "volume" ); - //ERRORLOG( QString("volume-posi %1").arg(LocalFileMng::readXmlInt( volumeNode, "volume-position", 0)) ); - } - - Sample::VelocityEnvelope pan; - QDomNode panNode = layerNode.firstChildElement( "pan" ); - while ( ! panNode.isNull() ) { - pt.frame = LocalFileMng::readXmlInt( panNode, "pan-position", 0 ); - pt.value = LocalFileMng::readXmlInt( panNode, "pan-value", 0 ); - pan.push_back( pt ); - panNode = panNode.nextSiblingElement( "pan" ); + pSample = Sample::load( sFilename, lo, ro, velocity, pan ); } + if ( pSample == NULL ) { + ERRORLOG( "Error loading sample: " + sFilename + " not found" ); + pInstrument->set_muted( true ); + } + InstrumentLayer* pLayer = new InstrumentLayer( pSample ); + pLayer->set_start_velocity( fMin ); + pLayer->set_end_velocity( fMax ); + pLayer->set_gain( fGain ); + pLayer->set_pitch( fPitch ); + pCompo->set_layer( pLayer, nLayer ); + nLayer++; - pSample = Sample::load( sFilename, lo, ro, velocity, pan ); - } - if ( pSample == NULL ) { - ERRORLOG( "Error loading sample: " + sFilename + " not found" ); - pInstrument->set_muted( true ); + layerNode = ( QDomNode ) layerNode.nextSiblingElement( "layer" ); } - InstrumentLayer* pLayer = new InstrumentLayer( pSample ); - pLayer->set_start_velocity( fMin ); - pLayer->set_end_velocity( fMax ); - pLayer->set_gain( fGain ); - pLayer->set_pitch( fPitch ); - pInstrument->set_layer( pLayer, nLayer ); - nLayer++; - layerNode = ( QDomNode ) layerNode.nextSiblingElement( "layer" ); + pInstrument->get_components()->push_back( pCompo ); + componentNode = ( QDomNode ) componentNode.nextSiblingElement( "instrumentComponent" ); } - } + if(!p_foundAtLeastOneComponent){ + InstrumentComponent* pCompo = new InstrumentComponent( 0 ); + float fGainCompo = LocalFileMng::readXmlFloat( componentNode, "gain", 1.0 ); + pCompo->set_gain( fGainCompo ); + + unsigned nLayer = 0; + QDomNode layerNode = instrumentNode.firstChildElement( "layer" ); + while ( ! layerNode.isNull() ) { + if ( nLayer >= MAX_LAYERS ) { + ERRORLOG( "nLayer > MAX_LAYERS" ); + continue; + } + QString sFilename = LocalFileMng::readXmlString( layerNode, "filename", "" ); + bool sIsModified = LocalFileMng::readXmlBool( layerNode, "ismodified", false ); + Sample::Loops lo; + lo.mode = Sample::parse_loop_mode( LocalFileMng::readXmlString( layerNode, "smode", "forward" ) ); + lo.start_frame = LocalFileMng::readXmlInt( layerNode, "startframe", 0 ); + lo.loop_frame = LocalFileMng::readXmlInt( layerNode, "loopframe", 0 ); + lo.count = LocalFileMng::readXmlInt( layerNode, "loops", 0 ); + lo.end_frame = LocalFileMng::readXmlInt( layerNode, "endframe", 0 ); + Sample::Rubberband ro; + ro.use = LocalFileMng::readXmlInt( layerNode, "userubber", 0, false ); + ro.divider = LocalFileMng::readXmlFloat( layerNode, "rubberdivider", 0.0 ); + ro.c_settings = LocalFileMng::readXmlInt( layerNode, "rubberCsettings", 1 ); + ro.pitch = LocalFileMng::readXmlFloat( layerNode, "rubberPitch", 0.0 ); + + float fMin = LocalFileMng::readXmlFloat( layerNode, "min", 0.0 ); + float fMax = LocalFileMng::readXmlFloat( layerNode, "max", 1.0 ); + float fGain = LocalFileMng::readXmlFloat( layerNode, "gain", 1.0 ); + float fPitch = LocalFileMng::readXmlFloat( layerNode, "pitch", 0.0, false, false ); + + if ( !QFile( sFilename ).exists() && !drumkitPath.isEmpty() ) { + sFilename = drumkitPath + "/" + sFilename; + } + QString program = Preferences::get_instance()->m_rubberBandCLIexecutable; + //test the path. if test fails, disable rubberband + if ( QFile( program ).exists() == false ) { + ro.use = false; + } + + Sample* pSample = NULL; + if ( !sIsModified ) { + pSample = Sample::load( sFilename ); + } else { + Sample::EnvelopePoint pt; + + Sample::VelocityEnvelope velocity; + QDomNode volumeNode = layerNode.firstChildElement( "volume" ); + while ( ! volumeNode.isNull() ) { + pt.frame = LocalFileMng::readXmlInt( volumeNode, "volume-position", 0 ); + pt.value = LocalFileMng::readXmlInt( volumeNode, "volume-value", 0 ); + velocity.push_back( pt ); + volumeNode = volumeNode.nextSiblingElement( "volume" ); + //ERRORLOG( QString("volume-posi %1").arg(LocalFileMng::readXmlInt( volumeNode, "volume-position", 0)) ); + } + + Sample::VelocityEnvelope pan; + QDomNode panNode = layerNode.firstChildElement( "pan" ); + while ( ! panNode.isNull() ) { + pt.frame = LocalFileMng::readXmlInt( panNode, "pan-position", 0 ); + pt.value = LocalFileMng::readXmlInt( panNode, "pan-value", 0 ); + pan.push_back( pt ); + panNode = panNode.nextSiblingElement( "pan" ); + } + + pSample = Sample::load( sFilename, lo, ro, velocity, pan ); + } + if ( pSample == NULL ) { + ERRORLOG( "Error loading sample: " + sFilename + " not found" ); + pInstrument->set_muted( true ); + } + InstrumentLayer* pLayer = new InstrumentLayer( pSample ); + pLayer->set_start_velocity( fMin ); + pLayer->set_end_velocity( fMax ); + pLayer->set_gain( fGain ); + pLayer->set_pitch( fPitch ); + pCompo->set_layer( pLayer, nLayer ); + nLayer++; + + layerNode = ( QDomNode ) layerNode.nextSiblingElement( "layer" ); + } + pInstrument->get_components()->push_back( pCompo ); + } + } instrumentList->add( pInstrument ); instrumentNode = ( QDomNode ) instrumentNode.nextSiblingElement( "instrument" ); } + if ( instrumentList_count == 0 ) { WARNINGLOG( "0 instruments?" ); } @@ -807,11 +961,6 @@ } inputControlNode = ( QDomNode ) inputControlNode.nextSiblingElement( "inputControlPort" ); } - - /* - TiXmlNode* outputControlNode; - for ( outputControlNode = fxNode->FirstChild( "outputControlPort" ); outputControlNode; outputControlNode = outputControlNode->NextSibling( "outputControlPort" ) ) { - }*/ } #endif } @@ -822,39 +971,40 @@ WARNINGLOG( "ladspa node not found" ); } - Hydrogen::get_instance()->m_timelinevector.clear(); - Hydrogen::HTimelineVector tlvector; + Timeline* pTimeline = Hydrogen::get_instance()->getTimeline(); + pTimeline->m_timelinevector.clear(); + Timeline::HTimelineVector tlvector; QDomNode bpmTimeLine = songNode.firstChildElement( "BPMTimeLine" ); if ( !bpmTimeLine.isNull() ) { QDomNode newBPMNode = bpmTimeLine.firstChildElement( "newBPM" ); while( !newBPMNode.isNull() ) { tlvector.m_htimelinebeat = LocalFileMng::readXmlInt( newBPMNode, "BAR", 0 ); tlvector.m_htimelinebpm = LocalFileMng::readXmlFloat( newBPMNode, "BPM", 120.0 ); - Hydrogen::get_instance()->m_timelinevector.push_back( tlvector ); - Hydrogen::get_instance()->sortTimelineVector(); + pTimeline->m_timelinevector.push_back( tlvector ); + pTimeline->sortTimelineVector(); newBPMNode = newBPMNode.nextSiblingElement( "newBPM" ); } } else { WARNINGLOG( "bpmTimeLine node not found" ); } - Hydrogen::get_instance()->m_timelinetagvector.clear(); - Hydrogen::HTimelineTagVector tltagvector; + pTimeline->m_timelinetagvector.clear(); + Timeline::HTimelineTagVector tltagvector; QDomNode timeLineTag = songNode.firstChildElement( "timeLineTag" ); if ( !timeLineTag.isNull() ) { QDomNode newTAGNode = timeLineTag.firstChildElement( "newTAG" ); while( !newTAGNode.isNull() ) { tltagvector.m_htimelinetagbeat = LocalFileMng::readXmlInt( newTAGNode, "BAR", 0 ); tltagvector.m_htimelinetag = LocalFileMng::readXmlString( newTAGNode, "TAG", "" ); - Hydrogen::get_instance()->m_timelinetagvector.push_back( tltagvector ); - Hydrogen::get_instance()->sortTimelineTagVector(); + pTimeline->m_timelinetagvector.push_back( tltagvector ); + pTimeline->sortTimelineTagVector(); newTAGNode = newTAGNode.nextSiblingElement( "newTAG" ); } } else { WARNINGLOG( "TagTimeLine node not found" ); } - song->__is_modified = false; + song->set_is_modified( false ); song->set_filename( FileName ); return song; diff -Nru hydrogen-0.9.6.1/src/core/src/fx/effects.cpp hydrogen-0.9.7/src/core/src/fx/effects.cpp --- hydrogen-0.9.6.1/src/core/src/fx/effects.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/core/src/fx/effects.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -246,15 +246,18 @@ m_pRootGroup->addChild( pUncategorizedGroup ); char C = 0; - LadspaFXGroup* pGroup; + LadspaFXGroup* pGroup = 0; for ( std::vector::iterator i = m_pluginList.begin(); i < m_pluginList.end(); i++ ) { - char ch = (*i)->m_sName.toLocal8Bit().at(0); + char ch = (*i)->m_sName.toLocal8Bit().at(0); if ( ch != C ) { C = ch; pGroup = new LadspaFXGroup( QString( C ) ); pUncategorizedGroup->addChild( pGroup ); } - pGroup->addLadspaInfo( *i ); + + if(pGroup){ + pGroup->addLadspaInfo( *i ); + } } diff -Nru hydrogen-0.9.6.1/src/core/src/helpers/filesystem.cpp hydrogen-0.9.7/src/core/src/helpers/filesystem.cpp --- hydrogen-0.9.6.1/src/core/src/helpers/filesystem.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/core/src/helpers/filesystem.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -65,10 +65,10 @@ __usr_data_path = QDir::homePath().append( "/Library/Application Support/Hydrogen/data" ); #elif WIN32 __sys_data_path = QCoreApplication::applicationDirPath().append( "/data" ) ; - __usr_data_path = QCoreApplication::applicationDirPath().append( "/hydrogen/data" ) ; + __usr_data_path = QDir::homePath().append( "/.hydrogen/data" ) ; #else __sys_data_path = SYS_DATA_PATH; - __usr_data_path = QDir::homePath().append( "/"USR_DATA_PATH ); + __usr_data_path = QDir::homePath().append( "/" USR_DATA_PATH ); #endif if( sys_path!=0 ) __sys_data_path = sys_path; @@ -176,12 +176,14 @@ } file.write( content.toUtf8().data() ); file.close(); + + return true; } bool Filesystem::file_copy( const QString& src, const QString& dst, bool overwrite ) { if( file_exists( dst, true ) && !overwrite ) { - WARNINGLOG( QString( "do not overwrite %1 with %2 has it already exists" ).arg( dst ).arg( src ) ); + WARNINGLOG( QString( "do not overwrite %1 with %2 as it already exists" ).arg( dst ).arg( src ) ); return true; } if ( !file_readable( src ) ) { diff -Nru hydrogen-0.9.6.1/src/core/src/helpers/legacy.cpp hydrogen-0.9.7/src/core/src/helpers/legacy.cpp --- hydrogen-0.9.6.1/src/core/src/helpers/legacy.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/core/src/helpers/legacy.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -5,10 +5,12 @@ #include #include #include +#include #include #include #include #include +#include #include #include #include @@ -22,7 +24,7 @@ if ( version_older_than( 0, 9, 8 ) ) { ERRORLOG( QString( "this code should not be used anymore, it belongs to 0.9.6" ) ); } else { - ERRORLOG( QString( "loading drumkit with legacy code" ) ); + WARNINGLOG( QString( "loading drumkit with legacy code" ) ); } XMLDoc doc; if( !doc.read( dk_path ) ) { @@ -44,6 +46,9 @@ drumkit->set_author( root.read_string( "author", "undefined author" ) ); drumkit->set_info( root.read_string( "info", "defaultInfo" ) ); drumkit->set_license( root.read_string( "license", "undefined license" ) ); + drumkit->set_image( root.read_string( "image", "" ) ); + drumkit->set_image_license( root.read_string( "imageLicense", "undefined license" ) ); + XMLNode instruments_node = root.firstChildElement( "instrumentList" ); if ( instruments_node.isNull() ) { WARNINGLOG( "instrumentList node not found" ); @@ -68,6 +73,7 @@ instrument->set_pan_l( instrument_node.read_float( "pan_L", 1.0f ) ); instrument->set_pan_r( instrument_node.read_float( "pan_R", 1.0f ) ); // may not exist, but can't be empty + instrument->set_apply_velocity( instrument_node.read_bool( "applyVelocity", true, false ) ); instrument->set_filter_active( instrument_node.read_bool( "filterActive", true, false ) ); instrument->set_filter_cutoff( instrument_node.read_float( "filterCutoff", 1.0f, true, false ) ); instrument->set_filter_resonance( instrument_node.read_float( "filterResonance", 0.0f, true, false ) ); @@ -82,6 +88,16 @@ instrument->set_midi_out_channel( instrument_node.read_int( "midiOutChannel", -1, true, false ) ); instrument->set_midi_out_note( instrument_node.read_int( "midiOutNote", MIDI_MIDDLE_C, true, false ) ); instrument->set_stop_notes( instrument_node.read_bool( "isStopNote", true ,false ) ); + QString read_sample_select_algo = instrument_node.read_string( "sampleSelectionAlgo", "VELOCITY" ); + if ( read_sample_select_algo.compare("VELOCITY") == 0) + instrument->set_sample_selection_alg( Instrument::VELOCITY ); + else if ( read_sample_select_algo.compare("ROUND_ROBIN") == 0 ) + instrument->set_sample_selection_alg( Instrument::ROUND_ROBIN ); + else if ( read_sample_select_algo.compare("RANDOM") == 0 ) + instrument->set_sample_selection_alg( Instrument::RANDOM ); + instrument->set_hihat_grp( instrument_node.read_int( "isHihat", -1, true ) ); + instrument->set_lower_cc( instrument_node.read_int( "lower_cc", 0, true ) ); + instrument->set_higher_cc( instrument_node.read_int( "higher_cc", 127, true ) ); for ( int i=0; iset_fx_level( instrument_node.read_float( QString( "FX%1Level" ).arg( i+1 ), 0.0 ), i ); } @@ -92,12 +108,46 @@ if( sFilename.isEmpty() ) { ERRORLOG( "filename back compability node is empty" ); } else { + Sample* sample = new Sample( dk_path+"/"+sFilename ); - InstrumentLayer* layer = new InstrumentLayer( sample ); - instrument->set_layer( layer, 0 ); + + bool p_foundMainCompo = false; + for (std::vector::iterator it = drumkit->get_components()->begin() ; it != drumkit->get_components()->end(); ++it) { + DrumkitComponent* existing_compo = *it; + if( existing_compo->get_name().compare("Main") == 0) { + p_foundMainCompo = true; + break; + } + } + + if ( !p_foundMainCompo ) { + DrumkitComponent* dmCompo = new DrumkitComponent( 0, "Main" ); + drumkit->get_components()->push_back(dmCompo); + } + + InstrumentComponent* component = new InstrumentComponent( 0 ); + InstrumentLayer* layer = new InstrumentLayer( sample ); + component->set_layer( layer, 0 ); + instrument->get_components()->push_back( component ); + } } else { int n = 0; + bool p_foundMainCompo = false; + for (std::vector::iterator it = drumkit->get_components()->begin() ; it != drumkit->get_components()->end(); ++it) { + DrumkitComponent* existing_compo = *it; + if( existing_compo->get_name().compare("Main") == 0) { + p_foundMainCompo = true; + break; + } + } + + if ( !p_foundMainCompo ) { + DrumkitComponent* dmCompo = new DrumkitComponent( 0, "Main" ); + drumkit->get_components()->push_back(dmCompo); + } + InstrumentComponent* component = new InstrumentComponent( 0 ); + XMLNode layer_node = instrument_node.firstChildElement( "layer" ); while ( !layer_node.isNull() ) { if ( n >= MAX_LAYERS ) { @@ -110,10 +160,11 @@ layer->set_end_velocity( layer_node.read_float( "max", 1.0 ) ); layer->set_gain( layer_node.read_float( "gain", 1.0, true, false ) ); layer->set_pitch( layer_node.read_float( "pitch", 0.0, true, false ) ); - instrument->set_layer( layer, n ); + component->set_layer( layer, n ); n++; layer_node = layer_node.nextSiblingElement( "layer" ); } + instrument->get_components()->push_back( component ); } } if( instrument ) { diff -Nru hydrogen-0.9.6.1/src/core/src/hydrogen.cpp hydrogen-0.9.7/src/core/src/hydrogen.cpp --- hydrogen-0.9.6.1/src/core/src/hydrogen.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/core/src/hydrogen.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -46,9 +46,11 @@ #include #include #include +#include #include #include #include +#include #include #include #include @@ -59,6 +61,17 @@ #include #include #include + +#include +#include +#include +#include +#include + +#ifdef H2CORE_HAVE_NSMSESSION +#include +#endif + #include #include #include @@ -66,21 +79,16 @@ #include #include #include -#include -#include -#include -#include - -#include "IO/OssDriver.h" -#include "IO/FakeDriver.h" -#include "IO/AlsaAudioDriver.h" -#include "IO/PortAudioDriver.h" -#include "IO/DiskWriterDriver.h" -#include "IO/AlsaMidiDriver.h" -#include "IO/JackMidiDriver.h" -#include "IO/PortMidiDriver.h" -#include "IO/CoreAudioDriver.h" -#include "IO/PulseAudioDriver.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include namespace H2Core { @@ -88,41 +96,23 @@ // GLOBALS // info -float m_fMasterPeak_L = 0.0f; ///< Master peak (left channel) -float m_fMasterPeak_R = 0.0f; ///< Master peak (right channel) -float m_fProcessTime = 0.0f; ///< time used in process function -float m_fMaxProcessTime = 0.0f; ///< max ms usable in process with no xrun +float m_fMasterPeak_L = 0.0f; ///< Master peak (left channel) +float m_fMasterPeak_R = 0.0f; ///< Master peak (right channel) +float m_fProcessTime = 0.0f; ///< time used in process function +float m_fMaxProcessTime = 0.0f; ///< max ms usable in process with no xrun //~ info -// beatcounter - -//100,000 ms in 1 second. -#define US_DIVIDER .000001 - -float m_ntaktoMeterCompute = 1; ///< beatcounter note length -int m_nbeatsToCount = 4; ///< beatcounter beats to count -int eventCount = 1; ///< beatcounter event -int tempochangecounter = 0; ///< count tempochanges for timeArray -int beatCount = 1; ///< beatcounter beat to count -double beatDiffs[16]; ///< beat diff -timeval currentTime, lastTime; ///< timeval -double lastBeatTime, currentBeatTime, beatDiff; ///< timediff -float beatCountBpm; ///< bpm -int m_nCoutOffset = 0; ///ms default 0 -int m_nStartOffset = 0; ///ms default 0 -//~ beatcounter - //jack time master -float m_nNewBpmJTM = 120; -unsigned long m_nHumantimeFrames = 0; +float m_nNewBpmJTM = 120; +unsigned long m_nHumantimeFrames = 0; //~ jack time master -AudioOutput *m_pAudioDriver = NULL; ///< Audio output -QMutex mutex_OutputPointer; ///< Mutex for audio output pointer, allows multiple readers +AudioOutput * m_pAudioDriver = NULL; ///< Audio output +QMutex mutex_OutputPointer; ///< Mutex for audio output pointer, allows multiple readers ///< When locking this AND AudioEngine, always lock AudioEngine first. -MidiInput *m_pMidiDriver = NULL; ///< MIDI input -MidiOutput *m_pMidiDriverOut = NULL; ///< MIDI output +MidiInput * m_pMidiDriver = NULL; ///< MIDI input +MidiOutput * m_pMidiDriverOut = NULL; ///< MIDI output // overload the the > operator of Note objects for priority_queue struct compare_pNotes { @@ -137,73 +127,72 @@ /// Song Note FIFO std::priority_queue, compare_pNotes > m_songNoteQueue; -std::deque m_midiNoteQueue; ///< Midi Note FIFO +std::deque m_midiNoteQueue; ///< Midi Note FIFO -PatternList* m_pNextPatterns; ///< Next pattern (used only in Pattern mode) -bool m_bAppendNextPattern; ///< Add the next pattern to the list instead -/// of replace. -bool m_bDeleteNextPattern; ///< Delete the next pattern from the list. +PatternList* m_pNextPatterns; ///< Next pattern (used only in Pattern mode) +bool m_bAppendNextPattern; ///< Add the next pattern to the list instead of replace. +bool m_bDeleteNextPattern; ///< Delete the next pattern from the list. -PatternList* m_pPlayingPatterns; -int m_nSongPos; ///< Is the position inside the song +PatternList* m_pPlayingPatterns; +int m_nSongPos; ///< Is the position inside the song -int m_nSelectedPatternNumber; -int m_nSelectedInstrumentNumber; +int m_nSelectedPatternNumber; +int m_nSelectedInstrumentNumber; -Instrument *m_pMetronomeInstrument = NULL; ///< Metronome instrument +Instrument * m_pMetronomeInstrument = NULL; ///< Metronome instrument // Buffers used in the process function -unsigned m_nBufferSize = 0; -float *m_pMainBuffer_L = NULL; -float *m_pMainBuffer_R = NULL; +unsigned m_nBufferSize = 0; +float * m_pMainBuffer_L = NULL; +float * m_pMainBuffer_R = NULL; -Hydrogen* hydrogenInstance = NULL; ///< Hydrogen class instance (used for log) +Hydrogen* hydrogenInstance = NULL; ///< Hydrogen class instance (used for log) -int m_audioEngineState = STATE_UNINITIALIZED; ///< Audio engine state +int m_audioEngineState = STATE_UNINITIALIZED; ///< Audio engine state #ifdef H2CORE_HAVE_LADSPA -float m_fFXPeak_L[MAX_FX]; -float m_fFXPeak_R[MAX_FX]; +float m_fFXPeak_L[MAX_FX]; +float m_fFXPeak_R[MAX_FX]; #endif -int m_nPatternStartTick = -1; -unsigned int m_nPatternTickPosition = 0; -int m_nLookaheadFrames = 0; +int m_nPatternStartTick = -1; +unsigned int m_nPatternTickPosition = 0; +int m_nLookaheadFrames = 0; // used in findPatternInTick -int m_nSongSizeInTicks = 0; +int m_nSongSizeInTicks = 0; -struct timeval m_currentTickTime; +struct timeval m_currentTickTime; -unsigned long m_nRealtimeFrames = 0; -unsigned int m_naddrealtimenotetickposition = 0; +unsigned long m_nRealtimeFrames = 0; +unsigned int m_naddrealtimenotetickposition = 0; // PROTOTYPES -void audioEngine_init(); -void audioEngine_destroy(); -int audioEngine_start( bool bLockEngine = false, unsigned nTotalFrames = 0 ); -void audioEngine_stop( bool bLockEngine = false ); -void audioEngine_setSong( Song *newSong ); -void audioEngine_removeSong(); -static void audioEngine_noteOn( Note *note ); -//static void audioEngine_noteOff( Note *note ); -int audioEngine_process( uint32_t nframes, void *arg ); -inline void audioEngine_clearNoteQueue(); -inline void audioEngine_process_checkBPMChanged(); -inline void audioEngine_process_playNotes( unsigned long nframes ); -inline void audioEngine_process_transport(); - -inline unsigned audioEngine_renderNote( Note* pNote, const unsigned& nBufferSize ); -inline int audioEngine_updateNoteQueue( unsigned nFrames ); -inline void audioEngine_prepNoteQueue(); - -inline int findPatternInTick( int tick, bool loopMode, int *patternStartTick ); - -void audioEngine_seek( long long nFrames, bool bLoopMode = false ); - -void audioEngine_restartAudioDrivers(); -void audioEngine_startAudioDrivers(); -void audioEngine_stopAudioDrivers(); +void audioEngine_init(); +void audioEngine_destroy(); +int audioEngine_start( bool bLockEngine = false, unsigned nTotalFrames = 0 ); +void audioEngine_stop( bool bLockEngine = false ); +void audioEngine_setSong(Song *pNewSong ); +void audioEngine_removeSong(); +static void audioEngine_noteOn( Note *note ); + +int audioEngine_process( uint32_t nframes, void *arg ); +inline void audioEngine_clearNoteQueue(); +inline void audioEngine_process_checkBPMChanged(Song *pSong); +inline void audioEngine_process_playNotes( unsigned long nframes ); +inline void audioEngine_process_transport(); + +inline unsigned audioEngine_renderNote( Note* pNote, const unsigned& nBufferSize ); +inline int audioEngine_updateNoteQueue( unsigned nFrames ); +inline void audioEngine_prepNoteQueue(); + +inline int findPatternInTick( int tick, bool loopMode, int *patternStartTick ); + +void audioEngine_seek( long long nFrames, bool bLoopMode = false ); + +void audioEngine_restartAudioDrivers(); +void audioEngine_startAudioDrivers(); +void audioEngine_stopAudioDrivers(); inline timeval currentTime2() { @@ -275,10 +264,11 @@ QString sMetronomeFilename = Filesystem::click_file(); m_pMetronomeInstrument = new Instrument( METRONOME_INSTR_ID, "metronome" ); - m_pMetronomeInstrument->set_layer( - new InstrumentLayer( Sample::load( sMetronomeFilename ) ), - 0 - ); + InstrumentLayer* pLayer = new InstrumentLayer( Sample::load( sMetronomeFilename ) ); + InstrumentComponent* pCompo = new InstrumentComponent( 0 ); + pCompo->set_layer(pLayer, 0); + m_pMetronomeInstrument->get_components()->push_back( pCompo ); + m_pMetronomeInstrument->set_is_metronome_instrument(true); // Change the current audio engine state m_audioEngineState = STATE_INITIALIZED; @@ -407,13 +397,6 @@ delete m_songNoteQueue.top(); m_songNoteQueue.pop(); } - /* // delete all copied notes in the playing notes queue - for (unsigned i = 0; i < m_playingNotesQueue.size(); ++i) { - Note *note = m_playingNotesQueue[i]; - delete note; - } - m_playingNotesQueue.clear(); - */ // delete all copied notes in the midi notes queue for ( unsigned i = 0; i < m_midiNoteQueue.size(); ++i ) { @@ -429,15 +412,12 @@ // /// Update Tick size and frame position in the audio driver from Song->__bpm // -inline void audioEngine_process_checkBPMChanged() +inline void audioEngine_process_checkBPMChanged(Song* pSong) { if ( m_audioEngineState != STATE_READY && m_audioEngineState != STATE_PLAYING ) return; - Hydrogen* pHydrogen = Hydrogen::get_instance(); - Song* pSong = pHydrogen->getSong(); - float fOldTickSize = m_pAudioDriver->m_transport.m_nTickSize; float fNewTickSize = m_pAudioDriver->getSampleRate() * 60.0 / pSong->__bpm / pSong->__resolution; @@ -606,52 +586,54 @@ inline void audioEngine_process_transport() { - Hydrogen* pHydrogen = Hydrogen::get_instance(); - Song* pSong = pHydrogen->getSong(); - - if ( ( m_audioEngineState == STATE_READY ) - || ( m_audioEngineState == STATE_PLAYING ) - ) { - m_pAudioDriver->updateTransportInfo(); - unsigned long nNewFrames = m_pAudioDriver->m_transport.m_nFrames; - - // ??? audioEngine_seek returns IMMEDIATELY - // when nNewFrames == m_pAudioDriver->m_transport.m_nFrames ??? - // audioEngine_seek( nNewFrames, true ); - - switch ( m_pAudioDriver->m_transport.m_status ) { - case TransportInfo::ROLLING: - if ( m_audioEngineState == STATE_READY ) { - audioEngine_start( false, nNewFrames ); // no engine lock - } - - if ( pSong->__bpm != m_pAudioDriver->m_transport.m_nBPM ) { - ___INFOLOG( - QString( "song bpm: (%1) gets transport bpm: (%2)" ) - .arg( pSong->__bpm ) - .arg( m_pAudioDriver->m_transport.m_nBPM ) ); - - pSong->__bpm = m_pAudioDriver->m_transport.m_nBPM; - } + if ( m_audioEngineState != STATE_READY + && m_audioEngineState != STATE_PLAYING + ) return; - pHydrogen->setRealtimeFrames( m_pAudioDriver->m_transport.m_nFrames ); - break; - case TransportInfo::STOPPED: - if ( m_audioEngineState == STATE_PLAYING ) { - audioEngine_stop( false ); // no engine lock - } + m_pAudioDriver->updateTransportInfo(); - if ( pSong->__bpm != m_pAudioDriver->m_transport.m_nBPM ) { - pSong->__bpm = m_pAudioDriver->m_transport.m_nBPM; - } + Hydrogen* pHydrogen = Hydrogen::get_instance(); + Song* pSong = pHydrogen->getSong(); - // go ahead and increment the realtimeframes by buffersize - // to support our realtime keyboard and midi event timing - // TODO: use method like setRealtimeFrames - m_nRealtimeFrames += m_nBufferSize; - break; - } - } /* if m_audioEngineState */ + // Update frame position + // ??? audioEngine_seek returns IMMEDIATELY + // when nNewFrames == m_pAudioDriver->m_transport.m_nFrames ??? + // audioEngine_seek( nNewFrames, true ); + switch ( m_pAudioDriver->m_transport.m_status ) { + case TransportInfo::ROLLING: + if ( m_audioEngineState == STATE_READY ) { + // false == no engine lock. Already locked + // this should set STATE_PLAYING + audioEngine_start( false, m_pAudioDriver->m_transport.m_nFrames ); + } + + // So, we are not playing even after attempt to start engine + if ( m_audioEngineState != STATE_PLAYING ) return; + + /* Now we're playing | Update BPM */ + if ( pSong->__bpm != m_pAudioDriver->m_transport.m_nBPM ) { + ___INFOLOG( QString( "song bpm: (%1) gets transport bpm: (%2)" ) + .arg( pSong->__bpm ) + .arg( m_pAudioDriver->m_transport.m_nBPM ) + ); + pHydrogen->setBPM ( m_pAudioDriver->m_transport.m_nBPM ); + } + + pHydrogen->setRealtimeFrames( m_pAudioDriver->m_transport.m_nFrames ); + break; + case TransportInfo::STOPPED: + // So, we are not playing even after attempt to start engine + if ( m_audioEngineState == STATE_PLAYING ) { + // false == no engine lock. Already locked + audioEngine_stop( false ); + } + + // go ahead and increment the realtimeframes by buffersize + // to support our realtime keyboard and midi event timing + // TODO: use method like setRealtimeFrames + m_nRealtimeFrames += m_nBufferSize; + break; + } } void audioEngine_clearNoteQueue() @@ -762,9 +744,11 @@ m_nBufferSize = nframes; } - // m_pAudioDriver->bpm updates Song->__bpm. (!!(Calls audioEngine_seek)) + Hydrogen* pHydrogen = Hydrogen::get_instance(); + Song* pSong = pHydrogen->getSong(); + audioEngine_process_transport(); - audioEngine_process_checkBPMChanged(); // pSong->__bpm decides tick size + audioEngine_process_checkBPMChanged(pSong); // pSong->__bpm decides tick size bool sendPatternChange = false; // always update note queue.. could come from pattern or realtime input @@ -801,9 +785,6 @@ audioEngine_process_playNotes( nframes ); // SAMPLER - Hydrogen* pHydrogen = Hydrogen::get_instance(); - Song* pSong = pHydrogen->getSong(); - AudioEngine::get_instance()->get_sampler()->process( nframes, pSong ); float* out_L = AudioEngine::get_instance()->get_sampler()->__main_out_L; float* out_R = AudioEngine::get_instance()->get_sampler()->__main_out_R; @@ -846,7 +827,7 @@ m_pMainBuffer_R[ i ] += buf_R[ i ]; if ( buf_L[ i ] > m_fFXPeak_L[nFX] ) m_fFXPeak_L[nFX] = buf_L[ i ]; - + if ( buf_R[ i ] > m_fFXPeak_R[nFX] ) m_fFXPeak_R[nFX] = buf_R[ i ]; } @@ -865,10 +846,21 @@ if ( val_L > m_fMasterPeak_L ) m_fMasterPeak_L = val_L; - + if ( val_R > m_fMasterPeak_R ) m_fMasterPeak_R = val_R; + for (std::vector::iterator it = pSong->get_components()->begin() ; it != pSong->get_components()->end(); ++it) { + DrumkitComponent* drumkit_component = *it; + + float compo_val_L = drumkit_component->get_out_L(i); + float compo_val_R = drumkit_component->get_out_R(i); + + if( compo_val_L > drumkit_component->get_peak_l() ) + drumkit_component->set_peak_l( compo_val_L ); + if( compo_val_R > drumkit_component->get_peak_r() ) + drumkit_component->set_peak_r( compo_val_R ); + } } } @@ -877,14 +869,6 @@ m_pAudioDriver->m_transport.m_nFrames += nframes; } - /* float fRenderTime = (renderTime_end.tv_sec - renderTime_start.tv_sec) * 1000.0 - + (renderTime_end.tv_usec - renderTime_start.tv_usec) / 1000.0; - */ - - float fLadspaTime = - ( ladspaTime_end.tv_sec - ladspaTime_start.tv_sec ) * 1000.0 - + ( ladspaTime_end.tv_usec - ladspaTime_start.tv_usec ) / 1000.0; - timeval finishTimeval = currentTime2(); m_fProcessTime = ( finishTimeval.tv_sec - startTimeval.tv_sec ) * 1000.0 @@ -909,7 +893,7 @@ #endif AudioEngine::get_instance()->unlock(); - + if ( sendPatternChange ) { EventQueue::get_instance()->push_event( EVENT_PATTERN_CHANGED, -1 ); } @@ -939,16 +923,6 @@ pFX->deactivate(); - // delete[] pFX->m_pBuffer_L; - // pFX->m_pBuffer_L = NULL; - // delete[] pFX->m_pBuffer_R; - // pFX->m_pBuffer_R = NULL; - // if ( nBufferSize != 0 ) { - //pFX->m_nBufferSize = nBufferSize; - //pFX->m_pBuffer_L = new float[ nBufferSize ]; - //pFX->m_pBuffer_R = new float[ nBufferSize ]; - // } - Effects::get_instance()->getLadspaFX( nFX )->connectAudioPorts( pFX->m_pBuffer_L, pFX->m_pBuffer_R, @@ -960,12 +934,10 @@ #endif } -void audioEngine_renameJackPorts() +void audioEngine_renameJackPorts(Song * pSong) { #ifdef H2CORE_HAVE_JACK // renames jack ports - Hydrogen* pHydrogen = Hydrogen::get_instance(); - Song* pSong = pHydrogen->getSong(); if ( ! pSong ) return; if ( m_pAudioDriver->class_name() == JackOutput::class_name() ) { @@ -974,9 +946,9 @@ #endif } -void audioEngine_setSong( Song *newSong ) +void audioEngine_setSong( Song * pNewSong ) { - ___WARNINGLOG( QString( "Set song: %1" ).arg( newSong->__name ) ); + ___WARNINGLOG( QString( "Set song: %1" ).arg( pNewSong->__name ) ); AudioEngine::get_instance()->lock( RIGHT_HERE ); @@ -986,23 +958,20 @@ ___ERRORLOG( "Error the audio engine is not in PREPARED state" ); } - Hydrogen* pHydrogen = Hydrogen::get_instance(); - assert( ! pHydrogen->getSong() ); - // setup LADSPA FX audioEngine_setupLadspaFX( m_pAudioDriver->getBufferSize() ); // update ticksize - audioEngine_process_checkBPMChanged(); + audioEngine_process_checkBPMChanged( pNewSong ); // find the first pattern and set as current - if ( newSong->get_pattern_list()->size() > 0 ) { - m_pPlayingPatterns->add( newSong->get_pattern_list()->get( 0 ) ); + if ( pNewSong->get_pattern_list()->size() > 0 ) { + m_pPlayingPatterns->add( pNewSong->get_pattern_list()->get( 0 ) ); } - audioEngine_renameJackPorts(); + audioEngine_renameJackPorts( pNewSong ); - m_pAudioDriver->setBpm( newSong->__bpm ); + m_pAudioDriver->setBpm( pNewSong->__bpm ); // change the current audio engine state m_audioEngineState = STATE_READY; @@ -1049,7 +1018,7 @@ Hydrogen* pHydrogen = Hydrogen::get_instance(); Song* pSong = pHydrogen->getSong(); - static int nLastTick = -1; +// static int nLastTick = -1; bool bSendPatternChange = false; int nMaxTimeHumanize = 2000; int nLeadLagFactor = m_pAudioDriver->m_transport.m_nTickSize * 5; // 5 ticks @@ -1062,8 +1031,6 @@ framepos = pHydrogen->getRealtimeFrames(); } - int tickNumber_start = 0; - // We need to look ahead in the song for notes with negative offsets // from LeadLag or Humanize. When starting from the beginning, we prime // the note queue with notes between 0 and nFrames plus @@ -1072,50 +1039,34 @@ int lookahead = nLeadLagFactor + nMaxTimeHumanize + 1; m_nLookaheadFrames = lookahead; + int tickNumber_start = 0; if ( framepos == 0 || ( m_audioEngineState == STATE_PLAYING && pSong->get_mode() == Song::SONG_MODE && m_nSongPos == -1 ) - ) { - tickNumber_start = (int)( framepos - / m_pAudioDriver->m_transport.m_nTickSize ); + ) { + tickNumber_start = framepos / m_pAudioDriver->m_transport.m_nTickSize; } else { - tickNumber_start = (int)( (framepos + lookahead) - / m_pAudioDriver->m_transport.m_nTickSize ); + tickNumber_start = ( framepos + lookahead) / m_pAudioDriver->m_transport.m_nTickSize; } - - int tickNumber_end = (int) ( (framepos + nFrames + lookahead) - / m_pAudioDriver->m_transport.m_nTickSize ); - - int tick = tickNumber_start; + int tickNumber_end = ( framepos + nFrames + lookahead ) / m_pAudioDriver->m_transport.m_nTickSize; // ___WARNINGLOG( "Lookahead: " + to_string( lookahead // / m_pAudioDriver->m_transport.m_nTickSize ) ); // get initial timestamp for first tick gettimeofday( &m_currentTickTime, NULL ); - while ( tick <= tickNumber_end ) { - if ( tick == nLastTick ) { - ++tick; - continue; - } else { - nLastTick = tick; - } - - + for ( int tick = tickNumber_start; tick < tickNumber_end; tick++ ) { // midi events now get put into the m_songNoteQueue as well, // based on their timestamp while ( m_midiNoteQueue.size() > 0 ) { Note *note = m_midiNoteQueue[0]; + if ( note->get_position() > tick ) break; - if ( ( int )note->get_position() <= tick ) { - // printf ("tick=%d pos=%d\n", tick, note->getPosition()); - m_midiNoteQueue.pop_front(); - note->get_instrument()->enqueue(); - m_songNoteQueue.push( note ); - } else { - break; - } + // printf ("tick=%d pos=%d\n", tick, note->getPosition()); + m_midiNoteQueue.pop_front(); + note->get_instrument()->enqueue(); + m_songNoteQueue.push( note ); } if ( m_audioEngineState != STATE_PLAYING ) { @@ -1142,10 +1093,7 @@ return -1; } - m_nSongPos = findPatternInTick( tick, - pSong->is_loop_enabled(), - &m_nPatternStartTick - ); + m_nSongPos = findPatternInTick( tick, pSong->is_loop_enabled(), &m_nPatternStartTick ); if ( m_nSongSizeInTicks != 0 ) { m_nPatternTickPosition = ( tick - m_nPatternStartTick ) @@ -1154,19 +1102,15 @@ m_nPatternTickPosition = tick - m_nPatternStartTick; } - if ( m_nPatternTickPosition == 0 ) { bSendPatternChange = true; } - // PatternList *pPatternList = - // (*(pSong->getPatternGroupVector()))[m_nSongPos]; + // PatternList *pPatternList = (*(pSong->getPatternGroupVector()))[m_nSongPos]; if ( m_nSongPos == -1 ) { ___INFOLOG( "song pos = -1" ); if ( pSong->is_loop_enabled() == true ) { - m_nSongPos = findPatternInTick( 0, - true, - &m_nPatternStartTick ); + m_nSongPos = findPatternInTick( 0, true, &m_nPatternStartTick ); } else { ___INFOLOG( "End of Song" ); @@ -1197,7 +1141,6 @@ //m_nPatternTickPosition = tick % m_pCurrentPattern->getSize(); int nPatternSize = MAX_NOTES; - if ( Preferences::get_instance()->patternModePlaysSelected() ) { m_pPlayingPatterns->clear(); @@ -1206,7 +1149,6 @@ pattern->extand_with_flattened_virtual_patterns( m_pPlayingPatterns ); } - if ( m_pPlayingPatterns->size() != 0 ) { Pattern *pFirstPattern = m_pPlayingPatterns->get( 0 ); nPatternSize = pFirstPattern->get_length(); @@ -1220,14 +1162,10 @@ || ( m_nPatternStartTick == -1 ) ) { if ( m_pNextPatterns->size() > 0 ) { Pattern * p; - for ( uint i = 0; - i < m_pNextPatterns->size(); - i++ ) { + for ( uint i = 0; i < m_pNextPatterns->size(); i++ ) { p = m_pNextPatterns->get( i ); - // ___WARNINGLOG( QString( "Got pattern # %1" ) - // .arg( i + 1 ) ); - // if the pattern isn't playing - // already, start it now. + // ___WARNINGLOG( QString( "Got pattern # %1" ).arg( i + 1 ) ); + // if the pattern isn't playing, already, start it now. if ( ( m_pPlayingPatterns->del( p ) ) == NULL ) { m_pPlayingPatterns->add( p ); } @@ -1237,12 +1175,12 @@ } if ( m_nPatternStartTick == -1 ) { m_nPatternStartTick = tick - (tick % nPatternSize); - // ___WARNINGLOG( "set Pattern Start Tick to " - // + to_string( m_nPatternStartTick ) ); + // ___WARNINGLOG( "set Pattern Start Tick to " ) + to_string( m_nPatternStartTick ) ); } else { m_nPatternStartTick = tick; } } + m_nPatternTickPosition = tick - m_nPatternStartTick; if ( m_nPatternTickPosition > nPatternSize ) { m_nPatternTickPosition = tick % nPatternSize; @@ -1250,8 +1188,7 @@ } // metronome - // if ( ( m_nPatternStartTick == tick ) - // || ( ( tick - m_nPatternStartTick ) % 48 == 0 ) ) { + // if ( ( m_nPatternStartTick == tick ) || ( ( tick - m_nPatternStartTick ) % 48 == 0 ) ) if ( m_nPatternTickPosition % 48 == 0 ) { float fPitch; float fVelocity; @@ -1364,10 +1301,8 @@ } } } - ++tick; } - // audioEngine_process must send the pattern change event after mutex unlock if ( bSendPatternChange ) { return 2; @@ -1451,39 +1386,6 @@ m_midiNoteQueue.push_back( note ); } - -/* -void audioEngine_noteOff( Note *note ) -{ - if ( note == NULL ) { - ___ERRORLOG( "Error, note == NULL" ); - } - - AudioEngine::get_instance()->lock( RIGHT_HERE ); - - // check current state - if ( ( m_audioEngineState != STATE_READY ) - && ( m_audioEngineState != STATE_PLAYING ) ) { - ___ERRORLOG( "Error the audio engine is not in READY state" ); - delete note; - AudioEngine::get_instance()->unlock(); - return; - } - -// AudioEngine::get_instance()->get_sampler()->note_off( note ); - AudioEngine::get_instance()->unlock(); - delete note; - -} -*/ - - -// unsigned long audioEngine_getTickPosition() -// { -// return m_nPatternTickPosition; -// } - - AudioOutput* createDriver( const QString& sDriver ) { ___INFOLOG( QString( "Driver: '%1'" ).arg( sDriver ) ); @@ -1587,25 +1489,49 @@ QString sAudioDriver = preferencesMng->m_sAudioDriver; - // sAudioDriver = "Auto"; if ( sAudioDriver == "Auto" ) { + #ifndef WIN32 if ( ( m_pAudioDriver = createDriver( "Jack" ) ) == NULL ) { if ( ( m_pAudioDriver = createDriver( "Alsa" ) ) == NULL ) { if ( ( m_pAudioDriver = createDriver( "CoreAudio" ) ) == NULL ) { if ( ( m_pAudioDriver = createDriver( "PortAudio" ) ) == NULL ) { if ( ( m_pAudioDriver = createDriver( "Oss" ) ) == NULL ) { - audioEngine_raiseError( Hydrogen::ERROR_STARTING_DRIVER ); - ___ERRORLOG( "Error starting audio driver" ); - ___ERRORLOG( "Using the NULL output audio driver" ); - - // use the NULL output driver - m_pAudioDriver = new NullDriver( audioEngine_process ); - m_pAudioDriver->init( 0 ); + if ( ( m_pAudioDriver = createDriver( "PulseAudio" ) ) == NULL ) { + audioEngine_raiseError( Hydrogen::ERROR_STARTING_DRIVER ); + ___ERRORLOG( "Error starting audio driver" ); + ___ERRORLOG( "Using the NULL output audio driver" ); + + // use the NULL output driver + m_pAudioDriver = new NullDriver( audioEngine_process ); + m_pAudioDriver->init( 0 ); + } } } } } } + #else + //On Windows systems, use PortAudio is the prioritized backend + if ( ( m_pAudioDriver = createDriver( "PortAudio" ) ) == NULL ) { + if ( ( m_pAudioDriver = createDriver( "Alsa" ) ) == NULL ) { + if ( ( m_pAudioDriver = createDriver( "CoreAudio" ) ) == NULL ) { + if ( ( m_pAudioDriver = createDriver( "Jack" ) ) == NULL ) { + if ( ( m_pAudioDriver = createDriver( "Oss" ) ) == NULL ) { + if ( ( m_pAudioDriver = createDriver( "PulseAudio" ) ) == NULL ) { + audioEngine_raiseError( Hydrogen::ERROR_STARTING_DRIVER ); + ___ERRORLOG( "Error starting audio driver" ); + ___ERRORLOG( "Using the NULL output audio driver" ); + + // use the NULL output driver + m_pAudioDriver = new NullDriver( audioEngine_process ); + m_pAudioDriver->init( 0 ); + } + } + } + } + } + } + #endif } else { m_pAudioDriver = createDriver( sAudioDriver ); if ( m_pAudioDriver == NULL ) { @@ -1694,7 +1620,7 @@ } #ifdef H2CORE_HAVE_JACK - audioEngine_renameJackPorts(); + audioEngine_renameJackPorts( pSong ); #endif audioEngine_setupLadspaFX( m_pAudioDriver->getBufferSize() ); @@ -1777,20 +1703,38 @@ INFOLOG( "[Hydrogen]" ); __song = NULL; + + m_pTimeline = new Timeline(); + hydrogenInstance = this; + + initBeatcounter(); // __instance = this; audioEngine_init(); // Prevent double creation caused by calls from MIDI thread __instance = this; + audioEngine_startAudioDrivers(); - for(int i = 0; i<128; i++){ + for(int i = 0; i< MAX_INSTRUMENTS; i++){ m_nInstrumentLookupTable[i] = i; } + + } Hydrogen::~Hydrogen() { INFOLOG( "[~Hydrogen]" ); + +#ifdef H2CORE_HAVE_NSMSESSION + NsmClient* pNsmClient = NsmClient::get_instance(); + + if(pNsmClient){ + pNsmClient->shutdown(); + } +#endif + + if ( m_audioEngineState == STATE_PLAYING ) { audioEngine_stop(); } @@ -1798,6 +1742,9 @@ audioEngine_stopAudioDrivers(); audioEngine_destroy(); __kill_instruments(); + + delete m_pTimeline; + __instance = NULL; } @@ -1811,6 +1758,10 @@ EventQueue::create_instance(); MidiActionManager::create_instance(); +#ifdef H2CORE_HAVE_NSMSESSION + NsmClient::create_instance(); +#endif + if ( __instance == 0 ) { __instance = new Hydrogen; } @@ -1821,6 +1772,17 @@ // Playlist::create_instance(); } +void Hydrogen::initBeatcounter(void) +{ + m_ntaktoMeterCompute = 1; + m_nbeatsToCount = 4; + m_nEventCount = 1; + m_nTempoChangeCounter = 0; + m_nBeatCount = 1; + m_nCoutOffset = 0; + m_nStartOffset = 0; +} + /// Start the internal sequencer void Hydrogen::sequencer_play() { @@ -2170,63 +2132,38 @@ assert( currentPattern ); if ( doRecord ) { - bool bNoteAlreadyExist = false; - Note::Key myKey = (Note::Key)0; - Note::Octave myOctave = (Note::Octave)0; + EventQueue::AddMidiNoteVector noteAction; + noteAction.m_column = column; + noteAction.m_pattern = currentPatternNumber; + noteAction.f_velocity = velocity; + noteAction.f_pan_L = pan_L; + noteAction.f_pan_R = pan_R; + noteAction.m_length = -1; + noteAction.b_isMidi = true; - if (pref->__playselectedinstrument) { + if ( pref->__playselectedinstrument ) { instrRef = pSong->get_instrument_list()->get( getSelectedInstrumentNumber() ); int divider = msg1 / 12; - myKey = (Note::Key)(msg1 - (12 * divider)); - myOctave = (Note::Octave)(divider -3); + noteAction.m_row = getSelectedInstrumentNumber(); + noteAction.no_octaveKeyVal = (Note::Octave)(divider -3); + noteAction.nk_noteKeyVal = (Note::Key)(msg1 - (12 * divider)); + noteAction.b_isInstrumentMode = true; } else { instrRef = pSong->get_instrument_list()->get( m_nInstrumentLookupTable[ instrument ] ); - } - - Note* pNoteold = currentPattern->find_note( column, -1, instrRef, myKey, myOctave ); - if ( pNoteold ) bNoteAlreadyExist = true; - - if ( ! pref->__playselectedinstrument ) { - EventQueue::AddMidiNoteVector noteAction; - noteAction.m_column = column; noteAction.m_row = m_nInstrumentLookupTable[ instrument ]; - noteAction.m_pattern = currentPatternNumber; - noteAction.f_velocity = velocity; - noteAction.f_pan_L = pan_L; - noteAction.f_pan_R = pan_R; - noteAction.m_length = -1; noteAction.no_octaveKeyVal = (Note::Octave)0; noteAction.nk_noteKeyVal = (Note::Key)0; noteAction.b_isInstrumentMode = false; - noteAction.b_isMidi = true; - noteAction.b_noteExist = bNoteAlreadyExist; - EventQueue::get_instance()->m_addMidiNoteVector.push_back(noteAction); - - // hear note if its not in the future - if ( pref->getHearNewNotes() && position <= getTickPosition() ) - hearnote = true; - } else if ( pref->__playselectedinstrument ) { - EventQueue::AddMidiNoteVector noteAction; - noteAction.m_column = column; - noteAction.m_row = getSelectedInstrumentNumber(); - noteAction.m_pattern = currentPatternNumber; - noteAction.f_velocity = velocity; - noteAction.f_pan_L = pan_L; - noteAction.f_pan_R = pan_R; - noteAction.m_length = -1; - - int divider = msg1 / 12; - noteAction.no_octaveKeyVal = (Note::Octave)(divider -3); - noteAction.nk_noteKeyVal = (Note::Key)(msg1 - (12 * divider)); - noteAction.b_isInstrumentMode = true; - noteAction.b_isMidi = true; - noteAction.b_noteExist = bNoteAlreadyExist; - EventQueue::get_instance()->m_addMidiNoteVector.push_back(noteAction); - - // hear note if its not in the future - if ( pref->getHearNewNotes() && position <= getTickPosition() ) - hearnote = true; } + + Note* pNoteold = currentPattern->find_note( noteAction.m_column, -1, instrRef, noteAction.nk_noteKeyVal, noteAction.no_octaveKeyVal ); + noteAction.b_noteExist = ( pNoteold ) ? true : false; + + EventQueue::get_instance()->m_addMidiNoteVector.push_back(noteAction); + + // hear note if its not in the future + if ( pref->getHearNewNotes() && position <= getTickPosition() ) + hearnote = true; } /* if doRecord */ } else if ( pref->getHearNewNotes() ) { hearnote = true; @@ -2288,11 +2225,9 @@ + ( deltatime.tv_usec / 1000000.0 ) + ( m_pAudioDriver->getBufferSize() / ( double )sampleRate ); - retTick = ( unsigned long ) ( ( sampleRate - / ( double ) m_pAudioDriver->m_transport.m_nTickSize ) - * deltaSec ); + retTick = ( unsigned long ) ( ( sampleRate / ( double ) m_pAudioDriver->m_transport.m_nTickSize ) * deltaSec ); - retTick = initTick + retTick; + retTick += initTick; return retTick; } @@ -2308,28 +2243,25 @@ } /// Set the next pattern (Pattern mode only) -void Hydrogen::sequencer_setNextPattern( int pos, bool appendPattern, bool deletePattern ) +void Hydrogen::sequencer_setNextPattern( int pos ) { - m_bAppendNextPattern = appendPattern; - m_bDeleteNextPattern = deletePattern; - AudioEngine::get_instance()->lock( RIGHT_HERE ); Song* pSong = getSong(); if ( pSong && pSong->get_mode() == Song::PATTERN_MODE ) { - PatternList *patternList = pSong->get_pattern_list(); - Pattern * p = patternList->get( pos ); - if ( ( pos >= 0 ) && ( pos < ( int )patternList->size() ) ) { + PatternList *pPatternList = pSong->get_pattern_list(); + Pattern * pPattern = pPatternList->get( pos ); + if ( ( pos >= 0 ) && ( pos < ( int )pPatternList->size() ) ) { // if p is already on the next pattern list, delete it. - if ( m_pNextPatterns->del( p ) == NULL ) { + if ( m_pNextPatterns->del( pPattern ) == NULL ) { // WARNINGLOG( "Adding to nextPatterns" ); - m_pNextPatterns->add( p ); + m_pNextPatterns->add( pPattern ); } /* else { // WARNINGLOG( "Removing " + to_string(pos) ); }*/ } else { ERRORLOG( QString( "pos not in patternList range. pos=%1 patternListSize=%2" ) - .arg( pos ).arg( patternList->size() ) ); + .arg( pos ).arg( pPatternList->size() ) ); m_pNextPatterns->clear(); } } else { @@ -2345,6 +2277,16 @@ return m_nSongPos; } +/* Return pattern for selected song tick position */ +int Hydrogen::getPosForTick( unsigned long TickPos ) +{ + Song* pSong = getSong(); + if ( ! pSong ) return 0; + + int patternStartTick; + return findPatternInTick( TickPos, pSong->is_loop_enabled(), &patternStartTick ); +} + void Hydrogen::restartDrivers() { audioEngine_restartAudioDrivers(); @@ -2485,26 +2427,42 @@ return m_fMaxProcessTime; } -int Hydrogen::loadDrumkit( Drumkit *drumkitInfo ) + +// Setting conditional to true will keep instruments that have notes if new kit has less instruments than the old one +int Hydrogen::loadDrumkit( Drumkit *pDrumkitInfo ) +{ + return loadDrumkit( pDrumkitInfo, true ); +} + +int Hydrogen::loadDrumkit( Drumkit *pDrumkitInfo, bool conditional ) { - assert ( drumkitInfo ); + assert ( pDrumkitInfo ); int old_ae_state = m_audioEngineState; if( m_audioEngineState >= STATE_READY ) { m_audioEngineState = STATE_PREPARED; } - INFOLOG( drumkitInfo->get_name() ); - m_currentDrumkit = drumkitInfo->get_name(); - LocalFileMng fileMng; - QString sDrumkitPath = Filesystem::drumkit_path_search( drumkitInfo->get_name() ); + INFOLOG( pDrumkitInfo->get_name() ); + m_currentDrumkit = pDrumkitInfo->get_name(); + std::vector* pSongCompoList= getSong()->get_components(); + std::vector* pDrumkitCompoList = pDrumkitInfo->get_components(); + + pSongCompoList->clear(); + for (std::vector::iterator it = pDrumkitCompoList->begin() ; it != pDrumkitCompoList->end(); ++it) { + DrumkitComponent* pSrcComponent = *it; + DrumkitComponent* pNewComponent = new DrumkitComponent( pSrcComponent->get_id(), pSrcComponent->get_name() ); + pNewComponent->load_from( pSrcComponent ); + + pSongCompoList->push_back( pNewComponent ); + } //current instrument list - InstrumentList *songInstrList = getSong()->get_instrument_list(); + InstrumentList *pSongInstrList = getSong()->get_instrument_list(); //new instrument list - InstrumentList *pDrumkitInstrList = drumkitInfo->get_instruments(); + InstrumentList *pDrumkitInstrList = pDrumkitInfo->get_instruments(); /* If the old drumkit is bigger then the new drumkit, @@ -2529,20 +2487,20 @@ */ //needed for the new delete function - int instrumentDiff = songInstrList->size() - pDrumkitInstrList->size(); + int instrumentDiff = pSongInstrList->size() - pDrumkitInstrList->size(); for ( unsigned nInstr = 0; nInstr < pDrumkitInstrList->size(); ++nInstr ) { Instrument *pInstr = NULL; - if ( nInstr < songInstrList->size() ) { + if ( nInstr < pSongInstrList->size() ) { //instrument exists already - pInstr = songInstrList->get( nInstr ); + pInstr = pSongInstrList->get( nInstr ); assert( pInstr ); } else { pInstr = new Instrument(); // The instrument isn't playing yet; no need for locking // :-) - Jakob Lund. AudioEngine::get_instance()->lock( // "Hydrogen::loadDrumkit" ); - songInstrList->add( pInstr ); + pSongInstrList->add( pInstr ); // AudioEngine::get_instance()->unlock(); } @@ -2555,23 +2513,26 @@ // creo i nuovi layer in base al nuovo strumento // Moved code from here right into the Instrument class - Jakob Lund. - pInstr->load_from( drumkitInfo, pNewInstr ); + pInstr->load_from( pDrumkitInfo, pNewInstr ); } - //wolke: new delete funktion if ( instrumentDiff >=0 ) { + int p; // last position in instrument list + p = getSong()->get_instrument_list()->size() - 1; + for ( int i = 0; i < instrumentDiff ; i++ ){ removeInstrument( getSong()->get_instrument_list()->size() - 1, - true + conditional ); + } } #ifdef H2CORE_HAVE_JACK AudioEngine::get_instance()->lock( RIGHT_HERE ); - renameJackPorts(); + renameJackPorts( getSong() ); AudioEngine::get_instance()->unlock(); #endif @@ -2580,6 +2541,25 @@ return 0; //ok } +// This will check if an instrument has any notes +bool Hydrogen::instrumentHasNotes( Instrument *pInst ) +{ + Song* pSong = getSong(); + PatternList* pPatternList = pSong->get_pattern_list(); + + for ( int nPattern = 0 ; nPattern < (int)pPatternList->size() ; ++nPattern ) + { + if( pPatternList->get( nPattern )->references( pInst ) ) + { + DEBUGLOG("Instrument " + pInst->get_name() + " has notes" ); + return true; + } + } + + // no notes for this instrument + return false; +} + //this is also a new function and will used from the new delete function in //Hydrogen::loadDrumkit to delete the instruments by number void Hydrogen::removeInstrument( int instrumentnumber, bool conditional ) @@ -2599,6 +2579,7 @@ if( pPatternList ->get( nPattern ) ->references( pInstr ) ) { + DEBUGLOG("Keeping instrument #" + QString::number( instrumentnumber ) ); return; } } @@ -2611,11 +2592,14 @@ AudioEngine::get_instance()->lock( RIGHT_HERE ); Instrument* pInstr = pList->get( 0 ); pInstr->set_name( (QString( "Instrument 1" )) ); - // remove all layers - for ( int nLayer = 0; nLayer < MAX_LAYERS; nLayer++ ) { - InstrumentLayer* pLayer = pInstr->get_layer( nLayer ); - delete pLayer; - pInstr->set_layer( NULL, nLayer ); + for (std::vector::iterator it = pInstr->get_components()->begin() ; it != pInstr->get_components()->end(); ++it) { + InstrumentComponent* pCompo = *it; + // remove all layers + for ( int nLayer = 0; nLayer < MAX_LAYERS; nLayer++ ) { + InstrumentLayer* pLayer = pCompo->get_layer( nLayer ); + delete pLayer; + pCompo->set_layer( NULL, nLayer ); + } } AudioEngine::get_instance()->unlock(); EventQueue::get_instance()->push_event( EVENT_SELECTED_INSTRUMENT_CHANGED, -1 ); @@ -2629,13 +2613,16 @@ >= (int)getSong()->get_instrument_list()->size() - 1 ) { Hydrogen::get_instance() ->setSelectedInstrumentNumber( - std::max(0, instrumentnumber - 1) + std::max(0, instrumentnumber - 1 ) ); } + // // delete the instrument from the instruments list AudioEngine::get_instance()->lock( RIGHT_HERE ); getSong()->get_instrument_list()->del( instrumentnumber ); - getSong()->__is_modified = true; + // Ensure the selected instrument is not a deleted one + setSelectedInstrumentNumber( instrumentnumber - 1 ); + getSong()->set_is_modified( true ); AudioEngine::get_instance()->unlock(); // At this point the instrument has been removed from both the @@ -2850,13 +2837,11 @@ void Hydrogen::setBPM( float fBPM ) { Song* pSong = getSong(); + if ( ! m_pAudioDriver || ! pSong ) return; - if ( m_pAudioDriver && pSong ) { - m_pAudioDriver->setBpm( fBPM ); - pSong->__bpm = fBPM; - m_nNewBpmJTM = fBPM; - // audioEngine_process_checkBPMChanged(); - } + m_pAudioDriver->setBpm( fBPM ); + pSong->__bpm = fBPM; + setNewBpmJTM ( fBPM ); } void Hydrogen::restartLadspaFX() @@ -2926,15 +2911,15 @@ } #ifdef H2CORE_HAVE_JACK -void Hydrogen::renameJackPorts() +void Hydrogen::renameJackPorts( Song *pSong ) { if( Preferences::get_instance()->m_bJackTrackOuts == true ){ - audioEngine_renameJackPorts(); + audioEngine_renameJackPorts(pSong); } } #endif -///BeatCounter +///m_nBeatCounter void Hydrogen::setbeatsToCount( int beatstocount) { m_nbeatsToCount = beatstocount; @@ -2957,78 +2942,78 @@ int Hydrogen::getBcStatus() { - return eventCount; + return m_nEventCount; } void Hydrogen::setBcOffsetAdjust() { - //individual fine tuning for the beatcounter + //individual fine tuning for the m_nBeatCounter //to adjust ms_offset from different people and controller - Preferences *pref = Preferences::get_instance(); + Preferences *pPreferences = Preferences::get_instance(); - m_nCoutOffset = pref->m_countOffset; - m_nStartOffset = pref->m_startOffset; + m_nCoutOffset = pPreferences->m_countOffset; + m_nStartOffset = pPreferences->m_startOffset; } void Hydrogen::handleBeatCounter() { // Get first time value: - if (beatCount == 1) - gettimeofday(¤tTime,NULL); + if (m_nBeatCount == 1) + gettimeofday(&m_CurrentTime,NULL); - eventCount++; + m_nEventCount++; - // Set wlastTime to wcurrentTime to remind the time: - lastTime = currentTime; + // Set wm_LastTime to wm_CurrentTime to remind the time: + m_LastTime = m_CurrentTime; // Get new time: - gettimeofday(¤tTime,NULL); + gettimeofday(&m_CurrentTime,NULL); // Build doubled time difference: - lastBeatTime = (double)( - lastTime.tv_sec - + (double)(lastTime.tv_usec * US_DIVIDER) + m_nLastBeatTime = (double)( + m_LastTime.tv_sec + + (double)(m_LastTime.tv_usec * US_DIVIDER) + (int)m_nCoutOffset * .0001 ); - currentBeatTime = (double)( - currentTime.tv_sec - + (double)(currentTime.tv_usec * US_DIVIDER) + m_nCurrentBeatTime = (double)( + m_CurrentTime.tv_sec + + (double)(m_CurrentTime.tv_usec * US_DIVIDER) ); - beatDiff = beatCount == 1 ? 0 : currentBeatTime - lastBeatTime; + m_nBeatDiff = m_nBeatCount == 1 ? 0 : m_nCurrentBeatTime - m_nLastBeatTime; //if differences are to big reset the beatconter - if( beatDiff > 3.001 * 1/m_ntaktoMeterCompute ){ - eventCount = 1; - beatCount = 1; + if( m_nBeatDiff > 3.001 * 1/m_ntaktoMeterCompute ){ + m_nEventCount = 1; + m_nBeatCount = 1; return; } // Only accept differences big enough - if (beatCount == 1 || beatDiff > .001) { - if (beatCount > 1) - beatDiffs[beatCount - 2] = beatDiff ; + if (m_nBeatCount == 1 || m_nBeatDiff > .001) { + if (m_nBeatCount > 1) + m_nBeatDiffs[m_nBeatCount - 2] = m_nBeatDiff ; // Compute and reset: - if (beatCount == m_nbeatsToCount){ + if (m_nBeatCount == m_nbeatsToCount){ // unsigned long currentframe = getRealtimeFrames(); double beatTotalDiffs = 0; for(int i = 0; i < (m_nbeatsToCount - 1); i++) - beatTotalDiffs += beatDiffs[i]; - double beatDiffAverage = + beatTotalDiffs += m_nBeatDiffs[i]; + double m_nBeatDiffAverage = beatTotalDiffs - / (beatCount - 1) + / (m_nBeatCount - 1) * m_ntaktoMeterCompute ; - beatCountBpm = - (float) ((int) (60 / beatDiffAverage * 100)) + m_fBeatCountBpm = + (float) ((int) (60 / m_nBeatDiffAverage * 100)) / 100; AudioEngine::get_instance()->lock( RIGHT_HERE ); - if ( beatCountBpm > 500) - beatCountBpm = 500; - setBPM( beatCountBpm ); + if ( m_fBeatCountBpm > 500) + m_fBeatCountBpm = 500; + setBPM( m_fBeatCountBpm ); AudioEngine::get_instance()->unlock(); if (Preferences::get_instance()->m_mmcsetplay == Preferences::SET_PLAY_OFF) { - beatCount = 1; - eventCount = 1; + m_nBeatCount = 1; + m_nEventCount = 1; }else{ if ( m_audioEngineState != STATE_PLAYING ){ unsigned bcsamplerate = @@ -3037,13 +3022,13 @@ if ( m_ntaktoMeterCompute <= 1){ rtstartframe = bcsamplerate - * beatDiffAverage + * m_nBeatDiffAverage * ( 1/ m_ntaktoMeterCompute ); }else { rtstartframe = bcsamplerate - * beatDiffAverage + * m_nBeatDiffAverage / m_ntaktoMeterCompute ; } @@ -3062,18 +3047,18 @@ sequencer_play(); } - beatCount = 1; - eventCount = 1; + m_nBeatCount = 1; + m_nEventCount = 1; return; } } else { - beatCount ++; + m_nBeatCount ++; } } return; } -//~ beatcounter +//~ m_nBeatCounter // jack transport master unsigned long Hydrogen::getHumantimeFrames() @@ -3130,11 +3115,13 @@ long Hydrogen::getTickForHumanPosition( int humanpos ) { Song* pSong = getSong(); - if ( ! pSong ) return -1; + if ( ! pSong ){ + return -1; + } - std::vector< PatternList* > *columns = pSong->get_pattern_group_vector(); + std::vector< PatternList* > * pColumns = pSong->get_pattern_group_vector(); - int nPatternGroups = columns->size(); + int nPatternGroups = pColumns->size(); if ( humanpos >= nPatternGroups ) { if ( pSong->is_loop_enabled() ) { humanpos = humanpos % nPatternGroups; @@ -3142,36 +3129,18 @@ return MAX_NOTES; } } - // std::vector *pColumns = - // pSong->get_pattern_group_vector()[ humanpos - 1 ] - // .get( 0 )->get_length(); - - // ERRORLOG( "Kick me! " ); - if ( humanpos < 1 ) return MAX_NOTES; - PatternList* pl = columns->at( humanpos - 1 ); - Pattern *pPattern = pl->get( 0 ); + + if ( humanpos < 1 ){ + return MAX_NOTES; + } + + PatternList* pPatternList = pColumns->at( humanpos - 1 ); + Pattern *pPattern = pPatternList->get( 0 ); if ( pPattern ) { return pPattern->get_length(); } else { return MAX_NOTES; } - // int nPatternSize; - - // pColumns - - /* Pattern *pPattern = NULL; - for ( int i = 0; i < humanpos; ++i ) { - PatternList *pColumn = ( *pColumns )[ i ]; - pPattern = pColumn->get( 0 ); - if ( pPattern ) { - nPatternSize = pPattern->get_length(); - } else { - nPatternSize = MAX_NOTES; - } - - humanTick = nPatternSize; - }*/ - // return humanTick; } float Hydrogen::getNewBpmJTM() @@ -3265,35 +3234,66 @@ return m_naddrealtimenotetickposition; } -void Hydrogen::sortTimelineVector() -{ - //sort the timeline vector to beats a < b - sort(m_timelinevector.begin(), m_timelinevector.end(), TimelineComparator()); -} -void Hydrogen::sortTimelineTagVector() +// Get TimelineBPM for Pos +float Hydrogen::getTimelineBpm( int Beat ) { - //sort the timeline vector to beats a < b - sort(m_timelinetagvector.begin(), m_timelinetagvector.end(), TimelineTagComparator()); + Song* pSong = getSong(); + + // We need return something + if ( ! pSong ) return getNewBpmJTM(); + + float bpm = pSong->__bpm; + + // Pattern mode don't use timeline + if ( pSong->get_mode() == Song::PATTERN_MODE ) + return bpm; + + //time line test + if ( ! Preferences::get_instance()->getUseTimelineBpm() ) + return bpm; + + for ( int i = 0; i < static_cast(m_pTimeline->m_timelinevector.size()); i++) { + if ( m_pTimeline->m_timelinevector[i].m_htimelinebeat > Beat ) + break; + + bpm = m_pTimeline->m_timelinevector[i].m_htimelinebpm; + } + + return bpm; } void Hydrogen::setTimelineBpm() { + //time line test + if ( ! Preferences::get_instance()->getUseTimelineBpm() ) return; + + // Update "engine" BPM Song* pSong = getSong(); + float BPM = getTimelineBpm ( getPatternPos() ); + if ( BPM != pSong->__bpm ) + setBPM( BPM ); - //time line test - if ( Preferences::get_instance()->getUseTimelineBpm() ) { - float bpm = pSong->__bpm; - for ( int i = 0; i < static_cast(m_timelinevector.size() ); i++) { - if ( m_timelinevector[i].m_htimelinebeat > getPatternPos() ) - break; + // Update "realtime" BPM + unsigned long PlayTick = getRealtimeTickPosition(); + int RealtimePatternPos = getPosForTick ( PlayTick ); + float RealtimeBPM = getTimelineBpm ( RealtimePatternPos ); - bpm = m_timelinevector[i].m_htimelinebpm; - } + // FIXME: this was already done in setBPM but for "engine" time + // so this is actually forcibly overwritten here + setNewBpmJTM( RealtimeBPM ); +} - if ( bpm != pSong->__bpm ) - setBPM( bpm ); +#ifdef H2CORE_HAVE_NSMSESSION +void Hydrogen::startNsmClient() +{ + //NSM has to be started before jack driver gets created + NsmClient* pNsmClient = NsmClient::get_instance(); + + if(pNsmClient){ + pNsmClient->createInitialClient(); } } +#endif }; /* Namespace */ diff -Nru hydrogen-0.9.6.1/src/core/src/IO/alsa_audio_driver.cpp hydrogen-0.9.7/src/core/src/IO/alsa_audio_driver.cpp --- hydrogen-0.9.6.1/src/core/src/IO/alsa_audio_driver.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/core/src/IO/alsa_audio_driver.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -20,7 +20,7 @@ * */ -#include "AlsaAudioDriver.h" +#include #ifdef H2CORE_HAVE_ALSA @@ -117,6 +117,8 @@ , m_pOut_L( NULL ) , m_pOut_R( NULL ) , m_nXRuns( 0 ) + , m_nBufferSize( 0 ) + , m_pPlayback_handle( NULL ) , m_processCallback( processCallback ) { INFOLOG( "INIT" ); diff -Nru hydrogen-0.9.6.1/src/core/src/IO/AlsaAudioDriver.h hydrogen-0.9.7/src/core/src/IO/AlsaAudioDriver.h --- hydrogen-0.9.6.1/src/core/src/IO/AlsaAudioDriver.h 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/core/src/IO/AlsaAudioDriver.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,89 +0,0 @@ -/* - * Hydrogen - * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] - * - * http://www.hydrogen-music.org - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY, without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - */ -#ifndef ALSA_AUDIO_DRIVER_H -#define ALSA_AUDIO_DRIVER_H - -#include -#include - -#ifdef H2CORE_HAVE_ALSA - -#include -#include - -namespace H2Core -{ - -typedef int ( *audioProcessCallback )( uint32_t, void * ); - -class AlsaAudioDriver : public AudioOutput -{ - H2_OBJECT -public: - snd_pcm_t *m_pPlayback_handle; - bool m_bIsRunning; - unsigned long m_nBufferSize; - float* m_pOut_L; - float* m_pOut_R; - int m_nXRuns; - QString m_sAlsaAudioDevice; - audioProcessCallback m_processCallback; - - AlsaAudioDriver( audioProcessCallback processCallback ); - ~AlsaAudioDriver(); - - virtual int init( unsigned nBufferSize ); - virtual int connect(); - virtual void disconnect(); - virtual unsigned getBufferSize(); - virtual unsigned getSampleRate(); - virtual float* getOut_L(); - virtual float* getOut_R(); - - virtual void updateTransportInfo(); - virtual void play(); - virtual void stop(); - virtual void locate( unsigned long nFrame ); - virtual void setBpm( float fBPM ); - -private: - - unsigned int m_nSampleRate; -}; - -#else - -namespace H2Core { - -class AlsaAudioDriver : public NullDriver -{ - H2_OBJECT -public: - AlsaAudioDriver( audioProcessCallback processCallback ) : NullDriver( processCallback ) {} - -}; - -#endif // H2CORE_HAVE_ALSA - -}; - -#endif diff -Nru hydrogen-0.9.6.1/src/core/src/IO/alsa_midi_driver.cpp hydrogen-0.9.7/src/core/src/IO/alsa_midi_driver.cpp --- hydrogen-0.9.6.1/src/core/src/IO/alsa_midi_driver.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/core/src/IO/alsa_midi_driver.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -20,7 +20,7 @@ * */ -#include "AlsaMidiDriver.h" +#include #ifdef H2CORE_HAVE_ALSA @@ -250,6 +250,13 @@ msg.m_nChannel = ev->data.control.channel; break; + case SND_SEQ_EVENT_KEYPRESS: + msg.m_type = MidiMessage::POLYPHONIC_KEY_PRESSURE; + msg.m_nData1 = ev->data.note.note; + msg.m_nData2 = ev->data.note.velocity; + msg.m_nChannel = ev->data.control.channel; + break; + case SND_SEQ_EVENT_SYSEX: { msg.m_type = MidiMessage::SYSEX; snd_midi_event_t *seq_midi_parser; @@ -295,6 +302,7 @@ case SND_SEQ_EVENT_PGMCHANGE: msg.m_type = MidiMessage::PROGRAM_CHANGE; msg.m_nData1 = ev->data.control.value; + msg.m_nChannel = ev->data.control.channel; break; case SND_SEQ_EVENT_CLIENT_EXIT: diff -Nru hydrogen-0.9.6.1/src/core/src/IO/AlsaMidiDriver.h hydrogen-0.9.7/src/core/src/IO/AlsaMidiDriver.h --- hydrogen-0.9.6.1/src/core/src/IO/AlsaMidiDriver.h 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/core/src/IO/AlsaMidiDriver.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,66 +0,0 @@ -/* - * Hydrogen - * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] - * - * http://www.hydrogen-music.org - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY, without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - */ - -#ifndef ALSA_MIDI_DRIVER_H -#define ALSA_MIDI_DRIVER_H - -#include -#include - -#ifdef H2CORE_HAVE_ALSA - -#include -#include -#include - -namespace H2Core -{ - -/// -/// Alsa Midi Driver -/// Based on Matthias Nagorni alsa sequencer example -/// -class AlsaMidiDriver : public virtual MidiInput, public virtual MidiOutput -{ - H2_OBJECT -public: - AlsaMidiDriver(); - virtual ~AlsaMidiDriver(); - - virtual void open(); - virtual void close(); - virtual std::vector getOutputPortList(); - - void midi_action( snd_seq_t *seq_handle ); - void getPortInfo( const QString& sPortName, int& nClient, int& nPort ); - virtual void handleQueueNote(Note* pNote); - virtual void handleQueueNoteOff( int channel, int key, int velocity ); - virtual void handleQueueAllNoteOff(); - -private: -}; - -}; - -#endif // H2CORE_HAVE_ALSA - -#endif diff -Nru hydrogen-0.9.6.1/src/core/src/IO/coreaudio_driver.cpp hydrogen-0.9.7/src/core/src/IO/coreaudio_driver.cpp --- hydrogen-0.9.6.1/src/core/src/IO/coreaudio_driver.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/core/src/IO/coreaudio_driver.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -27,7 +27,7 @@ * More cleaning . . . (2005/12/28 Jonathan Dempsey) */ -#include "CoreAudioDriver.h" +#include #ifdef H2CORE_HAVE_COREAUDIO diff -Nru hydrogen-0.9.6.1/src/core/src/IO/CoreAudioDriver.h hydrogen-0.9.7/src/core/src/IO/CoreAudioDriver.h --- hydrogen-0.9.6.1/src/core/src/IO/CoreAudioDriver.h 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/core/src/IO/CoreAudioDriver.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,114 +0,0 @@ -/* - * Hydrogen - * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] - * - * http://hydrogen.sourceforge.net - * - * CoreAudio Driver for Hydrogen - * Copyright(c) 2005 by Jonathan Dempsey [jonathandempsey@fastmail.fm] - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY, without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * Rewrote CoreAudio driver, now using AUHAL (2005/03/02 Jonathan Dempsey) - * Cleaned up the code a bit and updated (2005/11/29 Jonathan Dempsey) - * More cleaning . . . (2005/12/31 Jonathan Dempsey) - */ - -#ifndef COREAUDIO_DRIVER_H -#define COREAUDIO_DRIVER_H - -#include -#include - -#ifdef H2CORE_HAVE_COREAUDIO -#include -#include -#include -#endif - -#include -#include - - -typedef int ( *audioProcessCallback )( uint32_t, void * ); - -namespace H2Core -{ - -#ifdef H2CORE_HAVE_COREAUDIO - -class CoreAudioDriver : public AudioOutput -{ - H2_OBJECT -public: - - audioProcessCallback mProcessCallback; - UInt32 m_nBufferSize; - - AudioUnit m_outputUnit; - AudioDeviceID m_outputDevice; - - CoreAudioDriver( audioProcessCallback processCallback ); - virtual ~CoreAudioDriver(); - - int init( unsigned bufferSize ); - - unsigned getSampleRate(); - unsigned getBufferSize(); - - - int connect(); - void disconnect(); - - float* getOut_L(); - float* getOut_R(); - - float* m_pOut_L; - float* m_pOut_R; - - virtual void play(); - virtual void stop(); - virtual void locate( unsigned long nFrame ); - virtual void updateTransportInfo(); - virtual void setBpm( float fBPM ); - - - -private: - void retrieveDefaultDevice(void); - void retrieveBufferSize(void); - void printStreamInfo(void); - - - bool m_bIsRunning; - unsigned m_nSampleRate; - unsigned oSampleRate; -}; - -#else - -class CoreAudioDriver : public NullDriver -{ - H2_OBJECT -public: - CoreAudioDriver( audioProcessCallback processCallback ) : NullDriver ( processCallback ) {} - -}; - -#endif // H2CORE_HAVE_COREAUDIO - -} - -#endif diff -Nru hydrogen-0.9.6.1/src/core/src/IO/coremidi_driver.cpp hydrogen-0.9.7/src/core/src/IO/coremidi_driver.cpp --- hydrogen-0.9.6.1/src/core/src/IO/coremidi_driver.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/core/src/IO/coremidi_driver.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -32,8 +32,7 @@ #include #include #include - -#include "hydrogen/IO/CoreMidiDriver.h" +#include #ifdef H2CORE_HAVE_COREMIDI diff -Nru hydrogen-0.9.6.1/src/core/src/IO/disk_writer_driver.cpp hydrogen-0.9.7/src/core/src/IO/disk_writer_driver.cpp --- hydrogen-0.9.6.1/src/core/src/IO/disk_writer_driver.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/core/src/IO/disk_writer_driver.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -20,13 +20,15 @@ * */ #include -#include "DiskWriterDriver.h" + #include #include #include +#include #include #include +#include #include #include @@ -166,12 +168,14 @@ ticksize = pDriver->m_nSampleRate * 60.0 / engine->getSong()->__bpm / engine->getSong()->__resolution; // check pattern bpm if timeline bpm is in use + Timeline* pTimeline = engine->getTimeline(); if(Preferences::get_instance()->getUseTimelineBpm() ){ - if( engine->m_timelinevector.size() >= 1 ){ + if( pTimeline->m_timelinevector.size() >= 1 ){ - for ( int t = 0; t < engine->m_timelinevector.size(); t++){ - if(engine->m_timelinevector[t].m_htimelinebeat == patternposition && engine->m_timelinevector[t].m_htimelinebpm != validBpm){ - validBpm = engine->m_timelinevector[t].m_htimelinebpm; + for ( int t = 0; t < pTimeline->m_timelinevector.size(); t++){ + if(pTimeline->m_timelinevector[t].m_htimelinebeat == patternposition && + pTimeline->m_timelinevector[t].m_htimelinebpm != validBpm){ + validBpm = pTimeline->m_timelinevector[t].m_htimelinebpm; } } @@ -270,6 +274,9 @@ , m_sFilename( sFilename ) , m_nSampleDepth ( nSampleDepth ) , m_processCallback( processCallback ) + , m_nBufferSize( 0 ) + , m_pOut_L( NULL ) + , m_pOut_R( NULL ) { INFOLOG( "INIT" ); } diff -Nru hydrogen-0.9.6.1/src/core/src/IO/DiskWriterDriver.h hydrogen-0.9.7/src/core/src/IO/DiskWriterDriver.h --- hydrogen-0.9.6.1/src/core/src/IO/DiskWriterDriver.h 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/core/src/IO/DiskWriterDriver.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,91 +0,0 @@ -/* - * Hydrogen - * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] - * - * http://www.hydrogen-music.org - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY, without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - */ - -#ifndef DISK_WRITER_DRIVER_H -#define DISK_WRITER_DRIVER_H - -#include - -#include - -#include -#include - -namespace H2Core -{ - -typedef int ( *audioProcessCallback )( uint32_t, void * ); - -/// -/// Driver for export audio to disk -/// -class DiskWriterDriver : public AudioOutput -{ - H2_OBJECT - public: - - unsigned m_nSampleRate; - QString m_sFilename; - unsigned m_nBufferSize; - int m_nSampleDepth; - audioProcessCallback m_processCallback; - float* m_pOut_L; - float* m_pOut_R; - - DiskWriterDriver( audioProcessCallback processCallback, unsigned nSamplerate, const QString& sFilename, int nSampleDepth ); - ~DiskWriterDriver(); - - int init( unsigned nBufferSize ); - - int connect(); - void disconnect(); - - void write( float* buffer_L, float* buffer_R, unsigned int bufferSize ); - - void audioEngine_process_checkBPMChanged(); - - unsigned getBufferSize() { - return m_nBufferSize; - } - - unsigned getSampleRate(); - float* getOut_L() { - return m_pOut_L; - } - float* getOut_R() { - return m_pOut_R; - } - - virtual void play(); - virtual void stop(); - virtual void locate( unsigned long nFrame ); - virtual void updateTransportInfo(); - virtual void setBpm( float fBPM ); - - private: - - -}; - -}; - -#endif diff -Nru hydrogen-0.9.6.1/src/core/src/IO/fake_driver.cpp hydrogen-0.9.7/src/core/src/IO/fake_driver.cpp --- hydrogen-0.9.6.1/src/core/src/IO/fake_driver.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/core/src/IO/fake_driver.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -20,7 +20,7 @@ * */ -#include "FakeDriver.h" +#include namespace H2Core { @@ -32,6 +32,7 @@ , m_processCallback( processCallback ) , m_pOut_L( NULL ) , m_pOut_R( NULL ) + , m_nBufferSize( 0 ) { INFOLOG( "INIT" ); } diff -Nru hydrogen-0.9.6.1/src/core/src/IO/FakeDriver.h hydrogen-0.9.7/src/core/src/IO/FakeDriver.h --- hydrogen-0.9.6.1/src/core/src/IO/FakeDriver.h 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/core/src/IO/FakeDriver.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,72 +0,0 @@ -/* - * Hydrogen - * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] - * - * http://www.hydrogen-music.org - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY, without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - */ - -#ifndef FAKE_DRIVER_H -#define FAKE_DRIVER_H - -#include -#include - -namespace H2Core -{ - -typedef int ( *audioProcessCallback )( uint32_t, void * ); - -/** - * Fake audio driver. Used only for profiling. - */ -class FakeDriver : public AudioOutput -{ - H2_OBJECT -public: - FakeDriver( audioProcessCallback processCallback ); - ~FakeDriver(); - - int init( unsigned nBufferSize ); - int connect(); - void disconnect(); - unsigned getBufferSize() { - return m_nBufferSize; - } - unsigned getSampleRate(); - - float* getOut_L(); - float* getOut_R(); - - virtual void play(); - virtual void stop(); - virtual void locate( unsigned long nFrame ); - virtual void updateTransportInfo(); - virtual void setBpm( float fBPM ); - -private: - audioProcessCallback m_processCallback; - unsigned m_nBufferSize; - float* m_pOut_L; - float* m_pOut_R; - -}; - - -}; - -#endif diff -Nru hydrogen-0.9.6.1/src/core/src/IO/jack_midi_driver.cpp hydrogen-0.9.7/src/core/src/IO/jack_midi_driver.cpp --- hydrogen-0.9.6.1/src/core/src/IO/jack_midi_driver.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/core/src/IO/jack_midi_driver.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -24,7 +24,7 @@ * SUCH DAMAGE. */ -#include "JackMidiDriver.h" +#include #ifdef H2CORE_HAVE_JACK @@ -117,6 +117,13 @@ msg.m_nChannel = buffer[0] & 0xF; handleMidiMessage(msg); break; + case 0xA: /* aftertouch */ + msg.m_type = MidiMessage::POLYPHONIC_KEY_PRESSURE; + msg.m_nData1 = buffer[1]; + msg.m_nData2 = buffer[2]; + msg.m_nChannel = buffer[0] & 0xF; + handleMidiMessage(msg); + break; case 0xB: /* control change */ msg.m_type = MidiMessage::CONTROL_CHANGE; msg.m_nData1 = buffer[1]; @@ -304,7 +311,20 @@ output_port = 0; input_port = 0; - jack_client = jack_client_open("hydrogen-midi", + QString jackMidiClientId = "hydrogen"; + +#ifdef H2CORE_HAVE_NSMSESSION + Preferences* pref = Preferences::get_instance(); + QString nsmClientId = pref->getNsmClientId(); + + if(!nsmClientId.isEmpty()){ + jackMidiClientId = nsmClientId; + } +#endif + + jackMidiClientId.append("-midi"); + + jack_client = jack_client_open(jackMidiClientId.toLocal8Bit(), JackNoStartServer, NULL); if (jack_client == NULL) diff -Nru hydrogen-0.9.6.1/src/core/src/IO/JackMidiDriver.h hydrogen-0.9.7/src/core/src/IO/JackMidiDriver.h --- hydrogen-0.9.6.1/src/core/src/IO/JackMidiDriver.h 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/core/src/IO/JackMidiDriver.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,87 +0,0 @@ -/*- - * Copyright (c) 2011 Hans Petter Selasky - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#ifndef JACK_MIDI_DRIVER_H -#define JACK_MIDI_DRIVER_H - -#include -#include - -#ifdef H2CORE_HAVE_JACK - -#include - -#include -#include -#include - -#include -#include - -#define JACK_MIDI_BUFFER_MAX 64 /* events */ - -namespace H2Core -{ - -class JackMidiDriver : public virtual MidiInput, public virtual MidiOutput -{ - H2_OBJECT -public: - JackMidiDriver(); - virtual ~JackMidiDriver(); - - virtual void open(); - virtual void close(); - virtual std::vector getOutputPortList(); - - void getPortInfo( const QString& sPortName, int& nClient, int& nPort ); - void JackMidiWrite(jack_nframes_t nframes); - void JackMidiRead(jack_nframes_t nframes); - virtual void handleQueueNote(Note* pNote); - virtual void handleQueueNoteOff( int channel, int key, int velocity ); - virtual void handleQueueAllNoteOff(); - -private: - void JackMidiOutEvent(uint8_t *buf, uint8_t len); - - void lock(); - void unlock(); - - jack_port_t *output_port; - jack_port_t *input_port; - jack_client_t *jack_client; - pthread_mutex_t mtx; - int running; - uint8_t jack_buffer[JACK_MIDI_BUFFER_MAX * 4]; - uint32_t rx_in_pos; - uint32_t rx_out_pos; -}; - -}; - -#endif /* H2CORE_HAVE_JACK */ - -#endif diff -Nru hydrogen-0.9.6.1/src/core/src/IO/jack_output.cpp hydrogen-0.9.7/src/core/src/IO/jack_output.cpp --- hydrogen-0.9.6.1/src/core/src/IO/jack_output.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/core/src/IO/jack_output.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -28,7 +28,9 @@ #include #include #include +#include #include +#include #include #include #include @@ -47,9 +49,9 @@ namespace H2Core { -unsigned long jack_server_sampleRate = 0; -jack_nframes_t jack_server_bufferSize = 0; -JackOutput *jackDriverInstance = NULL; +unsigned long jack_server_sampleRate = 0; +jack_nframes_t jack_server_bufferSize = 0; +JackOutput * jackDriverInstance = NULL; int jackDriverSampleRate( jack_nframes_t nframes, void *param ) { @@ -71,7 +73,7 @@ void jackDriverShutdown( void *arg ) { UNUSED( arg ); -// jackDriverInstance->deactivate(); + // jackDriverInstance->deactivate(); jackDriverInstance->client = NULL; Hydrogen::get_instance()->raiseError( Hydrogen::JACK_SERVER_SHUTDOWN ); } @@ -80,7 +82,7 @@ const char* JackOutput::__class_name = "JackOutput"; JackOutput::JackOutput( JackProcessCallback processCallback ) - : AudioOutput( __class_name ) + : AudioOutput( __class_name ) { INFOLOG( "INIT" ); __track_out_enabled = Preferences::get_instance()->m_bJackTrackOuts; // allow per-track output @@ -118,7 +120,7 @@ } - bool connect_output_ports = connect_out_flag; + bool connect_output_ports = m_bConnectOutFlag; memset( track_output_ports_L, 0, sizeof(track_output_ports_L) ); memset( track_output_ports_R, 0, sizeof(track_output_ports_R) ); @@ -128,7 +130,7 @@ LashClient* lashClient = LashClient::get_instance(); if (lashClient && lashClient->isConnected()) { - // infoLog("[LASH] Sending Jack client name to LASH server"); + // infoLog("[LASH] Sending Jack client name to LASH server"); lashClient->sendJackClientName(); if (!lashClient->isNewProject()) @@ -140,10 +142,10 @@ #endif if ( connect_output_ports ) { -// if ( connect_out_flag ) { + // if ( m_bConnectOutFlag ) { // connect the ports if ( jack_connect( client, jack_port_name( output_port_1 ), output_port_name_1.toLocal8Bit() ) == 0 && - jack_connect ( client, jack_port_name( output_port_2 ), output_port_name_2.toLocal8Bit() ) == 0 ) { + jack_connect ( client, jack_port_name( output_port_2 ), output_port_name_2.toLocal8Bit() ) == 0 ) { return 0; } @@ -155,7 +157,7 @@ return 2; } if ( jack_connect( client, jack_port_name( output_port_1 ), portnames[0] ) != 0 || - jack_connect( client, jack_port_name( output_port_2 ), portnames[1] ) != 0 ) { + jack_connect( client, jack_port_name( output_port_2 ), portnames[1] ) != 0 ) { ERRORLOG( "Could't connect to first pair of Jack input ports" ); Hydrogen::get_instance()->raiseError( Hydrogen::JACK_CANNOT_CONNECT_OUTPUT_PORT ); return 2; @@ -195,7 +197,7 @@ } } memset( track_output_ports_L, 0, sizeof(track_output_ports_L) ); - memset( track_output_ports_R, 0, sizeof(track_output_ports_R) ); + memset( track_output_ports_R, 0, sizeof(track_output_ports_R) ); } unsigned JackOutput::getBufferSize() @@ -225,24 +227,18 @@ /// Take beat-bar-tick info from the Jack system, and translate it to a new internal frame position and ticksize. void JackOutput::relocateBBT() { + Preferences* pPref = Preferences::get_instance(); + //wolke if hydrogen is jack time master this is not relevant - if ( Preferences::get_instance()->m_bJackMasterMode == Preferences::USE_JACK_TIME_MASTER && - m_transport.m_status != TransportInfo::ROLLING) - { - // have absolut nothing to do with the old ardour transport bug - m_transport.m_nFrames = Hydrogen::get_instance()->getHumantimeFrames() - getBufferSize(); + if ( m_transport.m_status != TransportInfo::ROLLING + || pPref->m_bJackMasterMode == Preferences::USE_JACK_TIME_MASTER + || ! ( m_JackTransportPos.valid & JackPositionBBT ) + ) { WARNINGLOG( "Relocate: Call it off" ); - calculateFrameOffset(); - return; - } - - if ( m_transport.m_status != TransportInfo::ROLLING || - ! ( m_JackTransportPos.valid & JackPositionBBT )) - { - calculateFrameOffset(); return; } + //WARNINGLOG( "Resyncing!" ); INFOLOG( "..." ); Hydrogen * H = Hydrogen::get_instance(); @@ -260,7 +256,7 @@ } float hydrogen_ticks_to_locate = bar_ticks + ( m_JackTransportPos.beat-1 ) * hydrogen_TPB + - m_JackTransportPos.tick * ( hydrogen_TPB / m_JackTransportPos.ticks_per_beat ); + m_JackTransportPos.tick * ( hydrogen_TPB / m_JackTransportPos.ticks_per_beat ); // INFOLOG( QString( "Position from Time Master: BBT [%1,%2,%3]" ) . arg( m_JackTransportPos.bar ) . arg( m_JackTransportPos.beat ) . arg( m_JackTransportPos.tick ) ); // WARNINGLOG( QString(bbt) + " -- Tx/Beat = "+to_string(m_JackTransportPos.ticks_per_beat)+", Meter "+to_string(m_JackTransportPos.beats_per_bar)+"/"+to_string(m_JackTransportPos.beat_type)+" =>tick " + to_string( hydrogen_ticks_to_locate ) ); @@ -281,9 +277,6 @@ #endif m_transport.m_nFrames = nNewFrames; - - /// offset between jack- and internal position - calculateFrameOffset(); } /// @@ -299,7 +292,8 @@ if ( locate_countdown > 0 ) locate_countdown--; - if ( Preferences::get_instance()->m_bJackTransportMode == Preferences::USE_JACK_TRANSPORT ) { + if ( Preferences::get_instance()->m_bJackTransportMode != Preferences::USE_JACK_TRANSPORT ) return; + m_JackTransportState = jack_transport_query( client, &m_JackTransportPos ); @@ -326,92 +320,90 @@ default: ERRORLOG( "Unknown jack transport state" ); - } + } - // FIXME - // TickSize and BPM - Hydrogen * H = Hydrogen::get_instance(); - H->setTimelineBpm(); // dlr: fix #168, jack may have re-located us anywhere, check for bpm change every cycle - - if ( m_JackTransportPos.valid & JackPositionBBT ) { - float bpm = ( float )m_JackTransportPos.beats_per_minute; - if ( m_transport.m_nBPM != bpm ) { - - - if ( Preferences::get_instance()->m_bJackMasterMode == Preferences::NO_JACK_TIME_MASTER ){ - // WARNINGLOG( QString( "Tempo change from jack-transport: %1" ).arg( bpm ) ); - m_transport.m_nBPM = bpm; - must_relocate = 1; // The tempo change has happened somewhere during the previous cycle; relocate right away. - - // This commenting out is rude perhaps, but I cant't figure out what this bit is doing. - // In any case, setting must_relocate = 1 here causes too many relocates. Jakob Lund - /* } else { + // FIXME + // TickSize and BPM + Hydrogen * H = Hydrogen::get_instance(); + H->setTimelineBpm(); // dlr: fix #168, jack may have re-located us anywhere, check for bpm change every cycle + + if ( m_JackTransportPos.valid & JackPositionBBT ) { + float bpm = ( float )m_JackTransportPos.beats_per_minute; + if ( m_transport.m_nBPM != bpm ) { + + + if ( Preferences::get_instance()->m_bJackMasterMode == Preferences::NO_JACK_TIME_MASTER ){ + // WARNINGLOG( QString( "Tempo change from jack-transport: %1" ).arg( bpm ) ); + m_transport.m_nBPM = bpm; + must_relocate = 1; // The tempo change has happened somewhere during the previous cycle; relocate right away. + + // This commenting out is rude perhaps, but I cant't figure out what this bit is doing. + // In any case, setting must_relocate = 1 here causes too many relocates. Jakob Lund + /* } else { if ( m_transport.m_status == TransportInfo::STOPPED ) { oldpo = H->getPatternPos(); must_relocate = 1; //changer =1; }*/ - } - - // Hydrogen::get_instance()->setBPM( m_JackTransportPos.beats_per_minute ); // unnecessary, as Song->m_BPM gets updated in audioEngine_process_transport (after calling this function) - } } - if ( m_transport.m_nFrames + bbt_frame_offset != m_JackTransportPos.frame ) { - if ( ( m_JackTransportPos.valid & JackPositionBBT ) && must_relocate == 0 ) { - WARNINGLOG( "Frame offset mismatch; triggering resync in 2 cycles" ); - must_relocate = 2; - } else { - if ( Preferences::get_instance()->m_bJackMasterMode == Preferences::NO_JACK_TIME_MASTER ) { - // If There's no timebase_master, and audioEngine_process_checkBPMChanged handled a tempo change during last cycle, the offset doesn't match, but hopefully it was calculated correctly: - - //this perform Jakobs mod in pattern mode, but both m_transport.m_nFrames works with the same result in pattern Mode - // in songmode the first case dont work. - //so we can remove this "if query" and only use this old mod: m_transport.m_nFrames = H->getHumantimeFrames(); - //because to get the songmode we have to add this "H2Core::Hydrogen *m_pEngine" to the header file - //if we remove this we also can remove *m_pEngine from header + // Hydrogen::get_instance()->setBPM( m_JackTransportPos.beats_per_minute ); // unnecessary, as Song->m_BPM gets updated in audioEngine_process_transport (after calling this function) + } + } + + if ( m_transport.m_nFrames + bbt_frame_offset != m_JackTransportPos.frame ) { + if ( ( m_JackTransportPos.valid & JackPositionBBT ) && must_relocate == 0 ) { + WARNINGLOG( "Frame offset mismatch; triggering resync in 2 cycles" ); + must_relocate = 2; + } else { + if ( Preferences::get_instance()->m_bJackMasterMode == Preferences::NO_JACK_TIME_MASTER ) { + // If There's no timebase_master, and audioEngine_process_checkBPMChanged handled a tempo change during last cycle, the offset doesn't match, but hopefully it was calculated correctly: + + //this perform Jakobs mod in pattern mode, but both m_transport.m_nFrames works with the same result in pattern Mode + // in songmode the first case dont work. + //so we can remove this "if query" and only use this old mod: m_transport.m_nFrames = H->getHumantimeFrames(); + //because to get the songmode we have to add this "H2Core::Hydrogen *m_pEngine" to the header file + //if we remove this we also can remove *m_pEngine from header #if 0 // dlr: fix #169, why do we have a different behaviour for SONG_MODE? - if ( m_pEngine->getSong()->get_mode() == Song::PATTERN_MODE ){ - m_transport.m_nFrames = m_JackTransportPos.frame/* - bbt_frame_offset*/; ///see comment in svn changeset 753 - } - else - { - m_transport.m_nFrames = H->getHumantimeFrames(); - } + if ( m_pEngine->getSong()->get_mode() == Song::PATTERN_MODE ){ + m_transport.m_nFrames = m_JackTransportPos.frame/* - bbt_frame_offset*/; ///see comment in svn changeset 753 + } + else + { + m_transport.m_nFrames = H->getHumantimeFrames(); + } #else - m_transport.m_nFrames = m_JackTransportPos.frame; - bbt_frame_offset = 0; // dlr: stop re-syncing in every cycle when STOPPED + m_transport.m_nFrames = m_JackTransportPos.frame; + bbt_frame_offset = 0; // dlr: stop re-syncing in every cycle when STOPPED #endif - // In jack 'slave' mode, if there's no master, the following line is needed to be able to relocate by clicking the song ruler (wierd corner case, but still...) - if ( m_transport.m_status == TransportInfo::ROLLING ) - H->triggerRelocateDuringPlay(); - } else { - ///this is experimantal... but it works for the moment... fix me fix :-) wolke - // ... will this actually happen? keeping it for now ( jakob lund ) - m_transport.m_nFrames = H->getHumantimeFrames() - getBufferSize();// have nothing to do with the old ardour transport bug - } - } - } - - // humantime fix - if ( H->getHumantimeFrames() != m_JackTransportPos.frame ) { - - H->setHumantimeFrames(m_JackTransportPos.frame); - //WARNINGLOG("fix Humantime " + to_string (m_JackTransportPos.frame)); + // In jack 'slave' mode, if there's no master, the following line is needed to be able to relocate by clicking the song ruler (wierd corner case, but still...) + if ( m_transport.m_status == TransportInfo::ROLLING ) + H->triggerRelocateDuringPlay(); + } else { + ///this is experimantal... but it works for the moment... fix me fix :-) wolke + // ... will this actually happen? keeping it for now ( jakob lund ) + m_transport.m_nFrames = H->getHumantimeFrames(); } + } + } - if ( must_relocate == 1 ) { - //WARNINGLOG( "Resyncing!" ); - relocateBBT(); - if ( m_transport.m_status == TransportInfo::ROLLING ) { - H->triggerRelocateDuringPlay(); - } - } + // humantime fix + if ( H->getHumantimeFrames() != m_JackTransportPos.frame ) { + H->setHumantimeFrames(m_JackTransportPos.frame); + //WARNINGLOG("fix Humantime " + to_string (m_JackTransportPos.frame)); + } - if ( must_relocate > 0 ) must_relocate--; + if ( must_relocate == 1 ) { + //WARNINGLOG( "Resyncing!" ); + relocateBBT(); + if ( m_transport.m_status == TransportInfo::ROLLING ) { + H->triggerRelocateDuringPlay(); + } } + + if ( must_relocate > 0 ) must_relocate--; } float* JackOutput::getOut_L() @@ -448,21 +440,32 @@ return out; } +float* JackOutput::getTrackOut_L( Instrument * instr, InstrumentComponent * pCompo) +{ + return getTrackOut_L(track_map[instr->get_id()][pCompo->get_drumkit_componentID()]); +} + +float* JackOutput::getTrackOut_R( Instrument * instr, InstrumentComponent * pCompo) +{ + return getTrackOut_R(track_map[instr->get_id()][pCompo->get_drumkit_componentID()]); +} + + #define CLIENT_FAILURE(msg) { \ - ERRORLOG("Could not connect to JACK server (" msg ")"); \ - if (client) { \ - ERRORLOG("...but JACK returned a non-null pointer?"); \ - (client) = 0; \ - } \ - if (tries) ERRORLOG("...trying again."); \ - } + ERRORLOG("Could not connect to JACK server (" msg ")"); \ + if (client) { \ + ERRORLOG("...but JACK returned a non-null pointer?"); \ + (client) = 0; \ +} \ + if (tries) ERRORLOG("...trying again."); \ +} #define CLIENT_SUCCESS(msg) { \ - assert(client); \ - INFOLOG(msg); \ - tries = 0; \ - } + assert(client); \ + INFOLOG(msg); \ + tries = 0; \ +} int JackOutput::init( unsigned /*nBufferSize*/ ) { @@ -471,6 +474,16 @@ output_port_name_2 = pref->m_sJackPortName2; QString sClientName = "Hydrogen"; + +#ifdef H2CORE_HAVE_NSMSESSION + QString nsmClientId = pref->getNsmClientId(); + + if(!nsmClientId.isEmpty()){ + sClientName = nsmClientId; + } +#endif + + jack_status_t status; int tries = 2; // Sometimes jackd doesn't stop and start fast enough. while ( tries > 0 ) { @@ -479,71 +492,71 @@ #ifdef H2CORE_HAVE_JACKSESSION if (pref->getJackSessionUUID().isEmpty()){ client = jack_client_open( - sClientName.toLocal8Bit(), - JackNullOption, - &status); + sClientName.toLocal8Bit(), + JackNullOption, + &status); } else { const QByteArray uuid = pref->getJackSessionUUID().toLocal8Bit(); client = jack_client_open( - sClientName.toLocal8Bit(), - JackSessionID, - &status, - uuid.constData()); + sClientName.toLocal8Bit(), + JackSessionID, + &status, + uuid.constData()); } #else client = jack_client_open( - sClientName.toLocal8Bit(), - JackNullOption, - &status); + sClientName.toLocal8Bit(), + JackNullOption, + &status); #endif switch(status) { - case JackFailure: - CLIENT_FAILURE("unknown error"); - break; - case JackInvalidOption: - CLIENT_FAILURE("invalid option"); - break; - case JackNameNotUnique: - if (client) { - sClientName = jack_get_client_name(client); - CLIENT_SUCCESS(QString("Jack assigned the client name '%1'").arg(sClientName)); - } else { - CLIENT_FAILURE("name not unique"); - } - break; - case JackServerStarted: - CLIENT_SUCCESS("JACK Server started for Hydrogen."); - break; - case JackServerFailed: - CLIENT_FAILURE("unable to connect"); - break; - case JackServerError: - CLIENT_FAILURE("communication error"); - break; - case JackNoSuchClient: - CLIENT_FAILURE("unknown client type"); - break; - case JackLoadFailure: - CLIENT_FAILURE("can't load internal client"); - break; - case JackInitFailure: - CLIENT_FAILURE("can't initialize client"); - break; - case JackShmFailure: - CLIENT_FAILURE("unable to access shared memory"); - break; - case JackVersionError: - CLIENT_FAILURE("client/server protocol version mismatch"); - default: - if (status) { - ERRORLOG("Unknown status with JACK server."); + case JackFailure: + CLIENT_FAILURE("unknown error"); + break; + case JackInvalidOption: + CLIENT_FAILURE("invalid option"); + break; + case JackNameNotUnique: if (client) { - CLIENT_SUCCESS("Client pointer is *not* null..." - " assuming we're OK"); + sClientName = jack_get_client_name(client); + CLIENT_SUCCESS(QString("Jack assigned the client name '%1'").arg(sClientName)); + } else { + CLIENT_FAILURE("name not unique"); + } + break; + case JackServerStarted: + CLIENT_SUCCESS("JACK Server started for Hydrogen."); + break; + case JackServerFailed: + CLIENT_FAILURE("unable to connect"); + break; + case JackServerError: + CLIENT_FAILURE("communication error"); + break; + case JackNoSuchClient: + CLIENT_FAILURE("unknown client type"); + break; + case JackLoadFailure: + CLIENT_FAILURE("can't load internal client"); + break; + case JackInitFailure: + CLIENT_FAILURE("can't initialize client"); + break; + case JackShmFailure: + CLIENT_FAILURE("unable to access shared memory"); + break; + case JackVersionError: + CLIENT_FAILURE("client/server protocol version mismatch"); + default: + if (status) { + ERRORLOG("Unknown status with JACK server."); + if (client) { + CLIENT_SUCCESS("Client pointer is *not* null..." + " assuming we're OK"); + } + } else { + CLIENT_SUCCESS("Connected to JACK server"); } - } else { - CLIENT_SUCCESS("Connected to JACK server"); - } } } @@ -588,10 +601,10 @@ } // clear buffers -// jack_default_audio_sample_t *out_L = (jack_default_audio_sample_t *) jack_port_get_buffer (output_port_1, jack_server_bufferSize); -// jack_default_audio_sample_t *out_R = (jack_default_audio_sample_t *) jack_port_get_buffer (output_port_2, jack_server_bufferSize); -// memset( out_L, 0, nBufferSize * sizeof( float ) ); -// memset( out_R, 0, nBufferSize * sizeof( float ) ); + // jack_default_audio_sample_t *out_L = (jack_default_audio_sample_t *) jack_port_get_buffer (output_port_1, jack_server_bufferSize); + // jack_default_audio_sample_t *out_R = (jack_default_audio_sample_t *) jack_port_get_buffer (output_port_2, jack_server_bufferSize); + // memset( out_L, 0, nBufferSize * sizeof( float ) ); + // memset( out_R, 0, nBufferSize * sizeof( float ) ); #ifdef H2CORE_HAVE_LASH if ( pref->useLash() ){ @@ -620,7 +633,7 @@ /// Disable Track Outputs if( Preferences::get_instance()->m_bJackTrackOuts == false ) - return; + return; /// InstrumentList * instruments = song->get_instrument_list(); @@ -630,13 +643,26 @@ // create dedicated channel output ports WARNINGLOG( QString( "Creating / renaming %1 ports" ).arg( nInstruments ) ); + int p_trackCount = 0; + + for( int i = 0 ; i < MAX_INSTRUMENTS ; i++ ){ + for ( int j = 0 ; j < MAX_COMPONENTS ; j++ ){ + track_map[i][j] = 0; + } + } + for ( int n = nInstruments - 1; n >= 0; n-- ) { instr = instruments->get( n ); - setTrackOutput( n, instr ); + for (std::vector::iterator it = instr->get_components()->begin() ; it != instr->get_components()->end(); ++it) { + InstrumentComponent* pCompo = *it; + setTrackOutput( p_trackCount, instr , pCompo, song); + track_map[instr->get_id()][pCompo->get_drumkit_componentID()] = p_trackCount; + p_trackCount++; + } } // clean up unused ports jack_port_t *p_L, *p_R; - for ( int n = nInstruments; n < track_port_count; n++ ) { + for ( int n = p_trackCount; n < track_port_count; n++ ) { p_L = track_output_ports_L[n]; p_R = track_output_ports_R[n]; track_output_ports_L[n] = 0; @@ -645,14 +671,14 @@ jack_port_unregister( client, p_R ); } - track_port_count = nInstruments; + track_port_count = p_trackCount; } /** * Give the @a n 'th port the name of @a instr . * If the n'th port doesn't exist, new ports up to n are created. */ -void JackOutput::setTrackOutput( int n, Instrument * instr ) +void JackOutput::setTrackOutput( int n, Instrument * instr, InstrumentComponent * compo, Song * song ) { QString chName; @@ -660,10 +686,10 @@ for ( int m = track_port_count; m <= n; m++ ) { chName = QString( "Track_%1_" ).arg( m + 1 ); track_output_ports_L[m] = jack_port_register ( client, ( chName + "L" ).toLocal8Bit(), - JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, 0 ); + JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, 0 ); track_output_ports_R[m] = jack_port_register ( client, ( chName + "R" ).toLocal8Bit(), - JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, 0 ); + JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, 0 ); if ( ! track_output_ports_R[m] || ! track_output_ports_L[m] ) { Hydrogen::get_instance()->raiseError( Hydrogen::JACK_ERROR_IN_PORT_REGISTER ); @@ -673,18 +699,25 @@ } // Now we're sure there is an n'th port, rename it. - chName = QString( "Track_%1_%2_" ).arg( n + 1 ).arg( instr->get_name() ); - + //DrumkitComponent* p_dmCompo = Hydrogen::get_instance()->getSong()->get_component( compo->get_drumkit_componentID() ); + DrumkitComponent* p_dmCompo = song->get_component( compo->get_drumkit_componentID() ); + chName = QString( "Track_%1_%2_%3_" ).arg( n + 1 ).arg( instr->get_name() ).arg( p_dmCompo->get_name() ); + +#ifdef HAVE_JACK_PORT_RENAME + jack_port_rename( client, track_output_ports_L[n], ( chName + "L" ).toLocal8Bit() ); + jack_port_rename( client, track_output_ports_R[n], ( chName + "R" ).toLocal8Bit() ); +#else jack_port_set_name( track_output_ports_L[n], ( chName + "L" ).toLocal8Bit() ); jack_port_set_name( track_output_ports_R[n], ( chName + "R" ).toLocal8Bit() ); +#endif } void JackOutput::play() { Preferences* P = Preferences::get_instance(); if ( P->m_bJackTransportMode == Preferences::USE_JACK_TRANSPORT || - P->m_bJackMasterMode == Preferences::USE_JACK_TIME_MASTER - ) { + P->m_bJackMasterMode == Preferences::USE_JACK_TIME_MASTER + ) { if ( client ) { INFOLOG( "jack_transport_start()" ); jack_transport_start( client ); @@ -726,7 +759,7 @@ int JackOutput::getNumTracks() { -// INFOLOG( "get num tracks()" ); + // INFOLOG( "get num tracks()" ); return track_port_count; } @@ -790,7 +823,7 @@ /* Save updated playlist */ if ( ! PL->save ( jackSessionDirectory + FileName ) ) ev->flags = JackSessionSaveError; - /* Song Mode */ + /* Song Mode */ } else { /* Valid Song is needed */ if ( S->get_filename().isEmpty() ) S->set_filename("untitled.h2song"); @@ -803,16 +836,16 @@ retval += " -s \"" + FileName + "\""; switch (ev->type) { - case JackSessionSave: - EQ->push_event(EVENT_JACK_SESSION, SAVE_SESSION); - break; - case JackSessionSaveAndQuit: - EQ->push_event(EVENT_JACK_SESSION, SAVE_SESSION); - EQ->push_event(EVENT_JACK_SESSION, SAVE_AND_QUIT); - break; - default: - ERRORLOG( "JackSession: Unknown event type" ); - ev->flags = JackSessionSaveError; + case JackSessionSave: + EQ->push_event(EVENT_JACK_SESSION, SAVE_SESSION); + break; + case JackSessionSaveAndQuit: + EQ->push_event(EVENT_JACK_SESSION, SAVE_SESSION); + EQ->push_event(EVENT_JACK_SESSION, SAVE_AND_QUIT); + break; + default: + ERRORLOG( "JackSession: Unknown event type" ); + ev->flags = JackSessionSaveError; } } @@ -829,7 +862,7 @@ Preferences* pref = Preferences::get_instance(); if ( pref->m_bJackMasterMode == Preferences::USE_JACK_TIME_MASTER) { - int ret = jack_set_timebase_callback(client, cond, jack_timebase_callback, this); + int ret = jack_set_timebase_callback(client, m_bCond, jack_timebase_callback, this); if (ret != 0) pref->m_bJackMasterMode = Preferences::NO_JACK_TIME_MASTER; } else { jack_release_timebase(client); @@ -844,48 +877,58 @@ } void JackOutput::jack_timebase_callback(jack_transport_state_t state, - jack_nframes_t nframes, - jack_position_t *pos, - int new_pos, - void *arg) + jack_nframes_t nframes, + jack_position_t *pos, + int new_pos, + void *arg) { JackOutput *me = static_cast(arg); if (! me) return; Hydrogen * H = Hydrogen::get_instance(); + Song* S = H->getSong(); + if ( ! S ) return; - int ppos = H->getPatternPos(); - if ( ppos < 0 ) ppos = 0; - double TPB = H->getTickForHumanPosition( ppos ); + unsigned long PlayTick = ( pos->frame - me->bbt_frame_offset ) / me->m_transport.m_nTickSize; + pos->bar = H->getPosForTick ( PlayTick ); + + double TPB = H->getTickForHumanPosition( pos->bar ); if ( TPB < 1 ) return; - - /* We'll cheat there is ticks_per_beat * beats_per_bar ticks in bar - so every Hydrogen tick will be multipled by beats_per_bar ticks */ + + /* We'll cheat there is ticks_per_beat * 4 in bar + so every Hydrogen tick will be multipled by 4 ticks */ pos->ticks_per_beat = TPB; pos->valid = JackPositionBBT; pos->beats_per_bar = TPB / 48; pos->beat_type = 4.0; - pos->beats_per_minute = H->getNewBpmJTM(); + pos->beats_per_minute = H->getTimelineBpm ( pos->bar ); + pos->bar++; + + // Probably there will never be an offset, cause we are the master ;-) +#ifndef JACK_NO_BBT_OFFSET + pos->valid = static_cast ( pos->valid | JackBBTFrameOffset ); + pos->bbt_offset = 0; +#endif if (H->getHumantimeFrames() < 1) { - pos->bar = 1; pos->beat = 1; pos->tick = 0; pos->bar_start_tick = 0; } else { - pos->bar = ppos + 1; - - pos->tick = int32_t(H->getTickPosition()) * pos->beats_per_bar; - pos->beat = pos->tick / pos->ticks_per_beat; + /* how many ticks elpased from last bar ( where bar == pattern ) */ + int32_t TicksFromBar = ( PlayTick % (int32_t) pos->ticks_per_beat ) * 4; - /* Remove beats from ticks */ - pos->tick -= pos->ticks_per_beat * pos->beat; + pos->bar_start_tick = PlayTick - TicksFromBar; + pos->beat = TicksFromBar / pos->ticks_per_beat; pos->beat++; - pos->bar_start_tick = ppos * pos->beats_per_bar * pos->ticks_per_beat; - //printf ( "Bar %d, Beat %d, Tick %d, BPB %g, BarStartTick %g\n", pos->bar, pos->beat, - //pos->tick, pos->beats_per_bar, pos->bar_start_tick ); + pos->tick = TicksFromBar % (int32_t) pos->ticks_per_beat; +#if 0 +// printf ( "\e[0K\rBar %d, Beat %d, Tick %d, BPB %g, BarStartTick %g", + printf ( "Bar %d, Beat %d, Tick %d, BPB %g, BarStartTick %g\n", + pos->bar, pos->beat,pos->tick, pos->beats_per_bar, pos->bar_start_tick ); +#endif } } diff -Nru hydrogen-0.9.6.1/src/core/src/IO/midi_input.cpp hydrogen-0.9.7/src/core/src/IO/midi_input.cpp --- hydrogen-0.9.6.1/src/core/src/IO/midi_input.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/core/src/IO/midi_input.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -37,6 +37,9 @@ MidiInput::MidiInput( const char* class_name ) : Object( class_name ) , m_bActive( false ) + , __hihat_cc_openess ( 127 ) + , __noteOffTick( 0 ) + , __noteOnTick( 0 ) { //INFOLOG( "INIT" ); @@ -94,11 +97,14 @@ case MidiMessage::NOTE_OFF: INFOLOG("This is a NOTE OFF message."); - handleNoteOffMessage( msg ); + handleNoteOffMessage( msg, false ); break; case MidiMessage::POLYPHONIC_KEY_PRESSURE: - ERRORLOG( "POLYPHONIC_KEY_PRESSURE event not handled yet" ); + //ERRORLOG( "POLYPHONIC_KEY_PRESSURE event not handled yet" ); + INFOLOG( QString( "[handleMidiMessage] POLYPHONIC_KEY_PRESSURE Parameter: %1, Value: %2") + .arg( msg.m_nData1 ).arg( msg.m_nData2 ) ); + handlePolyphonicKeyPressureMessage( msg ); break; case MidiMessage::CONTROL_CHANGE: @@ -108,9 +114,8 @@ break; case MidiMessage::PROGRAM_CHANGE: - INFOLOG( QString( "[handleMidiMessage] PROGRAM_CHANGE event, seting next pattern to %1" ) + INFOLOG( QString( "[handleMidiMessage] PROGRAM_CHANGE Value: %1" ) .arg( msg.m_nData1 ) ); -// Hydrogen::get_instance()->sequencer_setNextPattern(msg.m_nData1, false, false); handleProgramChangeMessage( msg ); break; @@ -177,13 +182,16 @@ aH->handleAction( pAction ); + if(msg.m_nData1 == 04){ + __hihat_cc_openess = msg.m_nData2; + } + pEngine->lastMidiEvent = "CC"; pEngine->lastMidiEventParameter = msg.m_nData1; } void MidiInput::handleProgramChangeMessage( const MidiMessage& msg ) { - INFOLOG( QString( "[handleMidiMessage] PROGRAM_CHANGE Value: %1" ).arg( msg.m_nData1 ) ); Hydrogen *pEngine = Hydrogen::get_instance(); MidiActionManager *aH = MidiActionManager::get_instance(); MidiMap *mM = MidiMap::get_instance(); @@ -194,7 +202,7 @@ aH->handleAction( pAction ); pEngine->lastMidiEvent = "PROGRAM_CHANGE"; - pEngine->lastMidiEventParameter = msg.m_nData1; + pEngine->lastMidiEventParameter = 0; } void MidiInput::handleNoteOnMessage( const MidiMessage& msg ) @@ -205,7 +213,7 @@ float fVelocity = msg.m_nData2 / 127.0; if ( fVelocity == 0 ) { - handleNoteOffMessage( msg ); + handleNoteOffMessage( msg, false ); return; } @@ -220,7 +228,7 @@ if ( action && Preferences::get_instance()->m_bMidiDiscardNoteAfterAction) { - return; + return; } bool bPatternSelect = false; @@ -229,26 +237,56 @@ if ( bPatternSelect ) { int patternNumber = nNote - 36; //INFOLOG( QString( "next pattern = %1" ).arg( patternNumber ) ); - pEngine->sequencer_setNextPattern( patternNumber, false, false ); + pEngine->sequencer_setNextPattern( patternNumber ); } else { static const float fPan_L = 0.5f; static const float fPan_R = 0.5f; + int nInstrument = nNote - 36; - if ( nInstrument < 0 ) { - if(Preferences::get_instance()->__playselectedinstrument) + InstrumentList *instrList = pEngine->getSong()->get_instrument_list(); + Instrument *pInstr = NULL; + if ( Preferences::get_instance()->__playselectedinstrument ){ + nInstrument = pEngine->getSelectedInstrumentNumber(); + pInstr= instrList->get( pEngine->getSelectedInstrumentNumber()); + } + else if(Preferences::get_instance()->m_bMidiFixedMapping ){ + pInstr = instrList->findMidiNote( nNote ); + if(pInstr == NULL) { + ERRORLOG( QString( "Can't find correponding Intrument for note %1" ).arg( nNote )); + return; + } + nInstrument = instrList->index(pInstr); + } else { + if(nInstrument < 0) { + //Drop everything < 36 + return; + } + pInstr = instrList->get(nInstrument); + } + + /* + Only look to change instrument if the + current note is actually of hihat and + hihat openess is outside the instrument selected + */ + if ( pInstr != NULL && + pInstr->get_hihat_grp() >= 0 && + ( __hihat_cc_openess < pInstr->get_lower_cc() || __hihat_cc_openess > pInstr->get_higher_cc() ) ) + { + for(int i=0 ; i<=instrList->size() ; i++) + { + Instrument *instr_contestant = instrList->get( i ); + if( instr_contestant != NULL && + pInstr->get_hihat_grp() == instr_contestant->get_hihat_grp() && + __hihat_cc_openess >= instr_contestant->get_lower_cc() && + __hihat_cc_openess <= instr_contestant->get_higher_cc() ) { - //we're in instrument mode -> we accept all notes - } else { - //we're in drumkit mode, lets drop everything < 36 - nInstrument = 0; - return; + nInstrument = i; + break; } - - } - if ( nInstrument > ( MAX_INSTRUMENTS -1 ) ) { - nInstrument = MAX_INSTRUMENTS - 1; + } } pEngine->addRealtimeNote( nInstrument, fVelocity, fPan_L, fPan_R, 0.0, false, true, nNote ); @@ -257,12 +295,21 @@ __noteOnTick = pEngine->__getMidiRealtimeNoteTickPosition(); } +/* + EDrums (at least Roland TD-6V) uses PolyphonicKeyPressure + for cymbal choke. + If the message is 127 (choked) we send a NoteOff +*/ +void MidiInput::handlePolyphonicKeyPressureMessage( const MidiMessage& msg ) +{ + if( msg.m_nData2 == 127 ) + handleNoteOffMessage( msg, true ); +} - -void MidiInput::handleNoteOffMessage( const MidiMessage& msg ) +void MidiInput::handleNoteOffMessage( const MidiMessage& msg, bool CymbalChoke ) { // INFOLOG( "handleNoteOffMessage" ); - if ( Preferences::get_instance()->m_bMidiNoteOffIgnore ) { + if ( !CymbalChoke && Preferences::get_instance()->m_bMidiNoteOffIgnore ) { return; } @@ -275,22 +322,34 @@ int nNote = msg.m_nData1; //float fVelocity = msg.m_nData2 / 127.0; //we need this in future to controll release velocity int nInstrument = nNote - 36; - if ( nInstrument < 0 ) { - nInstrument = 0; + Instrument *pInstr = NULL; + + if ( Preferences::get_instance()->__playselectedinstrument ){ + nInstrument = pEngine->getSelectedInstrumentNumber(); + pInstr = pEngine->getSong()->get_instrument_list()->get( pEngine->getSelectedInstrumentNumber()); + } else if( Preferences::get_instance()->m_bMidiFixedMapping ) { + pInstr = pSong->get_instrument_list()->findMidiNote( nNote ); + + if(pInstr == NULL) { + ERRORLOG( QString( "Note %1 not found" ).arg( nNote )); + return; + } + nInstrument = pSong->get_instrument_list()->index(pInstr); } - if ( nInstrument > ( MAX_INSTRUMENTS -1 ) ) { - nInstrument = MAX_INSTRUMENTS - 1; + else { + if(nInstrument < 0) { + //Drop everything < 36 + return; + } + pInstr = pSong->get_instrument_list()->get(nInstrument); } - Instrument *pInstr = pSong->get_instrument_list()->get( nInstrument ); - float fStep = pow( 1.0594630943593, (nNote -36) ); + + float fStep = pow( 1.0594630943593, (nNote) ); if ( !Preferences::get_instance()->__playselectedinstrument ) fStep = 1; - if ( Preferences::get_instance()->__playselectedinstrument ){ - nInstrument = pEngine->getSelectedInstrumentNumber(); - pInstr= pEngine->getSong()->get_instrument_list()->get( pEngine->getSelectedInstrumentNumber()); - } + bool use_note_off = AudioEngine::get_instance()->get_sampler()->is_instrument_playing( pInstr ); if(use_note_off){ diff -Nru hydrogen-0.9.6.1/src/core/src/IO/oss_driver.cpp hydrogen-0.9.7/src/core/src/IO/oss_driver.cpp --- hydrogen-0.9.6.1/src/core/src/IO/oss_driver.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/core/src/IO/oss_driver.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -20,7 +20,7 @@ * */ -#include "OssDriver.h" +#include // check if OSS support is enabled #ifdef H2CORE_HAVE_OSS diff -Nru hydrogen-0.9.6.1/src/core/src/IO/OssDriver.h hydrogen-0.9.7/src/core/src/IO/OssDriver.h --- hydrogen-0.9.6.1/src/core/src/IO/OssDriver.h 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/core/src/IO/OssDriver.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,119 +0,0 @@ -/* - * Hydrogen - * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] - * - * http://www.hydrogen-music.org - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY, without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - */ - -#ifndef OSS_AUDIO_DRIVER_H -#define OSS_AUDIO_DRIVER_H - -#include -#include - -// check if OSS support is enabled -#ifdef H2CORE_HAVE_OSS - - -#ifdef __NetBSD__ -#include -#else -#include -#endif -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -/* -#ifdef __NetBSD__ - #define AUDIO_DEVICE "/dev/audio" -#else - #define AUDIO_DEVICE "/dev/dsp" -#endif -*/ - -namespace H2Core -{ - -typedef int ( *audioProcessCallback )( uint32_t, void * ); - -/// -/// OSS Audio Driver -/// -class OssDriver : public AudioOutput -{ - H2_OBJECT -public: - OssDriver( audioProcessCallback processCallback ); - ~OssDriver(); - - int init( unsigned bufferSize ); - int connect(); - void disconnect(); - - void write(); - unsigned getBufferSize(); - unsigned getSampleRate(); - float* getOut_L(); - float* getOut_R(); - - virtual void play(); - virtual void stop(); - virtual void locate( unsigned long nFrame ); - virtual void updateTransportInfo(); - virtual void setBpm( float fBPM ); - -private: - /** file descriptor, for writing to /dev/dsp */ - int fd; - - short* audioBuffer; - float* out_L; - float* out_R; - - audioProcessCallback processCallback; - int log2( int n ); - -}; - -#else - -namespace H2Core { - -class OssDriver : public NullDriver -{ - H2_OBJECT -public: - OssDriver( audioProcessCallback processCallback ) : NullDriver( processCallback ) {} - -}; - - - -#endif // OSS support - -}; - -#endif diff -Nru hydrogen-0.9.6.1/src/core/src/IO/portaudio_driver.cpp hydrogen-0.9.7/src/core/src/IO/portaudio_driver.cpp --- hydrogen-0.9.6.1/src/core/src/IO/portaudio_driver.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/core/src/IO/portaudio_driver.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -1,5 +1,5 @@ -#include "PortAudioDriver.h" +#include #ifdef H2CORE_HAVE_PORTAUDIO #include @@ -37,6 +37,7 @@ , m_processCallback( processCallback ) , m_pOut_L( NULL ) , m_pOut_R( NULL ) + , m_pStream( NULL ) { INFOLOG( "INIT" ); m_nBufferSize = Preferences::get_instance()->m_nBufferSize; @@ -76,14 +77,14 @@ } err = Pa_OpenDefaultStream( - &m_pStream, /* passes back stream pointer */ - 0, /* no input channels */ - 2, /* stereo output */ - paFloat32, /* 32 bit floating point output */ - m_nSampleRate, // sample rate - m_nBufferSize, // frames per buffer - portAudioCallback, /* specify our custom callback */ - this ); /* pass our data through to callback */ + &m_pStream, /* passes back stream pointer */ + 0, /* no input channels */ + 2, /* stereo output */ + paFloat32, /* 32 bit floating point output */ + m_nSampleRate, // sample rate + m_nBufferSize, // frames per buffer + portAudioCallback, /* specify our custom callback */ + this ); /* pass our data through to callback */ if ( err != paNoError ) { diff -Nru hydrogen-0.9.6.1/src/core/src/IO/PortAudioDriver.h hydrogen-0.9.7/src/core/src/IO/PortAudioDriver.h --- hydrogen-0.9.6.1/src/core/src/IO/PortAudioDriver.h 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/core/src/IO/PortAudioDriver.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,94 +0,0 @@ -/* - * Hydrogen - * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] - * - * http://www.hydrogen-music.org - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY, without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - */ - -#ifndef PORT_AUDIO_DRIVER_H -#define PORT_AUDIO_DRIVER_H - -#include -#include - -#include - -#ifdef H2CORE_HAVE_PORTAUDIO - -#include -#include - -namespace H2Core -{ - -typedef int ( *audioProcessCallback )( uint32_t, void * ); - -class PortAudioDriver : public AudioOutput -{ - H2_OBJECT -public: - audioProcessCallback m_processCallback; - float* m_pOut_L; - float* m_pOut_R; - unsigned m_nBufferSize; - - PortAudioDriver( audioProcessCallback processCallback ); - virtual ~PortAudioDriver(); - - virtual int init( unsigned nBufferSize ); - virtual int connect(); - virtual void disconnect(); - virtual unsigned getBufferSize(); - virtual unsigned getSampleRate(); - virtual float* getOut_L(); - virtual float* getOut_R(); - - virtual void updateTransportInfo(); - virtual void play(); - virtual void stop(); - virtual void locate( unsigned long nFrame ); - virtual void setBpm( float fBPM ); - -private: - PaStream *m_pStream; - unsigned m_nSampleRate; - -}; - -}; - -#else - -namespace H2Core -{ - -class PortAudioDriver : public NullDriver -{ - H2_OBJECT -public: - PortAudioDriver( audioProcessCallback processCallback ) : NullDriver( processCallback ) {} - -}; - -}; - -#endif - - -#endif - diff -Nru hydrogen-0.9.6.1/src/core/src/IO/portmidi_driver.cpp hydrogen-0.9.7/src/core/src/IO/portmidi_driver.cpp --- hydrogen-0.9.6.1/src/core/src/IO/portmidi_driver.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/core/src/IO/portmidi_driver.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -20,8 +20,8 @@ * */ -#include "PortMidiDriver.h" +#include #include #include #include @@ -29,6 +29,7 @@ #include #include + #ifdef WIN32 #include #endif @@ -152,13 +153,13 @@ } if ( info->input == TRUE ) { - if ( info->name == sMidiPortName.toLocal8Bit().constData() ) { + if ( strcmp( info->name, sMidiPortName.toLocal8Bit().constData() ) == 0 ) { nDeviceId = i; } } if ( info->output == TRUE ) { - if ( info->name == sMidiPortName.toStdString() ) { + if ( strcmp( info->name, sMidiPortName.toLocal8Bit().constData() ) == 0 ) { nOutDeviceId = i; } } diff -Nru hydrogen-0.9.6.1/src/core/src/IO/PortMidiDriver.h hydrogen-0.9.7/src/core/src/IO/PortMidiDriver.h --- hydrogen-0.9.6.1/src/core/src/IO/PortMidiDriver.h 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/core/src/IO/PortMidiDriver.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,63 +0,0 @@ -/* - * Hydrogen - * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] - * - * http://www.hydrogen-music.org - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY, without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - */ - -#ifndef PORT_MIDI_DRIVER_H -#define PORT_MIDI_DRIVER_H - -#include -#include - -#ifdef H2CORE_HAVE_PORTMIDI -#include - -namespace H2Core -{ - -class PortMidiDriver : public virtual MidiInput, public virtual MidiOutput -{ - H2_OBJECT -public: - PmStream *m_pMidiIn; - PmStream *m_pMidiOut; - bool m_bRunning; - - PortMidiDriver(); - virtual ~PortMidiDriver(); - - virtual void open(); - virtual void close(); - virtual std::vector getOutputPortList(); - - virtual void handleQueueNote(Note* pNote); - virtual void handleQueueNoteOff( int channel, int key, int velocity ); - virtual void handleQueueAllNoteOff(); - -private: - -}; - -}; - -#endif - -#endif - diff -Nru hydrogen-0.9.6.1/src/core/src/IO/pulse_audio_driver.cpp hydrogen-0.9.7/src/core/src/IO/pulse_audio_driver.cpp --- hydrogen-0.9.6.1/src/core/src/IO/pulse_audio_driver.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/core/src/IO/pulse_audio_driver.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -20,13 +20,14 @@ * */ -#include "PulseAudioDriver.h" +#include #ifdef H2CORE_HAVE_PULSEAUDIO #include #include + namespace H2Core { diff -Nru hydrogen-0.9.6.1/src/core/src/IO/PulseAudioDriver.h hydrogen-0.9.7/src/core/src/IO/PulseAudioDriver.h --- hydrogen-0.9.6.1/src/core/src/IO/PulseAudioDriver.h 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/core/src/IO/PulseAudioDriver.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,111 +0,0 @@ -/* - * Hydrogen - * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] - * - * http://www.hydrogen-music.org - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY, without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - */ -#ifndef H2_PULSE_AUDIO_DRIVER_H -#define H2_PULSE_AUDIO_DRIVER_H - - -#include - -#ifdef H2CORE_HAVE_PULSEAUDIO - -#include -#include -#include - -namespace H2Core -{ - - -/// -/// PulseAudio driver. -/// -class PulseAudioDriver : public AudioOutput -{ - H2_OBJECT -public: - typedef int (*audioProcessCallback)(uint32_t, void *); - - PulseAudioDriver(audioProcessCallback processCallback); - ~PulseAudioDriver(); - - virtual int init( unsigned nBufferSize ); - virtual int connect(); - virtual void disconnect(); - virtual unsigned getBufferSize(); - virtual unsigned getSampleRate(); - virtual float* getOut_L(); - virtual float* getOut_R(); - - virtual void updateTransportInfo(); - virtual void play(); - virtual void stop(); - virtual void locate( unsigned long nFrame ); - virtual void setBpm( float fBPM ); - -private: - pthread_t m_thread; - pthread_mutex_t m_mutex; - pthread_cond_t m_cond; - int m_pipe[2]; - audioProcessCallback m_callback; - pa_mainloop* m_main_loop; - pa_context* m_ctx; - pa_stream* m_stream; - bool m_connected; - int m_ready; - unsigned m_sample_rate; - unsigned m_buffer_size; - float* m_outL; - float* m_outR; - - static void* s_thread_body(void*); - int thread_body(); - - static void ctx_state_callback(pa_context* ctx, void* udata); - static void stream_state_callback(pa_stream* stream, void* udata); - static void stream_write_callback(pa_stream* stream, size_t bytes, void* udata); - static void pipe_callback(pa_mainloop_api*, pa_io_event*, int fd, - pa_io_event_flags_t events, void *udata); -}; - -} //namespace H2Core - -#else - -#include - -namespace H2Core { - class PulseAudioDriver : public NullDriver - { - H2_OBJECT - public: - PulseAudioDriver( audioProcessCallback processCallback ) : NullDriver( processCallback ) {} - - }; -} - -#endif //H2CORE_HAVE_PULSEAUDIO - - -#endif //H2_PULSE_AUDIO_DRIVER_H - - diff -Nru hydrogen-0.9.6.1/src/core/src/lash/LashClient.cpp hydrogen-0.9.7/src/core/src/lash/LashClient.cpp --- hydrogen-0.9.6.1/src/core/src/lash/LashClient.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/core/src/lash/LashClient.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -30,7 +30,7 @@ #ifdef H2CORE_HAVE_LASH -#include +#include #include #include diff -Nru hydrogen-0.9.6.1/src/core/src/lilypond/lilypond.cpp hydrogen-0.9.7/src/core/src/lilypond/lilypond.cpp --- hydrogen-0.9.6.1/src/core/src/lilypond/lilypond.cpp 1970-01-01 00:00:00.000000000 +0000 +++ hydrogen-0.9.7/src/core/src/lilypond/lilypond.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -0,0 +1,275 @@ +/* + * Hydrogen + * Copyright(c) 2015 by Sacha Delanoue + * + * http://www.hydrogen-music.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY, without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#include +#include +#include +#include + +/* + * Header of LilyPond file + * It contains the notation style (states the position of notes), and for this + * it follows the "Guide to Standardized Drumset Notation" by Norman Weinberg. + * + * Note that the GM-kit uses two unconventionnal intruments: "Stick" and + * "Hand Clap", so for those I did what I could and used the recommended + * triangle notehead to distinguish them for drum and cymbal notation. + */ +static const char *sHeader = + "\\version \"2.16.2\"\n" // Current version on Ubuntu LTS + "\n" + "#(define gmStyle\n" + " '(\n" + " (bassdrum default #f -3) ; Kick\n" + " (lowoodblock triangle #f 0) ; Stick\n" + " (snare default #f 1) ; Snare\n" + " (maracas triangle #f -3) ; Hand Clap\n" + " (highfloortom default #f -1) ; Tom Low\n" + " (hihat cross #f 5) ; Closed HH\n" + " (lowtom default #f 2) ; Tom Mid\n" + " (pedalhihat cross #f -5) ; Pedal HH\n" + " (hightom default #f 3) ; Tom Hi\n" + " (openhihat cross \"open\" 5) ; Open HH\n" + " (cowbell triangle #f 3) ; Cowbell\n" + " (ridecymbal cross #f 4) ; Main Ride\n" + " (crashcymbal cross #f 6) ; Main Crash\n" + " (ridecymbala cross #f 4) ; Additional Ride\n" + " (crashcymbala cross #f 7) ; Additional Crash\n" + " ))\n" + "\n"; + +H2Core::LilyPond::LilyPond() { +} + +void H2Core::LilyPond::extractData( const Song &song ) { + // Retreive metadata + m_sName = song.__name; + m_sAuthor = song.__author; + m_fBPM = song.__bpm; + + // Get the main information about the music + const std::vector *group = song.get_pattern_group_vector(); + if ( !group ) { + m_measures.clear(); + return; + } + unsigned nSize = group->size(); + m_measures = std::vector( nSize ); + for ( unsigned nPatternList = 0; nPatternList < nSize; nPatternList++ ) { + if ( PatternList *pPatternList = ( *group )[ nPatternList ] ) { + addPatternList( *pPatternList, m_measures[ nPatternList ] ); + } + } +} + +void H2Core::LilyPond::write( const QString &sFilename ) const { + std::ofstream file( sFilename.toLocal8Bit() ); + if ( !file ) { + return; + } + + file << sHeader; + file << "\\header {\n"; + file << " title = \"" << m_sName.toUtf8().constData() << "\"\n"; + file << " composer = \"" << m_sAuthor.toUtf8().constData() << "\"\n"; + file << " tagline = \"Generated by Hydrogen " H2CORE_VERSION "\"\n"; + file << "}\n\n"; + + file << "\\score {\n"; + file << " \\new DrumStaff <<\n"; + file << " \\set DrumStaff.drumStyleTable = #(alist->hash-table " + "gmStyle)\n"; + file << " \\override Staff.TimeSignature #'style = #'() % Display " + "4/4 signature\n"; + file << " \\set Staff.beamExceptions = #'() % Beam " + "quavers two by two\n"; + file << " \\drummode {\n"; + file << " \\tempo 4 = " << static_cast( m_fBPM ) << "\n\n"; + writeMeasures( file ); + file << "\n }\n"; + file << " >>\n"; + file << "}\n"; +} + +void H2Core::LilyPond::addPatternList( const PatternList &list, notes_t &to ) { + to.clear(); + for ( unsigned nPattern = 0; nPattern < list.size(); nPattern++ ) { + if ( const Pattern *pPattern = list.get( nPattern ) ) { + addPattern( *pPattern, to ); + } + } +} + +void H2Core::LilyPond::addPattern( const Pattern &pattern, notes_t ¬es ) { + notes.reserve( pattern.get_length() ); + for ( unsigned nNote = 0; nNote < pattern.get_length(); nNote++ ) { + if ( nNote >= notes.size() ) { + notes.push_back( std::vector >() ); + } + + const Pattern::notes_t *pPatternNotes = pattern.get_notes(); + if ( !pPatternNotes ) { + continue; + } + FOREACH_NOTE_CST_IT_BOUND( pPatternNotes, it, nNote ) { + if ( Note *pNote = it->second ) { + int nId = pNote->get_instrument_id(); + float fVelocity = pNote->get_velocity(); + notes[ nNote ].push_back( std::make_pair( nId, fVelocity ) ); + } + } + } +} + +void H2Core::LilyPond::writeMeasures( std::ofstream &stream ) const { + unsigned nSignature = 0; ///< Numerator of the time signature + for ( unsigned nMeasure = 0; nMeasure < m_measures.size(); nMeasure++ ) { + // Start a new measure + stream << "\n % Measure " << nMeasure + 1 << "\n"; + unsigned nNewSignature = m_measures[ nMeasure ].size() / 48; + if ( nSignature != nNewSignature ) { // Display time signature change + nSignature = nNewSignature; + stream << " \\time " << nSignature << "/4\n"; + } + + // Display the notes + stream << " << {\n"; + writeUpper( stream, nMeasure ); + stream << " } \\\\ {\n"; + writeLower( stream, nMeasure ); + stream << " } >>\n"; + } +} + +void H2Core::LilyPond::writeUpper( std::ofstream &stream, + unsigned nMeasure ) const { + // On the upper voice, we want only cymbals and mid and high toms + std::vector whiteList; + whiteList.push_back( 6 ); // Closed HH + whiteList.push_back( 7 ); // Tom Mid + whiteList.push_back( 9 ); // Tom Hi + whiteList.push_back( 10 ); // Open HH + whiteList.push_back( 11 ); // Cowbell + whiteList.push_back( 12 ); // Ride Jazz + whiteList.push_back( 13 ); // Crash + whiteList.push_back( 14 ); // Ride Rock + whiteList.push_back( 15 ); // Crash Jazz + writeVoice( stream, nMeasure, whiteList ); +} + +void H2Core::LilyPond::writeLower( std::ofstream &stream, + unsigned nMeasure ) const { + std::vector whiteList; + whiteList.push_back( 0 ); // Kick + whiteList.push_back( 1 ); // Stick + whiteList.push_back( 2 ); // Snare Jazz + whiteList.push_back( 3 ); // Hand Clap + whiteList.push_back( 4 ); // Snare Jazz + whiteList.push_back( 5 ); // Tom Low + whiteList.push_back( 8 ); // Pedal HH + writeVoice( stream, nMeasure, whiteList ); +} + +///< Mapping of GM-kit instrument to LilyPond names +static const char *const sNames[] = { "bd", "wbl", "sn", "mar", + "sn", "tomfh", "hh", "toml", + "hhp", "tomh", "hho", "cb", + "cymr", "cymc", "cymra", "cymca" }; + +///< Write group of note (may also be a rest or a single note) +static void writeNote( std::ofstream &stream, const std::vector ¬es ) { + switch ( notes.size() ) { + case 0: stream << "r"; break; + case 1: stream << sNames[ notes[ 0 ] ]; break; + default: + stream << "<"; + for ( unsigned i = 0; i < notes.size(); i++ ) { + stream << sNames[ notes[ i ] ] << " "; + } + stream << ">"; + } +} + +///< Write duration in LilyPond format, from number of 1/48th of a beat +static void writeDuration( std::ofstream &stream, unsigned duration ) { + if ( 48 % duration == 0 ) { + // This is a basic note + if ( duration % 2 ) { + return; // TODO Triplet, unsupported yet + } + stream << 4 * 48 / duration; + + } else if ( duration % 3 == 0 && 48 % ( duration * 2 / 3 ) == 0 ) { + // This is a dotted note + if ( duration % 2 ) { + return; // TODO Triplet, unsupported yet + } + stream << 4 * 48 / ( duration * 2 / 3 ) << "."; + + } else { + // Neither basic nor dotted, we have to split it and add a rest + for ( int pow = 3; pow >= 0; --pow ) { + if ( 3 * ( 1 << pow ) < duration ) { + stream << 8 * ( 3 - pow ) << " r"; + writeDuration( stream, duration - 3 * ( 1 << pow ) ); + break; + } + } + } +} + +void H2Core::LilyPond::writeVoice( std::ofstream &stream, + unsigned nMeasure, + const std::vector &whiteList ) const { + stream << " "; + const notes_t &measure = m_measures[ nMeasure ]; + for ( unsigned nStart = 0; nStart < measure.size(); nStart += 48 ) { + unsigned lastNote = nStart; + for ( unsigned nTime = nStart; nTime < nStart + 48; nTime++ ) { + // Get notes played at this current time + std::vector notes; + const std::vector > &input = measure[ nTime ]; + for ( unsigned nNote = 0; nNote < input.size(); nNote++ ) { + if ( std::find( whiteList.begin(), + whiteList.end(), + input[ nNote ].first ) != whiteList.end() ) { + notes.push_back( input[ nNote ].first ); + } + } + + // Write them if there are any + if ( !notes.empty() || nTime == nStart ) { + // First write duration of last note + if ( nTime != nStart ) { + writeDuration( stream, nTime - lastNote ); + lastNote = nTime; + } + + // Then write next note + stream << " "; + writeNote( stream, notes ); + } + } + writeDuration( stream, nStart + 48 - lastNote ); + } + stream << "\n"; +} diff -Nru hydrogen-0.9.6.1/src/core/src/local_file_mgr.cpp hydrogen-0.9.7/src/core/src/local_file_mgr.cpp --- hydrogen-0.9.6.1/src/core/src/local_file_mgr.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/core/src/local_file_mgr.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -24,14 +24,17 @@ #include #include #include +#include #include #include +#include #include #include #include #include #include #include +#include #include #include #include @@ -70,7 +73,7 @@ QString LocalFileMng::getDrumkitNameForPattern( const QString& patternDir ) { - QDomDocument doc = LocalFileMng::openXmlDocument( patternDir ); + QDomDocument doc = openXmlDocument( patternDir ); QDomNode rootNode = doc.firstChildElement( "drumkit_pattern" ); // root element if ( rootNode.isNull() ) { @@ -777,11 +780,16 @@ * \return Returns an Errorcode. */ -int LocalFileMng::savePlayList( const std::string& filename) +int LocalFileMng::savePlayList( const std::string& playListFilename) { + Preferences *pPref = H2Core::Preferences::get_instance(); + bool useRelativePathNames = pPref->isPlaylistUsingRelativeFilenames(); - std::string name = filename.c_str(); + QString qFileName = QString::fromStdString( playListFilename ); + QFileInfo fileInfo( qFileName ); + QDir playlistDir = fileInfo.absoluteDir(); + std::string name = playListFilename.c_str(); std::string realname = name.substr(name.rfind("/")+1); QDomDocument doc; @@ -796,7 +804,14 @@ for ( uint i = 0; i < Hydrogen::get_instance()->m_PlayList.size(); ++i ){ QDomNode nextNode = doc.createElement( "next" ); - LocalFileMng::writeXmlString ( nextNode, "song", Hydrogen::get_instance()->m_PlayList[i].m_hFile ); + QString playlistItemFilename; + if(useRelativePathNames){ + playlistItemFilename = playlistDir.relativeFilePath(Hydrogen::get_instance()->m_PlayList[i].m_hFile); + } else { + playlistItemFilename = Hydrogen::get_instance()->m_PlayList[i].m_hFile; + } + + LocalFileMng::writeXmlString ( nextNode, "song", playlistItemFilename); LocalFileMng::writeXmlString ( nextNode, "script", Hydrogen::get_instance()->m_PlayList[i].m_hScript ); LocalFileMng::writeXmlString ( nextNode, "enabled", Hydrogen::get_instance()->m_PlayList[i].m_hScriptEnabled ); @@ -807,7 +822,7 @@ doc.appendChild( rootNode ); int rv = 0; - QFile file( filename.c_str() ); + QFile file( playListFilename.c_str() ); if ( !file.open(QIODevice::WriteOnly) ) rv = 1; @@ -820,7 +835,6 @@ file.close(); return rv; // ok - } /** @@ -831,13 +845,22 @@ int LocalFileMng::loadPlayList( const std::string& filename) { - std::string playlistInfoFile = filename; - std::ifstream verify( playlistInfoFile.c_str() , std::ios::in | std::ios::binary ); - if ( verify ) { + /* openXmlDocument can create new document ( which is bad idea anyway ) + We don't want create new playlist here , so we just open it for test ;-) + */ + QString Filename = QString( filename.c_str() ); + QFileInfo playlistFileInfo( Filename ); + QDir playlistDir = playlistFileInfo.absoluteDir(); + + QFile file( Filename ); + if ( file.open(QIODevice::ReadOnly) ) { + file.close(); + } else { + ERRORLOG( QString("Error reading playlist: can't open file %1").arg( Filename ) ); return 1; } - QDomDocument doc = LocalFileMng::openXmlDocument( QString( filename.c_str() ) ); + QDomDocument doc = openXmlDocument( Filename ); Hydrogen::get_instance()->m_PlayList.clear(); @@ -854,11 +877,15 @@ SongReader reader; while ( ! nextNode.isNull() ) { Hydrogen::HPlayListNode playListItem; - playListItem.m_hFile = LocalFileMng::readXmlString( nextNode, "song", "" ); + QString playlistItemPath = readXmlString( nextNode, "song", "" ); + + QFileInfo playlistItemInfo (playlistDir, playlistItemPath); + playListItem.m_hFile = playlistItemInfo.absoluteFilePath(); + QString FilePath = reader.getPath( playListItem.m_hFile ); playListItem.m_hFileExists = Filesystem::file_readable( FilePath ); playListItem.m_hScript = LocalFileMng::readXmlString( nextNode, "script", "" ); - playListItem.m_hScriptEnabled = LocalFileMng::readXmlString( nextNode, "enabled", "" ); + playListItem.m_hScriptEnabled = readXmlString( nextNode, "enabled", "" ); Hydrogen::get_instance()->m_PlayList.push_back( playListItem ); nextNode = nextNode.nextSiblingElement( "next" ); @@ -867,8 +894,6 @@ return 0; // ok } - - /* New QtXml based methods */ QString LocalFileMng::readXmlString( QDomNode node , const QString& nodeName, const QString& defaultValue, bool bCanBeEmpty, bool bShouldExists, bool tinyXmlCompatMode) @@ -1253,6 +1278,21 @@ LocalFileMng::writeXmlString( songNode, "humanize_velocity", QString("%1").arg( song->get_humanize_velocity_value() ) ); LocalFileMng::writeXmlString( songNode, "swing_factor", QString("%1").arg( song->get_swing_factor() ) ); + // component List + QDomNode componentListNode = doc.createElement( "componentList" ); + for (std::vector::iterator it = song->get_components()->begin() ; it != song->get_components()->end(); ++it) { + DrumkitComponent* pCompo = *it; + + QDomNode componentNode = doc.createElement( "drumkitComponent" ); + + LocalFileMng::writeXmlString( componentNode, "id", QString("%1").arg( pCompo->get_id() ) ); + LocalFileMng::writeXmlString( componentNode, "name", pCompo->get_name() ); + LocalFileMng::writeXmlString( componentNode, "volume", QString("%1").arg( pCompo->get_volume() ) ); + + componentListNode.appendChild( componentNode ); + } + songNode.appendChild( componentListNode ); + // instrument list QDomNode instrumentListNode = doc.createElement( "instrumentList" ); unsigned nInstrument = song->get_instrument_list()->size(); @@ -1272,6 +1312,7 @@ LocalFileMng::writeXmlString( instrumentNode, "pan_L", QString("%1").arg( instr->get_pan_l() ) ); LocalFileMng::writeXmlString( instrumentNode, "pan_R", QString("%1").arg( instr->get_pan_r() ) ); LocalFileMng::writeXmlString( instrumentNode, "gain", QString("%1").arg( instr->get_gain() ) ); + LocalFileMng::writeXmlBool( instrumentNode, "applyVelocity", instr->get_apply_velocity() ); LocalFileMng::writeXmlBool( instrumentNode, "filterActive", instr->is_filter_active() ); LocalFileMng::writeXmlString( instrumentNode, "filterCutoff", QString("%1").arg( instr->get_filter_cutoff() ) ); @@ -1292,57 +1333,82 @@ LocalFileMng::writeXmlString( instrumentNode, "muteGroup", QString("%1").arg( instr->get_mute_group() ) ); LocalFileMng::writeXmlBool( instrumentNode, "isStopNote", instr->is_stop_notes() ); + switch ( instr->sample_selection_alg() ) { + case Instrument::VELOCITY: + LocalFileMng::writeXmlString( instrumentNode, "sampleSelectionAlgo", "VELOCITY" ); + break; + case Instrument::RANDOM: + LocalFileMng::writeXmlString( instrumentNode, "sampleSelectionAlgo", "RANDOM" ); + break; + case Instrument::ROUND_ROBIN: + LocalFileMng::writeXmlString( instrumentNode, "sampleSelectionAlgo", "ROUND_ROBIN" ); + break; + } LocalFileMng::writeXmlString( instrumentNode, "midiOutChannel", QString("%1").arg( instr->get_midi_out_channel() ) ); LocalFileMng::writeXmlString( instrumentNode, "midiOutNote", QString("%1").arg( instr->get_midi_out_note() ) ); + LocalFileMng::writeXmlString( instrumentNode, "isHihat", QString("%1").arg( instr->get_hihat_grp() ) ); + LocalFileMng::writeXmlString( instrumentNode, "lower_cc", QString("%1").arg( instr->get_lower_cc() ) ); + LocalFileMng::writeXmlString( instrumentNode, "higher_cc", QString("%1").arg( instr->get_higher_cc() ) ); + + for (std::vector::iterator it = instr->get_components()->begin() ; it != instr->get_components()->end(); ++it) { + InstrumentComponent* pComponent = *it; + + QDomNode componentNode = doc.createElement( "instrumentComponent" ); + + LocalFileMng::writeXmlString( componentNode, "component_id", QString("%1").arg( pComponent->get_drumkit_componentID() ) ); + LocalFileMng::writeXmlString( componentNode, "gain", QString("%1").arg( pComponent->get_gain() ) ); + + for ( unsigned nLayer = 0; nLayer < MAX_LAYERS; nLayer++ ) { + InstrumentLayer *pLayer = pComponent->get_layer( nLayer ); + + if ( pLayer == NULL ) continue; + Sample *pSample = pLayer->get_sample(); + if ( pSample == NULL ) continue; + + bool sIsModified = pSample->get_is_modified(); + Sample::Loops lo = pSample->get_loops(); + Sample::Rubberband ro = pSample->get_rubberband(); + QString sMode = pSample->get_loop_mode_string(); + + + QDomNode layerNode = doc.createElement( "layer" ); + LocalFileMng::writeXmlString( layerNode, "filename", prepare_filename( pSample->get_filepath() ) ); + LocalFileMng::writeXmlBool( layerNode, "ismodified", sIsModified); + LocalFileMng::writeXmlString( layerNode, "smode", pSample->get_loop_mode_string() ); + LocalFileMng::writeXmlString( layerNode, "startframe", QString("%1").arg( lo.start_frame ) ); + LocalFileMng::writeXmlString( layerNode, "loopframe", QString("%1").arg( lo.loop_frame ) ); + LocalFileMng::writeXmlString( layerNode, "loops", QString("%1").arg( lo.count ) ); + LocalFileMng::writeXmlString( layerNode, "endframe", QString("%1").arg( lo.end_frame ) ); + LocalFileMng::writeXmlString( layerNode, "userubber", QString("%1").arg( ro.use ) ); + LocalFileMng::writeXmlString( layerNode, "rubberdivider", QString("%1").arg( ro.divider ) ); + LocalFileMng::writeXmlString( layerNode, "rubberCsettings", QString("%1").arg( ro.c_settings ) ); + LocalFileMng::writeXmlString( layerNode, "rubberPitch", QString("%1").arg( ro.pitch ) ); + LocalFileMng::writeXmlString( layerNode, "min", QString("%1").arg( pLayer->get_start_velocity() ) ); + LocalFileMng::writeXmlString( layerNode, "max", QString("%1").arg( pLayer->get_end_velocity() ) ); + LocalFileMng::writeXmlString( layerNode, "gain", QString("%1").arg( pLayer->get_gain() ) ); + LocalFileMng::writeXmlString( layerNode, "pitch", QString("%1").arg( pLayer->get_pitch() ) ); + + + Sample::VelocityEnvelope* velocity = pSample->get_velocity_envelope(); + for (int y = 0; y < velocity->size(); y++){ + QDomNode volumeNode = doc.createElement( "volume" ); + LocalFileMng::writeXmlString( volumeNode, "volume-position", QString("%1").arg( velocity->at(y).frame ) ); + LocalFileMng::writeXmlString( volumeNode, "volume-value", QString("%1").arg( velocity->at(y).value ) ); + layerNode.appendChild( volumeNode ); + } - for ( unsigned nLayer = 0; nLayer < MAX_LAYERS; nLayer++ ) { - InstrumentLayer *pLayer = instr->get_layer( nLayer ); - if ( pLayer == NULL ) continue; - Sample *pSample = pLayer->get_sample(); - if ( pSample == NULL ) continue; - - bool sIsModified = pSample->get_is_modified(); - Sample::Loops lo = pSample->get_loops(); - Sample::Rubberband ro = pSample->get_rubberband(); - QString sMode = pSample->get_loop_mode_string(); - - - QDomNode layerNode = doc.createElement( "layer" ); - LocalFileMng::writeXmlString( layerNode, "filename", prepare_filename( pSample->get_filepath() ) ); - LocalFileMng::writeXmlBool( layerNode, "ismodified", sIsModified); - LocalFileMng::writeXmlString( layerNode, "smode", pSample->get_loop_mode_string() ); - LocalFileMng::writeXmlString( layerNode, "startframe", QString("%1").arg( lo.start_frame ) ); - LocalFileMng::writeXmlString( layerNode, "loopframe", QString("%1").arg( lo.loop_frame ) ); - LocalFileMng::writeXmlString( layerNode, "loops", QString("%1").arg( lo.count ) ); - LocalFileMng::writeXmlString( layerNode, "endframe", QString("%1").arg( lo.end_frame ) ); - LocalFileMng::writeXmlString( layerNode, "userubber", QString("%1").arg( ro.use ) ); - LocalFileMng::writeXmlString( layerNode, "rubberdivider", QString("%1").arg( ro.divider ) ); - LocalFileMng::writeXmlString( layerNode, "rubberCsettings", QString("%1").arg( ro.c_settings ) ); - LocalFileMng::writeXmlString( layerNode, "rubberPitch", QString("%1").arg( ro.pitch ) ); - LocalFileMng::writeXmlString( layerNode, "min", QString("%1").arg( pLayer->get_start_velocity() ) ); - LocalFileMng::writeXmlString( layerNode, "max", QString("%1").arg( pLayer->get_end_velocity() ) ); - LocalFileMng::writeXmlString( layerNode, "gain", QString("%1").arg( pLayer->get_gain() ) ); - LocalFileMng::writeXmlString( layerNode, "pitch", QString("%1").arg( pLayer->get_pitch() ) ); - - - Sample::VelocityEnvelope* velocity = pSample->get_velocity_envelope(); - for (int y = 0; y < velocity->size(); y++){ - QDomNode volumeNode = doc.createElement( "volume" ); - LocalFileMng::writeXmlString( volumeNode, "volume-position", QString("%1").arg( velocity->at(y).frame ) ); - LocalFileMng::writeXmlString( volumeNode, "volume-value", QString("%1").arg( velocity->at(y).value ) ); - layerNode.appendChild( volumeNode ); - } + Sample::PanEnvelope* pan = pSample->get_pan_envelope(); + for (int y = 0; y < pan->size(); y++){ + QDomNode panNode = doc.createElement( "pan" ); + LocalFileMng::writeXmlString( panNode, "pan-position", QString("%1").arg( pan->at(y).frame ) ); + LocalFileMng::writeXmlString( panNode, "pan-value", QString("%1").arg( pan->at(y).value ) ); + layerNode.appendChild( panNode ); + } - Sample::PanEnvelope* pan = pSample->get_pan_envelope(); - for (int y = 0; y < pan->size(); y++){ - QDomNode panNode = doc.createElement( "pan" ); - LocalFileMng::writeXmlString( panNode, "pan-position", QString("%1").arg( pan->at(y).frame ) ); - LocalFileMng::writeXmlString( panNode, "pan-value", QString("%1").arg( pan->at(y).value ) ); - layerNode.appendChild( panNode ); + componentNode.appendChild( layerNode ); } - - instrumentNode.appendChild( layerNode ); + instrumentNode.appendChild( componentNode ); } instrumentListNode.appendChild( instrumentNode ); @@ -1362,6 +1428,7 @@ LocalFileMng::writeXmlString( patternNode, "name", pat->get_name() ); LocalFileMng::writeXmlString( patternNode, "category", pat->get_category() ); LocalFileMng::writeXmlString( patternNode, "size", QString("%1").arg( pat->get_length() ) ); + LocalFileMng::writeXmlString( patternNode, "info", pat->get_info() ); QDomNode noteListNode = doc.createElement( "noteList" ); const Pattern::notes_t* notes = pat->get_notes(); @@ -1476,12 +1543,15 @@ //bpm time line + Timeline * pTimeline = Hydrogen::get_instance()->getTimeline(); + QDomNode bpmTimeLine = doc.createElement( "BPMTimeLine" ); - if(Hydrogen::get_instance()->m_timelinevector.size() >= 1 ){ - for ( int t = 0; t < static_cast(Hydrogen::get_instance()->m_timelinevector.size()); t++){ + + if(pTimeline->m_timelinevector.size() >= 1 ){ + for ( int t = 0; t < static_cast(pTimeline->m_timelinevector.size()); t++){ QDomNode newBPMNode = doc.createElement( "newBPM" ); - LocalFileMng::writeXmlString( newBPMNode, "BAR",QString("%1").arg( Hydrogen::get_instance()->m_timelinevector[t].m_htimelinebeat )); - LocalFileMng::writeXmlString( newBPMNode, "BPM", QString("%1").arg( Hydrogen::get_instance()->m_timelinevector[t].m_htimelinebpm ) ); + LocalFileMng::writeXmlString( newBPMNode, "BAR",QString("%1").arg( pTimeline->m_timelinevector[t].m_htimelinebeat )); + LocalFileMng::writeXmlString( newBPMNode, "BPM", QString("%1").arg( pTimeline->m_timelinevector[t].m_htimelinebpm ) ); bpmTimeLine.appendChild( newBPMNode ); } } @@ -1489,11 +1559,11 @@ //time line tag QDomNode timeLineTag = doc.createElement( "timeLineTag" ); - if(Hydrogen::get_instance()->m_timelinetagvector.size() >= 1 ){ - for ( int t = 0; t < static_cast(Hydrogen::get_instance()->m_timelinetagvector.size()); t++){ + if(pTimeline->m_timelinetagvector.size() >= 1 ){ + for ( int t = 0; t < static_cast(pTimeline->m_timelinetagvector.size()); t++){ QDomNode newTAGNode = doc.createElement( "newTAG" ); - LocalFileMng::writeXmlString( newTAGNode, "BAR",QString("%1").arg( Hydrogen::get_instance()->m_timelinetagvector[t].m_htimelinetagbeat )); - LocalFileMng::writeXmlString( newTAGNode, "TAG", QString("%1").arg( Hydrogen::get_instance()->m_timelinetagvector[t].m_htimelinetag ) ); + LocalFileMng::writeXmlString( newTAGNode, "BAR",QString("%1").arg( pTimeline->m_timelinetagvector[t].m_htimelinetagbeat )); + LocalFileMng::writeXmlString( newTAGNode, "TAG", QString("%1").arg( pTimeline->m_timelinetagvector[t].m_htimelinetag ) ); timeLineTag.appendChild( newTAGNode ); } } @@ -1514,7 +1584,7 @@ if( rv ) { WARNINGLOG("File save reported an error."); } else { - song->__is_modified = false; + song->set_is_modified( false ); INFOLOG("Save was successful."); } diff -Nru hydrogen-0.9.6.1/src/core/src/logger.cpp hydrogen-0.9.7/src/core/src/logger.cpp --- hydrogen-0.9.6.1/src/core/src/logger.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/core/src/logger.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -46,9 +46,11 @@ if ( param == 0 ) return 0; Logger* logger = ( Logger* )param; #ifdef WIN32 +# ifdef H2CORE_HAVE_DEBUG ::AllocConsole(); // ::SetConsoleTitle( "Hydrogen debug log" ); freopen( "CONOUT$", "wt", stdout ); +# endif #endif FILE* log_file = 0; if ( logger->__use_file ) { @@ -122,7 +124,11 @@ } void Logger::log( unsigned level, const QString& class_name, const char* func_name, const QString& msg ) { - if( level == None ) return; + + if( level == None ){ + return; + } + const char* prefix[] = { "", "(E) ", "(W) ", "(I) ", "(D) " }; #ifdef WIN32 const char* color[] = { "", "", "", "", "" }; @@ -132,10 +138,6 @@ int i; switch( level ) { - case None: - assert( false ); - i = 0; - break; case Error: i = 1; break; diff -Nru hydrogen-0.9.6.1/src/core/src/midi_action.cpp hydrogen-0.9.7/src/core/src/midi_action.cpp --- hydrogen-0.9.6.1/src/core/src/midi_action.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/core/src/midi_action.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -124,7 +124,7 @@ { __instance = this; - int lastBpmChangeCCParameter = -1; + m_nLastBpmChangeCCParameter = -1; /* the actionList holds all Action identfiers which hydrogen is able to interpret. @@ -164,6 +164,7 @@ << "SELECT_NEXT_PATTERN_CC_ABSOLUT" << "SELECT_NEXT_PATTERN_PROMPTLY" << "SELECT_NEXT_PATTERN_RELATIVE" + << "SELECT_PREV_PATTERN_RELATIVE" << "SELECT_AND_PLAY_PATTERN" << "PAN_RELATIVE" << "PAN_ABSOLUTE" @@ -296,21 +297,48 @@ if( sActionString == "SELECT_NEXT_PATTERN" ){ bool ok; int row = pAction->getParameter1().toInt(&ok,10); - if( row> pEngine->getSong()->get_pattern_list()->size() -1 ) + if( row> pEngine->getSong()->get_pattern_list()->size() -1 ){ return false; - if(Preferences::get_instance()->patternModePlaysSelected()) + } + + if(Preferences::get_instance()->patternModePlaysSelected()){ pEngine->setSelectedPatternNumber( row ); + } else - pEngine->sequencer_setNextPattern( row, false, true ); + { + pEngine->sequencer_setNextPattern( row ); + } + return true; } if( sActionString == "SELECT_NEXT_PATTERN_RELATIVE" ){ + bool ok; + if(!Preferences::get_instance()->patternModePlaysSelected()) + { return true; + } + int row = pEngine->getSelectedPatternNumber() + pAction->getParameter1().toInt(&ok,10); + if( row> pEngine->getSong()->get_pattern_list()->size() -1 ) + { + return false; + } + + pEngine->setSelectedPatternNumber( row ); + + return true; + } + + if( sActionString == "SELECT_PREV_PATTERN_RELATIVE" ){ + bool ok; + if(!Preferences::get_instance()->patternModePlaysSelected()) + return true; + int row = pEngine->getSelectedPatternNumber() - pAction->getParameter1().toInt(&ok,10); + if( row < 0 ) return false; pEngine->setSelectedPatternNumber( row ); @@ -340,7 +368,7 @@ bool ok; int row = pAction->getParameter1().toInt(&ok,10); pEngine->setSelectedPatternNumber( row ); - pEngine->sequencer_setNextPattern( row, false, true ); + pEngine->sequencer_setNextPattern( row ); int nState = pEngine->getState(); if ( nState == STATE_READY ){ @@ -625,22 +653,22 @@ mult = pAction->getParameter1().toInt(&ok,10); cc_param = pAction->getParameter2().toInt(&ok,10); - if( lastBpmChangeCCParameter == -1) + if( m_nLastBpmChangeCCParameter == -1) { - lastBpmChangeCCParameter = cc_param; + m_nLastBpmChangeCCParameter = cc_param; } Song* pSong = pEngine->getSong(); - if ( lastBpmChangeCCParameter >= cc_param && pSong->__bpm < 300) { + if ( m_nLastBpmChangeCCParameter >= cc_param && pSong->__bpm < 300) { pEngine->setBPM( pSong->__bpm - 1*mult ); } - if ( lastBpmChangeCCParameter < cc_param && pSong->__bpm > 40 ) { + if ( m_nLastBpmChangeCCParameter < cc_param && pSong->__bpm > 40 ) { pEngine->setBPM( pSong->__bpm + 1*mult ); } - lastBpmChangeCCParameter = cc_param; + m_nLastBpmChangeCCParameter = cc_param; AudioEngine::get_instance()->unlock(); @@ -649,9 +677,9 @@ if( sActionString == "BPM_FINE_CC_RELATIVE" ){ /* - * increments/decrements the BPM - * this is useful if the bpm is set by a rotary control knob - */ + * increments/decrements the BPM + * this is useful if the bpm is set by a rotary control knob + */ AudioEngine::get_instance()->lock( RIGHT_HERE ); @@ -667,22 +695,22 @@ mult = pAction->getParameter1().toInt(&ok,10); cc_param = pAction->getParameter2().toInt(&ok,10); - if( lastBpmChangeCCParameter == -1) + if( m_nLastBpmChangeCCParameter == -1) { - lastBpmChangeCCParameter = cc_param; + m_nLastBpmChangeCCParameter = cc_param; } Song* pSong = pEngine->getSong(); - if ( lastBpmChangeCCParameter >= cc_param && pSong->__bpm < 300) { + if ( m_nLastBpmChangeCCParameter >= cc_param && pSong->__bpm < 300) { pEngine->setBPM( pSong->__bpm - 0.01*mult ); } - if ( lastBpmChangeCCParameter < cc_param && pSong->__bpm > 40 ) { + if ( m_nLastBpmChangeCCParameter < cc_param && pSong->__bpm > 40 ) { pEngine->setBPM( pSong->__bpm + 0.01*mult ); } - lastBpmChangeCCParameter = cc_param; + m_nLastBpmChangeCCParameter = cc_param; AudioEngine::get_instance()->unlock(); @@ -738,7 +766,7 @@ if( sActionString == "PLAYLIST_SONG"){ bool ok; - int songnumber = pAction->getParameter2().toInt(&ok,10); + int songnumber = pAction->getParameter1().toInt(&ok,10); return setSong( songnumber ); } diff -Nru hydrogen-0.9.6.1/src/core/src/nsm_client.cpp hydrogen-0.9.7/src/core/src/nsm_client.cpp --- hydrogen-0.9.6.1/src/core/src/nsm_client.cpp 1970-01-01 00:00:00.000000000 +0000 +++ hydrogen-0.9.7/src/core/src/nsm_client.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -0,0 +1,167 @@ +/* + * Hydrogen + * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] + * + * http://www.hydrogen-music.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY, without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + + +#include "hydrogen/helpers/filesystem.h" +#include "hydrogen/Preferences.h" + +#include +#include + +#ifdef H2CORE_HAVE_NSMSESSION + +#include "hydrogen/nsm_client.h" +#include "hydrogen/nsm.h" +#include "hydrogen/event_queue.h" +#include "hydrogen/hydrogen.h" +#include "hydrogen/basics/song.h" + + + +NsmClient * NsmClient::__instance = 0; +const char* NsmClient::__class_name = "NsmClient"; +bool NsmShutdown = false; + + +static int nsm_open_cb (const char *name, + const char *display_name, + const char *client_id, + char **out_msg, + void *userdata ) +{ + + H2Core::Preferences *pPref = H2Core::Preferences::get_instance(); + + if(pPref){ + if(client_id){ + // setup JACK here, client_id gets the JACK client name + pPref->setNsmClientId(QString(client_id)); + } + + if(name){ + + /* + * the hydrogen core is not responsible for managing + * song loading on startup. Therefore we use store + * the desired song name and let the GUIs do the actual work. + */ + + pPref->setNsmSongName(QString(name)); + } + } + + return ERR_OK; +} + +static int nsm_save_cb ( char **out_msg, void *userdata ) +{ + H2Core::Song *pSong = H2Core::Hydrogen::get_instance()->getSong(); + QString fileName = pSong->get_filename(); + + pSong->save( fileName ); + + return ERR_OK; +} + +void* nsm_processEvent(void* data) +{ + nsm_client_t* nsm = (nsm_client_t*) data; + + while(!NsmShutdown && nsm){ + nsm_check_wait( nsm, 1000); + } + + return 0; +} + +NsmClient::NsmClient() + : Object( __class_name ) +{ + m_NsmThread = 0; +} + +void NsmClient::create_instance() +{ + if( __instance == 0 ) { + __instance = new NsmClient; + } +} + +NsmClient::~NsmClient() +{ + __instance = NULL; +} + +void NsmClient::shutdown() +{ + NsmShutdown = true; +} + +void NsmClient::createInitialClient() +{ + /* + * Make first contact with NSM server. + */ + + nsm_client_t* nsm = 0; + + H2Core::Preferences *pPref = H2Core::Preferences::get_instance(); + QString H2ProcessName = pPref->getH2ProcessName(); + QByteArray byteArray = H2ProcessName.toLatin1(); + + const char *nsm_url = getenv( "NSM_URL" ); + + if ( nsm_url ) + { + nsm = nsm_new(); + + if ( nsm ) + { + nsm_set_open_callback( nsm, nsm_open_cb, (void*) 0 ); + nsm_set_save_callback( nsm, nsm_save_cb, (void*) 0 ); + + if ( nsm_init( nsm, nsm_url ) == 0 ) + { + nsm_send_announce( nsm, "Hydrogen", "", byteArray.data() ); + nsm_check_wait( nsm, 10000 ); + + if(pthread_create(&m_NsmThread, NULL, nsm_processEvent, nsm)) { + ___ERRORLOG("Error creating NSM thread\n "); + return; + } + + } + else + { + ___ERRORLOG("failed, freeing NSM client"); + nsm_free( nsm ); + nsm = 0; + } + } + } + else + { + ___WARNINGLOG("No NSM URL available: no NSM management\n"); + } +} +#endif /* H2CORE_HAVE_NSMSESSION */ + diff -Nru hydrogen-0.9.6.1/src/core/src/playlist.cpp hydrogen-0.9.7/src/core/src/playlist.cpp --- hydrogen-0.9.6.1/src/core/src/playlist.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/core/src/playlist.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -39,17 +39,16 @@ Playlist::Playlist() : Object( __class_name ) { - if ( __instance ) {class HydrogenApp; - + if ( __instance ) { _ERRORLOG( "Playlist in use" ); - }class HydrogenApp; + } //_INFOLOG( "[Playlist]" ); __instance = this; __filename = ""; -// __playlistName = ""; - selectedSongNumber = -1; - activeSongNumber = -1; + m_nSelectedSongNumber = -1; + m_nActiveSongNumber = -1; + m_bIsModified = false; } Playlist::~Playlist() @@ -70,8 +69,9 @@ set_filename( filename ); LocalFileMng fileMng; - if ( fileMng.savePlayList( filename.toLocal8Bit().constData() ) == 0 ) + if ( fileMng.savePlayList( filename.toLocal8Bit().constData() ) == 0 ){ return true; + } return false; } @@ -82,9 +82,9 @@ int ret = fileMng.loadPlayList( filename.toLocal8Bit().constData() ); if ( ret == 0 ) { - Playlist* P = get_instance(); - P->set_filename( filename ); - return P; + Playlist* pPlaylist = get_instance(); + pPlaylist->set_filename( filename ); + return pPlaylist; } return NULL; } @@ -95,13 +95,16 @@ Hydrogen* pHydrogen = Hydrogen::get_instance(); Preferences *pPref = Preferences::get_instance(); - if ( pHydrogen->getState() == STATE_PLAYING ) + if ( pHydrogen->getState() == STATE_PLAYING ){ pHydrogen->sequencer_stop(); + } /* Load Song from file */ QString selected = pHydrogen->m_PlayList[ songNumber ].m_hFile; Song *pSong = Song::load( selected ); - if ( ! pSong ) return false; + if ( ! pSong ){ + return false; + } setSelectedSongNr( songNumber ); setActiveSongNumber( songNumber ); @@ -124,8 +127,9 @@ Hydrogen* pHydrogen = Hydrogen::get_instance(); int playlist_size = pHydrogen->m_PlayList.size(); - if ( songNumber > playlist_size - 1 || playlist_size == 0 ) + if ( songNumber > playlist_size - 1 || playlist_size == 0 ){ return; + } /* NOTE: we are in MIDI thread and can't just call loadSong from here :( */ EventQueue::get_instance()->push_event( EVENT_PLAYLIST_LOADSONG, songNumber); @@ -133,24 +137,24 @@ void Playlist::setSelectedSongNr( int songNumber ) { - selectedSongNumber = songNumber; + m_nSelectedSongNumber = songNumber; } int Playlist::getSelectedSongNr() { - return selectedSongNumber; + return m_nSelectedSongNumber; } void Playlist::setActiveSongNumber( int ActiveSongNumber) { - activeSongNumber = ActiveSongNumber ; + m_nActiveSongNumber = ActiveSongNumber ; } int Playlist::getActiveSongNumber() { - return activeSongNumber; + return m_nActiveSongNumber; } void Playlist::execScript( int index) @@ -161,8 +165,9 @@ file = Hydrogen::get_instance()->m_PlayList[ index ].m_hScript; script = Hydrogen::get_instance()->m_PlayList[ index ].m_hScriptEnabled; - if( !QFile( file ).exists() || script == "Script not used") + if( !QFile( file ).exists() || script == "Script not used"){ return; + } int ret = std::system( file.toLocal8Bit() ); diff -Nru hydrogen-0.9.6.1/src/core/src/preferences.cpp hydrogen-0.9.7/src/core/src/preferences.cpp --- hydrogen-0.9.6.1/src/core/src/preferences.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/core/src/preferences.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -61,7 +61,6 @@ Preferences::Preferences() : Object( __class_name ) , demoPath( Filesystem::demos_dir()+"/") - , m_sLastNews( "" ) { __instance = this; INFOLOG( "INIT" ); @@ -80,12 +79,9 @@ //server list std::list sServerList; -// //musicCategories -// std::list m_musicCategories; - //rubberband bpm change queue m_useTheRubberbandBpmChangeEvent = false; - __rubberBandCalcTime = 5; + __rubberBandCalcTime = 5; QString rubberBandCLIPath = getenv( "PATH" ); QStringList rubberBandCLIPathList = rubberBandCLIPath.split(":");//linx use ":" as seperator. maybe windows and osx use other seperators @@ -130,10 +126,8 @@ } - - m_pDefaultUIStyle = new UIStyle(); - m_nDefaultUILayout = UI_LAYOUT_SINGLE_PANE; + m_nDefaultUILayout = UI_LAYOUT_SINGLE_PANE; #ifdef Q_OS_MACX m_sPreferencesFilename = QDir::homePath().append( "/Library/Application Support/Hydrogen/hydrogen.conf" ); @@ -161,7 +155,7 @@ __expandSongItem = true; //SoundLibraryPanel __expandPatternItem = true; //SoundLibraryPanel - __useTimelineBpm = false; // use timeline + __useTimelineBpm = false; // use timeline ///////////////////////////////////////////////////////////////////////// @@ -196,6 +190,7 @@ m_sMidiPortName = QString("None"); m_nMidiChannelFilter = -1; m_bMidiNoteOffIgnore = false; + m_bMidiFixedMapping = false; m_bMidiDiscardNoteAfterAction = false; //___ alsa audio driver properties ___ @@ -228,7 +223,7 @@ // NONE: m_ladspaPathVect; quantizeEvents = true; recordEvents = false; - m_sLastNews = QString("-"); + m_bUseRelativeFilenamesForPlaylists = false; //___ GUI properties ___ m_sQTStyle = "Plastique"; @@ -254,6 +249,10 @@ m_ladspaProperties[2].set(2, 20, 0, 0, false); m_ladspaProperties[3].set(2, 20, 0, 0, false); + m_nColoringMethod = 2; + m_nColoringMethodAuxValue = 213; + + UIStyle* uis = m_pDefaultUIStyle; uis->m_songEditor_backgroundColor = H2RGBColor(95, 101, 117); uis->m_songEditor_alternateRowColor = H2RGBColor(128, 134, 152); @@ -316,8 +315,6 @@ sPreferencesDirectory = m_sPreferencesDirectory; sDataDirectory = QDir::homePath().append( "/.hydrogen/data" ); INFOLOG( "Loading preferences file (USER) [" + sPreferencesFilename + "]" ); - - } // preferences directory exists? @@ -377,19 +374,21 @@ //////// GENERAL /////////// //m_sLadspaPath = LocalFileMng::readXmlString( this, rootNode, "ladspaPath", m_sLadspaPath ); + __playselectedinstrument = LocalFileMng::readXmlBool( rootNode, "instrumentInputMode", __playselectedinstrument ); m_bShowDevelWarning = LocalFileMng::readXmlBool( rootNode, "showDevelWarning", m_bShowDevelWarning ); m_brestoreLastSong = LocalFileMng::readXmlBool( rootNode, "restoreLastSong", m_brestoreLastSong ); m_brestoreLastPlaylist = LocalFileMng::readXmlBool( rootNode, "restoreLastPlaylist", m_brestoreLastPlaylist ); - m_bPatternModePlaysSelected = LocalFileMng::readXmlBool( rootNode, "patternModePlaysSelected", TRUE ); - m_bUseLash = LocalFileMng::readXmlBool( rootNode, "useLash", FALSE ); - __useTimelineBpm = LocalFileMng::readXmlBool( rootNode, "useTimeLine", __useTimelineBpm ); + m_bPatternModePlaysSelected = LocalFileMng::readXmlBool( rootNode, "patternModePlaysSelected", true ); + m_bUseLash = LocalFileMng::readXmlBool( rootNode, "useLash", false ); + __useTimelineBpm = LocalFileMng::readXmlBool( rootNode, "useTimeLine", __useTimelineBpm ); maxBars = LocalFileMng::readXmlInt( rootNode, "maxBars", 400 ); - m_nDefaultUILayout = LocalFileMng::readXmlInt( rootNode, "defaultUILayout", UI_LAYOUT_SINGLE_PANE ); - m_nLastOpenTab = LocalFileMng::readXmlInt( rootNode, "lastOpenTab", 0 ); + m_nDefaultUILayout = LocalFileMng::readXmlInt( rootNode, "defaultUILayout", UI_LAYOUT_SINGLE_PANE ); + m_nLastOpenTab = LocalFileMng::readXmlInt( rootNode, "lastOpenTab", 0 ); + m_bUseRelativeFilenamesForPlaylists = LocalFileMng::readXmlBool( rootNode, "useRelativeFilenamesForPlaylists", false ); //restore the right m_bsetlash value m_bsetLash = m_bUseLash; - m_useTheRubberbandBpmChangeEvent = LocalFileMng::readXmlBool( rootNode, "useTheRubberbandBpmChangeEvent", m_useTheRubberbandBpmChangeEvent ); + m_useTheRubberbandBpmChangeEvent = LocalFileMng::readXmlBool( rootNode, "useTheRubberbandBpmChangeEvent", m_useTheRubberbandBpmChangeEvent ); m_nRecPreDelete = LocalFileMng::readXmlInt( rootNode, "preDelete", 0 ); m_nRecPostDelete = LocalFileMng::readXmlInt( rootNode, "postDelete", 0 ); @@ -456,9 +455,6 @@ } - - m_sLastNews = LocalFileMng::readXmlString( rootNode, "lastNews", "-", true ); - /////////////// AUDIO ENGINE ////////////// QDomNode audioEngineNode = rootNode.firstChildElement( "audio_engine" ); if ( audioEngineNode.isNull() ) { @@ -531,6 +527,8 @@ m_sMidiPortName = LocalFileMng::readXmlString( midiDriverNode, "port_name", "None" ); m_nMidiChannelFilter = LocalFileMng::readXmlInt( midiDriverNode, "channel_filter", -1 ); m_bMidiNoteOffIgnore = LocalFileMng::readXmlBool( midiDriverNode, "ignore_note_off", true ); + m_bMidiDiscardNoteAfterAction = LocalFileMng::readXmlBool( midiDriverNode, "discard_note_after_action", true); + m_bMidiFixedMapping = LocalFileMng::readXmlBool( midiDriverNode, "fixed_mapping", false, true ); } @@ -623,6 +621,11 @@ WARNINGLOG( "UI_Style node not found" ); recreate = true; } + + //SongEditor coloring + m_nColoringMethod = LocalFileMng::readXmlInt( guiNode, "SongEditor_ColoringMethod", 2 ); + m_nColoringMethodAuxValue = LocalFileMng::readXmlInt( guiNode, "SongEditor_ColoringMethodAuxValue", 213 ); + } /////////////// FILES ////////////// @@ -719,7 +722,6 @@ /// void Preferences::savePreferences() { - //string prefDir = QDir::homePath().append("/.hydrogen").toLocal8Bit().constData(); QString filename = m_sPreferencesFilename; INFOLOG( "Saving preferences file: " + filename ); @@ -740,18 +742,22 @@ LocalFileMng::writeXmlString( rootNode, "patternModePlaysSelected", m_bPatternModePlaysSelected ? "true": "false" ); LocalFileMng::writeXmlString( rootNode, "useLash", m_bsetLash ? "true": "false" ); - LocalFileMng::writeXmlString( rootNode, "useTimeLine", __useTimelineBpm ? "true": "false" ); + LocalFileMng::writeXmlString( rootNode, "useTimeLine", __useTimelineBpm ? "true": "false" ); LocalFileMng::writeXmlString( rootNode, "maxBars", QString::number( maxBars ) ); - LocalFileMng::writeXmlString( rootNode, "defaultUILayout", QString::number( m_nDefaultUILayout ) ); - LocalFileMng::writeXmlString( rootNode, "lastOpenTab", QString::number( m_nLastOpenTab ) ); + LocalFileMng::writeXmlString( rootNode, "defaultUILayout", QString::number( m_nDefaultUILayout ) ); + LocalFileMng::writeXmlString( rootNode, "lastOpenTab", QString::number( m_nLastOpenTab ) ); - LocalFileMng::writeXmlString( rootNode, "useTheRubberbandBpmChangeEvent", m_useTheRubberbandBpmChangeEvent ? "true": "false" ); + LocalFileMng::writeXmlString( rootNode, "useTheRubberbandBpmChangeEvent", m_useTheRubberbandBpmChangeEvent ? "true": "false" ); LocalFileMng::writeXmlString( rootNode, "preDelete", QString("%1").arg(m_nRecPreDelete) ); LocalFileMng::writeXmlString( rootNode, "postDelete", QString("%1").arg(m_nRecPostDelete) ); - + LocalFileMng::writeXmlString( rootNode, "useRelativeFilenamesForPlaylists", m_bUseRelativeFilenamesForPlaylists ? "true": "false" ); + + // instrument input mode + LocalFileMng::writeXmlString( rootNode, "instrumentInputMode", __playselectedinstrument ? "true": "false" ); + //show development version warning LocalFileMng::writeXmlString( rootNode, "showDevelWarning", m_bShowDevelWarning ? "true": "false" ); @@ -812,10 +818,6 @@ - - LocalFileMng::writeXmlString( rootNode, "lastNews", m_sLastNews ); - - //---- AUDIO ENGINE ---- QDomNode audioEngineNode = doc.createElement( "audio_engine" ); { @@ -905,6 +907,14 @@ } else { LocalFileMng::writeXmlString( midiDriverNode, "discard_note_after_action", "false" ); } + + if ( m_bMidiFixedMapping ) { + LocalFileMng::writeXmlString( midiDriverNode, "fixed_mapping", "true" ); + INFOLOG("Saving fixed mapping\n"); + } else { + LocalFileMng::writeXmlString( midiDriverNode, "fixed_mapping", "false" ); + INFOLOG("Saving fixed mapping false\n"); + } } audioEngineNode.appendChild( midiDriverNode ); @@ -947,25 +957,26 @@ //beatcounter QString bcMode; - if ( m_bbc == BC_OFF ) { - bcMode = "BC_OFF"; - } else if ( m_bbc == BC_ON ) { - bcMode = "BC_ON"; - } - LocalFileMng::writeXmlString( guiNode, "bc", bcMode ); + + if ( m_bbc == BC_OFF ) { + bcMode = "BC_OFF"; + } else if ( m_bbc == BC_ON ) { + bcMode = "BC_ON"; + } + LocalFileMng::writeXmlString( guiNode, "bc", bcMode ); QString setPlay; - if ( m_mmcsetplay == SET_PLAY_OFF ) { - setPlay = "SET_PLAY_OFF"; - } else if ( m_mmcsetplay == SET_PLAY_ON ) { - setPlay = "SET_PLAY_ON"; - } - LocalFileMng::writeXmlString( guiNode, "setplay", setPlay ); + if ( m_mmcsetplay == SET_PLAY_OFF ) { + setPlay = "SET_PLAY_OFF"; + } else if ( m_mmcsetplay == SET_PLAY_ON ) { + setPlay = "SET_PLAY_ON"; + } + LocalFileMng::writeXmlString( guiNode, "setplay", setPlay ); - LocalFileMng::writeXmlString( guiNode, "countoffset", QString("%1").arg(m_countOffset) ); - LocalFileMng::writeXmlString( guiNode, "playoffset", QString("%1").arg(m_startOffset) ); + LocalFileMng::writeXmlString( guiNode, "countoffset", QString("%1").arg(m_countOffset) ); + LocalFileMng::writeXmlString( guiNode, "playoffset", QString("%1").arg(m_startOffset) ); //~ beatcounter @@ -975,6 +986,11 @@ // User interface style writeUIStyle( guiNode ); + + //SongEditor coloring method + LocalFileMng::writeXmlString( guiNode, "SongEditor_ColoringMethod", QString::number( m_nColoringMethod ) ); + LocalFileMng::writeXmlString( guiNode, "SongEditor_ColoringMethodAuxValue", QString::number( m_nColoringMethodAuxValue ) ); + } rootNode.appendChild( guiNode ); @@ -989,7 +1005,7 @@ rootNode.appendChild( filesNode ); MidiMap * mM = MidiMap::get_instance(); - std::map< QString, MidiAction* > mmcMap = mM->getMMCMap(); + std::map< QString, MidiAction* > mmcMap = mM->getMMCMap(); //---- MidiMap ---- QDomNode midiEventMapNode = doc.createElement( "midiEventMap" ); @@ -1344,23 +1360,6 @@ m_red %= 256; m_green %= 256; m_blue %= 256; - -/* - int nPos = temp.indexOf( ',' ); - QString sRed = temp.substr( 0, nPos ); - temp.erase( 0, nPos + 1 ); - - nPos = temp.find( ',' ); - QString sGreen = temp.substr( 0, nPos ); - temp.erase( 0, nPos + 1 ); - - nPos = temp.find( ',' ); - QString sBlue = temp.substr( 0, nPos ); - - m_red = atoi( sRed.c_str() ); - m_green = atoi( sGreen.c_str() ); - m_blue = atoi( sBlue.c_str() ); -*/ } @@ -1370,9 +1369,6 @@ char tmp[255]; sprintf( tmp, "%d,%d,%d", m_red, m_green, m_blue ); - //string sRes = to_string( m_red ) + "," + to_string( m_green ) + "," + to_string( m_blue ); -// return sRes; - return QString( tmp ); } diff -Nru hydrogen-0.9.6.1/src/core/src/sampler/sampler.cpp hydrogen-0.9.7/src/core/src/sampler/sampler.cpp --- hydrogen-0.9.6.1/src/core/src/sampler/sampler.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/core/src/sampler/sampler.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -22,6 +22,7 @@ #include #include +#include #include #include @@ -30,7 +31,9 @@ #include #include #include +#include #include +#include #include #include #include @@ -67,9 +70,12 @@ // instrument used in file preview QString sEmptySampleFilename = Filesystem::empty_sample(); __preview_instrument = new Instrument( EMPTY_INSTR_ID, sEmptySampleFilename ); + __preview_instrument->set_is_preview_instrument(true); __preview_instrument->set_volume( 0.8 ); - __preview_instrument->set_layer( new InstrumentLayer( Sample::load( sEmptySampleFilename ) ), 0 ); - + InstrumentLayer* pLayer = new InstrumentLayer( Sample::load( sEmptySampleFilename ) ); + InstrumentComponent* pComponent = new InstrumentComponent( 0 ); + pComponent->set_layer( pLayer, 0 ); + __preview_instrument->get_components()->push_back( pComponent ); } @@ -106,14 +112,18 @@ delete oldNote; // FIXME: send note-off instead of removing the note from the list? } + for (std::vector::iterator it = pSong->get_components()->begin() ; it != pSong->get_components()->end(); ++it) { + DrumkitComponent* component = *it; + component->reset_outs(nFrames); + } + // eseguo tutte le note nella lista di note in esecuzione unsigned i = 0; Note* pNote; while ( i < __playing_notes_queue.size() ) { pNote = __playing_notes_queue[ i ]; // recupero una nuova nota - unsigned res = __render_note( pNote, nFrames, pSong ); - if ( res == 1 ) { // la nota e' finita + if ( __render_note( pNote, nFrames, pSong ) ) { // la nota e' finita __playing_notes_queue.erase( __playing_notes_queue.begin() + i ); pNote->get_instrument()->dequeue(); __queuedNoteOffs.push_back( pNote ); @@ -213,9 +223,9 @@ /// Render a note -/// Return 0: the note is not ended -/// Return 1: the note is ended -unsigned Sampler::__render_note( Note* pNote, unsigned nBufferSize, Song* pSong ) +/// Return false: the note is not ended +/// Return true: the note is ended +bool Sampler::__render_note( Note* pNote, unsigned nBufferSize, Song* pSong ) { //infoLog( "[renderNote] instr: " + pNote->getInstrument()->m_sName ); assert( pSong ); @@ -236,130 +246,278 @@ return 1; } - float fLayerGain = 1.0; - float fLayerPitch = 0.0; + bool nReturnValues [pInstr->get_components()->size()]; + int nReturnValueIndex = 0; + int nAlreadySelectedLayer = -1; + + for (std::vector::iterator it = pInstr->get_components()->begin() ; it !=pInstr->get_components()->end(); ++it) { + nReturnValues[nReturnValueIndex] = false; + InstrumentComponent *pCompo = *it; + DrumkitComponent* pMainCompo = pEngine->getSong()->get_component( pCompo->get_drumkit_componentID() ); + + if( pNote->get_specific_compo_id() != -1 && pNote->get_specific_compo_id() != pCompo->get_drumkit_componentID() ) + continue; + + if( pInstr->is_preview_instrument() + || pInstr->is_metronome_instrument()){ + pMainCompo = pEngine->getSong()->get_components()->front(); + } else { + pMainCompo = pEngine->getSong()->get_component( pCompo->get_drumkit_componentID() ); + } + + assert(pMainCompo); + + float fLayerGain = 1.0; + float fLayerPitch = 0.0; + + // scelgo il sample da usare in base alla velocity + Sample *pSample = NULL; + SelectedLayerInfo *pSelectedLayer = pNote->get_layer_selected( pCompo->get_drumkit_componentID() ); + + if ( !pSelectedLayer ) { + QString dummy = QString( "NULL Layer Informationfor instrument %1. Component: %2" ).arg( pInstr->get_name() ).arg( pCompo->get_drumkit_componentID() ); + WARNINGLOG( dummy ); + nReturnValues[nReturnValueIndex] = true; + continue; + } - // scelgo il sample da usare in base alla velocity - Sample *pSample = NULL; - for ( unsigned nLayer = 0; nLayer < MAX_LAYERS; ++nLayer ) { - InstrumentLayer *pLayer = pInstr->get_layer( nLayer ); - if ( pLayer == NULL ) continue; + if( pSelectedLayer->SelectedLayer != -1 ) { + InstrumentLayer *pLayer = pCompo->get_layer( pSelectedLayer->SelectedLayer ); - if ( ( pNote->get_velocity() >= pLayer->get_start_velocity() ) && ( pNote->get_velocity() <= pLayer->get_end_velocity() ) ) { pSample = pLayer->get_sample(); fLayerGain = pLayer->get_gain(); fLayerPitch = pLayer->get_pitch(); - break; } - } - if ( !pSample ) { - QString dummy = QString( "NULL sample for instrument %1. Note velocity: %2" ).arg( pInstr->get_name() ).arg( pNote->get_velocity() ); - WARNINGLOG( dummy ); - return 1; - } + else { + switch ( pInstr->sample_selection_alg() ) { + case Instrument::VELOCITY: + for ( unsigned nLayer = 0; nLayer < MAX_LAYERS; ++nLayer ) { + InstrumentLayer *pLayer = pCompo->get_layer( nLayer ); + if ( pLayer == NULL ) continue; + + if ( ( pNote->get_velocity() >= pLayer->get_start_velocity() ) && ( pNote->get_velocity() <= pLayer->get_end_velocity() ) ) { + pSelectedLayer->SelectedLayer = nLayer; + + pSample = pLayer->get_sample(); + fLayerGain = pLayer->get_gain(); + fLayerPitch = pLayer->get_pitch(); + break; + } + } + break; - if ( pNote->get_sample_position() >= pSample->get_frames() ) { - WARNINGLOG( "sample position out of bounds. The layer has been resized during note play?" ); - return 1; - } + case Instrument::RANDOM: + if( nAlreadySelectedLayer != -1 ) { + InstrumentLayer *pLayer = pCompo->get_layer( nAlreadySelectedLayer ); + if ( pLayer != NULL ) { + pSelectedLayer->SelectedLayer = nAlreadySelectedLayer; + + pSample = pLayer->get_sample(); + fLayerGain = pLayer->get_gain(); + fLayerPitch = pLayer->get_pitch(); + } + } + if( pSample == NULL ) { + int __possibleIndex[MAX_LAYERS]; + int __poundSamples = 0; + for ( unsigned nLayer = 0; nLayer < MAX_LAYERS; ++nLayer ) { + InstrumentLayer *pLayer = pCompo->get_layer( nLayer ); + if ( pLayer == NULL ) continue; + + if ( ( pNote->get_velocity() >= pLayer->get_start_velocity() ) && ( pNote->get_velocity() <= pLayer->get_end_velocity() ) ) { + __possibleIndex[__poundSamples] = nLayer; + __poundSamples++; + } + } + + if( __poundSamples > 0 ) { + nAlreadySelectedLayer = __possibleIndex[rand() % __poundSamples]; + pSelectedLayer->SelectedLayer = nAlreadySelectedLayer; + + InstrumentLayer *pLayer = pCompo->get_layer( nAlreadySelectedLayer ); + + pSample = pLayer->get_sample(); + fLayerGain = pLayer->get_gain(); + fLayerPitch = pLayer->get_pitch(); + } + } + break; - int noteStartInFrames = ( int ) ( pNote->get_position() * audio_output->m_transport.m_nTickSize ) + pNote->get_humanize_delay(); + case Instrument::ROUND_ROBIN: + if( nAlreadySelectedLayer != -1 ) { + InstrumentLayer *pLayer = pCompo->get_layer( nAlreadySelectedLayer ); + if ( pLayer != NULL ) { + pSelectedLayer->SelectedLayer = nAlreadySelectedLayer; + + pSample = pLayer->get_sample(); + fLayerGain = pLayer->get_gain(); + fLayerPitch = pLayer->get_pitch(); + } + } + if( !pSample ) { + int __possibleIndex[MAX_LAYERS]; + int __foundSamples = 0; + float __roundRobinID; + for ( unsigned nLayer = 0; nLayer < MAX_LAYERS; ++nLayer ) { + InstrumentLayer *pLayer = pCompo->get_layer( nLayer ); + if ( pLayer == NULL ) continue; + + if ( ( pNote->get_velocity() >= pLayer->get_start_velocity() ) && ( pNote->get_velocity() <= pLayer->get_end_velocity() ) ) { + __possibleIndex[__foundSamples] = nLayer; + __roundRobinID = pLayer->get_start_velocity(); + __foundSamples++; + } + } - int nInitialSilence = 0; - if ( noteStartInFrames > ( int ) nFramepos ) { // scrivo silenzio prima dell'inizio della nota - nInitialSilence = noteStartInFrames - nFramepos; - int nFrames = nBufferSize - nInitialSilence; - if ( nFrames < 0 ) { - int noteStartInFramesNoHumanize = ( int )pNote->get_position() * audio_output->m_transport.m_nTickSize; - if ( noteStartInFramesNoHumanize > ( int )( nFramepos + nBufferSize ) ) { - // this note is not valid. it's in the future...let's skip it.... - ERRORLOG( QString( "Note pos in the future?? Current frames: %1, note frame pos: %2" ).arg( nFramepos ).arg(noteStartInFramesNoHumanize ) ); - //pNote->dumpInfo(); - return 1; - } - // delay note execution - //INFOLOG( "Delaying note execution. noteStartInFrames: " + to_string( noteStartInFrames ) + ", nFramePos: " + to_string( nFramepos ) ); - return 0; + if( __foundSamples > 0 ) { + __roundRobinID = pInstr->get_id() * 10 + __roundRobinID; + int p_indexToUse = pSong->get_latest_round_robin(__roundRobinID)+1; + if( p_indexToUse > __foundSamples - 1) + p_indexToUse = 0; + + pSong->set_latest_round_robin(__roundRobinID, p_indexToUse); + nAlreadySelectedLayer = __possibleIndex[p_indexToUse]; + + pSelectedLayer->SelectedLayer = nAlreadySelectedLayer; + + InstrumentLayer *pLayer = pCompo->get_layer( nAlreadySelectedLayer ); + pSample = pLayer->get_sample(); + fLayerGain = pLayer->get_gain(); + fLayerPitch = pLayer->get_pitch(); + } + } + break; + } + } + if ( !pSample ) { + QString dummy = QString( "NULL sample for instrument %1. Note velocity: %2" ).arg( pInstr->get_name() ).arg( pNote->get_velocity() ); + WARNINGLOG( dummy ); + nReturnValues[nReturnValueIndex] = true; + continue; + } + + if ( pSelectedLayer->SamplePosition >= pSample->get_frames() ) { + WARNINGLOG( "sample position out of bounds. The layer has been resized during note play?" ); + nReturnValues[nReturnValueIndex] = true; + continue; + } + + int noteStartInFrames = ( int ) ( pNote->get_position() * audio_output->m_transport.m_nTickSize ) + pNote->get_humanize_delay(); + + int nInitialSilence = 0; + if ( noteStartInFrames > ( int ) nFramepos ) { // scrivo silenzio prima dell'inizio della nota + nInitialSilence = noteStartInFrames - nFramepos; + int nFrames = nBufferSize - nInitialSilence; + if ( nFrames < 0 ) { + int noteStartInFramesNoHumanize = ( int )pNote->get_position() * audio_output->m_transport.m_nTickSize; + if ( noteStartInFramesNoHumanize > ( int )( nFramepos + nBufferSize ) ) { + // this note is not valid. it's in the future...let's skip it.... + ERRORLOG( QString( "Note pos in the future?? Current frames: %1, note frame pos: %2" ).arg( nFramepos ).arg(noteStartInFramesNoHumanize ) ); + //pNote->dumpInfo(); + nReturnValues[nReturnValueIndex] = true; + continue; + } + // delay note execution + //INFOLOG( "Delaying note execution. noteStartInFrames: " + to_string( noteStartInFrames ) + ", nFramePos: " + to_string( nFramepos ) ); + //return 0; + continue; + } } - } - float cost_L = 1.0f; - float cost_R = 1.0f; - float cost_track_L = 1.0f; - float cost_track_R = 1.0f; - - if ( pInstr->is_muted() || pSong->__is_muted ) { // is instrument muted? - cost_L = 0.0; - cost_R = 0.0; - if ( Preferences::get_instance()->m_nJackTrackOutputMode == 0 ) { - // Post-Fader - cost_track_L = 0.0; - cost_track_R = 0.0; - } - - } else { // Precompute some values... - cost_L = cost_L * pNote->get_velocity(); // note velocity - cost_L = cost_L * pNote->get_pan_l(); // note pan - cost_L = cost_L * fLayerGain; // layer gain - cost_L = cost_L * pInstr->get_pan_l(); // instrument pan - cost_L = cost_L * pInstr->get_gain(); // instrument gain + float cost_L = 1.0f; + float cost_R = 1.0f; + float cost_track_L = 1.0f; + float cost_track_R = 1.0f; + + assert(pMainCompo); + + if ( pInstr->is_muted() || pSong->__is_muted || pMainCompo->is_muted() ) { // is instrument muted? + cost_L = 0.0; + cost_R = 0.0; + if ( Preferences::get_instance()->m_nJackTrackOutputMode == 0 ) { + // Post-Fader + cost_track_L = 0.0; + cost_track_R = 0.0; + } - cost_L = cost_L * pInstr->get_volume(); // instrument volume - if ( Preferences::get_instance()->m_nJackTrackOutputMode == 0 ) { + } else { // Precompute some values... + if ( pInstr->get_apply_velocity() ) { + cost_L = cost_L * pNote->get_velocity(); // note velocity + cost_R = cost_R * pNote->get_velocity(); // note velocity + } + cost_L = cost_L * pNote->get_pan_l(); // note pan + cost_L = cost_L * fLayerGain; // layer gain + cost_L = cost_L * pInstr->get_pan_l(); // instrument pan + cost_L = cost_L * pInstr->get_gain(); // instrument gain + + cost_L = cost_L * pCompo->get_gain(); // Component gain + cost_L = cost_L * pMainCompo->get_volume(); // Component volument + + cost_L = cost_L * pInstr->get_volume(); // instrument volume + if ( Preferences::get_instance()->m_nJackTrackOutputMode == 0 ) { // Post-Fader cost_track_L = cost_L * 2; - } - cost_L = cost_L * pSong->get_volume(); // song volume - cost_L = cost_L * 2; // max pan is 0.5 + } + cost_L = cost_L * pSong->get_volume(); // song volume + cost_L = cost_L * 2; // max pan is 0.5 + + cost_R = cost_R * pNote->get_pan_r(); // note pan + cost_R = cost_R * fLayerGain; // layer gain + cost_R = cost_R * pInstr->get_pan_r(); // instrument pan + cost_R = cost_R * pInstr->get_gain(); // instrument gain + cost_R = cost_R * pCompo->get_gain(); // Component gain + cost_R = cost_R * pMainCompo->get_volume(); // Component volument - cost_R = cost_R * pNote->get_velocity(); // note velocity - cost_R = cost_R * pNote->get_pan_r(); // note pan - cost_R = cost_R * fLayerGain; // layer gain - cost_R = cost_R * pInstr->get_pan_r(); // instrument pan - cost_R = cost_R * pInstr->get_gain(); // instrument gain - - cost_R = cost_R * pInstr->get_volume(); // instrument volume - if ( Preferences::get_instance()->m_nJackTrackOutputMode == 0 ) { - // Post-Fader + cost_R = cost_R * pInstr->get_volume(); // instrument volume + if ( Preferences::get_instance()->m_nJackTrackOutputMode == 0 ) { + // Post-Fader cost_track_R = cost_R * 2; + } + cost_R = cost_R * pSong->get_volume(); // song pan + cost_R = cost_R * 2; // max pan is 0.5 } - cost_R = cost_R * pSong->get_volume(); // song pan - cost_R = cost_R * 2; // max pan is 0.5 - } - // direct track outputs only use velocity - if ( Preferences::get_instance()->m_nJackTrackOutputMode == 1 ) { - cost_track_L = cost_track_L * pNote->get_velocity(); - cost_track_L = cost_track_L * fLayerGain; - cost_track_R = cost_track_L; - } + // direct track outputs only use velocity + if ( Preferences::get_instance()->m_nJackTrackOutputMode == 1 ) { + cost_track_L = cost_track_L * pNote->get_velocity(); + cost_track_L = cost_track_L * fLayerGain; + cost_track_R = cost_track_L; + } - // Se non devo fare resample (drumkit) posso evitare di utilizzare i float e gestire il tutto in - // maniera ottimizzata - // constant^12 = 2, so constant = 2^(1/12) = 1.059463. - // float nStep = 1.0;1.0594630943593 + // Se non devo fare resample (drumkit) posso evitare di utilizzare i float e gestire il tutto in + // maniera ottimizzata + // constant^12 = 2, so constant = 2^(1/12) = 1.059463. + // float nStep = 1.0;1.0594630943593 - float fTotalPitch = pNote->get_total_pitch() + fLayerPitch; + float fTotalPitch = pNote->get_total_pitch() + fLayerPitch; - //_INFOLOG( "total pitch: " + to_string( fTotalPitch ) ); - if( ( int )pNote->get_sample_position() == 0 ) - { - if( Hydrogen::get_instance()->getMidiOutput() != NULL ){ + //_INFOLOG( "total pitch: " + to_string( fTotalPitch ) ); + if( ( int )pSelectedLayer->SamplePosition == 0 ) + { + if( Hydrogen::get_instance()->getMidiOutput() != NULL ){ Hydrogen::get_instance()->getMidiOutput()->handleQueueNote( pNote ); + } } - } - if ( fTotalPitch == 0.0 && pSample->get_sample_rate() == audio_output->getSampleRate() ) { // NO RESAMPLE - return __render_note_no_resample( pSample, pNote, nBufferSize, nInitialSilence, cost_L, cost_R, cost_track_L, cost_track_R, pSong ); - } else { // RESAMPLE - return __render_note_resample( pSample, pNote, nBufferSize, nInitialSilence, cost_L, cost_R, cost_track_L, cost_track_R, fLayerPitch, pSong ); - } + if ( fTotalPitch == 0.0 && pSample->get_sample_rate() == audio_output->getSampleRate() ) // NO RESAMPLE + nReturnValues[nReturnValueIndex] = __render_note_no_resample( pSample, pNote, pSelectedLayer, pCompo, pMainCompo, nBufferSize, nInitialSilence, cost_L, cost_R, cost_track_L, cost_track_R, pSong ); + else // RESAMPLE + nReturnValues[nReturnValueIndex] = __render_note_resample( pSample, pNote, pSelectedLayer, pCompo, pMainCompo, nBufferSize, nInitialSilence, cost_L, cost_R, cost_track_L, cost_track_R, fLayerPitch, pSong ); + + nReturnValueIndex++; + } + for ( unsigned i = 0 ; i < pInstr->get_components()->size() ; i++ ) + if ( !nReturnValues[i] ) return false; + return true; } -int Sampler::__render_note_no_resample( +bool Sampler::__render_note_no_resample( Sample *pSample, Note *pNote, + SelectedLayerInfo *pSelectedLayerInfo, + InstrumentComponent *pCompo, + DrumkitComponent *pDrumCompo, int nBufferSize, int nInitialSilence, float cost_L, @@ -369,30 +527,29 @@ Song* pSong ) { - AudioOutput* audio_output = Hydrogen::get_instance()->getAudioOutput(); - int retValue = 1; // the note is ended + AudioOutput* pAudioOutput = Hydrogen::get_instance()->getAudioOutput(); + bool retValue = true; // the note is ended int nNoteLength = -1; if ( pNote->get_length() != -1 ) { - nNoteLength = ( int )( pNote->get_length() * audio_output->m_transport.m_nTickSize ); + nNoteLength = ( int )( pNote->get_length() * pAudioOutput->m_transport.m_nTickSize ); } - int nAvail_bytes = pSample->get_frames() - ( int )pNote->get_sample_position(); // verifico il numero di frame disponibili ancora da eseguire + int nAvail_bytes = pSample->get_frames() - ( int )pSelectedLayerInfo->SamplePosition; // verifico il numero di frame disponibili ancora da eseguire if ( nAvail_bytes > nBufferSize - nInitialSilence ) { // il sample e' piu' grande del buffersize // imposto il numero dei bytes disponibili uguale al buffersize nAvail_bytes = nBufferSize - nInitialSilence; - retValue = 0; // the note is not ended yet + retValue = false; // the note is not ended yet } //ADSR *pADSR = pNote->m_pADSR; int nInitialBufferPos = nInitialSilence; - int nInitialSamplePos = ( int )pNote->get_sample_position(); + int nInitialSamplePos = ( int )pSelectedLayerInfo->SamplePosition; int nSamplePos = nInitialSamplePos; int nTimes = nInitialBufferPos + nAvail_bytes; - int nInstrument = pSong->get_instrument_list()->index( pNote->get_instrument() ); float *pSample_data_L = pSample->get_data_l(); float *pSample_data_R = pSample->get_data_r(); @@ -404,30 +561,23 @@ float fVal_L; float fVal_R; - /* - * nInstrument could be -1 if the instrument is not found in the current drumset. - * This happens when someone is using the prelistening function of the soundlibrary. - */ - - if( nInstrument < 0 ) { - nInstrument = 0; - } #ifdef H2CORE_HAVE_JACK - JackOutput* jao = 0; - float *track_out_L = 0; - float *track_out_R = 0; - if( audio_output->has_track_outs() - && (jao = dynamic_cast(audio_output)) ) { - track_out_L = jao->getTrackOut_L( nInstrument ); - track_out_R = jao->getTrackOut_R( nInstrument ); + JackOutput* pJackOutput = 0; + float * pTrackOutL = 0; + float * pTrackOutR = 0; + + if( pAudioOutput->has_track_outs() + && (pJackOutput = dynamic_cast(pAudioOutput)) ) { + pTrackOutL = pJackOutput->getTrackOut_L( pNote->get_instrument(), pCompo ); + pTrackOutR = pJackOutput->getTrackOut_R( pNote->get_instrument(), pCompo ); } #endif for ( int nBufferPos = nInitialBufferPos; nBufferPos < nTimes; ++nBufferPos ) { - if ( ( nNoteLength != -1 ) && ( nNoteLength <= pNote->get_sample_position() ) ) { + if ( ( nNoteLength != -1 ) && ( nNoteLength <= pSelectedLayerInfo->SamplePosition ) ) { if ( pNote->get_adsr()->release() == 0 ) { - retValue = 1; // the note is ended + retValue = true; // the note is ended } } @@ -441,11 +591,11 @@ } #ifdef H2CORE_HAVE_JACK - if( track_out_L ) { - track_out_L[nBufferPos] += fVal_L * cost_track_L; + if( pTrackOutL ) { + pTrackOutL[nBufferPos] += fVal_L * cost_track_L; } - if( track_out_R ) { - track_out_R[nBufferPos] += fVal_R * cost_track_R; + if( pTrackOutR ) { + pTrackOutR[nBufferPos] += fVal_R * cost_track_R; } #endif @@ -460,13 +610,15 @@ fInstrPeak_R = fVal_R; } + pDrumCompo->set_outs( nBufferPos, fVal_L, fVal_R ); + // to main mix __main_out_L[nBufferPos] += fVal_L; __main_out_R[nBufferPos] += fVal_R; ++nSamplePos; } - pNote->update_sample_position( nAvail_bytes ); + pSelectedLayerInfo->SamplePosition += nAvail_bytes; pNote->get_instrument()->set_peak_l( fInstrPeak_L ); pNote->get_instrument()->set_peak_r( fInstrPeak_R ); @@ -484,8 +636,6 @@ float *pBuf_L = pFX->m_pBuffer_L; float *pBuf_R = pFX->m_pBuffer_R; -// float fFXCost_L = cost_L * fLevel; -// float fFXCost_R = cost_R * fLevel; float fFXCost_L = fLevel * masterVol; float fFXCost_R = fLevel * masterVol; @@ -507,9 +657,12 @@ -int Sampler::__render_note_resample( +bool Sampler::__render_note_resample( Sample *pSample, Note *pNote, + SelectedLayerInfo *pSelectedLayerInfo, + InstrumentComponent *pCompo, + DrumkitComponent *pDrumCompo, int nBufferSize, int nInitialSilence, float cost_L, @@ -520,35 +673,35 @@ Song* pSong ) { - AudioOutput* audio_output = Hydrogen::get_instance()->getAudioOutput(); + AudioOutput* pAudioOutput = Hydrogen::get_instance()->getAudioOutput(); + int nNoteLength = -1; if ( pNote->get_length() != -1 ) { - nNoteLength = ( int )( pNote->get_length() * audio_output->m_transport.m_nTickSize ); + nNoteLength = ( int )( pNote->get_length() * pAudioOutput->m_transport.m_nTickSize ); } float fNotePitch = pNote->get_total_pitch() + fLayerPitch; float fStep = pow( 1.0594630943593, ( double )fNotePitch ); // _ERRORLOG( QString("pitch: %1, step: %2" ).arg(fNotePitch).arg( fStep) ); - fStep *= ( float )pSample->get_sample_rate() / audio_output->getSampleRate(); // Adjust for audio driver sample rate + fStep *= ( float )pSample->get_sample_rate() / pAudioOutput->getSampleRate(); // Adjust for audio driver sample rate // verifico il numero di frame disponibili ancora da eseguire - int nAvail_bytes = ( int )( ( float )( pSample->get_frames() - pNote->get_sample_position() ) / fStep ); + int nAvail_bytes = ( int )( ( float )( pSample->get_frames() - pSelectedLayerInfo->SamplePosition ) / fStep ); - int retValue = 1; // the note is ended + bool retValue = true; // the note is ended if ( nAvail_bytes > nBufferSize - nInitialSilence ) { // il sample e' piu' grande del buffersize // imposto il numero dei bytes disponibili uguale al buffersize nAvail_bytes = nBufferSize - nInitialSilence; - retValue = 0; // the note is not ended yet + retValue = false; // the note is not ended yet } // ADSR *pADSR = pNote->m_pADSR; int nInitialBufferPos = nInitialSilence; - float fInitialSamplePos = pNote->get_sample_position(); - double fSamplePos = pNote->get_sample_position(); + //float fInitialSamplePos = pNote->get_sample_position( pCompo->get_drumkit_componentID() ); + double fSamplePos = pSelectedLayerInfo->SamplePosition; int nTimes = nInitialBufferPos + nAvail_bytes; - int nInstrument = pSong->get_instrument_list()->index( pNote->get_instrument() ); float *pSample_data_L = pSample->get_data_l(); float *pSample_data_R = pSample->get_data_r(); @@ -561,28 +714,21 @@ float fVal_R; int nSampleFrames = pSample->get_frames(); - /* - * nInstrument could be -1 if the instrument is not found in the current drumset. - * This happens when someone is using the prelistening function of the soundlibrary. - */ - - if( nInstrument < 0 ) { - nInstrument = 0; - } #ifdef H2CORE_HAVE_JACK - JackOutput* jao = 0; - float *track_out_L = 0; - float *track_out_R = 0; - if( audio_output->has_track_outs() - && (jao = dynamic_cast(audio_output)) ) { - track_out_L = jao->getTrackOut_L( nInstrument ); - track_out_R = jao->getTrackOut_R( nInstrument ); + JackOutput* pJackOutput = 0; + float * pTrackOutL = 0; + float * pTrackOutR = 0; + + if( pAudioOutput->has_track_outs() + && (pJackOutput = dynamic_cast(pAudioOutput)) ) { + pTrackOutL = pJackOutput->getTrackOut_L( pNote->get_instrument(), pCompo ); + pTrackOutR = pJackOutput->getTrackOut_R( pNote->get_instrument(), pCompo ); } #endif for ( int nBufferPos = nInitialBufferPos; nBufferPos < nTimes; ++nBufferPos ) { - if ( ( nNoteLength != -1 ) && ( nNoteLength <= pNote->get_sample_position() ) ) { + if ( ( nNoteLength != -1 ) && ( nNoteLength <= pSelectedLayerInfo->SamplePosition ) ) { if ( pNote->get_adsr()->release() == 0 ) { retValue = 1; // the note is ended } @@ -646,11 +792,11 @@ #ifdef H2CORE_HAVE_JACK - if( track_out_L ) { - track_out_L[nBufferPos] += fVal_L * cost_track_L; + if( pTrackOutL ) { + pTrackOutL[nBufferPos] += fVal_L * cost_track_L; } - if( track_out_R ) { - track_out_R[nBufferPos] += fVal_R * cost_track_R; + if( pTrackOutR ) { + pTrackOutR[nBufferPos] += fVal_R * cost_track_R; } #endif @@ -665,13 +811,15 @@ fInstrPeak_R = fVal_R; } + pDrumCompo->set_outs( nBufferPos, fVal_L, fVal_R ); + // to main mix __main_out_L[nBufferPos] += fVal_L; __main_out_R[nBufferPos] += fVal_R; fSamplePos += fStep; } - pNote->update_sample_position( nAvail_bytes * fStep ); + pSelectedLayerInfo->SamplePosition += nAvail_bytes * fStep; pNote->get_instrument()->set_peak_l( fInstrPeak_L ); pNote->get_instrument()->set_peak_r( fInstrPeak_R ); @@ -695,7 +843,7 @@ float fFXCost_R = fLevel * masterVol; int nBufferPos = nInitialBufferPos; - float fSamplePos = fInitialSamplePos; + float fSamplePos = pSelectedLayerInfo->SamplePosition; for ( int i = 0; i < nAvail_bytes; ++i ) { int nSamplePos = ( int )fSamplePos; double fDiff = fSamplePos - nSamplePos; @@ -723,8 +871,6 @@ case LINEAR: fVal_L = pSample_data_L[nSamplePos] * (1 - fDiff ) + pSample_data_L[nSamplePos + 1] * fDiff; fVal_R = pSample_data_R[nSamplePos] * (1 - fDiff ) + pSample_data_R[nSamplePos + 1] * fDiff; - //fVal_L = linear_Interpolate( pSample_data_L[nSamplePos], pSample_data_L[nSamplePos + 1], fDiff); - //fVal_R = linear_Interpolate( pSample_data_R[nSamplePos], pSample_data_R[nSamplePos + 1], fDiff); break; case COSINE: fVal_L = cosine_Interpolate( pSample_data_L[nSamplePos], pSample_data_L[nSamplePos + 1], fDiff); @@ -743,10 +889,6 @@ fVal_R = hermite_Interpolate( pSample_data_R[ nSamplePos -1], pSample_data_R[nSamplePos], pSample_data_R[nSamplePos + 1], last_r, fDiff); break; } - // methode Interpolate produce an extra function call and eat much more time here. - // so i deside to code the switch direct in the resampler methode - //fVal_L = Interpolate( pSample_data_L[ nSamplePos -1], pSample_data_L[nSamplePos], pSample_data_L[nSamplePos + 1], pSample_data_L[nSamplePos + 2] ,fDiff); - //fVal_L = Interpolate( pSample_data_R[ nSamplePos -1], pSample_data_R[nSamplePos], pSample_data_R[nSamplePos + 1], pSample_data_R[nSamplePos + 2] ,fDiff); } pBuf_L[ nBufferPos ] += fVal_L * fFXCost_L; @@ -764,14 +906,6 @@ void Sampler::stop_playing_notes( Instrument* instrument ) { - /* - // send a note-off event to all notes present in the playing note queue - for ( int i = 0; i < __playing_notes_queue.size(); ++i ) { - Note *pNote = __playing_notes_queue[ i ]; - pNote->m_pADSR->release(); - } - */ - if ( instrument ) { // stop all notes using this instrument for ( unsigned i = 0; i < __playing_notes_queue.size(); ) { Note *pNote = __playing_notes_queue[ i ]; @@ -801,16 +935,20 @@ { AudioEngine::get_instance()->lock( RIGHT_HERE ); - InstrumentLayer *pLayer = __preview_instrument->get_layer( 0 ); + for (std::vector::iterator it = __preview_instrument->get_components()->begin() ; it != __preview_instrument->get_components()->end(); ++it) { + InstrumentComponent* pComponent = *it; + InstrumentLayer *pLayer = pComponent->get_layer( 0 ); - Sample *pOldSample = pLayer->get_sample(); - pLayer->set_sample( sample ); - Note *previewNote = new Note( __preview_instrument, 0, 1.0, 0.5, 0.5, length, 0 ); + Sample *pOldSample = pLayer->get_sample(); + pLayer->set_sample( sample ); - stop_playing_notes( __preview_instrument ); - note_on( previewNote ); - delete pOldSample; + Note *pPreviewNote = new Note( __preview_instrument, 0, 1.0, 0.5, 0.5, length, 0 ); + + stop_playing_notes( __preview_instrument ); + note_on( pPreviewNote ); + delete pOldSample; + } AudioEngine::get_instance()->unlock(); } @@ -819,19 +957,20 @@ void Sampler::preview_instrument( Instrument* instr ) { - Instrument * old_preview; + Instrument * pOldPreview; AudioEngine::get_instance()->lock( RIGHT_HERE ); stop_playing_notes( __preview_instrument ); - old_preview = __preview_instrument; + pOldPreview = __preview_instrument; __preview_instrument = instr; + instr->set_is_preview_instrument(true); - Note *previewNote = new Note( __preview_instrument, 0, 1.0, 0.5, 0.5, MAX_NOTES, 0 ); + Note *pPreviewNote = new Note( __preview_instrument, 0, 1.0, 0.5, 0.5, MAX_NOTES, 0 ); - note_on( previewNote ); // exclusive note + note_on( pPreviewNote ); // exclusive note AudioEngine::get_instance()->unlock(); - delete old_preview; + delete pOldPreview; } @@ -840,35 +979,35 @@ { if ( instrument ) { // stop all notes using this instrument Hydrogen *pEngine = Hydrogen::get_instance(); - Song* mSong = pEngine->getSong(); + Song* pSong = pEngine->getSong(); int selectedpattern = pEngine->__get_selected_PatterNumber(); - Pattern* currentPattern = NULL; + Pattern* pCurrentPattern = NULL; - if ( mSong->get_mode() == Song::PATTERN_MODE || + if ( pSong->get_mode() == Song::PATTERN_MODE || ( pEngine->getState() != STATE_PLAYING )){ - PatternList *pPatternList = mSong->get_pattern_list(); + PatternList *pPatternList = pSong->get_pattern_list(); if ( ( selectedpattern != -1 ) && ( selectedpattern < ( int )pPatternList->size() ) ) { - currentPattern = pPatternList->get( selectedpattern ); + pCurrentPattern = pPatternList->get( selectedpattern ); } }else { - std::vector *pColumns = mSong->get_pattern_group_vector(); + std::vector *pColumns = pSong->get_pattern_group_vector(); // Pattern *pPattern = NULL; int pos = pEngine->getPatternPos() +1; for ( int i = 0; i < pos; ++i ) { PatternList *pColumn = ( *pColumns )[i]; - currentPattern = pColumn->get( 0 ); + pCurrentPattern = pColumn->get( 0 ); } } - if ( currentPattern ) { - int patternsize = currentPattern->get_length(); + if ( pCurrentPattern ) { + int patternsize = pCurrentPattern->get_length(); - for ( unsigned nNote = 0; nNote < currentPattern->get_length(); nNote++ ) { - const Pattern::notes_t* notes = currentPattern->get_notes(); + for ( unsigned nNote = 0; nNote < pCurrentPattern->get_length(); nNote++ ) { + const Pattern::notes_t* notes = pCurrentPattern->get_notes(); FOREACH_NOTE_CST_IT_BOUND(notes,it,nNote) { Note *pNote = it->second; if ( pNote!=NULL ) { @@ -880,7 +1019,7 @@ if ( ticks > patternsize ) ticks = patternsize - noteOnTick; pNote->set_length( ticks ); - Hydrogen::get_instance()->getSong()->__is_modified = true; + Hydrogen::get_instance()->getSong()->set_is_modified( true ); AudioEngine::get_instance()->unlock(); // unlock the audio engine } }else @@ -891,7 +1030,7 @@ if ( ticks > patternsize ) ticks = patternsize - noteOnTick; pNote->set_length( ticks ); - Hydrogen::get_instance()->getSong()->__is_modified = true; + Hydrogen::get_instance()->getSong()->set_is_modified( true ); AudioEngine::get_instance()->unlock(); // unlock the audio engine } } @@ -900,6 +1039,7 @@ } } } + EventQueue::get_instance()->push_event( EVENT_PATTERN_MODIFIED, -1 ); } diff -Nru hydrogen-0.9.6.1/src/core/src/smf/smf.cpp hydrogen-0.9.7/src/core/src/smf/smf.cpp --- hydrogen-0.9.6.1/src/core/src/smf/smf.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/core/src/smf/smf.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -74,12 +74,11 @@ const char* SMFTrack::__class_name = "SMFTrack"; -SMFTrack::SMFTrack( const QString& sTrackName ) +//SMFTrack::SMFTrack( const QString& sTrackName ) +SMFTrack::SMFTrack() : Object( __class_name ) { INFOLOG( "INIT" ); - - addEvent( new SMFTrackNameMetaEvent( sTrackName, 0 ) ); } @@ -234,7 +233,20 @@ vector eventList; SMF smf; - SMFTrack *pTrack1 = new SMFTrack( "Hydrogen song!!" ); + + + // Standard MIDI format 1 files should have the first track being the tempo map + // which is a track that contains global meta events only. + SMFTrack *pTrack0 = new SMFTrack(); + pTrack0->addEvent( new SMFCopyRightNoticeMetaEvent( pSong->__author , 0 ) ); + pTrack0->addEvent( new SMFTrackNameMetaEvent( pSong->__name , 0 ) ); + pTrack0->addEvent( new SMFSetTempoMetaEvent( pSong->__bpm , 0 ) ); + pTrack0->addEvent( new SMFTimeSignatureMetaEvent( 4 , 4 , 24 , 8 , 0 ) ); + smf.addTrack( pTrack0 ); + + + // Standard MIDI Format 1 files should have note events in tracks =>2 + SMFTrack *pTrack1 = new SMFTrack(); smf.addTrack( pTrack1 ); InstrumentList *iList = pSong->get_instrument_list(); @@ -265,9 +277,11 @@ if ( pNote ) { int nVelocity = (int)( 127.0 * pNote->get_velocity() ); - int nInstr = - iList->index(pNote->get_instrument()); - int nPitch = 36 + nInstr; + + int nInstr = iList->index(pNote->get_instrument()); + Instrument *pInstr = pNote->get_instrument(); + int nPitch = pInstr->get_midi_out_note(); + eventList.push_back( new SMFNoteOnEvent( nStartTicks + nNote, diff -Nru hydrogen-0.9.6.1/src/core/src/smf/smf_event.cpp hydrogen-0.9.7/src/core/src/smf/smf_event.cpp --- hydrogen-0.9.6.1/src/core/src/smf/smf_event.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/core/src/smf/smf_event.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -21,6 +21,7 @@ */ #include +#include namespace H2Core { @@ -116,6 +117,110 @@ return buf.getBuffer(); } +// :::::::::::::::::: + +const char* SMFSetTempoMetaEvent::__class_name = "SMFSetTempoMetaEvent"; + +SMFSetTempoMetaEvent::SMFSetTempoMetaEvent( float fBPM, unsigned nTicks ) + : SMFEvent( __class_name, nTicks ) + , m_fBPM( fBPM ) +{ + // it's always at the start of the song + m_nDeltaTime = 0; +} + + +std::vector SMFSetTempoMetaEvent::getBuffer() +{ + SMFBuffer buf; + long msPerBeat; + + msPerBeat = long( 60000000 / m_fBPM ); // 60 seconds * mills \ BPM + + buf.writeVarLen( m_nDeltaTime ); + buf.writeByte( 0xFF ); + buf.writeByte( SET_TEMPO ); + buf.writeByte( 0x03 ); // Length + + buf.writeByte( msPerBeat >> 16 ); + buf.writeByte( msPerBeat >> 8 ); + buf.writeByte( msPerBeat ); + + return buf.getBuffer(); +} + +// :::::::::::::::::: + +const char* SMFCopyRightNoticeMetaEvent::__class_name = "SMFCopyRightNoticeMetaEvent"; + +SMFCopyRightNoticeMetaEvent::SMFCopyRightNoticeMetaEvent( const QString& sAuthor, unsigned nTicks ) + : SMFEvent( __class_name, nTicks ) + , m_sAuthor( sAuthor ) +{ + // it's always at the start of the song + m_nDeltaTime = 0; +} + + +std::vector SMFCopyRightNoticeMetaEvent::getBuffer() +{ + SMFBuffer buf; + QString sCopyRightString; + + time_t now = time(0); + tm *ltm = localtime(&now); // Extract the local system time. + + // Construct the copyright string in the form "(C) [Author] [CurrentYear]" + sCopyRightString.append("(C) "); // Start with the copyright symbol and a seperator space. + sCopyRightString.append( m_sAuthor ); // add the author + sCopyRightString.append(" "); // add a seperator space + sCopyRightString.append( QString::number( 1900 + ltm->tm_year, 10 ) ); // and finish with the year. + + buf.writeVarLen( m_nDeltaTime ); + buf.writeByte( 0xFF ); + buf.writeByte( COPYRIGHT_NOTICE ); + buf.writeString( sCopyRightString ); + + return buf.getBuffer(); +} + +// :::::::::::::::::: + +const char* SMFTimeSignatureMetaEvent::__class_name = "SMFTimeSignatureMetaEvent"; + +SMFTimeSignatureMetaEvent::SMFTimeSignatureMetaEvent( unsigned nBeats, unsigned nNote , unsigned nMTPMC , unsigned nTSNP24 , unsigned nTicks ) + : SMFEvent( __class_name, nTicks ) + , m_nBeats( nBeats ) + , m_nNote( nNote ) + , m_nMTPMC( nMTPMC ) + , m_nTSNP24( nTSNP24 ) + , m_nTicks( nTicks ) + +{ + // it's always at the start of the song + m_nDeltaTime = 0; +} + + +std::vector SMFTimeSignatureMetaEvent::getBuffer() +{ + SMFBuffer buf; + + unsigned nBeatsCopy = m_nNote , Note2Log = 0; // Copy Nbeats as the process to generate Note2Log alters the value. + + while (nBeatsCopy >>= 1) ++Note2Log; // Generate a log to base 2 of the note value, so 8 (as in 6/8) becomes 3 + + buf.writeVarLen( m_nDeltaTime ); + buf.writeByte( 0xFF ); + buf.writeByte( TIME_SIGNATURE ); + buf.writeByte( 0x04 ); // Event length in bytes. + buf.writeByte( m_nBeats ); // Top line of time signature, eg 6 for 6/8 time + buf.writeByte( Note2Log ); // Bottom line of time signature expressed as Log2 of the Note value. + buf.writeByte( m_nMTPMC ); // MIDI Ticks per Metronome click, normally 24 ( i.e. each quarter note ). + buf.writeByte( m_nTSNP24 ); // Thirty Second Notes ( as in 1/32 ) per 24 MIDI clocks, normally 8. + + return buf.getBuffer(); +} // ::::::::::::: diff -Nru hydrogen-0.9.6.1/src/core/src/synth/synth.cpp hydrogen-0.9.7/src/core/src/synth/synth.cpp --- hydrogen-0.9.6.1/src/core/src/synth/synth.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/core/src/synth/synth.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -39,6 +39,8 @@ m_pOut_R = new float[ MAX_BUFFER_SIZE ]; m_fTheta = 0.0; + + m_pAudioOutput = NULL; } diff -Nru hydrogen-0.9.6.1/src/core/src/timehelper.cpp hydrogen-0.9.7/src/core/src/timehelper.cpp --- hydrogen-0.9.6.1/src/core/src/timehelper.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/core/src/timehelper.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -6,37 +6,37 @@ int gettimeofday(struct timeval *tv, struct timezone *tz) { - FILETIME ft; - unsigned __int64 tmpres = 0; - static int tzflag; - - if (NULL != tv) - { - GetSystemTimeAsFileTime(&ft); - - tmpres |= ft.dwHighDateTime; - tmpres <<= 32; - tmpres |= ft.dwLowDateTime; - - /*converting file time to unix epoch*/ - tmpres /= 10; /*convert into microseconds*/ - tmpres -= DELTA_EPOCH_IN_MICROSECS; - tv->tv_sec = (long)(tmpres / 1000000UL); - tv->tv_usec = (long)(tmpres % 1000000UL); - } - - if (NULL != tz) - { - if (!tzflag) + FILETIME ft; + unsigned __int64 tmpres = 0; + static int tzflag; + + if (NULL != tv) + { + GetSystemTimeAsFileTime(&ft); + + tmpres |= ft.dwHighDateTime; + tmpres <<= 32; + tmpres |= ft.dwLowDateTime; + + /*converting file time to unix epoch*/ + tmpres /= 10; /*convert into microseconds*/ + tmpres -= DELTA_EPOCH_IN_MICROSECS; + tv->tv_sec = (long)(tmpres / 1000000UL); + tv->tv_usec = (long)(tmpres % 1000000UL); + } + + if (NULL != tz) { - _tzset(); - tzflag++; + if (!tzflag) + { + _tzset(); + tzflag++; + } + tz->tz_minuteswest = _timezone / 60; + tz->tz_dsttime = _daylight; } - tz->tz_minuteswest = _timezone / 60; - tz->tz_dsttime = _daylight; - } - return 0; + return 0; } #endif diff -Nru hydrogen-0.9.6.1/src/core/src/timeline.cpp hydrogen-0.9.7/src/core/src/timeline.cpp --- hydrogen-0.9.6.1/src/core/src/timeline.cpp 1970-01-01 00:00:00.000000000 +0000 +++ hydrogen-0.9.7/src/core/src/timeline.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -0,0 +1,48 @@ +/* + * Hydrogen + * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] + * + * http://www.hydrogen-music.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY, without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + + +#include +#include + +namespace H2Core +{ + const char* Timeline::__class_name = "Timeline"; + + Timeline::Timeline() : Object( __class_name ) + { + } + + void Timeline::sortTimelineVector() + { + //sort the timeline vector to beats a < b + sort(m_timelinevector.begin(), m_timelinevector.end(), TimelineComparator()); + } + + void Timeline::sortTimelineTagVector() + { + //sort the timeline vector to beats a < b + sort(m_timelinetagvector.begin(), m_timelinetagvector.end(), TimelineTagComparator()); + } + +}; + diff -Nru hydrogen-0.9.6.1/src/gui/CMakeLists.txt hydrogen-0.9.7/src/gui/CMakeLists.txt --- hydrogen-0.9.6.1/src/gui/CMakeLists.txt 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/CMakeLists.txt 2016-11-05 08:22:50.000000000 +0000 @@ -47,7 +47,7 @@ ENDIF() -ADD_EXECUTABLE(hydrogen WIN32 MACOSX_BUNDLE ${hydrogen_SRCS} ${hydrogen_MOC} ${hydrogen_UIS_H}) +ADD_EXECUTABLE(hydrogen WIN32 MACOSX_BUNDLE ${hydrogen_SRCS} ${hydrogen_MOC} ${hydrogen_UIS_H} ${CMAKE_SOURCE_DIR}/windows/icon.rc) TARGET_LINK_LIBRARIES(hydrogen hydrogen-core-${VERSION} ${QT_QTGUI_LIBRARY} diff -Nru hydrogen-0.9.6.1/src/gui/src/AboutDialog.cpp hydrogen-0.9.7/src/gui/src/AboutDialog.cpp --- hydrogen-0.9.6.1/src/gui/src/AboutDialog.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/AboutDialog.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -48,8 +48,7 @@ about += "http://www.hydrogen-music.org

    "; about += tr( "Project page
    "); about += "http://sourceforge.net/projects/hydrogen

    "; - about += tr( "Mailing lists
    "); - about += "http://lists.sourceforge.net/lists/listinfo/hydrogen-announce
    "; + about += tr( "Development mailing list
    "); about += "http://lists.sourceforge.net/lists/listinfo/hydrogen-devel
    "; aboutTxt->setText( about ); @@ -59,6 +58,7 @@ authorList.push_back( Author( "Antonio Piraino (aka Journeyman)", "http://www.storiepvtride.it", "Italian manual" ) ); authorList.push_back( Author( "Artemiy Pavlov (aka Artemio)", "www.artemiolabs.com", "drum kits, demo patterns, web site" ) ); authorList.push_back( Author( "Alexandre Prokoudine", "", "Russian translation" ) ); + authorList.push_back( Author( "Aurélien Leblond", "", "coding, bug fixes" ) ); authorList.push_back( Author( "Ben Powers", "", "docs" ) ); authorList.push_back( Author( "Benjamin Flaming", "", "JACK patches, bug fix" ) ); authorList.push_back( Author( "Carlo Impagliazzo (aka Truijllo)", "", "testing, ideas.." ) ); @@ -83,6 +83,8 @@ authorList.push_back( Author( "Greg Bonik","gregory@bonik.org","pulseaudio coding" ) ); authorList.push_back( Author( "Jakob Lund", "jlund05@imada.sdu.dk", "coding" ) ); authorList.push_back( Author( "Jason Schaefer", "schaefer.jason@gmail.com", "patches, lead/lag feature" ) ); + authorList.push_back( Author( "James Stone", "", "Bugfixes" ) ); + authorList.push_back( Author( "Jay Alexander Fleming", "", "Serbian translation" ) ); authorList.push_back( Author( "Jesse Chappel", "", "JACK patches" ) ); authorList.push_back( Author( "Jérémy Zurcher", "", "coding") ); authorList.push_back( Author( "Jonas Melzer", "", "German manual" ) ); @@ -102,6 +104,7 @@ authorList.push_back( Author( "Sebastian Moors (aka mauser)", "mauser@smoors.de", "coding" ) ); authorList.push_back( Author( "Sergio Gil Perez de la Manga", "", "Spanish translation" ) ); authorList.push_back( Author( "Simon Donike", "", "German translation" ) ); + authorList.push_back( Author( "Steve Boyer", "", "Windows cross compilation scripts" ) ); authorList.push_back( Author( "Thijs Van Severen", "http://audio-and-linux.blogspot.be/", "manual, website, coding" ) ); authorList.push_back( Author( "Torben Hohn", "", "bugfixing, test" ) ); authorList.push_back( Author( "Yamasaki Yutaka", "yamasaki@good-day.co.jp", "Japanese translation" ) ); @@ -109,12 +112,12 @@ QString sAuthors; - sAuthors += tr( "Main coder and mantainer:
    " ); + sAuthors += tr( "Main coder and maintainer:
    " ); sAuthors += "
    • Alessandro Cominu (aka Comix) [2001-2008]

    • "; - sAuthors += "
    • Michael Wolkstein (aka Wolke) [2008-now]

    • "; + sAuthors += "
    • Michael Wolkstein (aka Wolke) [2008-2014]

    • "; sAuthors += "
    • Sebastian Moors (aka Mauser) [2008-now]

    "; - sAuthors += "Thanks to:"; + sAuthors += tr( "Thanks to:" ); sAuthors += "
      "; diff -Nru hydrogen-0.9.6.1/src/gui/src/AudioEngineInfoForm.cpp hydrogen-0.9.7/src/gui/src/AudioEngineInfoForm.cpp --- hydrogen-0.9.6.1/src/gui/src/AudioEngineInfoForm.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/AudioEngineInfoForm.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -99,7 +99,7 @@ void AudioEngineInfoForm::updateInfo() { Hydrogen *pEngine = Hydrogen::get_instance(); - Song *song = pEngine->getSong(); + Song *pSong = pEngine->getSong(); // Song position QString sSongPos = "N/A"; @@ -121,11 +121,11 @@ processTimeLbl->setText(tmp); // Song state - if (song == NULL) { + if (pSong == NULL) { songStateLbl->setText( "NULL song" ); } else { - if (song->__is_modified) { + if (pSong->get_is_modified()) { songStateLbl->setText( "Modified" ); } else { @@ -194,8 +194,6 @@ m_pSelectedInstrLbl->setText( QString("%1").arg(nSelectedInstrumentNumber) ); } - - QString currentPatternName; PatternList *pPatternList = Hydrogen::get_instance()->getCurrentPatternList(); if (pPatternList) { currentPatternLbl->setText( QString::number(pPatternList->size()) ); diff -Nru hydrogen-0.9.6.1/src/gui/src/AudioFileBrowser/AudioFileBrowser.cpp hydrogen-0.9.7/src/gui/src/AudioFileBrowser/AudioFileBrowser.cpp --- hydrogen-0.9.6.1/src/gui/src/AudioFileBrowser/AudioFileBrowser.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/AudioFileBrowser/AudioFileBrowser.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -49,28 +49,28 @@ setWindowTitle ( trUtf8 ( "Audio File Browser" ) ); setFixedSize ( width(), height() ); - model = new QDirModel(); - model->setFilter( QDir::AllDirs | QDir::AllEntries | QDir::NoDotAndDotDot ); - model->setNameFilters( QStringList() << "*.ogg" << "*.OGG" << "*.wav" << "*.WAV" << "*.flac"<< "*.FLAC" << "*.aiff" << "*.AIFF"<< "*.au" << "*.AU" ); - model->setSorting( QDir::DirsFirst |QDir::Name ); - __index = model->index( QDir::currentPath() ); + m_pDirModel = new QDirModel(); + m_pDirModel->setFilter( QDir::AllDirs | QDir::AllEntries | QDir::NoDotAndDotDot ); + m_pDirModel->setNameFilters( QStringList() << "*.ogg" << "*.OGG" << "*.wav" << "*.WAV" << "*.flac"<< "*.FLAC" << "*.aiff" << "*.AIFF"<< "*.au" << "*.AU" ); + m_pDirModel->setSorting( QDir::DirsFirst |QDir::Name ); + m_ModelIndex = m_pDirModel->index( QDir::currentPath() ); m_pPlayBtn->setEnabled( false ); m_pStopBtn->setEnabled( false ); openBTN->setEnabled( false ); - tree = new QTreeView( treeView ); - tree->setModel( model ); - tree->resize( 799, 310 ); - tree->header()->resizeSection( 0, 405 ); - tree->setAlternatingRowColors( true ); - tree->setRootIndex( model->index( Preferences::get_instance()->__lastsampleDirectory ) ); + m_pTree = new QTreeView( treeView ); + m_pTree->setModel( m_pDirModel ); + m_pTree->resize( 799, 310 ); + m_pTree->header()->resizeSection( 0, 405 ); + m_pTree->setAlternatingRowColors( true ); + m_pTree->setRootIndex( m_pDirModel->index( Preferences::get_instance()->__lastsampleDirectory ) ); pathLineEdit->setText( Preferences::get_instance()->__lastsampleDirectory ); - m_psamplefilename = ""; - m_pselectedFile << "false" << "false"; + m_pSampleFilename = ""; + m_pSelectedFile << "false" << "false"; - sEmptySampleFilename = Filesystem::empty_sample(); + m_sEmptySampleFilename = Filesystem::empty_sample(); m_pPathUptoolButton->setIcon( QIcon( Skin::getImagePath() + "/audiFileBrowser/go-up.png")); m_pPathUptoolButton->setToolTip( QString("Parent Folder")); @@ -83,16 +83,16 @@ m_pStopBtn->setToolTip( QString("Stop")); m_pSampleWaveDisplay = new SampleWaveDisplay( waveformview ); - m_pSampleWaveDisplay->updateDisplay( sEmptySampleFilename ); + m_pSampleWaveDisplay->updateDisplay( m_sEmptySampleFilename ); m_pSampleWaveDisplay->move( 3, 3 ); playSamplescheckBox->setChecked( Preferences::get_instance()->__playsamplesonclicking ); //get the kde or gnome environment variable for mouse double or single clicking - singleClick = false; + m_SingleClick = false; getEnvironment(); - connect( tree, SIGNAL( clicked( const QModelIndex&) ), SLOT( clicked( const QModelIndex& ) ) ); - connect( tree, SIGNAL( doubleClicked( const QModelIndex&) ), SLOT( doubleClicked( const QModelIndex& ) ) ); + connect( m_pTree, SIGNAL( clicked( const QModelIndex&) ), SLOT( clicked( const QModelIndex& ) ) ); + connect( m_pTree, SIGNAL( doubleClicked( const QModelIndex&) ), SLOT( doubleClicked( const QModelIndex& ) ) ); connect( pathLineEdit, SIGNAL( returnPressed() ), SLOT( updateModelIndex() ) ); } @@ -100,7 +100,7 @@ AudioFileBrowser::~AudioFileBrowser() { - Sample *pNewSample = Sample::load( sEmptySampleFilename ); + Sample *pNewSample = Sample::load( m_sEmptySampleFilename ); AudioEngine::get_instance()->get_sampler()->preview_sample( pNewSample, 100 ); INFOLOG ( "DESTROY" ); } @@ -139,9 +139,9 @@ QTextStream envin( &envfile ); while ( !envin.atEnd() ) { - QString envline = envin.readLine(); - if(envline == QString("SingleClick=true") ){ - singleClick = true; + QString envLine = envin.readLine(); + if(envLine == QString("SingleClick=true") ){ + m_SingleClick = true; break; } } @@ -158,7 +158,7 @@ void AudioFileBrowser::keyPressEvent (QKeyEvent *ev) { if( ev->modifiers()==Qt::ControlModifier ){ - tree->setSelectionMode( QAbstractItemView::MultiSelection ); + m_pTree->setSelectionMode( QAbstractItemView::MultiSelection ); openBTN->setEnabled( true ); } } @@ -167,24 +167,24 @@ void AudioFileBrowser::keyReleaseEvent (QKeyEvent *ev) { - tree->setSelectionMode( QAbstractItemView::SingleSelection ); + m_pTree->setSelectionMode( QAbstractItemView::SingleSelection ); } void AudioFileBrowser::updateModelIndex() { - QString toremove; - QString newpath = pathLineEdit->text(); + QString toRemove; + QString newPath = pathLineEdit->text(); - if( QDir( newpath ).exists() ){ - tree->setRootIndex( model->index( newpath ) ); + if( QDir( newPath ).exists() ){ + m_pTree->setRootIndex( m_pDirModel->index( newPath ) ); }else { - toremove = newpath.section( '/', -1 ); + toRemove = newPath.section( '/', -1 ); // QMessageBox::information ( this, "Hydrogen", newpath + toremove); - newpath.replace( toremove, "" ); - tree->setRootIndex( model->index( newpath ) ); + newPath.replace( toRemove, "" ); + m_pTree->setRootIndex( m_pDirModel->index( newPath ) ); } } @@ -193,9 +193,9 @@ void AudioFileBrowser::clicked( const QModelIndex& index ) { - QString path = model->filePath( index ); + QString path = m_pDirModel->filePath( index ); - if( singleClick ){ + if( m_SingleClick ){ browseTree( index ); } @@ -209,7 +209,7 @@ void AudioFileBrowser::doubleClicked( const QModelIndex& index ) { - if(!singleClick) + if(!m_SingleClick) browseTree( index ); } @@ -218,13 +218,13 @@ void AudioFileBrowser::browseTree( const QModelIndex& index ) { - QString path = model->filePath( index ); + QString path = m_pDirModel->filePath( index ); pathLineEdit->setText( path ); - m_pSampleWaveDisplay->updateDisplay( sEmptySampleFilename ); + m_pSampleWaveDisplay->updateDisplay( m_sEmptySampleFilename ); updateModelIndex(); //with this you have a navigation like konqueror - if ( model->isDir( index ) ){ + if ( m_pDirModel->isDir( index ) ){ m_pPlayBtn->setEnabled( false ); openBTN->setEnabled( false ); return; @@ -233,15 +233,15 @@ QString name = path.section( '/', -1 ); QString path2 = path; - QString onlypath = path; + QString onlyPath = path; if ( name != "" ){ - onlypath = path.replace( name, "" ); + onlyPath = path.replace( name, "" ); } name = name.left( '.' ); QString message = "Name: " + name; - pathLineEdit->setText( onlypath ); + pathLineEdit->setText( onlyPath ); QStringList path2List = path2.split("/"); QString fleTxt = path2List.last(); @@ -263,7 +263,7 @@ m_pLengthLable->setText( trUtf8( "Sample length: " ) + qsec + trUtf8( " s" ) ); delete pNewSample; - m_psamplefilename = path2; + m_pSampleFilename = path2; m_pSampleWaveDisplay->updateDisplay( path2 ); m_pPlayBtn->setEnabled( true ); @@ -287,11 +287,11 @@ m_pNBytesLable->setText( trUtf8( "Size:" ) ); m_pSamplerateLable->setText( trUtf8( "Samplerate:" ) ); m_pLengthLable->setText( trUtf8( "Sample length:" ) ); - m_pSampleWaveDisplay->updateDisplay( sEmptySampleFilename ); + m_pSampleWaveDisplay->updateDisplay( m_sEmptySampleFilename ); m_pPlayBtn->setEnabled( false ); m_pStopBtn->setEnabled( false ); openBTN->setEnabled( false ); - m_psamplefilename = ""; + m_pSampleFilename = ""; } QApplication::restoreOverrideCursor(); } @@ -301,11 +301,12 @@ void AudioFileBrowser::on_m_pPlayBtn_clicked() { - if( QFile( m_psamplefilename ).exists() == false ) + if( QFile( m_pSampleFilename ).exists() == false ) return; m_pStopBtn->setEnabled( true ); - Sample *pNewSample = Sample::load( m_psamplefilename ); + Sample *pNewSample = Sample::load( m_pSampleFilename ); if ( pNewSample ){ + assert(pNewSample->get_sample_rate() != 0); int length = ( ( pNewSample->get_frames() / pNewSample->get_sample_rate() + 1) * 100 ); AudioEngine::get_instance()->get_sampler()->preview_sample( pNewSample, length ); } @@ -315,7 +316,7 @@ void AudioFileBrowser::on_m_pStopBtn_clicked() { - Sample *pNewSample = Sample::load( sEmptySampleFilename ); + Sample *pNewSample = Sample::load( m_sEmptySampleFilename ); AudioEngine::get_instance()->get_sampler()->preview_sample( pNewSample, 100 ); m_pStopBtn->setEnabled( false ); } @@ -325,7 +326,7 @@ void AudioFileBrowser::on_cancelBTN_clicked() { Preferences::get_instance()->__lastsampleDirectory = pathLineEdit->text(); - m_pselectedFile << "false" << "false" << ""; + m_pSelectedFile << "false" << "false" << ""; reject(); } @@ -333,9 +334,9 @@ void AudioFileBrowser::on_openBTN_clicked() { - if( tree->selectionModel()->selectedRows().size() > 0){ + if( m_pTree->selectionModel()->selectedRows().size() > 0){ QList::iterator i; - QList list = tree->selectionModel()->selectedRows(); + QList list = m_pTree->selectionModel()->selectedRows(); for (i = list.begin(); i != list.end(); ++i){ QString path2 = (*i).data().toString(); @@ -346,7 +347,7 @@ path = path + "/"; } QString act_filename = path + path2; - m_pselectedFile << act_filename ; + m_pSelectedFile << act_filename ; } } } @@ -367,12 +368,12 @@ QStringList AudioFileBrowser::selectedFile() { if ( useNameCheckBox->isChecked() ){ - m_pselectedFile[0] = "true"; + m_pSelectedFile[0] = "true"; } if ( autoVelCheckBox->isChecked() ){ - m_pselectedFile[1] = "true"; + m_pSelectedFile[1] = "true"; } - return m_pselectedFile; + return m_pSelectedFile; } @@ -391,16 +392,16 @@ QString updir = pathlist.join("/"); pathLineEdit->setText( updir ); - tree->setRootIndex( model->index( updir ) ); - tree->collapse( model->index( updir ) ); - tree->setExpanded( model->index(updir), false ); + m_pTree->setRootIndex( m_pDirModel->index( updir ) ); + m_pTree->collapse( m_pDirModel->index( updir ) ); + m_pTree->setExpanded( m_pDirModel->index(updir), false ); path = pathLineEdit->text(); } pathLineEdit->setText( QDir::homePath() ); - tree->setRootIndex( model->index( QDir::homePath() ) ); + m_pTree->setRootIndex( m_pDirModel->index( QDir::homePath() ) ); - tree->collapse( model->index( QDir::homePath()) ); + m_pTree->collapse( m_pDirModel->index( QDir::homePath()) ); } @@ -417,9 +418,9 @@ if( path.endsWith( "/" ) ){ pathlist.removeLast(); QString tmpupdir = pathlist.join("/"); - tree->setRootIndex( model->index( tmpupdir ) ); - tree->collapse( model->index( tmpupdir ) ); - tree->setExpanded( model->index( tmpupdir ), false ); + m_pTree->setRootIndex( m_pDirModel->index( tmpupdir ) ); + m_pTree->collapse( m_pDirModel->index( tmpupdir ) ); + m_pTree->setExpanded( m_pDirModel->index( tmpupdir ), false ); } pathlist.removeLast(); @@ -432,9 +433,9 @@ pathLineEdit->setText( updir ); } - tree->setRootIndex( model->index( updir ) ); - tree->collapse( model->index( updir ) ); - tree->setExpanded( model->index(updir), false ); + m_pTree->setRootIndex( m_pDirModel->index( updir ) ); + m_pTree->collapse( m_pDirModel->index( updir ) ); + m_pTree->setExpanded( m_pDirModel->index(updir), false ); } @@ -442,9 +443,9 @@ void AudioFileBrowser::on_hiddenCB_clicked() { if ( hiddenCB->isChecked() ){ - model->setFilter( QDir::AllDirs | QDir::AllEntries | QDir::NoDotAndDotDot | QDir::Hidden ); + m_pDirModel->setFilter( QDir::AllDirs | QDir::AllEntries | QDir::NoDotAndDotDot | QDir::Hidden ); } else { - model->setFilter( QDir::AllDirs | QDir::AllEntries | QDir::NoDotAndDotDot ); - tree->setRootIndex( model->index( pathLineEdit->text() ) ); + m_pDirModel->setFilter( QDir::AllDirs | QDir::AllEntries | QDir::NoDotAndDotDot ); + m_pTree->setRootIndex( m_pDirModel->index( pathLineEdit->text() ) ); } } diff -Nru hydrogen-0.9.6.1/src/gui/src/AudioFileBrowser/AudioFileBrowser.h hydrogen-0.9.7/src/gui/src/AudioFileBrowser/AudioFileBrowser.h --- hydrogen-0.9.6.1/src/gui/src/AudioFileBrowser/AudioFileBrowser.h 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/AudioFileBrowser/AudioFileBrowser.h 2016-11-05 08:22:50.000000000 +0000 @@ -70,22 +70,24 @@ private: InstrumentEditor* m_pInstrumentEditor; - QString m_psamplefilename; - QStringList m_pselectedFile; + QString m_pSampleFilename; + QStringList m_pSelectedFile; void browseTree( const QModelIndex& index ); void getEnvironment(); bool isFileSupported( QString filename ); - bool singleClick; - QDirModel *model; - QTreeView *tree; - QModelIndex __index; + bool m_SingleClick; + QDirModel * m_pDirModel; + QTreeView * m_pTree; - SampleWaveDisplay *m_pSampleWaveDisplay; - QString sEmptySampleFilename; - QStringList filters; + QModelIndex m_ModelIndex; + + + SampleWaveDisplay * m_pSampleWaveDisplay; + QString m_sEmptySampleFilename; + QStringList m_Filters; diff -Nru hydrogen-0.9.6.1/src/gui/src/AudioFileBrowser/SampleWaveDisplay.cpp hydrogen-0.9.7/src/gui/src/AudioFileBrowser/SampleWaveDisplay.cpp --- hydrogen-0.9.6.1/src/gui/src/AudioFileBrowser/SampleWaveDisplay.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/AudioFileBrowser/SampleWaveDisplay.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -42,7 +42,7 @@ int h = 85; resize( w, h ); - bool ok = m_background.load( Skin::getImagePath() + "/waveDisplay/bgsamplewavedisplay.png" ); + bool ok = m_Background.load( Skin::getImagePath() + "/waveDisplay/bgsamplewavedisplay.png" ); if( ok == false ){ ERRORLOG( "Error loading pixmap" ); } @@ -67,7 +67,7 @@ { QPainter painter( this ); painter.setRenderHint( QPainter::Antialiasing ); - painter.drawPixmap( ev->rect(), m_background, ev->rect() ); + painter.drawPixmap( ev->rect(), m_Background, ev->rect() ); painter.setPen( QColor( 102, 150, 205 ) ); int VCenter = height() / 2; diff -Nru hydrogen-0.9.6.1/src/gui/src/AudioFileBrowser/SampleWaveDisplay.h hydrogen-0.9.7/src/gui/src/AudioFileBrowser/SampleWaveDisplay.h --- hydrogen-0.9.6.1/src/gui/src/AudioFileBrowser/SampleWaveDisplay.h 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/AudioFileBrowser/SampleWaveDisplay.h 2016-11-05 08:22:50.000000000 +0000 @@ -30,11 +30,11 @@ class SampleWaveDisplay : public QWidget, public H2Core::Object { - H2_OBJECT + H2_OBJECT Q_OBJECT public: - SampleWaveDisplay(QWidget* pParent); + SampleWaveDisplay( QWidget* pParent ); ~SampleWaveDisplay(); void updateDisplay( QString filename ); @@ -42,9 +42,9 @@ void paintEvent(QPaintEvent *ev); private: - QPixmap m_background; + QPixmap m_Background; QString m_sSampleName; - int *m_pPeakData; + int * m_pPeakData; }; diff -Nru hydrogen-0.9.6.1/src/gui/src/Director.cpp hydrogen-0.9.7/src/gui/src/Director.cpp --- hydrogen-0.9.6.1/src/gui/src/Director.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/Director.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -58,6 +58,7 @@ #include #include +#include #include @@ -73,14 +74,15 @@ //INFOLOG ( "INIT" ); setWindowTitle ( trUtf8 ( "Director" ) ); - p_counter = 1; // to compute the right beat - p_fadealpha = 255; //default alpha - p_bar = 1; // default bar - p_wechselblink = width() * 5/100; - - f_bpm = Hydrogen::get_instance()->getSong()->__bpm; - timer = new QTimer( this ); - connect( timer, SIGNAL( timeout() ), this, SLOT( updateMetronomBackground() ) ); + m_nCounter = 1; // to compute the right beat + m_nFadeAlpha = 255; //default alpha + m_nBar = 1; // default bar + m_nFlashingArea = width() * 5/100; + + m_fBpm = Hydrogen::get_instance()->getSong()->__bpm; + m_pTimeline = Hydrogen::get_instance()->getTimeline(); + m_pTimer = new QTimer( this ); + connect( m_pTimer, SIGNAL( timeout() ), this, SLOT( updateMetronomBackground() ) ); } @@ -103,7 +105,9 @@ __songName = list.last().replace( ".h2song", "" ); // if songname is not set, default on an empty song, we call them "Untitled Song". - if( __songName== "" ) __songName = QString("Untitled Song"); + if( __songName.isEmpty() ){ + __songName = QString("Untitled Song"); + } } update(); @@ -112,47 +116,51 @@ //bpm - f_bpm = Hydrogen::get_instance()->getSong()->__bpm; + m_fBpm = Hydrogen::get_instance()->getSong()->__bpm; //bar - p_bar = Hydrogen::get_instance()->getPatternPos() +1; - if ( p_bar <= 0 ) - p_bar = 1; + m_nBar = Hydrogen::get_instance()->getPatternPos() + 1; + + if ( m_nBar <= 0 ){ + m_nBar = 1; + } + // 1000 ms / bpm / 60s - timer->start( static_cast( 1000 / ( f_bpm / 60 )) / 2 ); - p_wechselblink = width() * 5/100; - p_fadealpha = 255; + m_pTimer->start( static_cast( 1000 / ( m_fBpm / 60 )) / 2 ); + m_nFlashingArea = width() * 5/100; + m_nFadeAlpha = 255; + if ( nValue == 2 ){ - p_fadealpha = 0; + m_nFadeAlpha = 0; update(); __TAG=""; __TAG2=""; return; } + if ( nValue == 1 ) { //foregroundcolor "rect" for first blink __color = QColor( 255, 50, 1 ,255 ); - p_counter = 1; + m_nCounter = 1; } else { //foregroundcolor "rect" for all other blinks - p_counter++; - if( p_counter %2 == 0 ) - p_wechselblink = width() * 52.5/100; + m_nCounter++; + if( m_nCounter %2 == 0 ) + m_nFlashingArea = width() * 52.5/100; __color = QColor( 24, 250, 31, 255 ); - } // get tags __TAG=""; __TAG2=""; - for ( size_t t = 0; t < Hydrogen::get_instance()->m_timelinetagvector.size(); t++){ - if(t+1m_timelinetagvector.size() && - Hydrogen::get_instance()->m_timelinetagvector[t+1].m_htimelinetagbeat == p_bar ){ - __TAG2 = Hydrogen::get_instance()->m_timelinetagvector[t+1].m_htimelinetag ; + for ( size_t t = 0; t < m_pTimeline->m_timelinetagvector.size(); t++){ + if(t+1m_timelinetagvector.size() && + m_pTimeline->m_timelinetagvector[t+1].m_htimelinetagbeat == m_nBar ){ + __TAG2 = m_pTimeline->m_timelinetagvector[t+1].m_htimelinetag ; } - if ( Hydrogen::get_instance()->m_timelinetagvector[t].m_htimelinetagbeat <= p_bar-1){ - __TAG = Hydrogen::get_instance()->m_timelinetagvector[t].m_htimelinetag ; + if ( m_pTimeline->m_timelinetagvector[t].m_htimelinetagbeat <= m_nBar-1){ + __TAG = m_pTimeline->m_timelinetagvector[t].m_htimelinetag ; } - if( Hydrogen::get_instance()->m_timelinetagvector[t].m_htimelinetagbeat > p_bar-1){ + if( m_pTimeline->m_timelinetagvector[t].m_htimelinetagbeat > m_nBar-1){ break; } } @@ -163,7 +171,7 @@ void Director::updateMetronomBackground() { __color.setAlpha( 0 ); - timer->stop(); + m_pTimer->stop(); update(); } @@ -181,18 +189,18 @@ //draw the metronome painter.setPen( QPen(QColor( 249, 235, 116, 200 ) ,1 , Qt::SolidLine ) ); painter.setBrush( __color ); - painter.drawRect ( p_wechselblink, height() * 25/100, width() * 42.5/100, height() * 35/100); + painter.drawRect ( m_nFlashingArea, height() * 25/100, width() * 42.5/100, height() * 35/100); //draw bars painter.setPen(Qt::white); painter.setFont(QFont("Arial", height() * 25/100 )); QRect r1(QPoint( width() * 5/100 , height() * 25/100 ), QSize( width() * 42.5/100, height() * 35/100)); - painter.drawText( r1, Qt::AlignCenter, QString("%1").arg( p_bar) ); + painter.drawText( r1, Qt::AlignCenter, QString("%1").arg( m_nBar) ); //draw beats QRect r2(QPoint( width() * 52.5/100 , height() * 25/100 ), QSize( width() * 42.5/100, height() * 35/100)); - painter.drawText( r2, Qt::AlignCenter, QString("%1").arg( p_counter) ); + painter.drawText( r2, Qt::AlignCenter, QString("%1").arg( m_nCounter) ); if( __TAG == __TAG2 ) __TAG2 = ""; diff -Nru hydrogen-0.9.6.1/src/gui/src/Director.h hydrogen-0.9.7/src/gui/src/Director.h --- hydrogen-0.9.6.1/src/gui/src/Director.h 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/Director.h 2016-11-05 08:22:50.000000000 +0000 @@ -29,6 +29,7 @@ #include #include #include +#include #include "EventListener.h" @@ -45,25 +46,23 @@ virtual void paintEvent( QPaintEvent*); private slots: - void updateMetronomBackground(); - //void updateBackground(); private: - QTimer *timer; - QColor __color; - // QPixmap *m_pBackground; - QPalette __blinkerPalette; - int p_counter; - int p_fadealpha; - float f_bpm; - int p_bar; - int p_wechselblink; - QString __TAG; - QString __TAG2; - QString __songName; - int p_tagbeat; + QTimer *m_pTimer; + H2Core::Timeline *m_pTimeline; + QColor __color; + QPalette __blinkerPalette; + int m_nCounter; + int m_nFadeAlpha; + float m_fBpm; + int m_nBar; + int m_nFlashingArea; + QString __TAG; + QString __TAG2; + QString __songName; + int m_nTagbeat; }; diff -Nru hydrogen-0.9.6.1/src/gui/src/DonationDialog.cpp hydrogen-0.9.7/src/gui/src/DonationDialog.cpp --- hydrogen-0.9.6.1/src/gui/src/DonationDialog.cpp 1970-01-01 00:00:00.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/DonationDialog.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -0,0 +1,63 @@ +/* + * Hydrogen + * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] + * + * http://www.hydrogen-music.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY, without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#include +#include "DonationDialog.h" +#include "Skin.h" + +#include + + +DonationDialog::DonationDialog(QWidget* parent) + : QDialog( parent ) +{ + setupUi( this ); + + setWindowTitle( tr( "Donations" ) ); + setWindowIcon( QPixmap( Skin::getImagePath() + "/icon16.png" ) ); +} + +DonationDialog::~DonationDialog() +{ +} + + +void DonationDialog::on_randomizeBtn_clicked() +{ + int r = rand() % 2; + + if( r == 0 ) { + radioButton->setChecked(true); + } else { + radioButton_2->setChecked(true); + } +} + +void DonationDialog::on_donateBtn_clicked() +{ + if(radioButton->isChecked()) { + QDesktopServices::openUrl(QUrl::fromEncoded("https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=sebastian%2emoors%40gmail%2ecom&lc=DE&item_name=Hydrogen%20donation&no_note=0¤cy_code=EUR&bn=PP%2dDonationsBF%3abtn_donateCC_LG%2egif%3aNonHostedGuest")); + } else { + QDesktopServices::openUrl(QUrl::fromEncoded("https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=m%2ewolkstein%40gmx%2ede&lc=DE&item_name=Hydrogen%20donation&no_note=0¤cy_code=EUR&bn=PP%2dDonationsBF%3abtn_donateCC_LG%2egif%3aNonHostedGuest")); + } + accept(); +} diff -Nru hydrogen-0.9.6.1/src/gui/src/DonationDialog.h hydrogen-0.9.7/src/gui/src/DonationDialog.h --- hydrogen-0.9.6.1/src/gui/src/DonationDialog.h 1970-01-01 00:00:00.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/DonationDialog.h 2016-11-05 08:22:50.000000000 +0000 @@ -0,0 +1,46 @@ +/* + * Hydrogen + * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] + * + * http://www.hydrogen-music.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY, without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef DONATION__DIALOG_H +#define DONATION__DIALOG_H + + +#include + +#include "ui_DonationDialog.h" + +class DonationDialog : public QDialog, public Ui_DonationDialog_UI +{ +Q_OBJECT +public: + DonationDialog(QWidget* parent); + ~DonationDialog(); + +private slots: + void on_randomizeBtn_clicked(); + void on_donateBtn_clicked(); + +private: + +}; + +#endif diff -Nru hydrogen-0.9.6.1/src/gui/src/EventListener.h hydrogen-0.9.7/src/gui/src/EventListener.h --- hydrogen-0.9.6.1/src/gui/src/EventListener.h 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/EventListener.h 2016-11-05 08:22:50.000000000 +0000 @@ -29,6 +29,7 @@ virtual void stateChangedEvent(int nState) { UNUSED( nState ); } virtual void patternChangedEvent() {} virtual void patternModifiedEvent() {} + virtual void songModifiedEvent() {} virtual void selectedPatternChangedEvent() {} virtual void selectedInstrumentChangedEvent() {} virtual void midiActivityEvent() {} diff -Nru hydrogen-0.9.6.1/src/gui/src/ExportSongDialog.cpp hydrogen-0.9.7/src/gui/src/ExportSongDialog.cpp --- hydrogen-0.9.6.1/src/gui/src/ExportSongDialog.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/ExportSongDialog.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -33,12 +33,14 @@ #include #include #include +#include #include #include #include #include #include #include +#include #include #include #include @@ -68,14 +70,15 @@ exportTypeCombo->addItem(trUtf8("Both")); HydrogenApp::get_instance()->addEventListener( this ); + Hydrogen * pHydrogen = Hydrogen::get_instance(); m_pProgressBar->setValue( 0 ); sampleRateCombo->setCurrentIndex(1); sampleDepthCombo->setCurrentIndex(1); - QString defaultFilename( Hydrogen::get_instance()->getSong()->get_filename() ); - if( Hydrogen::get_instance()->getSong()->get_filename().isEmpty() ) - defaultFilename = Hydrogen::get_instance()->getSong()->__name; + QString defaultFilename( pHydrogen->getSong()->get_filename() ); + if( pHydrogen->getSong()->get_filename().isEmpty() ) + defaultFilename = pHydrogen->getSong()->__name; defaultFilename.replace( '*', "_" ); defaultFilename.replace( ".h2song", "" ); defaultFilename += ".wav"; @@ -99,7 +102,7 @@ // use of timeline - if( Hydrogen::get_instance()->m_timelinevector.size() > 0 ){ + if( pHydrogen->getTimeline()->m_timelinevector.size() > 0 ){ toggleTimeLineBPMCheckBox->setChecked(Preferences::get_instance()->getUseTimelineBpm()); b_oldTimeLineBPMMode = Preferences::get_instance()->getUseTimelineBpm(); connect(toggleTimeLineBPMCheckBox, SIGNAL(toggled(bool)), this, SLOT(togglTimeLineBPMMode( bool ))); @@ -200,8 +203,6 @@ bool warn = Preferences::get_instance()->getShowExportWarning(); - std::vector timelineVector = engine->m_timelinevector; - /* 0: Export to single track * 1: Export to multiple tracks * 2: Export to both @@ -555,20 +556,22 @@ closeBtn->setEnabled(false); resampleComboBox->setEnabled(false); okBtn->setEnabled(false); - Hydrogen* engine = Hydrogen::get_instance(); - float oldBPM = engine->getSong()->__bpm; + Hydrogen* pHydrogen = Hydrogen::get_instance(); + Timeline* pTimeline = pHydrogen->getTimeline(); + + float oldBPM = pHydrogen->getSong()->__bpm; float lowBPM = oldBPM; - if( engine->m_timelinevector.size() >= 1 ){ - for ( int t = 0; t < engine->m_timelinevector.size(); t++){ - if(engine->m_timelinevector[t].m_htimelinebpm < lowBPM){ - lowBPM = engine->m_timelinevector[t].m_htimelinebpm; + if( pTimeline->m_timelinevector.size() >= 1 ){ + for ( int t = 0; t < pTimeline->m_timelinevector.size(); t++){ + if(pTimeline->m_timelinevector[t].m_htimelinebpm < lowBPM){ + lowBPM = pTimeline->m_timelinevector[t].m_htimelinebpm; } } } - engine->setBPM(lowBPM); + pHydrogen->setBPM(lowBPM); time_t sTime = time(NULL); Hydrogen *pEngine = Hydrogen::get_instance(); Song *song = pEngine->getSong(); @@ -580,29 +583,32 @@ Instrument *pInstr = songInstrList->get( nInstr ); assert( pInstr ); if ( pInstr ){ - for ( int nLayer = 0; nLayer < MAX_LAYERS; nLayer++ ) { - InstrumentLayer *pLayer = pInstr->get_layer( nLayer ); - if ( pLayer ) { - Sample *pSample = pLayer->get_sample(); - if ( pSample ) { - if( pSample->get_rubberband().use ) { - Sample *newSample = Sample::load( - pSample->get_filepath(), - pSample->get_loops(), - pSample->get_rubberband(), - *pSample->get_velocity_envelope(), - *pSample->get_pan_envelope() - ); - if( !newSample ){ - continue; - } - delete pSample; - // insert new sample from newInstrument - AudioEngine::get_instance()->lock( RIGHT_HERE ); - pLayer->set_sample( newSample ); - AudioEngine::get_instance()->unlock(); + for (std::vector::iterator it = pInstr->get_components()->begin() ; it != pInstr->get_components()->end(); ++it) { + InstrumentComponent* pCompo = *it; + for ( int nLayer = 0; nLayer < MAX_LAYERS; nLayer++ ) { + InstrumentLayer *pLayer = pCompo->get_layer( nLayer ); + if ( pLayer ) { + Sample *pSample = pLayer->get_sample(); + if ( pSample ) { + if( pSample->get_rubberband().use ) { + Sample *newSample = Sample::load( + pSample->get_filepath(), + pSample->get_loops(), + pSample->get_rubberband(), + *pSample->get_velocity_envelope(), + *pSample->get_pan_envelope() + ); + if( !newSample ){ + continue; + } + delete pSample; + // insert new sample from newInstrument + AudioEngine::get_instance()->lock( RIGHT_HERE ); + pLayer->set_sample( newSample ); + AudioEngine::get_instance()->unlock(); - } + } + } } } } @@ -610,7 +616,7 @@ } } Preferences::get_instance()->setRubberBandCalcTime(time(NULL) - sTime); - engine->setBPM(oldBPM); + pHydrogen->setBPM(oldBPM); closeBtn->setEnabled(true); resampleComboBox->setEnabled(true); okBtn->setEnabled(true); @@ -630,15 +636,18 @@ Instrument *pInstr = songInstrList->get( nInstr ); assert( pInstr ); if ( pInstr ){ - for ( int nLayer = 0; nLayer < MAX_LAYERS; nLayer++ ) { - InstrumentLayer *pLayer = pInstr->get_layer( nLayer ); - if ( pLayer ) { - Sample *pSample = pLayer->get_sample(); - if ( pSample ) { - if( pSample->get_rubberband().use ) { - return true; - } - } + for (std::vector::iterator it = pInstr->get_components()->begin() ; it != pInstr->get_components()->end(); ++it) { + InstrumentComponent* pCompo = *it; + for ( int nLayer = 0; nLayer < MAX_LAYERS; nLayer++ ) { + InstrumentLayer *pLayer = pCompo->get_layer( nLayer ); + if ( pLayer ) { + Sample *pSample = pLayer->get_sample(); + if ( pSample ) { + if( pSample->get_rubberband().use ) { + return true; + } + } + } } } } diff -Nru hydrogen-0.9.6.1/src/gui/src/HydrogenApp.cpp hydrogen-0.9.7/src/gui/src/HydrogenApp.cpp --- hydrogen-0.9.6.1/src/gui/src/HydrogenApp.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/HydrogenApp.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -92,14 +92,7 @@ //setup the undo stack m_undoStack = new QUndoStack( this ); - // set initial title - QString qsSongName( pFirstSong->__name ); - if( qsSongName == "Untitled Song" && !pFirstSong->get_filename().isEmpty() ){ - qsSongName = pFirstSong->get_filename(); - qsSongName = qsSongName.section( '/', -1 ); - } - - setWindowTitle( qsSongName ); + updateWindowTitle(); Preferences *pPref = Preferences::get_instance(); @@ -118,9 +111,6 @@ m_pPlaylistDialog = new PlaylistDialog( 0 ); m_pDirector = new Director( 0 ); -// m_pSampleEditor = new SampleEditor( 0 ); - - showInfoSplash(); // First time information } @@ -321,12 +311,7 @@ m_pSongEditorPanel->updateAll(); m_pPatternEditorPanel->updateSLnameLabel(); - QString songName( song->__name ); - if( songName == "Untitled Song" && !song->get_filename().isEmpty() ){ - songName = song->get_filename(); - songName = songName.section( '/', -1 ); - } - setWindowTitle( songName ); + updateWindowTitle(); m_pMainForm->updateRecentUsedSongList(); } @@ -385,7 +370,26 @@ getPlayerControl()->showMessage( msg, msec ); } -void HydrogenApp::setWindowTitle( const QString& title){ +void HydrogenApp::updateWindowTitle() +{ + Song *pSong = Hydrogen::get_instance()->getSong(); + assert(pSong); + + QString title; + + // special handling for initial title + QString qsSongName( pSong->__name ); + + if( qsSongName == "Untitled Song" && !pSong->get_filename().isEmpty() ){ + qsSongName = pSong->get_filename().section( '/', -1 ); + } + + if(pSong->get_is_modified()){ + title = qsSongName + " (" + QString(trUtf8("modified")) + ")"; + } else { + title = qsSongName; + } + m_pMainForm->setWindowTitle( ( "Hydrogen " + QString( get_version().c_str()) + QString( " - " ) + title ) ); } @@ -416,7 +420,7 @@ } -void HydrogenApp::showSampleEditor( QString name, int mSelectedLayer ) +void HydrogenApp::showSampleEditor( QString name, int mSelectedComponemt, int mSelectedLayer ) { if ( m_pSampleEditor ){ @@ -427,55 +431,11 @@ QApplication::restoreOverrideCursor(); } QApplication::setOverrideCursor(Qt::WaitCursor); - m_pSampleEditor = new SampleEditor( 0, mSelectedLayer, name ); + m_pSampleEditor = new SampleEditor( 0, mSelectedComponemt, mSelectedLayer, name ); m_pSampleEditor->show(); QApplication::restoreOverrideCursor(); } - - -void HydrogenApp::showInfoSplash() -{ - QString sDocPath = H2Core::Filesystem::doc_dir().append("/infoSplash"); - - QDir dir(sDocPath); - if ( !dir.exists() ) { - ERRORLOG( QString("[showInfoSplash] Directory ").append( sDocPath ).append( " not found." ) ); - return; - } - - QString sFilename; - int nNewsID = 0; - QFileInfoList list = dir.entryInfoList(); - - for ( int i =0; i < list.size(); ++i ) { - QString sFile = list.at( i ).fileName(); - - if ( sFile == "." || sFile == ".." ) { - continue; - } - - int nPos = sFile.lastIndexOf( "-" ); - QString sNewsID = sFile.mid( nPos + 1, sFile.length() - nPos - 1 ); - int nID = sNewsID.toInt(); - if ( nID > nNewsID ) { - sFilename = sFile; - } - // INFOLOG( "news: " + sFilename + " id: " + sNewsID ); - } - INFOLOG( "[showInfoSplash] Selected news: " + sFilename ); - - QString sLastRead = Preferences::get_instance()->getLastNews(); - if ( sLastRead != sFilename && !sFilename.isEmpty() ) { - QString sDocURI = sDocPath; - sDocURI.append( "/" ).append( sFilename ); - SimpleHTMLBrowser *m_pFirstTimeInfo = new SimpleHTMLBrowser( m_pMainForm, sDocPath, sDocURI, SimpleHTMLBrowser::WELCOME ); - if ( m_pFirstTimeInfo->exec() == QDialog::Accepted ) { - Preferences::get_instance()->setLastNews( sFilename ); - } - } -} - void HydrogenApp::onDrumkitLoad( QString name ){ setStatusBarMessage( trUtf8( "Drumkit loaded: [%1]" ).arg( name ), 2000 ); m_pPatternEditorPanel->updateSLnameLabel( ); @@ -485,6 +445,10 @@ m_pPatternEditorPanel->displayorHidePrePostCB(); } +void HydrogenApp::songModifiedEvent() +{ + updateWindowTitle(); +} void HydrogenApp::onEventQueueTimer() { @@ -509,6 +473,10 @@ pListener->patternModifiedEvent(); break; + case EVENT_SONG_MODIFIED: + songModifiedEvent(); + break; + case EVENT_SELECTED_PATTERN_CHANGED: pListener->selectedPatternChangedEvent(); break; diff -Nru hydrogen-0.9.6.1/src/gui/src/HydrogenApp.h hydrogen-0.9.7/src/gui/src/HydrogenApp.h --- hydrogen-0.9.6.1/src/gui/src/HydrogenApp.h 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/HydrogenApp.h 2016-11-05 08:22:50.000000000 +0000 @@ -76,7 +76,7 @@ void showAudioEngineInfoForm(); void showPlaylistDialog(); void showDirector(); - void showSampleEditor( QString name, int mSelectedLayer ); + void showSampleEditor( QString name, int mSelectedComponemt, int mSelectedLayer ); Mixer* getMixer() { return m_pMixer; } MainForm* getMainForm() { return m_pMainForm; } @@ -97,7 +97,7 @@ void setStatusBarMessage( const QString& msg, int msec = 0 ); void setScrollStatusBarMessage( const QString& msg, int msec = 0, bool test = true ); - void setWindowTitle( const QString& title); + void updateWindowTitle(); #ifdef H2CORE_HAVE_LADSPA LadspaFXProperties* getLadspaFXProperties(uint nFX) { return m_pLadspaFXProperties[nFX]; } @@ -116,6 +116,7 @@ void onEventQueueTimer(); void currentTabChanged(int); + private: static HydrogenApp *m_pInstance; ///< HydrogenApp instance @@ -142,9 +143,8 @@ // implement EngineListener interface void engineError(uint nErrorCode); - //void setupTopLevelInterface(); void setupSinglePanedInterface(); - void showInfoSplash(); + virtual void songModifiedEvent(); }; diff -Nru hydrogen-0.9.6.1/src/gui/src/InstrumentEditor/InstrumentEditor.cpp hydrogen-0.9.7/src/gui/src/InstrumentEditor/InstrumentEditor.cpp --- hydrogen-0.9.6.1/src/gui/src/InstrumentEditor/InstrumentEditor.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/InstrumentEditor/InstrumentEditor.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -30,8 +30,10 @@ #include #include #include +#include #include #include +#include #include #include #include @@ -43,6 +45,7 @@ #include "../widgets/ClickableLabel.h" #include "../widgets/Button.h" #include "../widgets/LCD.h" +#include "../widgets/LCDCombo.h" #include "../widgets/Fader.h" #include "InstrumentEditor.h" #include "WaveDisplay.h" @@ -52,25 +55,25 @@ const char* InstrumentEditor::__class_name = "InstrumentEditor"; InstrumentEditor::InstrumentEditor( QWidget* pParent ) - : QWidget( pParent ) - , Object( __class_name ) - , m_pInstrument( NULL ) - , m_nSelectedLayer( 0 ) + : QWidget( pParent ) + , Object( __class_name ) + , m_pInstrument( NULL ) + , m_nSelectedLayer( 0 ) { setFixedWidth( 290 ); -// Instrument properties top + // Instrument properties top m_pInstrumentPropTop = new PixmapWidget( this ); m_pInstrumentPropTop->setPixmap( "/instrumentEditor/instrumentTab_top.png" ); m_pShowInstrumentBtn = new ToggleButton( - m_pInstrumentPropTop, - "/skin_btn_on.png", - "/skin_btn_off.png", - "/skin_btn_over.png", - QSize( 100, 17 ), - true - ); + m_pInstrumentPropTop, + "/skin_btn_on.png", + "/skin_btn_off.png", + "/skin_btn_over.png", + QSize( 100, 17 ), + true + ); m_pShowInstrumentBtn->setText(trUtf8("General")); m_pShowInstrumentBtn->setToolTip( trUtf8( "Show instrument properties" ) ); connect( m_pShowInstrumentBtn, SIGNAL( clicked(Button*) ), this, SLOT( buttonClicked(Button*) ) ); @@ -79,81 +82,90 @@ m_pShowLayersBtn = new ToggleButton( - m_pInstrumentPropTop, - "/skin_btn_on.png", - "/skin_btn_off.png", - "/skin_btn_over.png", - QSize( 100, 17 ), - true - ); + m_pInstrumentPropTop, + "/skin_btn_on.png", + "/skin_btn_off.png", + "/skin_btn_over.png", + QSize( 100, 17 ), + true + ); m_pShowLayersBtn->setText( trUtf8("Layers") ); m_pShowLayersBtn->setToolTip( trUtf8( "Show layers properties" ) ); connect( m_pShowLayersBtn, SIGNAL( clicked(Button*) ), this, SLOT( buttonClicked(Button*) ) ); m_pShowLayersBtn->move( 144, 7 ); -// Instrument properties + // Instrument properties m_pInstrumentProp = new PixmapWidget( this ); m_pInstrumentProp->move(0, 31); - m_pInstrumentProp->setPixmap( "/instrumentEditor/instrumentTab.png" ); + m_pInstrumentProp->setPixmap( "/instrumentEditor/instrumentTab_new.png" ); m_pNameLbl = new ClickableLabel( m_pInstrumentProp ); m_pNameLbl->setGeometry( 8, 5, 275, 28 ); - + ///////////// //Midi Out - + m_pMidiOutChannelLCD = new LCDDisplay( m_pInstrumentProp, LCDDigit::SMALL_BLUE, 4 ); - m_pMidiOutChannelLCD->move( 67, 243 ); + m_pMidiOutChannelLCD->move( 67, 261 ); + m_pMidiOutChannelLCD->setToolTip(QString(trUtf8("Midi out channel"))); + m_pAddMidiOutChannelBtn = new Button( - m_pInstrumentProp, - "/lcd/LCDSpinBox_up_on.png", - "/lcd/LCDSpinBox_up_off.png", - "/lcd/LCDSpinBox_up_over.png", - QSize( 16, 8 ) - ); + m_pInstrumentProp, + "/lcd/LCDSpinBox_up_on.png", + "/lcd/LCDSpinBox_up_off.png", + "/lcd/LCDSpinBox_up_over.png", + QSize( 16, 8 ) + ); - m_pAddMidiOutChannelBtn->move( 109, 243 ); + m_pAddMidiOutChannelBtn->move( 109, 260 ); connect( m_pAddMidiOutChannelBtn, SIGNAL( clicked(Button*) ), this, SLOT( midiOutChannelBtnClicked(Button*) ) ); m_pDelMidiOutChannelBtn = new Button( - m_pInstrumentProp, - "/lcd/LCDSpinBox_down_on.png", - "/lcd/LCDSpinBox_down_off.png", - "/lcd/LCDSpinBox_down_over.png", - QSize(16,8) - ); - m_pDelMidiOutChannelBtn->move( 109, 251 ); + m_pInstrumentProp, + "/lcd/LCDSpinBox_down_on.png", + "/lcd/LCDSpinBox_down_off.png", + "/lcd/LCDSpinBox_down_over.png", + QSize(16,8) + ); + m_pDelMidiOutChannelBtn->move( 109, 269 ); connect( m_pDelMidiOutChannelBtn, SIGNAL( clicked(Button*) ), this, SLOT( midiOutChannelBtnClicked(Button*) ) ); - + + /// m_pMidiOutNoteLCD = new LCDDisplay( m_pInstrumentProp, LCDDigit::SMALL_BLUE, 4 ); - m_pMidiOutNoteLCD->move( 160, 243 ); + m_pMidiOutNoteLCD->move( 160, 261 ); m_pAddMidiOutNoteBtn = new Button( - m_pInstrumentProp, - "/lcd/LCDSpinBox_up_on.png", - "/lcd/LCDSpinBox_up_off.png", - "/lcd/LCDSpinBox_up_over.png", - QSize( 16, 8 ) - ); + m_pInstrumentProp, + "/lcd/LCDSpinBox_up_on.png", + "/lcd/LCDSpinBox_up_off.png", + "/lcd/LCDSpinBox_up_over.png", + QSize( 16, 8 ), + false, + true + ); + m_pMidiOutNoteLCD->setToolTip(QString(trUtf8("Midi out note"))); + - m_pAddMidiOutNoteBtn->move( 202, 243 ); + m_pAddMidiOutNoteBtn->move( 202, 260 ); connect( m_pAddMidiOutNoteBtn, SIGNAL( clicked(Button*) ), this, SLOT( midiOutNoteBtnClicked(Button*) ) ); m_pDelMidiOutNoteBtn = new Button( - m_pInstrumentProp, - "/lcd/LCDSpinBox_down_on.png", - "/lcd/LCDSpinBox_down_off.png", - "/lcd/LCDSpinBox_down_over.png", - QSize(16,8) - ); - m_pDelMidiOutNoteBtn->move( 202, 251 ); + m_pInstrumentProp, + "/lcd/LCDSpinBox_down_on.png", + "/lcd/LCDSpinBox_down_off.png", + "/lcd/LCDSpinBox_down_over.png", + QSize(16,8), + false, + true + ); + m_pDelMidiOutNoteBtn->move( 202, 269 ); connect( m_pDelMidiOutNoteBtn, SIGNAL( clicked(Button*) ), this, SLOT( midiOutNoteBtnClicked(Button*) ) ); - + ///////////// QFont boldFont; @@ -162,17 +174,17 @@ connect( m_pNameLbl, SIGNAL( labelClicked(ClickableLabel*) ), this, SLOT( labelClicked(ClickableLabel*) ) ); m_pRandomPitchRotary = new Rotary( m_pInstrumentProp, Rotary::TYPE_NORMAL, trUtf8( "Random pitch factor" ), false, true ); - m_pRandomPitchRotary->move( 117, 192 ); + m_pRandomPitchRotary->move( 117, 210 ); connect( m_pRandomPitchRotary, SIGNAL( valueChanged(Rotary*) ), this, SLOT( rotaryChanged(Rotary*) ) ); // Filter m_pFilterBypassBtn = new ToggleButton( - m_pInstrumentProp, - "/instrumentEditor/bypass_on.png", - "/instrumentEditor/bypass_off.png", - "/instrumentEditor/bypass_over.png", - QSize( 30, 13 ) - ); + m_pInstrumentProp, + "/instrumentEditor/bypass_on.png", + "/instrumentEditor/bypass_off.png", + "/instrumentEditor/bypass_over.png", + QSize( 30, 13 ) + ); connect( m_pFilterBypassBtn, SIGNAL( clicked(Button*) ), this, SLOT( filterActiveBtnClicked(Button*) ) ); m_pCutoffRotary = new Rotary( m_pInstrumentProp, Rotary::TYPE_NORMAL, trUtf8( "Filter Cutoff" ), false, true ); @@ -181,9 +193,9 @@ m_pResonanceRotary = new Rotary( m_pInstrumentProp, Rotary::TYPE_NORMAL, trUtf8( "Filter resonance" ), false, true ); connect( m_pResonanceRotary, SIGNAL( valueChanged(Rotary*) ), this, SLOT( rotaryChanged(Rotary*) ) ); - m_pFilterBypassBtn->move( 70, 152 ); - m_pCutoffRotary->move( 117, 146 ); - m_pResonanceRotary->move( 170, 146 ); + m_pFilterBypassBtn->move( 70, 170 ); + m_pCutoffRotary->move( 117, 164 ); + m_pResonanceRotary->move( 170, 164 ); //~ Filter // ADSR @@ -213,52 +225,154 @@ m_pMuteGroupLCD->move( 160, 105 ); m_pAddMuteGroupBtn = new Button( - m_pInstrumentProp, - "/lcd/LCDSpinBox_up_on.png", - "/lcd/LCDSpinBox_up_off.png", - "/lcd/LCDSpinBox_up_over.png", - QSize( 16, 8 ) - ); + m_pInstrumentProp, + "/lcd/LCDSpinBox_up_on.png", + "/lcd/LCDSpinBox_up_off.png", + "/lcd/LCDSpinBox_up_over.png", + QSize( 16, 8 ) + ); m_pAddMuteGroupBtn->move( 202, 104 ); connect( m_pAddMuteGroupBtn, SIGNAL( clicked(Button*) ), this, SLOT( muteGroupBtnClicked(Button*) ) ); m_pDelMuteGroupBtn = new Button( - m_pInstrumentProp, - "/lcd/LCDSpinBox_down_on.png", - "/lcd/LCDSpinBox_down_off.png", - "/lcd/LCDSpinBox_down_over.png", - QSize(16,8) - ); + m_pInstrumentProp, + "/lcd/LCDSpinBox_down_on.png", + "/lcd/LCDSpinBox_down_off.png", + "/lcd/LCDSpinBox_down_over.png", + QSize(16,8) + ); m_pDelMuteGroupBtn->move( 202, 113 ); connect( m_pDelMuteGroupBtn, SIGNAL( clicked(Button*) ), this, SLOT( muteGroupBtnClicked(Button*) ) ); - m_pIsStopNoteCheckBox = new QCheckBox ( trUtf8( "Auto-Stop-Note" ), m_pInstrumentProp ); - m_pIsStopNoteCheckBox->move( 15, 300 ); + m_pIsStopNoteCheckBox = new QCheckBox ( trUtf8( "" ), m_pInstrumentProp ); + m_pIsStopNoteCheckBox->move( 63, 138 ); m_pIsStopNoteCheckBox->setToolTip( trUtf8( "Stop the current playing instrument-note before trigger the next note sample." ) ); connect( m_pIsStopNoteCheckBox, SIGNAL( toggled( bool ) ), this, SLOT( onIsStopNoteCheckBoxClicked( bool ) ) ); -//~ Instrument properties + m_pApplyVelocity = new QCheckBox ( trUtf8( "" ), m_pInstrumentProp ); + m_pApplyVelocity->move( 153, 138 ); + m_pApplyVelocity->setToolTip( trUtf8( "Don't change the layers' gain based on velocity" ) ); + connect( m_pApplyVelocity, SIGNAL( toggled( bool ) ), this, SLOT( onIsApplyVelocityCheckBoxClicked( bool ) ) ); + + ////////////////////////// + // HiHat setup + + m_pHihatGroupLCD = new LCDDisplay( m_pInstrumentProp, LCDDigit::SMALL_BLUE, 4 ); + m_pHihatGroupLCD->move( 27, 307 ); + + m_pAddHihatGroupBtn = new Button( + m_pInstrumentProp, + "/lcd/LCDSpinBox_up_on.png", + "/lcd/LCDSpinBox_up_off.png", + "/lcd/LCDSpinBox_up_over.png", + QSize( 16, 8 ) + ); + m_pAddHihatGroupBtn->move( 69, 306 ); + connect( m_pAddHihatGroupBtn, SIGNAL( clicked(Button*) ), this, SLOT( hihatGroupClicked(Button*) ) ); + + m_pDelHihatGroupBtn = new Button( + m_pInstrumentProp, + "/lcd/LCDSpinBox_down_on.png", + "/lcd/LCDSpinBox_down_off.png", + "/lcd/LCDSpinBox_down_over.png", + QSize(16,8) + ); + m_pDelHihatGroupBtn->move( 69, 315 ); + connect( m_pDelHihatGroupBtn, SIGNAL( clicked(Button*) ), this, SLOT( hihatGroupClicked(Button*) ) ); + + m_pHihatMinRangeLCD = new LCDDisplay( m_pInstrumentProp, LCDDigit::SMALL_BLUE, 4 ); + m_pHihatMinRangeLCD->move( 137, 307 ); + + m_pAddHihatMinRangeBtn = new Button( + m_pInstrumentProp, + "/lcd/LCDSpinBox_up_on.png", + "/lcd/LCDSpinBox_up_off.png", + "/lcd/LCDSpinBox_up_over.png", + QSize( 16, 8 ), + false, + true + ); + m_pAddHihatMinRangeBtn->move( 179, 306 ); + connect( m_pAddHihatMinRangeBtn, SIGNAL( clicked(Button*) ), this, SLOT( hihatMinRangeBtnClicked(Button*) ) ); + + m_pDelHihatMinRangeBtn = new Button( + m_pInstrumentProp, + "/lcd/LCDSpinBox_down_on.png", + "/lcd/LCDSpinBox_down_off.png", + "/lcd/LCDSpinBox_down_over.png", + QSize(16,8), + false, + true + ); + m_pDelHihatMinRangeBtn->move( 179, 315 ); + connect( m_pDelHihatMinRangeBtn, SIGNAL( clicked(Button*) ), this, SLOT( hihatMinRangeBtnClicked(Button*) ) ); + + + m_pHihatMaxRangeLCD = new LCDDisplay( m_pInstrumentProp, LCDDigit::SMALL_BLUE, 4 ); + m_pHihatMaxRangeLCD->move( 202, 307 ); + + m_pAddHihatMaxRangeBtn = new Button( + m_pInstrumentProp, + "/lcd/LCDSpinBox_up_on.png", + "/lcd/LCDSpinBox_up_off.png", + "/lcd/LCDSpinBox_up_over.png", + QSize( 16, 8 ), + false, + true + ); + m_pAddHihatMaxRangeBtn->move( 244, 306 ); + connect( m_pAddHihatMaxRangeBtn, SIGNAL( clicked(Button*) ), this, SLOT( hihatMaxRangeBtnClicked(Button*) ) ); + + m_pDelHihatMaxRangeBtn = new Button( + m_pInstrumentProp, + "/lcd/LCDSpinBox_down_on.png", + "/lcd/LCDSpinBox_down_off.png", + "/lcd/LCDSpinBox_down_over.png", + QSize(16,8), + false, + true + ); + m_pDelHihatMaxRangeBtn->move( 244, 315 ); + connect( m_pDelHihatMaxRangeBtn, SIGNAL( clicked(Button*) ), this, SLOT( hihatMaxRangeBtnClicked(Button*) ) ); + + // + //~ Instrument properties -// LAYER properties + + + // LAYER properties m_pLayerProp = new PixmapWidget( this ); m_pLayerProp->move( 0, 31 ); m_pLayerProp->hide(); - m_pLayerProp->setPixmap( "/instrumentEditor/layerTabnew.png" ); - + m_pLayerProp->setPixmap( "/instrumentEditor/layerTabsupernew.png" ); + // Component + m_pCompoNameLbl = new ClickableLabel( m_pLayerProp ); + m_pCompoNameLbl->setGeometry( 8, 5, 275, 28 ); + m_pCompoNameLbl->setFont( boldFont ); + connect( m_pCompoNameLbl, SIGNAL( labelClicked(ClickableLabel*) ), this, SLOT( labelCompoClicked(ClickableLabel*) ) ); + + m_buttonDropDownCompo = new Button( m_pLayerProp, + "/instrumentEditor/btn_dropdown_on.png", + "/instrumentEditor/btn_dropdown_off.png", + "/instrumentEditor/btn_dropdown_over.png", + QSize(13, 13) + ); + m_buttonDropDownCompo->move( 272, 10 ); + connect( m_buttonDropDownCompo, SIGNAL( clicked( Button* ) ), this, SLOT( onClick( Button* ) ) ); // Layer preview m_pLayerPreview = new LayerPreview( NULL ); - + m_pLayerScrollArea = new QScrollArea( m_pLayerProp); m_pLayerScrollArea->setFrameShape( QFrame::NoFrame ); - m_pLayerScrollArea->move( 6, 4 ); + m_pLayerScrollArea->move( 6, 44 ); m_pLayerScrollArea->setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); if ( MAX_LAYERS > 16) m_pLayerScrollArea->setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOn ); @@ -270,39 +384,39 @@ // Waveform display m_pWaveDisplay = new WaveDisplay( m_pLayerProp ); m_pWaveDisplay->updateDisplay( NULL ); - m_pWaveDisplay->move( 5, 201 ); + m_pWaveDisplay->move( 5, 241 ); m_pLoadLayerBtn = new Button( - m_pLayerProp, - "/instrumentEditor/loadLayer_on.png", - "/instrumentEditor/loadLayer_off.png", - "/instrumentEditor/loadLayer_over.png", - QSize( 90, 13 ) - ); + m_pLayerProp, + "/instrumentEditor/loadLayer_on.png", + "/instrumentEditor/loadLayer_off.png", + "/instrumentEditor/loadLayer_over.png", + QSize( 90, 13 ) + ); m_pRemoveLayerBtn = new Button( - m_pLayerProp, - "/instrumentEditor/deleteLayer_on.png", - "/instrumentEditor/deleteLayer_off.png", - "/instrumentEditor/deleteLayer_over.png", - QSize( 90, 13 ) - ); + m_pLayerProp, + "/instrumentEditor/deleteLayer_on.png", + "/instrumentEditor/deleteLayer_off.png", + "/instrumentEditor/deleteLayer_over.png", + QSize( 90, 13 ) + ); m_pSampleEditorBtn = new Button( - m_pLayerProp, - "/instrumentEditor/editLayer_on.png", - "/instrumentEditor/editLayer_off.png", - "/instrumentEditor/editLayer_over.png", - QSize( 90, 13 ) - ); + m_pLayerProp, + "/instrumentEditor/editLayer_on.png", + "/instrumentEditor/editLayer_off.png", + "/instrumentEditor/editLayer_over.png", + QSize( 90, 13 ) + ); m_pLoadLayerBtn->move( 48, 267 ); m_pRemoveLayerBtn->move( 145, 267 ); - m_pLoadLayerBtn->move( 6, 266 ); - m_pRemoveLayerBtn->move( 99, 266 ); - m_pSampleEditorBtn->move( 191, 266 ); + m_pLoadLayerBtn->move( 6, 306 ); + m_pRemoveLayerBtn->move( 99, 306 ); + m_pSampleEditorBtn->move( 191, 306 ); connect( m_pLoadLayerBtn, SIGNAL( clicked(Button*) ), this, SLOT( buttonClicked(Button*) ) ); connect( m_pRemoveLayerBtn, SIGNAL( clicked(Button*) ), this, SLOT( buttonClicked(Button*) ) ); @@ -312,6 +426,10 @@ m_pLayerGainRotary = new Rotary( m_pLayerProp, Rotary::TYPE_NORMAL, trUtf8( "Layer gain" ), false, false ); connect( m_pLayerGainRotary, SIGNAL( valueChanged(Rotary*) ), this, SLOT( rotaryChanged(Rotary*) ) ); + m_pCompoGainLCD = new LCDDisplay( m_pLayerProp, LCDDigit::SMALL_BLUE, 4 ); + m_pCompoGainRotary = new Rotary( m_pLayerProp, Rotary::TYPE_NORMAL, trUtf8( "Component volume" ), false, false ); + connect( m_pCompoGainRotary, SIGNAL( valueChanged(Rotary*) ), this, SLOT( rotaryChanged(Rotary*) ) ); + m_pLayerPitchCoarseLCD = new LCDDisplay( m_pLayerProp, LCDDigit::SMALL_BLUE, 4 ); m_pLayerPitchFineLCD = new LCDDisplay( m_pLayerProp, LCDDigit::SMALL_BLUE, 4 ); @@ -325,21 +443,53 @@ m_pLayerPitchFineRotary->setMax( 50.0 ); connect( m_pLayerPitchFineRotary, SIGNAL( valueChanged(Rotary*) ), this, SLOT( rotaryChanged(Rotary*) ) ); - m_pLayerGainLCD->move( 54, 301 + 3 ); - m_pLayerGainRotary->move( 102, 301 ); + m_pLayerGainLCD->move( 54, 341 + 3 ); + m_pLayerGainRotary->move( 102, 341 ); + + m_pCompoGainLCD->move( 151, 341 + 3 ); + m_pCompoGainRotary->move( 199, 341 ); - m_pLayerPitchCoarseLCD->move( 54, 360 + 3 ); - m_pLayerPitchCoarseRotary->move( 102, 360 ); - m_pLayerPitchFineLCD->move( 151, 360 + 3 ); - m_pLayerPitchFineRotary->move( 199, 360 ); -//~ Layer properties + m_pLayerPitchCoarseLCD->move( 54, 391 + 3 ); + m_pLayerPitchCoarseRotary->move( 102, 391 ); + m_pLayerPitchFineLCD->move( 151, 391 + 3 ); + m_pLayerPitchFineRotary->move( 199, 391 ); + m_sampleSelectionAlg = new LCDCombo(m_pLayerProp, 25); + m_sampleSelectionAlg->move( 60, 434 ); + m_sampleSelectionAlg->setToolTip( trUtf8("Select pattern size") ); + m_sampleSelectionAlg->addItem( QString( "First in Velocity" ) ); + m_sampleSelectionAlg->addItem( QString( "Round Robin" ) ); + m_sampleSelectionAlg->addItem( QString( "Random" ) ); + m_sampleSelectionAlg->update(); + connect( m_sampleSelectionAlg, SIGNAL( valueChanged( QString ) ), this, SLOT( pSampleSelectionChanged( QString ) ) ); + //~ Layer properties + //component handling + QStringList itemsCompo; + popCompo = new QMenu( this ); + itemsCompo.clear(); + + std::vector* compoList = Hydrogen::get_instance()->getSong()->get_components(); + for (std::vector::iterator it = compoList->begin() ; it != compoList->end(); ++it) { + DrumkitComponent* p_compo = *it; + if( !itemsCompo.contains( p_compo->get_name() ) ) + itemsCompo.append( p_compo->get_name() ); + } + itemsCompo.append("--sep--"); + itemsCompo.append("add"); + itemsCompo.append("delete"); + itemsCompo.append("rename"); + + m_nSelectedComponent = compoList->front()->get_id(); + + connect( popCompo, SIGNAL( triggered(QAction*) ), this, SLOT( compoChangeAddDelete(QAction*) ) ); + update(); + //~component handling selectLayer( m_nSelectedLayer ); @@ -347,6 +497,9 @@ HydrogenApp::get_instance()->addEventListener(this); selectedInstrumentChangedEvent(); // force an update + + // this will force an update... + EventQueue::get_instance()->push_event( EVENT_SELECTED_INSTRUMENT_CHANGED, -1 ); } @@ -410,6 +563,9 @@ //Stop Note m_pIsStopNoteCheckBox->setChecked( m_pInstrument->is_stop_notes() ); + //Ignore Velocity + m_pApplyVelocity->setChecked( m_pInstrument->get_apply_velocity() ); + // instr gain char tmp[20]; sprintf( tmp, "%#.2f", m_pInstrument->get_gain()); @@ -421,32 +577,108 @@ if (m_pInstrument->get_mute_group() == -1 ) { sMuteGroup = "Off"; } - m_pMuteGroupLCD->setText( sMuteGroup ); - + m_pMuteGroupLCD->setText( sMuteGroup ); + // midi out QString sMidiOutChannel = QString("%1").arg( m_pInstrument->get_midi_out_channel()+1); if (m_pInstrument->get_midi_out_channel() == -1 ) { sMidiOutChannel = "Off"; } m_pMidiOutChannelLCD->setText( sMidiOutChannel ); - + + // hihat + QString sHHGroup = QString("%1").arg( m_pInstrument->get_hihat_grp() ); + if (m_pInstrument->get_hihat_grp() == -1 ) { + sHHGroup = "Off"; + } + m_pHihatGroupLCD->setText( sHHGroup ); + QString sHiHatMinRange = QString("%1").arg( m_pInstrument->get_lower_cc() ); + m_pHihatMinRangeLCD->setText( sHiHatMinRange ); + QString sHiHatMaxRange = QString("%1").arg( m_pInstrument->get_higher_cc() ); + m_pHihatMaxRangeLCD->setText( sHiHatMaxRange ); + //Convert note id into notation { int note = m_pInstrument->get_midi_out_note(); int octave = (note / 12) - 2; const char *noteStrs[12] = { "C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B" }; QString sMidiOutNote = QString(noteStrs[note % 12]) + QString::number(octave); - m_pMidiOutNoteLCD->setText( sMidiOutNote ); + m_pMidiOutNoteLCD->setText( sMidiOutNote ); } - // select the last valid layer - for (int i = MAX_LAYERS - 1; i >= 0; i-- ) { - if ( m_pInstrument->get_layer( i ) ) { - m_nSelectedLayer = i; + /* + * m_sampleSelectionAlg->addItem( QString( "First in Velocity" ) ); + * m_sampleSelectionAlg->addItem( QString( "Round Robin" ) ); + * m_sampleSelectionAlg->addItem( QString( "Random" ) ); + **/ + switch ( m_pInstrument->sample_selection_alg() ) { + case Instrument::VELOCITY: + m_sampleSelectionAlg->set_text( "First in Velocity" ); + break; + case Instrument::RANDOM: + m_sampleSelectionAlg->set_text( "Random" ); + break; + case Instrument::ROUND_ROBIN: + m_sampleSelectionAlg->set_text( "Round Robin" ); + break; + } + + itemsCompo.clear(); + std::vector* compoList = Hydrogen::get_instance()->getSong()->get_components(); + for (std::vector::iterator it = compoList->begin() ; it != compoList->end(); ++it) { + DrumkitComponent* p_compo = *it; + if( !itemsCompo.contains( p_compo->get_name() ) ) + itemsCompo.append( p_compo->get_name() ); + } + itemsCompo.append("--sep--"); + itemsCompo.append("add"); + itemsCompo.append("delete"); + itemsCompo.append("rename"); + + update(); + + bool p_found = false; + for (std::vector::iterator it = compoList->begin() ; it != compoList->end(); ++it) { + DrumkitComponent* p_compo = *it; + if ( p_compo->get_id() == m_nSelectedComponent ) { + p_found = true; break; } } - m_pWaveDisplay->updateDisplay( m_pInstrument->get_layer( m_nSelectedLayer ) ); + if ( !p_found ) + m_nSelectedComponent = compoList->front()->get_id(); + + DrumkitComponent* p_tmpCompo = Hydrogen::get_instance()->getSong()->get_component( m_nSelectedComponent ); + + assert(p_tmpCompo); + + m_pCompoNameLbl->setText( p_tmpCompo->get_name() ); + + if(m_nSelectedLayer >= 0){ + InstrumentComponent* component = m_pInstrument->get_component( m_nSelectedComponent ); + if(component) { + + char tmp[20]; + sprintf( tmp, "%#.2f", component->get_gain()); + m_pCompoGainLCD->setText( tmp ); + + m_pCompoGainRotary->setValue( component->get_gain() / 5.0 ); + + InstrumentLayer* p_layer = component->get_layer( m_nSelectedLayer ); + if(p_layer) { + m_pWaveDisplay->updateDisplay( p_layer ); + } + else { + m_pWaveDisplay->updateDisplay( NULL ); + } + } + else { + m_pWaveDisplay->updateDisplay( NULL ); + } + } + else{ + m_pWaveDisplay->updateDisplay( NULL ); + } } else { m_pNameLbl->setText( QString( "NULL Instrument..." ) ); @@ -494,33 +726,51 @@ sprintf( tmp, "%#.2f", fVal ); m_pLayerGainLCD->setText( tmp ); - H2Core::InstrumentLayer *pLayer = m_pInstrument->get_layer( m_nSelectedLayer ); - if ( pLayer ) { - pLayer->set_gain( fVal ); - m_pWaveDisplay->updateDisplay( pLayer ); + InstrumentComponent* pCompo = m_pInstrument->get_component(m_nSelectedComponent); + if( pCompo ) { + H2Core::InstrumentLayer *pLayer = pCompo->get_layer( m_nSelectedLayer ); + if ( pLayer ) { + pLayer->set_gain( fVal ); + m_pWaveDisplay->updateDisplay( pLayer ); + } } } + else if ( ref == m_pCompoGainRotary ) { + fVal = fVal * 5.0; + char tmp[20]; + sprintf( tmp, "%#.2f", fVal ); + m_pCompoGainLCD->setText( tmp ); + + InstrumentComponent* pCompo = m_pInstrument->get_component(m_nSelectedComponent); + pCompo->set_gain( fVal ); + } else if ( ref == m_pLayerPitchCoarseRotary ) { //fVal = fVal * 24.0 - 12.0; m_pLayerPitchCoarseLCD->setText( QString( "%1" ).arg( (int)fVal ) ); - H2Core::InstrumentLayer *pLayer = m_pInstrument->get_layer( m_nSelectedLayer ); - if ( pLayer ) { - int nCoarse = (int)m_pLayerPitchCoarseRotary->getValue(); - float fFine = m_pLayerPitchFineRotary->getValue() / 100.0; - pLayer->set_pitch( nCoarse + fFine ); - INFOLOG( QString("pitch: %1").arg( pLayer->get_pitch() ) ); + + InstrumentComponent* pCompo = m_pInstrument->get_component(m_nSelectedComponent); + if( pCompo ) { + H2Core::InstrumentLayer *pLayer = pCompo->get_layer( m_nSelectedLayer ); + if ( pLayer ) { + int nCoarse = (int)m_pLayerPitchCoarseRotary->getValue(); + float fFine = m_pLayerPitchFineRotary->getValue() / 100.0; + pLayer->set_pitch( nCoarse + fFine ); + INFOLOG( QString("pitch: %1").arg( pLayer->get_pitch() ) ); + } } } else if ( ref == m_pLayerPitchFineRotary ) { m_pLayerPitchFineLCD->setText( QString( "%1" ).arg( fVal ) ); - H2Core::InstrumentLayer *pLayer = m_pInstrument->get_layer( m_nSelectedLayer ); - if ( pLayer ) { - int nCoarse = (int)m_pLayerPitchCoarseRotary->getValue(); - float fFine = m_pLayerPitchFineRotary->getValue() / 100.0; - pLayer->set_pitch( nCoarse + fFine ); - INFOLOG( QString("pitch: %1").arg( pLayer->get_pitch()) ); + InstrumentComponent* pCompo = m_pInstrument->get_component(m_nSelectedComponent); + if( pCompo ) { + H2Core::InstrumentLayer *pLayer = pCompo->get_layer( m_nSelectedLayer ); + if ( pLayer ) { + int nCoarse = (int)m_pLayerPitchCoarseRotary->getValue(); + float fFine = m_pLayerPitchFineRotary->getValue() / 100.0; + pLayer->set_pitch( nCoarse + fFine ); + INFOLOG( QString("pitch: %1").arg( pLayer->get_pitch()) ); + } } - } else if ( ref == m_pInstrumentGain ) { fVal = fVal * 5.0; @@ -573,10 +823,23 @@ AudioEngine::get_instance()->lock( RIGHT_HERE ); if ( m_pInstrument ) { - H2Core::InstrumentLayer *pLayer = m_pInstrument->get_layer( m_nSelectedLayer ); - if ( pLayer ) { - m_pInstrument->set_layer( NULL, m_nSelectedLayer ); - delete pLayer; + InstrumentComponent* pCompo = m_pInstrument->get_component(m_nSelectedComponent); + if( pCompo ) { + H2Core::InstrumentLayer *pLayer = m_pInstrument->get_component(m_nSelectedComponent)->get_layer( m_nSelectedLayer ); + if ( pLayer ) { + m_pInstrument->get_component(m_nSelectedComponent)->set_layer( NULL, m_nSelectedLayer ); + delete pLayer; + } + + int p_count = 0; + for( int n = 0; n < MAX_LAYERS; n++ ) { + InstrumentLayer* layer = m_pInstrument->get_component(m_nSelectedComponent)->get_layer( n ); + if( layer ) + p_count++; + } + + if( p_count == 0 ) + m_pInstrument->get_components()->erase( m_pInstrument->get_components()->begin() + m_nSelectedComponent ); } } AudioEngine::get_instance()->unlock(); @@ -585,15 +848,18 @@ } else if ( pButton == m_pSampleEditorBtn ){ if ( m_pInstrument ) { - H2Core::InstrumentLayer *pLayer = m_pInstrument->get_layer( m_nSelectedLayer ); - if ( pLayer ) { - Sample* pSample = pLayer->get_sample(); - if( pSample == NULL) return; - QString name = pSample->get_filepath(); - HydrogenApp::get_instance()->showSampleEditor( name, m_nSelectedLayer ); + InstrumentComponent* pCompo = m_pInstrument->get_component(m_nSelectedComponent); + if( pCompo ) { + H2Core::InstrumentLayer *pLayer = pCompo->get_layer( m_nSelectedLayer ); + if ( pLayer ) { + Sample* pSample = pLayer->get_sample(); + if( pSample == NULL) return; + QString name = pSample->get_filepath(); + HydrogenApp::get_instance()->showSampleEditor( name, m_nSelectedComponent, m_nSelectedLayer ); + } } } - + } else { ERRORLOG( "[buttonClicked] unhandled button" ); @@ -620,7 +886,7 @@ if ( filename[2].isEmpty() ) return; - bool fnc = false; + bool fnc = false; if ( filename[0] == "true" ){ fnc = true; } @@ -630,57 +896,64 @@ int selectedLayer = m_nSelectedLayer; int firstSelection = selectedLayer; - - + + if (filename.size() > 2) { - - for(int i=2;i < filename.size();++i) + + for(int i=2;i < filename.size();++i) { selectedLayer = m_nSelectedLayer + i - 2; if( ( i-2 >= MAX_LAYERS ) || ( selectedLayer + 1 > MAX_LAYERS ) ) break; Sample *newSample = Sample::load( filename[i] ); - + H2Core::Instrument *pInstr = NULL; - + AudioEngine::get_instance()->lock( RIGHT_HERE ); Song *song = engine->getSong(); InstrumentList *instrList = song->get_instrument_list(); pInstr = instrList->get( engine->getSelectedInstrumentNumber() ); - - /* - if we're using multiple layers, we start inserting the first layer + + /* + if we're using multiple layers, we start inserting the first layer at m_nSelectedLayer and the next layer at m_nSelectedLayer+1 - */ - - H2Core::InstrumentLayer *pLayer = pInstr->get_layer( selectedLayer ); + */ + + InstrumentComponent *pCompo = pInstr->get_component(m_nSelectedComponent); + if( !pCompo ) { + pCompo = new InstrumentComponent( m_nSelectedComponent ); + pInstr->get_components()->push_back( pCompo ); + } + + H2Core::InstrumentLayer *pLayer = pInstr->get_component(m_nSelectedComponent)->get_layer( selectedLayer ); + if (pLayer != NULL) { // delete old sample Sample *oldSample = pLayer->get_sample(); delete oldSample; - + // insert new sample from newInstrument pLayer->set_sample( newSample ); } else { pLayer = new H2Core::InstrumentLayer(newSample); - pInstr->set_layer( pLayer, selectedLayer ); + pInstr->get_component(m_nSelectedComponent)->set_layer( pLayer, selectedLayer ); } - + if ( fnc ){ QString newFilename = filename[i].section( '/', -1 ); newFilename.replace( "." + newFilename.section( '.', -1 ), ""); m_pInstrument->set_name( newFilename ); } - + //set automatic velocity if ( filename[1] == "true" ){ setAutoVelocity(); } - + //pInstr->set_drumkit_name( "" ); // external sample, no drumkit info - + AudioEngine::get_instance()->unlock(); } @@ -697,7 +970,7 @@ int layerInUse[ MAX_LAYERS ] = {0}; int layers = 0; for ( int i = 0; i < MAX_LAYERS ; i++ ) { - InstrumentLayer *pLayers = m_pInstrument->get_layer( i ); + InstrumentLayer *pLayers = m_pInstrument->get_component(m_nSelectedComponent)->get_layer( i ); if ( pLayers ) { layers++; layerInUse[i] = i; @@ -709,7 +982,7 @@ for ( int i = 0; i < MAX_LAYERS ; i++ ) { if ( layerInUse[i] == i ){ layers--; - InstrumentLayer *pLayer = m_pInstrument->get_layer( i ); + InstrumentLayer *pLayer = m_pInstrument->get_component(m_nSelectedComponent)->get_layer( i ); if ( pLayer ) { pLayer->set_start_velocity( layers * velocityrange); pLayer->set_end_velocity( layers * velocityrange + velocityrange ); @@ -718,6 +991,35 @@ } } +void InstrumentEditor::labelCompoClicked( ClickableLabel* pRef ) +{ + UNUSED( pRef ); + + DrumkitComponent* p_compo = Hydrogen::get_instance()->getSong()->get_component( m_nSelectedComponent ); + + QString sOldName = p_compo->get_name(); + bool bIsOkPressed; + QString sNewName = QInputDialog::getText( this, "Hydrogen", trUtf8( "New component name" ), QLineEdit::Normal, sOldName, &bIsOkPressed ); + + if ( bIsOkPressed ) { + p_compo->set_name( sNewName ); + + selectedInstrumentChangedEvent(); + + // this will force an update... + EventQueue::get_instance()->push_event( EVENT_SELECTED_INSTRUMENT_CHANGED, -1 ); + } +} + +void InstrumentEditor::selectComponent( int nComponent ) +{ + if (!m_pInstrument) { + return; + } + + m_nSelectedComponent = nComponent; + m_pLayerPreview->set_selected_component(m_nSelectedComponent); +} void InstrumentEditor::labelClicked( ClickableLabel* pRef ) { @@ -731,12 +1033,12 @@ m_pInstrument->set_name( sNewName ); selectedInstrumentChangedEvent(); - #ifdef H2CORE_HAVE_JACK - AudioEngine::get_instance()->lock( RIGHT_HERE ); - Hydrogen *engine = Hydrogen::get_instance(); - engine->renameJackPorts(); - AudioEngine::get_instance()->unlock(); - #endif +#ifdef H2CORE_HAVE_JACK + AudioEngine::get_instance()->lock( RIGHT_HERE ); + Hydrogen *engine = Hydrogen::get_instance(); + engine->renameJackPorts(engine->getSong()); + AudioEngine::get_instance()->unlock(); +#endif // this will force an update... EventQueue::get_instance()->push_event( EVENT_SELECTED_INSTRUMENT_CHANGED, -1 ); @@ -756,31 +1058,61 @@ } m_nSelectedLayer = nLayer; - H2Core::InstrumentLayer *pLayer = m_pInstrument->get_layer( nLayer ); - m_pWaveDisplay->updateDisplay( pLayer ); - if (pLayer) { - char tmp[20]; + H2Core::InstrumentComponent *pComponent = m_pInstrument->get_component( m_nSelectedComponent ); + if(pComponent && nLayer >= 0 ){ + H2Core::InstrumentLayer *pLayer = pComponent->get_layer( nLayer ); + m_pWaveDisplay->updateDisplay( pLayer ); + if (pLayer) { + char tmp[20]; - // Layer GAIN - m_pLayerGainRotary->setValue( pLayer->get_gain() / 5.0 ); - sprintf( tmp, "%#.2f", pLayer->get_gain() ); - m_pLayerGainLCD->setText( tmp ); + // Layer GAIN + m_pLayerGainRotary->setValue( pLayer->get_gain() / 5.0 ); + sprintf( tmp, "%#.2f", pLayer->get_gain() ); + m_pLayerGainLCD->setText( tmp ); - // Layer PITCH - int nCoarsePitch = (int) ::round(pLayer->get_pitch()); - float fFinePitch = pLayer->get_pitch() - nCoarsePitch; - //INFOLOG( "fine pitch: " + to_string( fFinePitch ) ); - m_pLayerPitchCoarseRotary->setValue( nCoarsePitch ); - m_pLayerPitchFineRotary->setValue( fFinePitch * 100 ); + //Component GAIN + char tmp2[20]; + sprintf( tmp2, "%#.2f", pComponent->get_gain()); + m_pCompoGainRotary->setValue( pComponent->get_gain() / 5.0); + m_pCompoGainLCD->setText( tmp2 ); + + // Layer PITCH + int nCoarsePitch = (int) ::round(pLayer->get_pitch()); + float fFinePitch = pLayer->get_pitch() - nCoarsePitch; + //INFOLOG( "fine pitch: " + to_string( fFinePitch ) ); + m_pLayerPitchCoarseRotary->setValue( nCoarsePitch ); + m_pLayerPitchFineRotary->setValue( fFinePitch * 100 ); - m_pLayerPitchCoarseLCD->setText( QString( "%1" ).arg( nCoarsePitch ) ); - m_pLayerPitchFineLCD->setText( QString( "%1" ).arg( fFinePitch * 100 ) ); + m_pLayerPitchCoarseLCD->setText( QString( "%1" ).arg( nCoarsePitch ) ); + m_pLayerPitchFineLCD->setText( QString( "%1" ).arg( fFinePitch * 100 ) ); + } + else { + // Layer GAIN + m_pLayerGainRotary->setValue( 1.0 ); + m_pLayerGainLCD->setText( "" ); + + //Component GAIN + m_pCompoGainRotary->setValue( 1.0 ); + m_pCompoGainLCD->setText( "" ); + + // Layer PITCH + m_pLayerPitchCoarseRotary->setValue( 0.0 ); + m_pLayerPitchFineRotary->setValue( 0.0 ); + + m_pLayerPitchCoarseLCD->setText( "" ); + m_pLayerPitchFineLCD->setText( "" ); + } } else { + m_pWaveDisplay->updateDisplay( NULL ); + // Layer GAIN m_pLayerGainRotary->setValue( 1.0 ); m_pLayerGainLCD->setText( "" ); + m_pCompoGainRotary->setValue( 1.0 ); + m_pCompoGainLCD->setText( "" ); + // Layer PITCH m_pLayerPitchCoarseRotary->setValue( 0.0 ); m_pLayerPitchFineRotary->setValue( 0.0 ); @@ -814,6 +1146,14 @@ selectedInstrumentChangedEvent(); // force an update } +void InstrumentEditor::onIsApplyVelocityCheckBoxClicked( bool on ) +{ + assert( m_pInstrument ); + + m_pInstrument->set_apply_velocity( on ); + selectedInstrumentChangedEvent(); // force an update +} + void InstrumentEditor::midiOutChannelBtnClicked(Button *pRef) { assert( m_pInstrument ); @@ -842,15 +1182,166 @@ selectedInstrumentChangedEvent(); // force an update } +void InstrumentEditor::onClick(Button*) +{ + popCompo->popup( m_pCompoNameLbl->mapToGlobal( QPoint( m_pCompoNameLbl->width() - 40, m_pCompoNameLbl->height() / 2 ) ) ); +} + +void InstrumentEditor::update() +{ + //INFOLOG ( "update: "+toString(items.size()) ); + popCompo->clear(); + + for( int i = 0; i < itemsCompo.size(); i++ ) { + if ( itemsCompo.at(i) != "--sep--" ){ + popCompo->addAction( itemsCompo.at(i) ); + }else{ + popCompo->addSeparator(); + } + } +} + +int InstrumentEditor::findFreeDrumkitComponentId( int startingPoint ) +{ + bool bFoundFreeSlot = true; + std::vector* pDrumkitComponentList = Hydrogen::get_instance()->getSong()->get_components(); + for (std::vector::iterator it = pDrumkitComponentList->begin() ; it != pDrumkitComponentList->end(); ++it) { + DrumkitComponent* pDrumkitComponent = *it; + if( pDrumkitComponent->get_id() == startingPoint ) { + bFoundFreeSlot = false; + break; + } + } + + if(bFoundFreeSlot) + return startingPoint; + else + return findFreeDrumkitComponentId( startingPoint + 1 ); +} + +void InstrumentEditor::compoChangeAddDelete(QAction* pAction) +{ + QString sSelectedAction = pAction->text(); + + Hydrogen * pEngine = Hydrogen::get_instance(); + + if( sSelectedAction.compare("add") == 0 ) { + if ( m_pInstrument ) { + bool bIsOkPressed; + QString sNewName = QInputDialog::getText( this, "Hydrogen", trUtf8( "Component name" ), QLineEdit::Normal, "New Component", &bIsOkPressed ); + if ( bIsOkPressed ) { + DrumkitComponent* pDrumkitComponent = new DrumkitComponent( findFreeDrumkitComponentId(), sNewName ); + pEngine->getSong()->get_components()->push_back( pDrumkitComponent ); + + //InstrumentComponent* instrument_component = new InstrumentComponent( dm_component->get_id() ); + //instrument_component->set_gain( 1.0f ); + //m_pInstrument->get_components()->push_back( instrument_component ); + + m_nSelectedComponent = pDrumkitComponent->get_id(); + m_pLayerPreview->set_selected_component( pDrumkitComponent->get_id() ); + + selectedInstrumentChangedEvent(); + + // this will force an update... + EventQueue::get_instance()->push_event( EVENT_SELECTED_INSTRUMENT_CHANGED, -1 ); + +#ifdef H2CORE_HAVE_JACK + pEngine->renameJackPorts(pEngine->getSong()); +#endif + } + else { + // user entered nothing or pressed Cancel + } + } + } + else if( sSelectedAction.compare("delete") == 0 ) { + std::vector* pDrumkitComponents = pEngine->getSong()->get_components(); + + if(pDrumkitComponents->size() == 1){ + return; + } + + DrumkitComponent* pDrumkitComponent = pEngine->getSong()->get_component( m_nSelectedComponent ); + + InstrumentList* pInstruments = pEngine->getSong()->get_instrument_list(); + for ( int n = ( int )pInstruments->size() - 1; n >= 0; n-- ) { + Instrument* pInstrument = pInstruments->get( n ); + for( int o = 0 ; o < pInstrument->get_components()->size() ; o++ ) { + InstrumentComponent* pInstrumentComponent = pInstrument->get_components()->at( o ); + if( pInstrumentComponent->get_drumkit_componentID() == pDrumkitComponent->get_id() ) { + for( int nLayer = 0; nLayer < MAX_LAYERS; nLayer++ ) { + InstrumentLayer* pLayer = pInstrumentComponent->get_layer( nLayer ); + if( pLayer ) + delete pLayer; + } + pInstrument->get_components()->erase( pInstrument->get_components()->begin() + o );; + break; + } + } + } + + for ( int n = 0 ; n < pDrumkitComponents->size() ; n++ ) { + DrumkitComponent* pTmpDrumkitComponent = pDrumkitComponents->at( n ); + if( pTmpDrumkitComponent->get_id() == pDrumkitComponent->get_id() ) { + pDrumkitComponents->erase( pDrumkitComponents->begin() + n ); + break; + } + } + + m_nSelectedComponent = pDrumkitComponents->front()->get_id(); + + selectedInstrumentChangedEvent(); + // this will force an update... + EventQueue::get_instance()->push_event( EVENT_SELECTED_INSTRUMENT_CHANGED, -1 ); + } + else if( sSelectedAction.compare("rename") == 0 ) { + labelCompoClicked( NULL ); + } + else { + m_nSelectedComponent = -1; + std::vector* pDrumkitComponents = pEngine->getSong()->get_components(); + for (std::vector::iterator it = pDrumkitComponents->begin() ; it != pDrumkitComponents->end(); ++it) { + DrumkitComponent* pDrumkitComponent = *it; + if( pDrumkitComponent->get_name().compare( sSelectedAction ) == 0) { + m_nSelectedComponent = pDrumkitComponent->get_id(); + m_pCompoNameLbl->setText( pDrumkitComponent->get_name() ); + break; + } + } + + if( m_pInstrument && !m_pInstrument->get_component(m_nSelectedComponent)) { + INFOLOG("Component needs to be added"); + + InstrumentComponent* pInstrComponent = new InstrumentComponent( m_nSelectedComponent ); + pInstrComponent->set_gain( 1.0f ); + + m_pInstrument->get_components()->push_back( pInstrComponent ); + + + +#ifdef H2CORE_HAVE_JACK + pEngine->renameJackPorts(pEngine->getSong()); +#endif + } + + m_pLayerPreview->set_selected_component(m_nSelectedComponent); + + selectedInstrumentChangedEvent(); + + // this will force an update... + EventQueue::get_instance()->push_event( EVENT_SELECTED_INSTRUMENT_CHANGED, -1 ); + } +} + - void InstrumentEditor::rubberbandbpmchangeEvent() +void InstrumentEditor::rubberbandbpmchangeEvent() { - if( !Preferences::get_instance()->getRubberBandBatchMode() /*&& Preferences::get_instance()->__usetimeline */){ - //we return also if time-line is activated. this wont work. - // INFOLOG( "Tempo change: Recomputing rubberband samples is disabled" ); - return; - } -// INFOLOG( "Tempo change: Recomputing rubberband samples." ); + if( !Preferences::get_instance()->getRubberBandBatchMode() /*&& Preferences::get_instance()->__usetimeline */){ + //we return also if time-line is activated. this wont work. + // INFOLOG( "Tempo change: Recomputing rubberband samples is disabled" ); + return; + } + // INFOLOG( "Tempo change: Recomputing rubberband samples." ); Hydrogen *pEngine = Hydrogen::get_instance(); Song *song = pEngine->getSong(); assert(song); @@ -862,28 +1353,28 @@ assert( pInstr ); if ( pInstr ){ for ( int nLayer = 0; nLayer < MAX_LAYERS; nLayer++ ) { - InstrumentLayer *pLayer = pInstr->get_layer( nLayer ); + InstrumentLayer *pLayer = pInstr->get_component(m_nSelectedComponent)->get_layer( nLayer ); if ( pLayer ) { Sample *pSample = pLayer->get_sample(); if ( pSample ) { if( pSample->get_rubberband().use ) { //INFOLOG( QString("Instrument %1 Layer %2" ).arg(nInstr).arg(nLayer)); Sample *newSample = Sample::load( - pSample->get_filepath(), - pSample->get_loops(), - pSample->get_rubberband(), - *pSample->get_velocity_envelope(), - *pSample->get_pan_envelope() - ); + pSample->get_filepath(), + pSample->get_loops(), + pSample->get_rubberband(), + *pSample->get_velocity_envelope(), + *pSample->get_pan_envelope() + ); if( !newSample ){ continue; - } + } delete pSample; // insert new sample from newInstrument AudioEngine::get_instance()->lock( RIGHT_HERE ); pLayer->set_sample( newSample ); AudioEngine::get_instance()->unlock(); - + } } } @@ -893,3 +1384,59 @@ } } + +void InstrumentEditor::pSampleSelectionChanged( QString selected ) +{ + /* + "First in Velocity" + "Round Robin" + "Random" + */ + + assert( m_pInstrument ); + + if ( selected.compare("First in Velocity") == 0 ) + m_pInstrument->set_sample_selection_alg( Instrument::VELOCITY ); + else if ( selected.compare("Round Robin") == 0 ) + m_pInstrument->set_sample_selection_alg( Instrument::ROUND_ROBIN ); + else if ( selected.compare("Random") == 0) + m_pInstrument->set_sample_selection_alg( Instrument::RANDOM ); + + selectedInstrumentChangedEvent(); // force an update +} + +void InstrumentEditor::hihatGroupClicked(Button *pRef) +{ + assert( m_pInstrument ); + + if ( pRef == m_pAddHihatGroupBtn && m_pInstrument->get_hihat_grp() < 32 ) + m_pInstrument->set_hihat_grp( m_pInstrument->get_hihat_grp() + 1 ); + else if ( pRef == m_pDelHihatGroupBtn && m_pInstrument->get_hihat_grp() > -1 ) + m_pInstrument->set_hihat_grp( m_pInstrument->get_hihat_grp() - 1 ); + + selectedInstrumentChangedEvent(); // force an update +} + +void InstrumentEditor::hihatMinRangeBtnClicked(Button *pRef) +{ + assert( m_pInstrument ); + + if ( pRef == m_pAddHihatMinRangeBtn && m_pInstrument->get_lower_cc() < 127 ) + m_pInstrument->set_lower_cc( m_pInstrument->get_lower_cc() + 1 ); + else if ( pRef == m_pDelHihatMinRangeBtn && m_pInstrument->get_lower_cc() > 0 ) + m_pInstrument->set_lower_cc( m_pInstrument->get_lower_cc() - 1 ); + + selectedInstrumentChangedEvent(); // force an update +} + +void InstrumentEditor::hihatMaxRangeBtnClicked(Button *pRef) +{ + assert( m_pInstrument ); + + if ( pRef == m_pAddHihatMaxRangeBtn && m_pInstrument->get_higher_cc() < 127 ) + m_pInstrument->set_higher_cc( m_pInstrument->get_higher_cc() + 1); + else if ( pRef == m_pDelHihatMaxRangeBtn && m_pInstrument->get_higher_cc() > 0 ) + m_pInstrument->set_higher_cc( m_pInstrument->get_higher_cc() - 1); + + selectedInstrumentChangedEvent(); // force an update +} diff -Nru hydrogen-0.9.6.1/src/gui/src/InstrumentEditor/InstrumentEditor.h hydrogen-0.9.7/src/gui/src/InstrumentEditor/InstrumentEditor.h --- hydrogen-0.9.6.1/src/gui/src/InstrumentEditor/InstrumentEditor.h 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/InstrumentEditor/InstrumentEditor.h 2016-11-05 08:22:50.000000000 +0000 @@ -38,6 +38,7 @@ class ToggleButton; class ClickableLabel; class Rotary; +class LCDCombo; class WaveDisplay; class LayerPreview; @@ -47,7 +48,7 @@ /// class InstrumentEditor : public QWidget, public H2Core::Object, public EventListener { - H2_OBJECT + H2_OBJECT Q_OBJECT public: @@ -57,25 +58,39 @@ void selectLayer( int nLayer ); void setFileforLayer(QString filename ); + void selectComponent( int nComponent ); + // implements EventListener interface virtual void selectedInstrumentChangedEvent(); virtual void rubberbandbpmchangeEvent(); //~ implements EventListener interface + void update(); private slots: void rotaryChanged(Rotary *ref); void filterActiveBtnClicked(Button *ref); void buttonClicked(Button*); void labelClicked( ClickableLabel* pRef ); + void labelCompoClicked( ClickableLabel* pRef ); + void compoChangeAddDelete(QAction*); + void onClick(Button*); void muteGroupBtnClicked(Button *pRef); void onIsStopNoteCheckBoxClicked( bool on ); + void onIsApplyVelocityCheckBoxClicked( bool on); void midiOutChannelBtnClicked(Button *pRef); void midiOutNoteBtnClicked(Button *pRef); + void hihatGroupClicked(Button *pRef); + void hihatMinRangeBtnClicked(Button *pRef); + void hihatMaxRangeBtnClicked(Button *pRef); + + void pSampleSelectionChanged( QString ); + private: H2Core::Instrument *m_pInstrument; int m_nSelectedLayer; + int m_nSelectedComponent; ToggleButton *m_pShowInstrumentBtn; ToggleButton *m_pShowLayersBtn; @@ -103,19 +118,35 @@ LCDDisplay *m_pInstrumentGainLCD; Rotary *m_pInstrumentGain; + QCheckBox *m_pApplyVelocity; + // Instrument mute group LCDDisplay *m_pMuteGroupLCD; Button *m_pAddMuteGroupBtn; Button *m_pDelMuteGroupBtn; - + // Instrument midi out LCDDisplay *m_pMidiOutChannelLCD; Button *m_pAddMidiOutChannelBtn; Button *m_pDelMidiOutChannelBtn; - + LCDDisplay *m_pMidiOutNoteLCD; Button *m_pAddMidiOutNoteBtn; - Button *m_pDelMidiOutNoteBtn; + Button *m_pDelMidiOutNoteBtn; + + // Instrument hihat + + LCDDisplay *m_pHihatGroupLCD; + Button *m_pAddHihatGroupBtn; + Button *m_pDelHihatGroupBtn; + + LCDDisplay *m_pHihatMinRangeLCD; + Button *m_pAddHihatMinRangeBtn; + Button *m_pDelHihatMinRangeBtn; + + LCDDisplay *m_pHihatMaxRangeLCD; + Button *m_pAddHihatMaxRangeBtn; + Button *m_pDelHihatMaxRangeBtn; //~ Instrument properties @@ -123,7 +154,7 @@ // Layer properties LayerPreview *m_pLayerPreview; QScrollArea *m_pLayerScrollArea; - + PixmapWidget *m_pLayerProp; Rotary *m_pLayerGainRotary; @@ -135,6 +166,9 @@ LCDDisplay *m_pLayerPitchCoarseLCD; LCDDisplay *m_pLayerPitchFineLCD; + //LCDCombo *__pattern_size_combo; + LCDCombo *m_sampleSelectionAlg; + WaveDisplay *m_pWaveDisplay; Button *m_pLoadLayerBtn; @@ -144,10 +178,19 @@ //~ Layer properties - + // Component + ClickableLabel *m_pCompoNameLbl; + Button *m_buttonDropDownCompo; + QStringList itemsCompo; + QMenu *popCompo; + + Rotary *m_pCompoGainRotary; + LCDDisplay *m_pCompoGainLCD; + //~ Component void loadLayer(); void setAutoVelocity(); + int findFreeDrumkitComponentId( int startingPoint = 0 ); }; diff -Nru hydrogen-0.9.6.1/src/gui/src/InstrumentEditor/InstrumentEditorPanel.cpp hydrogen-0.9.7/src/gui/src/InstrumentEditor/InstrumentEditorPanel.cpp --- hydrogen-0.9.6.1/src/gui/src/InstrumentEditor/InstrumentEditorPanel.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/InstrumentEditor/InstrumentEditorPanel.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -24,6 +24,8 @@ #include #include +#include +#include #include "InstrumentEditorPanel.h" #include "../Skin.h" @@ -71,8 +73,11 @@ } -void InstrumentEditorPanel::updateInstrumentEditor() +void InstrumentEditorPanel::notifyOfDrumkitChange() { + std::vector* pComponentList = H2Core::Hydrogen::get_instance()->getSong()->get_components(); + + m_pInstrumentEditor->selectComponent(pComponentList->front()->get_id()); m_pInstrumentEditor->selectedInstrumentChangedEvent(); } diff -Nru hydrogen-0.9.6.1/src/gui/src/InstrumentEditor/InstrumentEditorPanel.h hydrogen-0.9.7/src/gui/src/InstrumentEditor/InstrumentEditorPanel.h --- hydrogen-0.9.6.1/src/gui/src/InstrumentEditor/InstrumentEditorPanel.h 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/InstrumentEditor/InstrumentEditorPanel.h 2016-11-05 08:22:50.000000000 +0000 @@ -38,7 +38,7 @@ static InstrumentEditorPanel* get_instance(); ~InstrumentEditorPanel(); - void updateInstrumentEditor(); + void notifyOfDrumkitChange(); void selectLayer( int nLayer ); int getSelectedLayer() { diff -Nru hydrogen-0.9.6.1/src/gui/src/InstrumentEditor/LayerPreview.cpp hydrogen-0.9.7/src/gui/src/InstrumentEditor/LayerPreview.cpp --- hydrogen-0.9.6.1/src/gui/src/InstrumentEditor/LayerPreview.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/InstrumentEditor/LayerPreview.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -25,6 +25,7 @@ #include #include #include +#include #include #include #include @@ -43,6 +44,7 @@ : QWidget( pParent ) , Object( __class_name ) , m_pInstrument( NULL ) + , m_nSelectedComponent( 0 ) , m_nSelectedLayer( 0 ) , m_bMouseGrab( false ) { @@ -78,6 +80,12 @@ } +void LayerPreview::set_selected_component( int SelectedComponent ) +{ + m_nSelectedComponent = SelectedComponent; +} + + void LayerPreview::paintEvent(QPaintEvent *ev) { @@ -87,9 +95,12 @@ int nLayers = 0; for ( int i = 0; i < MAX_LAYERS; i++ ) { if ( m_pInstrument ) { - InstrumentLayer *pLayer = m_pInstrument->get_layer( i ); - if ( pLayer ) { - nLayers++; + InstrumentComponent* p_compo = m_pInstrument->get_component(m_nSelectedComponent); + if(p_compo) { + InstrumentLayer *pLayer = p_compo->get_layer( i ); + if ( pLayer ) { + nLayers++; + } } } } @@ -99,36 +110,43 @@ int y = 20 + m_nLayerHeight * i; if ( m_pInstrument ) { - InstrumentLayer *pLayer = m_pInstrument->get_layer( i ); - - if ( pLayer ) { - int x1 = (int)( pLayer->get_start_velocity() * width() ); - int x2 = (int)( pLayer->get_end_velocity() * width() ); - - int red = (int)( 128.0 / nLayers * nLayer ); - int green = (int)( 134.0 / nLayers * nLayer ); - int blue = (int)( 152.0 / nLayers * nLayer ); - QColor layerColor( red, green, blue ); - - p.fillRect( x1, 0, x2 - x1, 19, layerColor ); - p.setPen( QColor( 230, 230, 230 ) ); - p.drawText( x1, 0, x2 - x1, 20, Qt::AlignCenter, QString("%1").arg( i + 1 ) ); - - if ( m_nSelectedLayer == i ) { - p.setPen( QColor( 210, 0, 0 ) ); - } - p.drawRect( x1, 1, x2 - x1 - 1, 18 ); // bordino in alto - - // layer view - p.fillRect( 0, y, width(), m_nLayerHeight, QColor( 25, 44, 65 ) ); - p.fillRect( x1, y, x2 - x1, m_nLayerHeight, QColor( 90, 160, 233 ) ); - - nLayer++; - } - else { - // layer view - p.fillRect( 0, y, width(), m_nLayerHeight, QColor( 59, 73, 96 ) ); - } + InstrumentComponent* p_compo = m_pInstrument->get_component(m_nSelectedComponent); + if(p_compo) { + InstrumentLayer *pLayer = p_compo->get_layer( i ); + + if ( pLayer ) { + int x1 = (int)( pLayer->get_start_velocity() * width() ); + int x2 = (int)( pLayer->get_end_velocity() * width() ); + + int red = (int)( 128.0 / nLayers * nLayer ); + int green = (int)( 134.0 / nLayers * nLayer ); + int blue = (int)( 152.0 / nLayers * nLayer ); + QColor layerColor( red, green, blue ); + + p.fillRect( x1, 0, x2 - x1, 19, layerColor ); + p.setPen( QColor( 230, 230, 230 ) ); + p.drawText( x1, 0, x2 - x1, 20, Qt::AlignCenter, QString("%1").arg( i + 1 ) ); + + if ( m_nSelectedLayer == i ) { + p.setPen( QColor( 210, 0, 0 ) ); + } + p.drawRect( x1, 1, x2 - x1 - 1, 18 ); // bordino in alto + + // layer view + p.fillRect( 0, y, width(), m_nLayerHeight, QColor( 25, 44, 65 ) ); + p.fillRect( x1, y, x2 - x1, m_nLayerHeight, QColor( 90, 160, 233 ) ); + + nLayer++; + } + else { + // layer view + p.fillRect( 0, y, width(), m_nLayerHeight, QColor( 59, 73, 96 ) ); + } + } + else { + // layer view + p.fillRect( 0, y, width(), m_nLayerHeight, QColor( 59, 73, 96 ) ); + } } else { // layer view @@ -171,13 +189,34 @@ } AudioEngine::get_instance()->unlock(); + /* + if ( m_pInstrument ) { + InstrumentComponent* p_tmpCompo = m_pInstrument->get_component( m_nSelectedComponent ); + if(!p_tmpCompo) { + for(int i = 0 ; iget_component( i ); + if(p_tmpCompo) { + m_nSelectedComponent = i; + break; + } + } + } + } + */ + // select the last valid layer if ( m_pInstrument ) { for (int i = MAX_LAYERS - 1; i >= 0; i-- ) { - if ( m_pInstrument->get_layer( i ) ) { - m_nSelectedLayer = i; - break; - } + InstrumentComponent* p_compo = m_pInstrument->get_component(m_nSelectedComponent); + if ( p_compo ) { + if ( p_compo->get_layer( i ) ) { + m_nSelectedLayer = i; + break; + } + } + else { + m_nSelectedLayer = 0; + } } } else { @@ -198,21 +237,24 @@ * We want the tooltip to still show if mouse pointer * is over an active layer's boundary */ - InstrumentLayer *pLayer = m_pInstrument->get_layer( m_nSelectedLayer ); - - if ( pLayer ) { - int x1 = (int)( pLayer->get_start_velocity() * width() ); - int x2 = (int)( pLayer->get_end_velocity() * width() ); - - if ( ( ev->x() < x1 + 5 ) && ( ev->x() > x1 - 5 ) ){ - setCursor( QCursor( Qt::SizeHorCursor ) ); - showLayerStartVelocity(pLayer, ev); - } - else if ( ( ev->x() < x2 + 5 ) && ( ev->x() > x2 - 5 ) ){ - setCursor( QCursor( Qt::SizeHorCursor ) ); - showLayerEndVelocity(pLayer, ev); - } - } + InstrumentComponent *pCompo = m_pInstrument->get_component(m_nSelectedComponent); + if ( pCompo ) { + InstrumentLayer *pLayer = pCompo->get_layer( m_nSelectedLayer ); + + if ( pLayer ) { + int x1 = (int)( pLayer->get_start_velocity() * width() ); + int x2 = (int)( pLayer->get_end_velocity() * width() ); + + if ( ( ev->x() < x1 + 5 ) && ( ev->x() > x1 - 5 ) ){ + setCursor( QCursor( Qt::SizeHorCursor ) ); + showLayerStartVelocity(pLayer, ev); + } + else if ( ( ev->x() < x2 + 5 ) && ( ev->x() > x2 - 5 ) ) { + setCursor( QCursor( Qt::SizeHorCursor ) ); + showLayerEndVelocity(pLayer, ev); + } + } + } } @@ -232,54 +274,60 @@ float fVelocity = (float)ev->x() / (float)width(); Note *note = new Note( m_pInstrument, nPosition, fVelocity, fPan_L, fPan_R, nLength, fPitch ); + note->set_specific_compo_id( m_nSelectedComponent ); AudioEngine::get_instance()->get_sampler()->note_on(note); for ( int i = 0; i < MAX_LAYERS; i++ ) { - InstrumentLayer *pLayer = m_pInstrument->get_layer( i ); - if ( pLayer ) { - if ( ( fVelocity > pLayer->get_start_velocity()) && ( fVelocity < pLayer->get_end_velocity() ) ) { - if ( i != m_nSelectedLayer ) { - m_nSelectedLayer = i; - update(); - InstrumentEditorPanel::get_instance()->selectLayer( m_nSelectedLayer ); - } - break; - } - } + InstrumentComponent *pCompo = m_pInstrument->get_component(m_nSelectedComponent); + if(pCompo){ + InstrumentLayer *pLayer = pCompo->get_layer( i ); + if ( pLayer ) { + if ( ( fVelocity > pLayer->get_start_velocity()) && ( fVelocity < pLayer->get_end_velocity() ) ) { + if ( i != m_nSelectedLayer ) { + m_nSelectedLayer = i; + update(); + InstrumentEditorPanel::get_instance()->selectLayer( m_nSelectedLayer ); + } + break; + } + } + } } } else { m_nSelectedLayer = ( ev->y() - 20 ) / m_nLayerHeight; - InstrumentLayer *pLayer = m_pInstrument->get_layer( m_nSelectedLayer ); update(); InstrumentEditorPanel::get_instance()->selectLayer( m_nSelectedLayer ); - if ( m_pInstrument->get_layer( m_nSelectedLayer ) ) { - Note *note = new Note( m_pInstrument , nPosition, m_pInstrument->get_layer( m_nSelectedLayer )->get_end_velocity() - 0.01, fPan_L, fPan_R, nLength, fPitch ); - AudioEngine::get_instance()->get_sampler()->note_on(note); - } - - if ( pLayer ) { - int x1 = (int)( pLayer->get_start_velocity() * width() ); - int x2 = (int)( pLayer->get_end_velocity() * width() ); - - if ( ( ev->x() < x1 + 5 ) && ( ev->x() > x1 - 5 ) ){ - setCursor( QCursor( Qt::SizeHorCursor ) ); - m_bGrabLeft = true; - m_bMouseGrab = true; - showLayerStartVelocity(pLayer, ev); - } - else if ( ( ev->x() < x2 + 5 ) && ( ev->x() > x2 - 5 ) ){ - setCursor( QCursor( Qt::SizeHorCursor ) ); - m_bGrabLeft = false; - m_bMouseGrab = true; - showLayerEndVelocity(pLayer, ev); - } - else { - setCursor( QCursor( Qt::ArrowCursor ) ); - } - } + InstrumentComponent *pCompo = m_pInstrument->get_component(m_nSelectedComponent); + if(pCompo) { + InstrumentLayer *pLayer = pCompo->get_layer( m_nSelectedLayer ); + if ( pLayer ) { + Note *note = new Note( m_pInstrument , nPosition, m_pInstrument->get_component(m_nSelectedComponent)->get_layer( m_nSelectedLayer )->get_end_velocity() - 0.01, fPan_L, fPan_R, nLength, fPitch ); + note->set_specific_compo_id( m_nSelectedComponent ); + AudioEngine::get_instance()->get_sampler()->note_on(note); + + int x1 = (int)( pLayer->get_start_velocity() * width() ); + int x2 = (int)( pLayer->get_end_velocity() * width() ); + + if ( ( ev->x() < x1 + 5 ) && ( ev->x() > x1 - 5 ) ){ + setCursor( QCursor( Qt::SizeHorCursor ) ); + m_bGrabLeft = true; + m_bMouseGrab = true; + showLayerStartVelocity(pLayer, ev); + } + else if ( ( ev->x() < x2 + 5 ) && ( ev->x() > x2 - 5 ) ){ + setCursor( QCursor( Qt::SizeHorCursor ) ); + m_bGrabLeft = false; + m_bMouseGrab = true; + showLayerEndVelocity(pLayer, ev); + } + else { + setCursor( QCursor( Qt::ArrowCursor ) ); + } + } + } } } @@ -307,7 +355,7 @@ return; } if ( m_bMouseGrab ) { - InstrumentLayer *pLayer = m_pInstrument->get_layer( m_nSelectedLayer ); + InstrumentLayer *pLayer = m_pInstrument->get_component(m_nSelectedComponent)->get_layer( m_nSelectedLayer ); if ( pLayer ) { if ( m_bMouseGrab ) { if ( m_bGrabLeft ) { @@ -329,28 +377,35 @@ else { m_nSelectedLayer = ( ev->y() - 20 ) / m_nLayerHeight; if ( m_nSelectedLayer < MAX_LAYERS ) { - InstrumentLayer *pLayer = m_pInstrument->get_layer( m_nSelectedLayer ); - if ( pLayer ) { - int x1 = (int)( pLayer->get_start_velocity() * width() ); - int x2 = (int)( pLayer->get_end_velocity() * width() ); - - if ( ( x < x1 + 5 ) && ( x > x1 - 5 ) ){ - setCursor( QCursor( Qt::SizeHorCursor ) ); - showLayerStartVelocity(pLayer, ev); - } - else if ( ( x < x2 + 5 ) && ( x > x2 - 5 ) ){ - setCursor( QCursor( Qt::SizeHorCursor ) ); - showLayerEndVelocity(pLayer, ev); - } - else { - setCursor( QCursor( Qt::ArrowCursor ) ); - QToolTip::hideText(); - } - } - else { - setCursor( QCursor( Qt::ArrowCursor ) ); - QToolTip::hideText(); - } + InstrumentComponent* p_compo = m_pInstrument->get_component(m_nSelectedComponent); + if(p_compo){ + InstrumentLayer *pLayer = p_compo->get_layer( m_nSelectedLayer ); + if ( pLayer ) { + int x1 = (int)( pLayer->get_start_velocity() * width() ); + int x2 = (int)( pLayer->get_end_velocity() * width() ); + + if ( ( x < x1 + 5 ) && ( x > x1 - 5 ) ){ + setCursor( QCursor( Qt::SizeHorCursor ) ); + showLayerStartVelocity(pLayer, ev); + } + else if ( ( x < x2 + 5 ) && ( x > x2 - 5 ) ){ + setCursor( QCursor( Qt::SizeHorCursor ) ); + showLayerEndVelocity(pLayer, ev); + } + else { + setCursor( QCursor( Qt::ArrowCursor ) ); + QToolTip::hideText(); + } + } + else { + setCursor( QCursor( Qt::ArrowCursor ) ); + QToolTip::hideText(); + } + } + else { + setCursor( QCursor( Qt::ArrowCursor ) ); + QToolTip::hideText(); + } } } } diff -Nru hydrogen-0.9.6.1/src/gui/src/InstrumentEditor/LayerPreview.h hydrogen-0.9.7/src/gui/src/InstrumentEditor/LayerPreview.h --- hydrogen-0.9.6.1/src/gui/src/InstrumentEditor/LayerPreview.h 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/InstrumentEditor/LayerPreview.h 2016-11-05 08:22:50.000000000 +0000 @@ -52,11 +52,14 @@ virtual void mouseReleaseEvent(QMouseEvent *ev); virtual void mouseMoveEvent ( QMouseEvent *ev ); + void set_selected_component( int SelectedComponent ); + private: static const int m_nLayerHeight = 10; QPixmap m_speakerPixmap; H2Core::Instrument *m_pInstrument; int m_nSelectedLayer; + int m_nSelectedComponent; bool m_bMouseGrab; bool m_bGrabLeft; diff -Nru hydrogen-0.9.6.1/src/gui/src/InstrumentRack.cpp hydrogen-0.9.7/src/gui/src/InstrumentRack.cpp --- hydrogen-0.9.6.1/src/gui/src/InstrumentRack.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/InstrumentRack.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -36,7 +36,7 @@ { INFOLOG( "INIT" ); - resize( 290, 450 ); + resize( 290, 405 ); setMinimumSize( width(), height() ); setFixedWidth( width() ); diff -Nru hydrogen-0.9.6.1/src/gui/src/LadspaFXProperties.cpp hydrogen-0.9.7/src/gui/src/LadspaFXProperties.cpp --- hydrogen-0.9.6.1/src/gui/src/LadspaFXProperties.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/LadspaFXProperties.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -164,7 +164,7 @@ m_pInputControlLabel[ i ]->setText( sValue ); } } - pSong->__is_modified = true; + pSong->set_is_modified( true ); #endif } @@ -364,7 +364,7 @@ } } Song *pSong = (Hydrogen::get_instance() )->getSong(); - pSong->__is_modified = true; + pSong->set_is_modified(true); Effects::get_instance()->setLadspaFX( pFX, m_nLadspaFX ); @@ -384,7 +384,7 @@ { #ifdef H2CORE_HAVE_LADSPA Song *pSong = (Hydrogen::get_instance() )->getSong(); - pSong->__is_modified = true; + pSong->set_is_modified( true ); Effects::get_instance()->setLadspaFX( NULL, m_nLadspaFX ); Hydrogen::get_instance()->restartLadspaFX(); updateControls(); diff -Nru hydrogen-0.9.6.1/src/gui/src/LadspaFXSelector.cpp hydrogen-0.9.7/src/gui/src/LadspaFXSelector.cpp --- hydrogen-0.9.6.1/src/gui/src/LadspaFXSelector.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/LadspaFXSelector.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -98,18 +98,20 @@ { #ifdef H2CORE_HAVE_LADSPA m_pGroupsListView->clear(); - -// QTreeWidgetItem* pRootItem = new QTreeWidgetItem( ); -// pRootItem->setText( 0, trUtf8("Groups") ); -// m_pGroupsListView->addTopLevelItem( pRootItem ); -// m_pGroupsListView->setItemExpanded( pRootItem, true ); H2Core::LadspaFXGroup* pFXGroup = Effects::get_instance()->getLadspaFXGroup(); - for (uint i = 0; i < pFXGroup->getChildList().size(); i++) { - H2Core::LadspaFXGroup *pNewGroup = ( pFXGroup->getChildList() )[ i ]; - addGroup( m_pGroupsListView, pNewGroup ); + + if(pFXGroup) + { + for (uint i = 0; i < pFXGroup->getChildList().size(); i++) { + H2Core::LadspaFXGroup *pNewGroup = ( pFXGroup->getChildList() )[ i ]; + addGroup( m_pGroupsListView, pNewGroup ); + } + + m_pGroupsListView->setCurrentItem( m_pCurrentItem ); } - m_pGroupsListView->setCurrentItem( m_pCurrentItem ); + + #endif } diff -Nru hydrogen-0.9.6.1/src/gui/src/main.cpp hydrogen-0.9.7/src/gui/src/main.cpp --- hydrogen-0.9.6.1/src/gui/src/main.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/main.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -174,11 +174,11 @@ // Deal with the options QString songFilename; #ifdef H2CORE_HAVE_JACKSESSION - QString sessionId; + QString sessionId; #endif QString playlistFilename; bool bNoSplash = false; - QString sys_data_path; + QString sys_data_path; QString sSelectedDriver; bool showVersionOpt = false; unsigned logLevelOpt = H2Core::Logger::Error; @@ -277,6 +277,7 @@ ___INFOLOG( "Using data path: " + H2Core::Filesystem::sys_data_path() ); H2Core::Preferences *pPref = H2Core::Preferences::get_instance(); + pPref->setH2ProcessName( QString(argv[0]) ); #ifdef H2CORE_HAVE_LASH @@ -397,18 +398,32 @@ pPref->m_sAudioDriver = "Jack"; } + /* - * the use of applicationFilePath() make it - * possible to use different executables. - * for example if you start hydrogen from a local - * build directory. - */ + * the use of applicationFilePath() make it + * possible to use different executables. + * for example if you start hydrogen from a local + * build directory. + */ + QString path = pQApp->applicationFilePath(); pPref->setJackSessionApplicationPath( path ); #endif // Hydrogen here to honor all preferences. H2Core::Hydrogen::create_instance(); + +#ifdef H2CORE_HAVE_NSMSESSION + H2Core::Hydrogen::get_instance()->startNsmClient(); + + QString NsmSongFilename = pPref->getNsmSongName(); + + if(!NsmSongFilename.isEmpty()) + { + songFilename = NsmSongFilename; + } +#endif + MainForm *pMainForm = new MainForm( pQApp, songFilename ); pMainForm->show(); pSplash->finish( pMainForm ); @@ -472,7 +487,7 @@ { cout << "\nHydrogen " + H2Core::get_version() + " [" + __DATE__ + "] [http://www.hydrogen-music.org]" << endl; cout << "Copyright 2002-2008 Alessandro Cominu" << endl; - // ___INFOLOG( "Compiled modules: " + QString(COMPILED_FEATURES) << endl; + cout << "Copyright 2008-2016 The hydrogen development team" << endl; if ( H2Core::Object::count_active() ) { cout << "\nObject counting = active" << endl; diff -Nru hydrogen-0.9.6.1/src/gui/src/MainForm.cpp hydrogen-0.9.7/src/gui/src/MainForm.cpp --- hydrogen-0.9.6.1/src/gui/src/MainForm.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/MainForm.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -20,21 +20,25 @@ * */ +#include #include #include #include #include #include #include +#include #include #include #include #include #include -#include + +#include #include "AboutDialog.h" #include "AudioEngineInfoForm.h" +#include "DonationDialog.h" #include "ExportSongDialog.h" #include "HydrogenApp.h" #include "InstrumentRack.h" @@ -66,7 +70,7 @@ #endif #ifdef H2CORE_HAVE_LASH -#include +#include #include #endif @@ -100,13 +104,18 @@ m_pQApp->processEvents(); // Load default song - Song *song = NULL; + Song *pSong = NULL; + if ( !songFilename.isEmpty() ) { - song = Song::load( songFilename ); - if (song == NULL) { - //QMessageBox::warning( this, "Hydrogen", trUtf8("Error loading song.") ); - song = Song::get_empty_song(); - song->set_filename( "" ); + pSong = Song::load( songFilename ); + + /* + * If the song could not be loaded, create + * a new one with the specified filename + */ + if (pSong == NULL) { + pSong = Song::get_empty_song(); + pSong->set_filename( songFilename ); } } else { @@ -114,20 +123,20 @@ bool restoreLastSong = pref->isRestoreLastSongEnabled(); QString filename = pref->getLastSongFilename(); if ( restoreLastSong && ( !filename.isEmpty() )) { - song = Song::load( filename ); - if (song == NULL) { + pSong = Song::load( filename ); + if (pSong == NULL) { //QMessageBox::warning( this, "Hydrogen", trUtf8("Error restoring last song.") ); - song = Song::get_empty_song(); - song->set_filename( "" ); + pSong = Song::get_empty_song(); + pSong->set_filename( "" ); } } else { - song = Song::get_empty_song(); - song->set_filename( "" ); + pSong = Song::get_empty_song(); + pSong->set_filename( "" ); } } - h2app = new HydrogenApp( this, song ); + h2app = new HydrogenApp( this, pSong ); h2app->addEventListener( this ); createMenuBar(); @@ -148,7 +157,7 @@ // h2app->getPlayListDialog()->installEventFilter(this); installEventFilter( this ); - showDevelWarning(); + //showDevelWarning(); connect( &m_autosaveTimer, SIGNAL(timeout()), this, SLOT(onAutoSaveTimer())); m_autosaveTimer.start( 60 * 1000 ); @@ -241,7 +250,7 @@ setMenuBar( m_pMenubar ); // FILE menu - QMenu *m_pFileMenu = m_pMenubar->addMenu( trUtf8( "&Project" ) ); + QMenu *m_pFileMenu = m_pMenubar->addMenu( trUtf8( "Pro&ject" ) ); m_pFileMenu->addAction( trUtf8( "&New" ), this, SLOT( action_file_new() ), QKeySequence( "Ctrl+N" ) ); m_pFileMenu->addAction( trUtf8( "Show &info" ), this, SLOT( action_file_songProperties() ), QKeySequence( "" ) ); @@ -267,6 +276,7 @@ m_pFileMenu->addAction( trUtf8( "Export &MIDI file" ), this, SLOT( action_file_export_midi() ), QKeySequence( "Ctrl+M" ) ); m_pFileMenu->addAction( trUtf8( "&Export song" ), this, SLOT( action_file_export() ), QKeySequence( "Ctrl+E" ) ); + m_pFileMenu->addAction( trUtf8( "Export &LilyPond file" ), this, SLOT( action_file_export_lilypond() ), QKeySequence( "Ctrl+L" ) ); #ifndef Q_OS_MACX @@ -329,12 +339,12 @@ //~ Tools menu - Logger *l = Logger::get_instance(); - if ( l->bit_mask() >= 1 ) { + Logger *pLogger = Logger::get_instance(); + if ( pLogger->bit_mask() >= 1 ) { // DEBUG menu QMenu *m_pDebugMenu = m_pMenubar->addMenu( trUtf8("De&bug") ); m_pDebugMenu->addAction( trUtf8( "Show &audio engine info" ), this, SLOT( action_debug_showAudioEngineInfo() ) ); - if(l->bit_mask() == 8) // hydrogen -V8 list object map in console + if(pLogger->bit_mask() == 8) // hydrogen -V8 list object map in console m_pDebugMenu->addAction( trUtf8( "Print Objects" ), this, SLOT( action_debug_printObjects() ) ); //~ DEBUG menu } @@ -345,6 +355,7 @@ m_pInfoMenu->addSeparator(); m_pInfoMenu->addAction( trUtf8("&About"), this, SLOT( action_help_about() ), QKeySequence( trUtf8("", "Info|About") ) ); m_pInfoMenu->addAction( trUtf8("Report bug"), this, SLOT( action_report_bug() )); + m_pInfoMenu->addAction( trUtf8("Donate"), this, SLOT( action_donate() )); //~ INFO menu } @@ -432,6 +443,11 @@ #endif } +void MainForm::action_donate() +{ + DonationDialog *dialog = new DonationDialog( NULL ); + dialog->exec(); +} /// return true if the app needs to be closed. bool MainForm::action_file_exit() @@ -448,8 +464,9 @@ void MainForm::action_file_new() { - if ( (Hydrogen::get_instance()->getState() == STATE_PLAYING) ) { - Hydrogen::get_instance()->sequencer_stop(); + Hydrogen * pEngine = Hydrogen::get_instance(); + if ( (pEngine->getState() == STATE_PLAYING) ) { + pEngine->sequencer_stop(); } bool proceed = handleUnsavedChanges(); @@ -458,14 +475,14 @@ } h2app->m_undoStack->clear(); - Hydrogen::get_instance()->m_timelinevector.clear(); - Song * song = Song::get_empty_song(); - song->set_filename( "" ); - h2app->setSong(song); - Hydrogen::get_instance()->setSelectedPatternNumber( 0 ); - HydrogenApp::get_instance()->getInstrumentRack()->getSoundLibraryPanel()->update_background_color(); - HydrogenApp::get_instance()->getSongEditorPanel()->updatePositionRuler(); - Hydrogen::get_instance()->m_timelinetagvector.clear(); + pEngine->getTimeline()->m_timelinevector.clear(); + Song * pSong = Song::get_empty_song(); + pSong->set_filename( "" ); + h2app->setSong(pSong); + pEngine->setSelectedPatternNumber( 0 ); + h2app->getInstrumentRack()->getSoundLibraryPanel()->update_background_color(); + h2app->getSongEditorPanel()->updatePositionRuler(); + pEngine->getTimeline()->m_timelinetagvector.clear(); // update director tags EventQueue::get_instance()->push_event( EVENT_METRONOME, 2 ); @@ -477,8 +494,10 @@ void MainForm::action_file_save_as() { - if ( (Hydrogen::get_instance()->getState() == STATE_PLAYING) ) { - Hydrogen::get_instance()->sequencer_stop(); + Hydrogen* pEngine = Hydrogen::get_instance(); + + if ( pEngine->getState() == STATE_PLAYING ) { + pEngine->sequencer_stop(); } //std::auto_ptr fd( new QFileDialog ); @@ -489,12 +508,12 @@ fd.setWindowTitle( trUtf8( "Save song" ) ); fd.setSidebarUrls( fd.sidebarUrls() << QUrl::fromLocalFile( Filesystem::songs_dir() ) ); - Song *song = Hydrogen::get_instance()->getSong(); + Song *song = pEngine->getSong(); QString defaultFilename; QString lastFilename = song->get_filename(); if ( lastFilename.isEmpty() ) { - defaultFilename = Hydrogen::get_instance()->getSong()->__name; + defaultFilename = pEngine->getSong()->__name; defaultFilename += ".h2song"; } else { @@ -518,15 +537,15 @@ action_file_save(); } h2app->setScrollStatusBarMessage( trUtf8("Song saved as.") + QString(" Into: ") + defaultFilename, 2000 ); - h2app->setWindowTitle( filename ); + h2app->updateWindowTitle(); } void MainForm::action_file_save() { - Song *song = Hydrogen::get_instance()->getSong(); - QString filename = song->get_filename(); + Song *pSong = Hydrogen::get_instance()->getSong(); + QString filename = pSong->get_filename(); if ( filename.isEmpty() ) { // just in case! @@ -534,13 +553,13 @@ } bool saved = false; - saved = song->save( filename ); + saved = pSong->save( filename ); if(! saved) { QMessageBox::warning( this, "Hydrogen", trUtf8("Could not save song.") ); } else { - Preferences::get_instance()->setLastSongFilename( song->get_filename() ); + Preferences::get_instance()->setLastSongFilename( pSong->get_filename() ); // add the new loaded song in the "last used song" vector Preferences *pPref = Preferences::get_instance(); @@ -699,11 +718,11 @@ void MainForm::action_file_openPattern() { - Hydrogen *engine = Hydrogen::get_instance(); - Song *song = engine->getSong(); - PatternList *pPatternList = song->get_pattern_list(); + Hydrogen *pEngine = Hydrogen::get_instance(); + Song *pSong = pEngine->getSong(); + PatternList *pPatternList = pSong->get_pattern_list(); - Instrument *instr = song->get_instrument_list()->get ( 0 ); + Instrument *instr = pSong->get_instrument_list()->get ( 0 ); assert ( instr ); QDir dirPattern( Preferences::get_instance()->getDataDirectory() + "/patterns" ); @@ -722,8 +741,6 @@ } QString patternname = filename; - - LocalFileMng mng; LocalFileMng fileMng; Pattern* err = fileMng.loadPattern ( patternname ); if ( err == 0 ) @@ -735,7 +752,8 @@ { H2Core::Pattern *pNewPattern = err; pPatternList->add ( pNewPattern ); - song->__is_modified = true; + pSong->set_is_modified( true ); + EventQueue::get_instance()->push_event( EVENT_SONG_MODIFIED, -1 ); } HydrogenApp::get_instance()->getSongEditorPanel()->updateAll(); @@ -849,23 +867,13 @@ } // Remove all layers - // AudioEngine::get_instance()->lock( RIGHT_HERE ); + Song *pSong = Hydrogen::get_instance()->getSong(); InstrumentList* pList = pSong->get_instrument_list(); for (uint i = pList->size(); i > 0; i--) { functionDeleteInstrument(i - 1); - /* - Instrument* pInstr = pList->get( i ); - pInstr->set_name( (QString( trUtf8( "Instrument %1" ) ).arg( i + 1 )) ); - // remove all layers - for ( int nLayer = 0; nLayer < MAX_LAYERS; nLayer++ ) { - InstrumentLayer* pLayer = pInstr->get_layer( nLayer ); - delete pLayer; - pInstr->set_layer( NULL, nLayer ); - } - */ } - // AudioEngine::get_instance()->unlock(); + EventQueue::get_instance()->push_event( EVENT_SELECTED_INSTRUMENT_CHANGED, -1 ); } @@ -1147,15 +1155,16 @@ engine->sequencer_stop(); } - engine->m_timelinetagvector.clear(); + engine->getTimeline()->m_timelinetagvector.clear(); h2app->closeFXProperties(); - LocalFileMng mng; + Song *pSong = Song::load( sFilename ); if ( pSong == NULL ) { QMessageBox::information( this, "Hydrogen", trUtf8("Error loading song.") ); return; } + h2app->m_undoStack->clear(); // add the new loaded song in the "last used song" vector @@ -1169,7 +1178,6 @@ updateRecentUsedSongList(); engine->setSelectedPatternNumber( 0 ); HydrogenApp::get_instance()->getSongEditorPanel()->updatePositionRuler(); - // EventQueue::get_instance()->push_event( EVENT_METRONOME, 1 ); EventQueue::get_instance()->push_event( EVENT_METRONOME, 3 ); } @@ -1323,17 +1331,7 @@ onSaveAccelEvent(); return TRUE; break; - /* - case Qt::Key_T: - if( engine->getSong()->get_mode() == Song::PATTERN_MODE ){ - engine->getSong()->set_mode( Song::SONG_MODE); - } - else if ( engine->getSong()->get_mode() == Song::SONG_MODE ) { - engine->getSong()->set_mode( Song::PATTERN_MODE ); - } - return TRUE; - break; -*/ + case Qt::Key_F5 : if( engine->m_PlayList.size() == 0) break; @@ -1370,11 +1368,6 @@ app->getSongEditorPanel()->updateAll(); return TRUE; break; - - // QAccel *a = new QAccel( this ); - // a->connectItem( a->insertItem(Key_S + CTRL), this, SLOT( onSaveAccelEvent() ) ); - // a->connectItem( a->insertItem(Key_O + CTRL), this, SLOT( onOpenAccelEvent() ) ); - } // virtual keyboard handling @@ -1384,13 +1377,12 @@ // insert note at the current column in time // if event recording enabled int row = (*found).second; - Hydrogen* engine = Hydrogen::get_instance(); float velocity = 0.8; float pan_L = 0.5f; float pan_R = 0.5f; - engine->addRealtimeNote (row, velocity, pan_L, pan_R, 0, NULL, NULL , row + 36); + engine->addRealtimeNote (row, velocity, pan_L, pan_R, 0, false, false , row + 36); return TRUE; // eat event } @@ -1453,7 +1445,50 @@ } } +void MainForm::action_file_export_lilypond() +{ + if ( ( ( Hydrogen::get_instance() )->getState() == STATE_PLAYING ) ) { + Hydrogen::get_instance()->sequencer_stop(); + } + switch ( QMessageBox::information( + this, + "Hydrogen", + trUtf8( "\nThe LilyPond export is an experimental feature.\n" + "It should work like a charm provided that you use the " + "GM-kit, and that you do not use triplet\n" ), + trUtf8( "Ok" ), + trUtf8( "&Cancel" ), + 0, + 2 ) ) { + case 1: + case 2: return; + } + + QFileDialog fd( this ); + fd.setFileMode( QFileDialog::AnyFile ); + fd.setFilter( trUtf8( "LilyPond file (*.ly)" ) ); + fd.setDirectory( QDir::homePath() ); + fd.setWindowTitle( trUtf8( "Export LilyPond file" ) ); + fd.setAcceptMode( QFileDialog::AcceptSave ); + fd.setWindowIcon( QPixmap( Skin::getImagePath() + "/icon16.png" ) ); + QString sFilename; + if ( fd.exec() == QDialog::Accepted ) { + sFilename = fd.selectedFiles().first(); + } + + if ( !sFilename.isEmpty() ) { + if ( sFilename.endsWith( ".ly" ) == false ) { + sFilename += ".ly"; + } + + Song *pSong = Hydrogen::get_instance()->getSong(); + + LilyPond ly; + ly.extractData( *pSong ); + ly.write( sFilename ); + } +} void MainForm::errorEvent( int nErrorCode ) { @@ -1500,17 +1535,17 @@ Song* pSong = Hydrogen::get_instance()->getSong(); - h2app->getSongEditorPanel()->updateAll(); - h2app->getPatternEditorPanel()->updateSLnameLabel(); + h2app->getSongEditorPanel()->updateAll(); + h2app->getPatternEditorPanel()->updateSLnameLabel(); - QString songName( pSong->__name ); - if( songName == "Untitled Song" && !pSong->get_filename().isEmpty() ){ - songName = pSong->get_filename(); - songName = songName.section( '/', -1 ); - } - setWindowTitle( songName ); + QString songName( pSong->__name ); + if( songName == "Untitled Song" && !pSong->get_filename().isEmpty() ){ + songName = pSong->get_filename(); + songName = songName.section( '/', -1 ); + } + setWindowTitle( songName ); - h2app->getMainForm()->updateRecentUsedSongList(); + h2app->getMainForm()->updateRecentUsedSongList(); h2app->closeFXProperties(); h2app->m_undoStack->clear(); @@ -1535,7 +1570,7 @@ { SongPropertiesDialog *pDialog = new SongPropertiesDialog( this ); if ( pDialog->exec() == QDialog::Accepted ) { - Hydrogen::get_instance()->getSong()->__is_modified = true; + Hydrogen::get_instance()->getSong()->set_is_modified( true ); } delete pDialog; } @@ -1552,7 +1587,7 @@ { //set this to 'false' for the case that you want to make a release.. - if ( false ) { + if ( true ) { Preferences *pref = Preferences::get_instance(); bool isDevelWarningEnabled = pref->getShowDevelWarning(); if(isDevelWarningEnabled) { @@ -1601,16 +1636,6 @@ pSong->save( getAutoSaveFilename() ); pSong->set_filename(sOldFilename); - - /* - Song *pSong = h2app->getSong(); - if (pSong->getFilename() == "") { - pSong->save( "autosave.h2song" ); - return; - } - - action_file_save(); -*/ } @@ -1639,7 +1664,7 @@ { bool done = false; bool rv = true; - while ( !done && Hydrogen::get_instance()->getSong()->__is_modified ) { + while ( !done && Hydrogen::get_instance()->getSong()->get_is_modified() ) { switch( QMessageBox::information( this, "Hydrogen", trUtf8("\nThe document contains unsaved changes.\n" @@ -1668,6 +1693,31 @@ break; } } + + if(rv != false) + { + while ( !done && Playlist::get_instance()->getIsModified() ) { + switch( + QMessageBox::information( this, "Hydrogen", + trUtf8("\nThe current playlist contains unsaved changes.\n" + "Do you want to discard the changes?\n"), + trUtf8("&Discard"), trUtf8("&Cancel"), + 0, // Enter == button 0 + 2 ) ) { // Escape == button 1 + case 0: // Discard clicked or Alt+D pressed + // don't save but exit + done = true; + break; + case 1: // Cancel clicked or Alt+C pressed or Escape pressed + // don't exit + done = true; + rv = false; + break; + } + } + } + + return rv; } @@ -1725,4 +1775,3 @@ } - diff -Nru hydrogen-0.9.6.1/src/gui/src/MainForm.h hydrogen-0.9.7/src/gui/src/MainForm.h --- hydrogen-0.9.6.1/src/gui/src/MainForm.h 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/MainForm.h 2016-11-05 08:22:50.000000000 +0000 @@ -75,10 +75,12 @@ void action_file_export(); void action_file_export_midi(); + void action_file_export_lilypond(); void action_file_songProperties(); void action_help_about(); void action_report_bug(); + void action_donate(); void action_instruments_addInstrument(); void action_instruments_clearAll(); diff -Nru hydrogen-0.9.6.1/src/gui/src/Mixer/Mixer.cpp hydrogen-0.9.7/src/gui/src/Mixer/Mixer.cpp --- hydrogen-0.9.6.1/src/gui/src/Mixer/Mixer.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/Mixer/Mixer.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -33,6 +33,8 @@ #include #include #include +#include +#include #include #include #include @@ -49,8 +51,6 @@ Mixer::Mixer( QWidget* pParent ) : QWidget( pParent ) -// : QWidget( pParent, Qt::WindowStaysOnTopHint ) -// : QWidget( pParent, Qt::Tool ) , Object( __class_name ) { setWindowTitle( trUtf8( __class_name ) ); @@ -155,24 +155,18 @@ this->setLayout( pLayout ); - m_pUpdateTimer = new QTimer( this ); connect( m_pUpdateTimer, SIGNAL( timeout() ), this, SLOT( updateMixer() ) ); m_pUpdateTimer->start(50); - HydrogenApp::get_instance()->addEventListener( this ); - + HydrogenApp::get_instance()->addEventListener( this ); } - - Mixer::~Mixer() { m_pUpdateTimer->stop(); } - - MixerLine* Mixer::createMixerLine( int nInstr ) { MixerLine *pMixerLine = new MixerLine( 0 , nInstr); @@ -194,6 +188,21 @@ } +ComponentMixerLine* Mixer::createComponentMixerLine( int theCompoID ) +{ + ComponentMixerLine *pMixerLine = new ComponentMixerLine( 0 , theCompoID); + pMixerLine->setVolume( 0.2 ); + pMixerLine->setMuteClicked( false ); + pMixerLine->setSoloClicked( false ); + + connect( pMixerLine, SIGNAL( muteBtnClicked(ComponentMixerLine*) ), this, SLOT( muteClicked(ComponentMixerLine*) ) ); + connect( pMixerLine, SIGNAL( soloBtnClicked(ComponentMixerLine*) ), this, SLOT( soloClicked(ComponentMixerLine*) ) ); + connect( pMixerLine, SIGNAL( volumeChanged(ComponentMixerLine*) ), this, SLOT( volumeChanged(ComponentMixerLine*) ) ); + + return pMixerLine; +} + + void Mixer::muteClicked(MixerLine* ref) { int nLine = findMixerLineByRef(ref); @@ -206,31 +215,83 @@ Instrument *pInstr = instrList->get(nLine); pInstr->set_muted( isMuteClicked); - //(HydrogenApp::get_instance())->setSelectedInstrument(nLine); Hydrogen::get_instance()->setSelectedInstrumentNumber(nLine); } +void Mixer::muteClicked(ComponentMixerLine* ref) +{ + bool isMuteClicked = ref->isMuteClicked(); + + DrumkitComponent *pCompo = Hydrogen::get_instance()->getSong()->get_component( ref->getCompoID() ); + + pCompo->set_muted( isMuteClicked ); +} + +void Mixer::soloClicked(ComponentMixerLine* ref) +{ + Hydrogen *pEngine = Hydrogen::get_instance(); + Song *pSong = pEngine->getSong(); + std::vector pCompoList = *(pSong->get_components()); + int nComponents = pCompoList.size(); + + bool isSoloClicked = ref->isSoloClicked(); + int nLine = findCompoMixerLineByRef(ref); + + if ( isSoloClicked ) { + for ( int i = 0; i < nComponents ; ++i ) { + ComponentMixerLine* p_tmpCompoMixer = m_pComponentMixerLine[i]; + p_tmpCompoMixer->setSoloClicked( false ); + p_tmpCompoMixer->setMuteClicked( true ); + DrumkitComponent* p_tmpCompo = pCompoList[i]; + p_tmpCompo->set_muted( true ); + } + ComponentMixerLine* p_tmpCompoMixer = m_pComponentMixerLine[nLine]; + p_tmpCompoMixer->setSoloClicked( true ); + p_tmpCompoMixer->setMuteClicked( false ); + DrumkitComponent* p_tmpCompo = pCompoList[nLine]; + p_tmpCompo->set_muted( false ); + } + else { + for ( int i = 0; i < nComponents ; ++i ) { + ComponentMixerLine* p_tmpCompoMixer = m_pComponentMixerLine[i]; + p_tmpCompoMixer->setSoloClicked( false ); + p_tmpCompoMixer->setMuteClicked( false ); + DrumkitComponent* p_tmpCompo = pCompoList[i]; + p_tmpCompo->set_muted( false ); + } + } +} + +void Mixer::volumeChanged(ComponentMixerLine* ref) +{ + float newVolume = ref->getVolume(); + + DrumkitComponent *pCompo = Hydrogen::get_instance()->getSong()->get_component( ref->getCompoID() ); + + pCompo->set_volume( newVolume ); +} + void Mixer::unmuteAll( bool findSelectedInstr ) { - if(findSelectedInstr) - unmuteAll( Hydrogen::get_instance()->getSelectedInstrumentNumber() ); - else - unmuteAll( 0 ); + if(findSelectedInstr) + unmuteAll( Hydrogen::get_instance()->getSelectedInstrumentNumber() ); + else + unmuteAll( 0 ); } void Mixer::unmuteAll( int selectedInstrument ) { - Hydrogen *pEngine = Hydrogen::get_instance(); - Song *pSong = pEngine->getSong(); - InstrumentList *pInstrList = pSong->get_instrument_list(); - int nInstruments = pInstrList->size(); - for ( int i = 0; i < nInstruments; ++i ) { - m_pMixerLine[i]->setMuteClicked( false ); - m_pMixerLine[i]->setSoloClicked( false ); - pInstrList->get( i )->set_muted( false ); - } - // select first instrument after unmute all - Hydrogen::get_instance()->setSelectedInstrumentNumber(selectedInstrument); + Hydrogen *pEngine = Hydrogen::get_instance(); + Song *pSong = pEngine->getSong(); + InstrumentList *pInstrList = pSong->get_instrument_list(); + int nInstruments = pInstrList->size(); + for ( int i = 0; i < nInstruments; ++i ) { + m_pMixerLine[i]->setMuteClicked( false ); + m_pMixerLine[i]->setSoloClicked( false ); + pInstrList->get( i )->set_muted( false ); + } + // select first instrument after unmute all + Hydrogen::get_instance()->setSelectedInstrumentNumber(selectedInstrument); } void Mixer::soloClicked(MixerLine* ref) @@ -273,31 +334,6 @@ MixerLine * L = m_pMixerLine[ nLine ]; L->setSoloClicked( !L->isSoloClicked() ); soloClicked( L ); -// Hydrogen *pEngine = Hydrogen::get_instance(); -// Song *pSong = pEngine->getSong(); -// InstrumentList *pInstrList = pSong->get_instrument_list(); -// int nInstruments = pInstrList->size(); -// -// bool isSoloClicked = m_pMixerLine[ nLine ]->isSoloClicked(); -// -// if (!isSoloClicked) { -// for ( int i = 0; i < nInstruments; i++ ) { -// m_pMixerLine[i]->setSoloClicked( false ); -// m_pMixerLine[i]->setMuteClicked( true ); -// pInstrList->get( i )->set_muted( true ); -// } -// m_pMixerLine[nLine]->setSoloClicked( true ); -// m_pMixerLine[nLine]->setMuteClicked( false ); -// pInstrList->get( nLine )->set_muted( false ); -// } -// else { -// for ( int i = 0; i < nInstruments; i++ ) { -// m_pMixerLine[i]->setMuteClicked( false ); -// m_pMixerLine[i]->setSoloClicked( false ); -// pInstrList->get( i )->set_muted( false ); -// } -// } - } bool Mixer::isSoloClicked( uint n ) @@ -313,13 +349,13 @@ int nLine = findMixerLineByRef( ref ); Hydrogen::get_instance()->setSelectedInstrumentNumber( nLine ); - Hydrogen *engine = Hydrogen::get_instance(); - Song *song = engine->getSong(); - InstrumentList *instrList = song->get_instrument_list(); + Hydrogen *pEngine = Hydrogen::get_instance(); + Song *song = pEngine->getSong(); + InstrumentList *pInstrList = song->get_instrument_list(); const float fPitch = 0.0f; - Note *note = new Note( instrList->get(nLine), 0, 1.0, 0.5f, 0.5f, -1, fPitch ); - AudioEngine::get_instance()->get_sampler()->note_on(note); + Note *pNote = new Note( pInstrList->get(nLine), 0, 1.0, 0.5f, 0.5f, -1, fPitch ); + AudioEngine::get_instance()->get_sampler()->note_on(pNote); Hydrogen::get_instance()->setSelectedInstrumentNumber(nLine); } @@ -332,13 +368,13 @@ int nLine = findMixerLineByRef( ref ); Hydrogen::get_instance()->setSelectedInstrumentNumber( nLine ); - Hydrogen *engine = Hydrogen::get_instance(); - Song *song = engine->getSong(); - InstrumentList *instrList = song->get_instrument_list(); + Hydrogen *pEngine = Hydrogen::get_instance(); + Song *pSong = pEngine->getSong(); + InstrumentList *instrList = pSong->get_instrument_list(); const float fPitch = 0.0f; - Note *note = new Note( instrList->get( nLine ), 0, 1.0, 0.5, 0.5, -1, fPitch ); - AudioEngine::get_instance()->get_sampler()->note_off(note); + Note *pNote = new Note( instrList->get( nLine ), 0, 1.0, 0.5, 0.5, -1, fPitch ); + AudioEngine::get_instance()->get_sampler()->note_off(pNote); Hydrogen::get_instance()->setSelectedInstrumentNumber(nLine); } @@ -356,19 +392,31 @@ } +uint Mixer::findCompoMixerLineByRef(ComponentMixerLine* ref) +{ + for (std::map::iterator it=m_pComponentMixerLine.begin(); it!=m_pComponentMixerLine.end(); ++it) { + if(it->second == ref) + return it->first; + } + + return 0; +} + + + void Mixer::volumeChanged(MixerLine* ref) { int nLine = findMixerLineByRef(ref); Hydrogen::get_instance()->setSelectedInstrumentNumber( nLine ); - Hydrogen *engine = Hydrogen::get_instance(); - Song *song = engine->getSong(); - InstrumentList *instrList = song->get_instrument_list(); + Hydrogen *pEngine = Hydrogen::get_instance(); + Song *pSong = pEngine->getSong(); + InstrumentList *instrList = pSong->get_instrument_list(); - Instrument *instr = instrList->get(nLine); + Instrument *pInstr = instrList->get(nLine); - instr->set_volume( ref->getVolume() ); + pInstr->set_volume( ref->getVolume() ); Hydrogen::get_instance()->setSelectedInstrumentNumber(nLine); } @@ -378,9 +426,9 @@ void Mixer::masterVolumeChanged(MasterMixerLine* ref) { - float volume = ref->getVolume(); - Song *song = Hydrogen::get_instance()->getSong(); - song->set_volume(volume); + float Volume = ref->getVolume(); + Song *pSong = Hydrogen::get_instance()->getSong(); + pSong->set_volume(Volume); } @@ -393,13 +441,15 @@ Hydrogen *pEngine = Hydrogen::get_instance(); Song *pSong = pEngine->getSong(); InstrumentList *pInstrList = pSong->get_instrument_list(); + std::vector* compoList = pSong->get_components(); uint nSelectedInstr = pEngine->getSelectedInstrumentNumber(); float fallOff = pPref->getMixerFalloffSpeed(); uint nMuteClicked = 0; - uint nInstruments = pInstrList->size(); + int nInstruments = pInstrList->size(); + int nCompo = compoList->size(); for ( unsigned nInstr = 0; nInstr < MAX_INSTRUMENTS; ++nInstr ) { if ( nInstr >= nInstruments ) { // unused instrument! let's hide and destroy the mixerline! @@ -407,7 +457,7 @@ delete m_pMixerLine[ nInstr ]; m_pMixerLine[ nInstr ] = NULL; - int newWidth = MIXER_STRIP_WIDTH * nInstruments; + int newWidth = MIXER_STRIP_WIDTH * ( nInstruments + nCompo ); if ( m_pFaderPanel->width() != newWidth ) { m_pFaderPanel->resize( newWidth, height() ); } @@ -418,9 +468,9 @@ if ( m_pMixerLine[ nInstr ] == NULL ) { // the mixerline doesn't exists..I'll create a new one! m_pMixerLine[ nInstr ] = createMixerLine( nInstr ); - m_pFaderHBox->addWidget( m_pMixerLine[ nInstr ] ); + m_pFaderHBox->insertWidget( nInstr, m_pMixerLine[ nInstr ] ); - int newWidth = MIXER_STRIP_WIDTH * nInstruments; + int newWidth = MIXER_STRIP_WIDTH * ( nInstruments + nCompo ); if ( m_pFaderPanel->width() != newWidth ) { m_pFaderPanel->resize( newWidth, height() ); } @@ -508,6 +558,97 @@ } } + for (std::vector::iterator it = compoList->begin() ; it != compoList->end(); ++it) { + DrumkitComponent* p_compo = *it; + + if( m_pComponentMixerLine.find(p_compo->get_id()) == m_pComponentMixerLine.end() ) { + // the mixerline doesn't exists..I'll create a new one! + m_pComponentMixerLine[ p_compo->get_id() ] = createComponentMixerLine( p_compo->get_id() ); + m_pFaderHBox->addWidget( m_pComponentMixerLine[ p_compo->get_id() ] ); + + int newWidth = MIXER_STRIP_WIDTH * ( nInstruments + nCompo ); + if ( m_pFaderPanel->width() != newWidth ) { + m_pFaderPanel->resize( newWidth, height() ); + } + } + + ComponentMixerLine *pLine = m_pComponentMixerLine[ p_compo->get_id() ]; + + float fNewPeak_L = p_compo->get_peak_l(); + p_compo->set_peak_l( 0.0f ); // reset instrument peak + + float fNewPeak_R = p_compo->get_peak_r(); + p_compo->set_peak_r( 0.0f ); // reset instrument peak + + float fNewVolume = p_compo->get_volume(); + bool bMuted = p_compo->is_muted(); + + QString sName = p_compo->get_name(); + + float fOldPeak_L = pLine->getPeak_L(); + float fOldPeak_R = pLine->getPeak_R(); + + if (!bShowPeaks) { + fNewPeak_L = 0.0f; + fNewPeak_R = 0.0f; + } + + if ( fNewPeak_L >= fOldPeak_L) { // LEFT peak + pLine->setPeak_L( fNewPeak_L ); + } + else { + pLine->setPeak_L( fOldPeak_L / fallOff ); + } + if ( fNewPeak_R >= fOldPeak_R) { // Right peak + pLine->setPeak_R( fNewPeak_R ); + } + else { + pLine->setPeak_R( fOldPeak_R / fallOff ); + } + + // fader position + pLine->setVolume( fNewVolume ); + + // mute + if ( bMuted ) { + nMuteClicked++; + } + pLine->setMuteClicked( bMuted ); + + // instr name + pLine->setName( sName ); + + pLine->updateMixerLine(); + } + + if( compoList->size() < m_pComponentMixerLine.size() ) { + std::vector* p_ids_to_delete = new std::vector(); + for (std::map::iterator it=m_pComponentMixerLine.begin(); it!=m_pComponentMixerLine.end(); ++it) { + + bool p_foundExistingRelatedComponent = false; + for ( std::vector::iterator it2 = compoList->begin() ; it2 != compoList->end(); ++it2 ) { + DrumkitComponent* p_compo = *it2; + if( p_compo->get_id() == it->first ) { + p_foundExistingRelatedComponent = true; + break; + } + } + if( !p_foundExistingRelatedComponent ) + p_ids_to_delete->push_back( it->first ) ; + } + + for ( std::vector::iterator it = p_ids_to_delete->begin() ; it != p_ids_to_delete->end(); ++it ) { + int p_compoID = *it; + delete m_pComponentMixerLine[p_compoID]; + m_pComponentMixerLine.erase( p_compoID ); + + int newWidth = MIXER_STRIP_WIDTH * ( nInstruments + nCompo ); + if ( m_pFaderPanel->width() != newWidth ) { + m_pFaderPanel->resize( newWidth, height() ); + } + } + } + if (nMuteClicked == nInstruments - 1) { // find the not muted button for (uint i = 0; i < nInstruments; i++) { @@ -647,13 +788,13 @@ int nLine = findMixerLineByRef(ref); Hydrogen::get_instance()->setSelectedInstrumentNumber( nLine ); - Hydrogen *engine = Hydrogen::get_instance(); - Song *song = engine->getSong(); - InstrumentList *instrList = song->get_instrument_list(); + Hydrogen *pEngine = Hydrogen::get_instance(); + Song *pSong = pEngine->getSong(); + InstrumentList *pInstrList = pSong->get_instrument_list(); - Instrument *instr = instrList->get(nLine); - instr->set_pan_l( pan_L ); - instr->set_pan_r( pan_R ); + Instrument *pInstr = pInstrList->get(nLine); + pInstr->set_pan_l( pan_L ); + pInstr->set_pan_r( pan_R ); Hydrogen::get_instance()->setSelectedInstrumentNumber(nLine); @@ -665,10 +806,10 @@ int nLine = findMixerLineByRef(ref); Hydrogen::get_instance()->setSelectedInstrumentNumber( nLine ); - Hydrogen *engine = Hydrogen::get_instance(); - Song *song = engine->getSong(); - InstrumentList *instrList = song->get_instrument_list(); - Instrument *pInstr = instrList->get(nLine); + Hydrogen *pEngine = Hydrogen::get_instance(); + Song *pSong = pEngine->getSong(); + InstrumentList *pInstrList = pSong->get_instrument_list(); + Instrument *pInstr = pInstrList->get(nLine); pInstr->set_fx_level( ref->getFXLevel(nKnob), nKnob ); QString sInfo = trUtf8( "Set FX %1 level ").arg( nKnob + 1 ); ( HydrogenApp::get_instance() )->setStatusBarMessage( sInfo+ QString( "[%1]" ).arg( ref->getFXLevel(nKnob), 0, 'f', 2 ), 2000 ); @@ -690,27 +831,6 @@ void Mixer::resizeEvent ( QResizeEvent *ev ) { UNUSED( ev ); -/* - uint nMaster_X = width() - MASTERMIXER_STRIP_WIDTH; - int nFXFrameWidth = 213; - - if ( m_pFXFrame->isVisible() ) { - int w = width() - MASTERMIXER_STRIP_WIDTH - nFXFrameWidth; - m_pFaderScrollArea->resize( w, m_nMixerHeight ); - } - else { - int w = width() - MASTERMIXER_STRIP_WIDTH; - m_pFaderScrollArea->resize( w, m_nMixerHeight ); - } - - m_pFXFrame->move( nMaster_X - nFXFrameWidth, 0 ); - - m_pMasterLine->move( nMaster_X, 0); - m_pShowPeaksBtn->move( nMaster_X + 67, 242 ); - m_pShowFXPanelBtn->move( nMaster_X + 67, 258 ); - - resize(width(), m_nMixerHeight); // qt bug workaround -*/ } @@ -752,9 +872,6 @@ #ifdef H2CORE_HAVE_LADSPA bool bActive = ref->isFxActive(); - //Hydrogen *engine = Hydrogen::get_instance(); - //Song *song = engine->getSong(); - for (uint nFX = 0; nFX < MAX_FX; nFX++) { if (ref == m_pLadspaFXLine[ nFX ] ) { LadspaFX *pFX = Effects::get_instance()->getLadspaFX(nFX); @@ -779,7 +896,7 @@ HydrogenApp::get_instance()->getLadspaFXProperties(nFX)->show(); } } - Hydrogen::get_instance()->getSong()->__is_modified = true; + Hydrogen::get_instance()->getSong()->set_is_modified( true ); #endif } @@ -789,7 +906,7 @@ { #ifdef H2CORE_HAVE_LADSPA Song *pSong = (Hydrogen::get_instance() )->getSong(); - pSong->__is_modified = true; + pSong->set_is_modified( true ); for (uint nFX = 0; nFX < MAX_FX; nFX++) { if (ref == m_pLadspaFXLine[ nFX ] ) { diff -Nru hydrogen-0.9.6.1/src/gui/src/Mixer/Mixer.h hydrogen-0.9.7/src/gui/src/Mixer/Mixer.h --- hydrogen-0.9.6.1/src/gui/src/Mixer/Mixer.h 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/Mixer/Mixer.h 2016-11-05 08:22:50.000000000 +0000 @@ -34,6 +34,7 @@ class Button; class ToggleButton; class MixerLine; +class ComponentMixerLine; class FxMixerLine; class MasterMixerLine; class LadspaFXMixerLine; @@ -41,7 +42,7 @@ class Mixer : public QWidget, public EventListener, public H2Core::Object { - H2_OBJECT + H2_OBJECT Q_OBJECT public: Mixer(QWidget* parent); @@ -59,10 +60,13 @@ void noteOnClicked(MixerLine* ref); void noteOffClicked(MixerLine* ref); void muteClicked(MixerLine* ref); - void unmuteAll( bool findSelectedInstr); - void unmuteAll( int selectedInstr); + void muteClicked(ComponentMixerLine* ref); + void unmuteAll( bool findSelectedInstr); + void unmuteAll( int selectedInstr); void soloClicked(MixerLine* ref); + void soloClicked(ComponentMixerLine* ref); void volumeChanged(MixerLine* ref); + void volumeChanged(ComponentMixerLine* ref); void panChanged(MixerLine* ref); void knobChanged(MixerLine* ref, int nKnob); void masterVolumeChanged(MasterMixerLine*); @@ -86,13 +90,16 @@ QWidget *m_pFaderPanel; MixerLine *m_pMixerLine[MAX_INSTRUMENTS]; + std::map m_pComponentMixerLine; PixmapWidget *m_pFXFrame; QTimer *m_pUpdateTimer; uint findMixerLineByRef(MixerLine* ref); + uint findCompoMixerLineByRef(ComponentMixerLine* ref); MixerLine* createMixerLine( int ); + ComponentMixerLine* createComponentMixerLine( int ); // Implements EventListener interface virtual void noteOnEvent( int nInstrument ); diff -Nru hydrogen-0.9.6.1/src/gui/src/Mixer/MixerLine.cpp hydrogen-0.9.7/src/gui/src/Mixer/MixerLine.cpp --- hydrogen-0.9.6.1/src/gui/src/Mixer/MixerLine.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/Mixer/MixerLine.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -146,9 +146,6 @@ Preferences *pref = Preferences::get_instance(); - QString family = pref->getMixerFontFamily(); - int size = pref->getMixerFontPointSize(); - QFont mixerFont( family, size ); float m_fFalloffTemp = pref->getMixerFalloffSpeed(); m_fFalloffTemp = (m_fFalloffTemp * 20) - 2; m_nFalloff = (int)m_fFalloffTemp; @@ -225,11 +222,11 @@ Song *song = (Hydrogen::get_instance())->getSong(); if (ref == m_pMuteBtn) { - song->__is_modified = true; + song->set_is_modified(true); emit muteBtnClicked(this); } else if (ref == m_pSoloBtn) { - song->__is_modified = true; + song->set_is_modified(true); emit soloBtnClicked(this); } else if (ref == m_pPlaySampleBtn) { @@ -251,8 +248,8 @@ void MixerLine::faderChanged(Fader *ref) { - Song *song = (Hydrogen::get_instance())->getSong(); - song->__is_modified = true; + Song *pSong = (Hydrogen::get_instance())->getSong(); + pSong->set_is_modified( true ); emit volumeChanged(this); double value = (double) ref->getValue(); @@ -377,8 +374,8 @@ void MixerLine::panChanged(Rotary *ref) { - Song *song = Hydrogen::get_instance()->getSong(); - song->__is_modified = true; + Song *pSong = Hydrogen::get_instance()->getSong(); + pSong->set_is_modified( true ); emit panChanged( this ); float panValue = ref->getValue(); @@ -447,6 +444,7 @@ { if (nFX > MAX_FX) { ERRORLOG( QString("[setFXLevel] nFX > MAX_FX (nFX=%1)").arg(nFX) ); + return; } m_pKnob[nFX]->setValue( fValue ); } @@ -455,6 +453,7 @@ { if (nFX > MAX_FX) { ERRORLOG( QString("[setFXLevel] nFX > MAX_FX (nFX=%1)").arg(nFX) ); + return 0.0f; } return m_pKnob[nFX]->getValue(); } @@ -474,8 +473,251 @@ } +// :::::::::::::::::::::::::::: + + +const char* ComponentMixerLine::__class_name = "ComponentMixerLine"; + +ComponentMixerLine::ComponentMixerLine(QWidget* parent, int CompoID) + : PixmapWidget( parent, __class_name ) +{ +// INFOLOG( "INIT" ); + + __compoID = CompoID; + + m_nWidth = MIXERLINE_WIDTH; + m_nHeight = MIXERLINE_HEIGHT; + m_fMaxPeak = 0.0; + m_nActivity = 0; + m_bIsSelected = false; + m_nPeakTimer = 0; + + resize( m_nWidth, m_nHeight ); + setFixedSize( m_nWidth, m_nHeight ); + + setPixmap( "/mixerPanel/componentmixerline_background.png" ); + + // Mute button + m_pMuteBtn = new ToggleButton( + this, + "/mixerPanel/btn_mute_on.png", + "/mixerPanel/btn_mute_off.png", + "/mixerPanel/btn_mute_over.png", + QSize( 18, 13 ) + ); + m_pMuteBtn->move( 8, 17 ); + m_pMuteBtn->setToolTip( trUtf8( "Mute" ) ); + connect(m_pMuteBtn, SIGNAL(clicked(Button*)), this, SLOT(click(Button*))); + + // Solo button + m_pSoloBtn = new ToggleButton( + this, + "/mixerPanel/btn_solo_on.png", + "/mixerPanel/btn_solo_off.png", + "/mixerPanel/btn_solo_over.png", + QSize( 18, 13 ) + ); + m_pSoloBtn->move( 30, 17); + m_pSoloBtn->setToolTip( trUtf8( "Solo" ) ); + connect(m_pSoloBtn, SIGNAL(clicked(Button*)), this, SLOT(click(Button*))); + + Preferences *pref = Preferences::get_instance(); + + QString family = pref->getMixerFontFamily(); + int size = pref->getMixerFontPointSize(); + QFont mixerFont( family, size ); + float m_fFalloffTemp = pref->getMixerFalloffSpeed(); + m_fFalloffTemp = (m_fFalloffTemp * 20) - 2; + m_nFalloff = (int)m_fFalloffTemp; + + QPixmap textBackground; + bool ok = textBackground.load( Skin::getImagePath() + "/mixerPanel/mixerline_text_background.png" ); + if( ok == false ){ + ERRORLOG( "Error loading pixmap" ); + } + + // instrument name widget + m_pNameWidget = new InstrumentNameWidget( this ); + m_pNameWidget->move( 6, 128 ); + m_pNameWidget->setToolTip( trUtf8( "Component name" ) ); + + // m_pFader + m_pFader = new Fader( this, false, false ); + m_pFader->move( 23, 128 ); + m_pFader->setMinValue( 0.0 ); + m_pFader->setMaxValue( 1.5 ); + connect( m_pFader, SIGNAL( valueChanged(Fader*) ), this, SLOT( faderChanged(Fader*) ) ); + + //pAction = new MidiAction("STRIP_VOLUME_ABSOLUTE"); + //pAction->setParameter1( QString::number(nInstr) ); + //m_pFader->setAction( pAction ); + + + m_pPeakLCD = new LCDDisplay( this, LCDDigit::SMALL_BLUE, 4 ); + m_pPeakLCD->move( 10, 106 ); + m_pPeakLCD->setText( "0.00" ); + QPalette lcdPalette; + lcdPalette.setColor( QPalette::Background, QColor( 49, 53, 61 ) ); + m_pPeakLCD->setPalette( lcdPalette ); +} + + + +ComponentMixerLine::~ComponentMixerLine() +{ +// INFOLOG( "DESTROY" ); + //delete m_pFader; +} + + + +void ComponentMixerLine::updateMixerLine() +{ + if ( m_nPeakTimer > m_nFalloff ) { + if ( m_fMaxPeak > 0.05f ) { + m_fMaxPeak = m_fMaxPeak - 0.05f; + } + else { + m_fMaxPeak = 0.0f; + m_nPeakTimer = 0; + } + char tmp[20]; + snprintf(tmp, 19, "%#.2f", (double)m_fMaxPeak ); + m_pPeakLCD->setText(tmp); + if ( m_fMaxPeak > 1.0 ) { + m_pPeakLCD->setSmallRed(); + } + else { + m_pPeakLCD->setSmallBlue(); + } + } + m_nPeakTimer++; +} + + + +void ComponentMixerLine::click(Button *ref) { + Song *pSong = (Hydrogen::get_instance())->getSong(); + + if (ref == m_pMuteBtn) { + pSong->set_is_modified( true ); + emit muteBtnClicked(this); + } + else if (ref == m_pSoloBtn) { + pSong->set_is_modified( true ); + emit soloBtnClicked(this); + } +} + + +void ComponentMixerLine::faderChanged(Fader *ref) +{ + Song *pSong = (Hydrogen::get_instance())->getSong(); + pSong->set_is_modified( true ); + emit volumeChanged(this); + + double value = (double) ref->getValue(); + ( HydrogenApp::get_instance() )->setStatusBarMessage( trUtf8( "Set instrument volume [%1]" ).arg( value, 0, 'f', 2 ), 2000 ); +} + + + +bool ComponentMixerLine::isMuteClicked() { + return m_pMuteBtn->isPressed(); +} + + + +void ComponentMixerLine::setMuteClicked(bool isClicked) { + m_pMuteBtn->setPressed(isClicked); +} + + + +bool ComponentMixerLine::isSoloClicked() { + return m_pSoloBtn->isPressed(); +} + + + +void ComponentMixerLine::setSoloClicked(bool isClicked) { + m_pSoloBtn->setPressed(isClicked); +} + + + +float ComponentMixerLine::getVolume() +{ + return m_pFader->getValue(); +} + + + +void ComponentMixerLine::setVolume( float value ) +{ + m_pFader->setValue( value ); +} + + + +void ComponentMixerLine::setPeak_L( float peak ) { + if (peak != getPeak_L() ) { + m_pFader->setPeak_L( peak ); + if (peak > m_fMaxPeak) { + if ( peak < 0.1f ) { + peak = 0.0f; + } + char tmp[20]; + snprintf(tmp, 19, "%#.2f", peak); + m_pPeakLCD->setText( tmp ); + if ( peak > 1.0 ) { + m_pPeakLCD->setSmallRed(); + } + else { + m_pPeakLCD->setSmallBlue(); + } + m_fMaxPeak = peak; + m_nPeakTimer = 0; + } + } +} + + + +float ComponentMixerLine::getPeak_L() { + return m_pFader->getPeak_L(); +} + + + +void ComponentMixerLine::setPeak_R( float peak ) { + if (peak != getPeak_R() ) { + m_pFader->setPeak_R( peak ); + if (peak > m_fMaxPeak) { + if ( peak < 0.1f ) { + peak = 0.0f; + } + char tmp[20]; + snprintf(tmp, 19, "%#.2f", peak); + m_pPeakLCD->setText( tmp ); + if ( peak > 1.0 ) { + m_pPeakLCD->setSmallRed(); + } + else { + m_pPeakLCD->setSmallBlue(); + } + m_fMaxPeak = peak; + m_nPeakTimer = 0; + } + } +} + +float ComponentMixerLine::getPeak_R() { + return m_pFader->getPeak_R(); +} + // :::::::::::::::::::::::::::: @@ -555,7 +797,6 @@ MasterMixerLine::~MasterMixerLine() { -// cout << "MixerLine destroy" << endl; m_fMaxPeak = 0.0; } @@ -574,8 +815,8 @@ emit volumeChanged(this); - Song *song = Hydrogen::get_instance()->getSong(); - song->__is_modified = true; + Song *pSong = Hydrogen::get_instance()->getSong(); + pSong->set_is_modified( true ); double value = (double) ref->getValue(); ( HydrogenApp::get_instance() )->setStatusBarMessage( trUtf8( "Set master volume [%1]" ).arg( value, 0, 'f', 2 ), 2000 ); @@ -688,6 +929,7 @@ m_pHumanizeTimeRotary->setValue( pSong->get_humanize_time_value() ); m_pHumanizeVelocityRotary->setValue( pSong->get_humanize_velocity_value() ); m_pSwingRotary->setValue( pSong->get_swing_factor() ); + m_pMuteBtn->setPressed( pSong->__is_muted ); } else { WARNINGLOG( "pSong == NULL "); @@ -739,28 +981,11 @@ setMinimumSize( m_nWidth, m_nHeight ); setMaximumSize( m_nWidth, m_nHeight ); resize( m_nWidth, m_nHeight ); -// QPalette defaultPalette; -// defaultPalette.setColor( QPalette::Background, QColor( 58, 62, 72 ) ); -// this->setPalette( defaultPalette ); m_fMaxPeak = 0.0; // MixerLine Background image setPixmap( "/mixerPanel/mixerline_background.png" ); - // MixerLine LABEL Background image -// QPixmap mixerLineLabelBackground; -// ok = mixerLineLabelBackground.load(Skin::getImagePath() + "/mixerPanel/mixerline_label_background.png"); -// if( ok == false ){ -// ERRORLOG( "Error loading pixmap" ); -// } - -// QPixmap textBackground; -// ok = textBackground.load( Skin::getImagePath() + "/mixerPanel/mixerline_text_background.png" ); -// if( ok == false ){ -// ERRORLOG( "Error loading pixmap" ); -// } - - // active button activeBtn = new ToggleButton( this, @@ -804,10 +1029,10 @@ void FxMixerLine::click(Button *ref) { - Song *song = Hydrogen::get_instance()->getSong(); + Song *pSong = Hydrogen::get_instance()->getSong(); if (ref == activeBtn ) { - song->__is_modified = true; + pSong->set_is_modified( true ); emit activeBtnClicked( this ); } } @@ -830,8 +1055,8 @@ } - Song *song = Hydrogen::get_instance()->getSong(); - song->__is_modified = true; + Song *pSong = Hydrogen::get_instance()->getSong(); + pSong->set_is_modified( true ); emit volumeChanged( this ); } @@ -933,9 +1158,6 @@ //////////////////////////////// -//QPixmap* InstrumentNameWidget::m_pBackground = NULL; - - InstrumentNameWidget::InstrumentNameWidget(QWidget* parent) : PixmapWidget( parent, "InstrumentNameWidget" ) { @@ -948,8 +1170,6 @@ int size = pref->getMixerFontPointSize(); m_mixerFont.setFamily( family ); m_mixerFont.setPointSize( size ); -// m_mixerFont.setBold( true ); -// m_mixerFont.setItalic( true ); setPixmap( "/mixerPanel/mixerline_label_background.png" ); @@ -1108,12 +1328,9 @@ { UNUSED( ref ); m_fMaxPeak = 0.0; -// char tmp[20]; -// sprintf(tmp, "%#.1f", fMaxPeak); -// m_pVolumeLbl->setText(tmp); - Song *song = Hydrogen::get_instance()->getSong(); - song->__is_modified = true; + Song *pSong = Hydrogen::get_instance()->getSong(); + pSong->set_is_modified( true ); emit volumeChanged(this); } @@ -1123,11 +1340,6 @@ { UNUSED( fPeak_L ); UNUSED( fPeak_R ); -/* - m_pPeakmeter->setPeak_L( fPeak_L ); - m_pPeakmeter->setPeak_R( fPeak_R ); - m_pPeakmeter->updateFader(); -*/ } @@ -1136,10 +1348,6 @@ { UNUSED( fPeak_L ); UNUSED( fPeak_R ); -/* - (*fPeak_L) = m_pFader->getPeak_L(); - (*fPeak_R) = m_pFader->getPeak_R(); -*/ } @@ -1154,5 +1362,4 @@ void LadspaFXMixerLine::setVolume(float value) { m_pRotary->setValue( value ); -// m_pRotary->updateRotary(); } diff -Nru hydrogen-0.9.6.1/src/gui/src/Mixer/MixerLine.h hydrogen-0.9.7/src/gui/src/Mixer/MixerLine.h --- hydrogen-0.9.6.1/src/gui/src/Mixer/MixerLine.h 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/Mixer/MixerLine.h 2016-11-05 08:22:50.000000000 +0000 @@ -44,30 +44,30 @@ class InstrumentNameWidget : public PixmapWidget { - H2_OBJECT + H2_OBJECT Q_OBJECT public: InstrumentNameWidget(QWidget* parent); ~InstrumentNameWidget(); - void setText(QString text); + void setText(QString text); QString text(); - void mousePressEvent( QMouseEvent * e ); - void mouseDoubleClickEvent( QMouseEvent * e ); + void mousePressEvent( QMouseEvent * e ); + void mouseDoubleClickEvent( QMouseEvent * e ); signals: - void clicked(); - void doubleClicked(); + void clicked(); + void doubleClicked(); protected: virtual void paintEvent(QPaintEvent *ev); private: - int m_nWidgetWidth; - int m_nWidgetHeight; - QString m_sInstrName; - QFont m_mixerFont; + int m_nWidgetWidth; + int m_nWidgetHeight; + QString m_sInstrName; + QFont m_mixerFont; }; @@ -78,135 +78,197 @@ /// class MixerLine: public PixmapWidget { - H2_OBJECT + H2_OBJECT Q_OBJECT public: MixerLine(QWidget* parent, int nInstr); ~MixerLine(); - void updateMixerLine(); + void updateMixerLine(); - bool isMuteClicked(); - void setMuteClicked(bool isClicked); + bool isMuteClicked(); + void setMuteClicked(bool isClicked); - bool isSoloClicked(); - void setSoloClicked(bool isClicked); + bool isSoloClicked(); + void setSoloClicked(bool isClicked); - float getVolume(); - void setVolume(float value); + float getVolume(); + void setVolume(float value); - void setPeak_L( float peak ); - float getPeak_L(); + void setPeak_L( float peak ); + float getPeak_L(); - void setPeak_R( float peak ); - float getPeak_R(); + void setPeak_R( float peak ); + float getPeak_R(); - void setName(QString name) { m_pNameWidget->setText( name ); } + void setName(QString name) { m_pNameWidget->setText( name ); } QString getName() { return m_pNameWidget->text(); } - float getPan(); - void setPan(float value); + float getPan(); + void setPan(float value); - int getActivity() { return m_nActivity; } - void setActivity( uint value ) { m_nActivity = value; } + int getActivity() { return m_nActivity; } + void setActivity( uint value ) { m_nActivity = value; } - void setPlayClicked( bool clicked ); + void setPlayClicked( bool clicked ); - void setFXLevel( uint nFX, float fValue ); - float getFXLevel( uint nFX ); + void setFXLevel( uint nFX, float fValue ); + float getFXLevel( uint nFX ); - void setSelected( bool bIsSelected ); + void setSelected( bool bIsSelected ); signals: - void muteBtnClicked(MixerLine *ref); - void soloBtnClicked(MixerLine *ref); - void volumeChanged(MixerLine *ref); - void instrumentNameClicked(MixerLine *ref); - void instrumentNameSelected(MixerLine *ref); - void noteOnClicked(MixerLine *ref); - void noteOffClicked(MixerLine *ref); - void panChanged(MixerLine *ref); - void knobChanged(MixerLine *ref, int nKnob); + void muteBtnClicked(MixerLine *ref); + void soloBtnClicked(MixerLine *ref); + void volumeChanged(MixerLine *ref); + void instrumentNameClicked(MixerLine *ref); + void instrumentNameSelected(MixerLine *ref); + void noteOnClicked(MixerLine *ref); + void noteOffClicked(MixerLine *ref); + void panChanged(MixerLine *ref); + void knobChanged(MixerLine *ref, int nKnob); public slots: - void click(Button *ref); - void rightClick(Button *ref); - void faderChanged(Fader *ref); - void panChanged(Rotary *ref); - void knobChanged(Knob *ref); - void nameClicked(); - void nameSelected(); - - private: - uint m_nWidth; - uint m_nHeight; - bool m_bIsSelected; - - uint m_nActivity; - uint m_nPeakTimer; - float m_fMaxPeak; - float m_nFalloff; - Fader *m_pFader; - Rotary *m_pPanRotary; - InstrumentNameWidget *m_pNameWidget; - ToggleButton *m_pMuteBtn; - ToggleButton *m_pSoloBtn; - Button *m_pPlaySampleBtn; - Button *m_pTriggerSampleLED; - Knob *m_pKnob[MAX_FX]; + void click(Button *ref); + void rightClick(Button *ref); + void faderChanged(Fader *ref); + void panChanged(Rotary *ref); + void knobChanged(Knob *ref); + void nameClicked(); + void nameSelected(); + + private: + uint m_nWidth; + uint m_nHeight; + bool m_bIsSelected; + + uint m_nActivity; + uint m_nPeakTimer; + float m_fMaxPeak; + float m_nFalloff; + + Fader * m_pFader; + Rotary* m_pPanRotary; + InstrumentNameWidget * m_pNameWidget; + ToggleButton * m_pMuteBtn; + ToggleButton * m_pSoloBtn; + Button * m_pPlaySampleBtn; + Button * m_pTriggerSampleLED; + Knob * m_pKnob[MAX_FX]; - LCDDisplay *m_pPeakLCD; + LCDDisplay * m_pPeakLCD; }; +class ComponentMixerLine: public PixmapWidget +{ + H2_OBJECT + Q_OBJECT + public: + ComponentMixerLine(QWidget* parent, int CompoID); + ~ComponentMixerLine(); + + void updateMixerLine(); + + bool isMuteClicked(); + void setMuteClicked(bool isClicked); + + bool isSoloClicked(); + void setSoloClicked(bool isClicked); + + float getVolume(); + void setVolume(float value); + + void setPeak_L( float peak ); + float getPeak_L(); + + void setPeak_R( float peak ); + float getPeak_R(); + + void setName(QString name) { m_pNameWidget->setText( name ); } + QString getName() { return m_pNameWidget->text(); } + + int getCompoID(){ return __compoID; } + + signals: + void muteBtnClicked(ComponentMixerLine *ref); + void soloBtnClicked(ComponentMixerLine *ref); + void volumeChanged(ComponentMixerLine *ref); + + public slots: + void click(Button *ref); + void faderChanged(Fader *ref); + + + private: + int __compoID; + uint m_nWidth; + uint m_nHeight; + bool m_bIsSelected; + + uint m_nActivity; + uint m_nPeakTimer; + float m_fMaxPeak; + float m_nFalloff; + + Fader * m_pFader; + InstrumentNameWidget * m_pNameWidget; + ToggleButton * m_pMuteBtn; + ToggleButton * m_pSoloBtn; + LCDDisplay * m_pPeakLCD; +}; + + + class MasterMixerLine: public PixmapWidget { - H2_OBJECT + H2_OBJECT Q_OBJECT public: MasterMixerLine(QWidget* parent); ~MasterMixerLine(); - void updateMixerLine(); + void updateMixerLine(); - float getVolume(); - void setVolume(float value); + float getVolume(); + void setVolume(float value); - void setPeak_L(float peak); - float getPeak_L(); + void setPeak_L(float peak); + float getPeak_L(); - void setPeak_R(float peak); - float getPeak_R(); + void setPeak_R(float peak); + float getPeak_R(); signals: - void volumeChanged(MasterMixerLine *ref); + void volumeChanged(MasterMixerLine *ref); public slots: - void faderChanged(MasterFader * ref); - void rotaryChanged( Rotary *pRef ); - void muteClicked(Button*); + void faderChanged(MasterFader * ref); + void rotaryChanged( Rotary *pRef ); + void muteClicked(Button*); private: - uint m_nWidth; - uint m_nHeight; - - uint m_nPeakTimer; - float m_fMaxPeak; - float m_nFalloff; - Fader *m_pFader; - MasterFader *m_pMasterFader; - - LCDDisplay *m_pPeakLCD; + uint m_nWidth; + uint m_nHeight; - Rotary *m_pSwingRotary; - Rotary *m_pHumanizeTimeRotary; - Rotary *m_pHumanizeVelocityRotary; + uint m_nPeakTimer; + float m_fMaxPeak; + float m_nFalloff; + + Fader * m_pFader; + MasterFader * m_pMasterFader; + + LCDDisplay * m_pPeakLCD; + + Rotary * m_pSwingRotary; + Rotary * m_pHumanizeTimeRotary; + Rotary * m_pHumanizeVelocityRotary; - ToggleButton *m_pMuteBtn; + ToggleButton * m_pMuteBtn; }; @@ -217,46 +279,45 @@ /// class FxMixerLine: public PixmapWidget { - H2_OBJECT + H2_OBJECT Q_OBJECT public: FxMixerLine(QWidget* parent); ~FxMixerLine(); - float getVolume(); - void setVolume(float value); + float getVolume(); + void setVolume(float value); - void setPeak_L(float peak); - float getPeak_L(); + void setPeak_L(float peak); + float getPeak_L(); - void setPeak_R(float peak); - float getPeak_R(); + void setPeak_R(float peak); + float getPeak_R(); - void setName(QString name) { m_pNameWidget->setText( name ); } + void setName(QString name) { m_pNameWidget->setText( name ); } QString getName() { return m_pNameWidget->text(); } - bool isFxActive(); - void setFxActive( bool active ); + bool isFxActive(); + void setFxActive( bool active ); signals: - void volumeChanged( FxMixerLine *ref ); - void instrumentNameClicked( FxMixerLine *ref ); - void activeBtnClicked( FxMixerLine *ref ); + void volumeChanged( FxMixerLine *ref ); + void instrumentNameClicked( FxMixerLine *ref ); + void activeBtnClicked( FxMixerLine *ref ); public slots: - void click(Button *ref); - void faderChanged(Fader * ref); + void click(Button *ref); + void faderChanged(Fader * ref); private: - uint m_nWidth; - uint m_nHeight; - - float m_fMaxPeak; - Fader *m_pFader; - InstrumentNameWidget *m_pNameWidget; - ToggleButton *activeBtn; - - LCDDisplay *m_pPeakLCD; + uint m_nWidth; + uint m_nHeight; + float m_fMaxPeak; + + Fader * m_pFader; + InstrumentNameWidget * m_pNameWidget; + ToggleButton * activeBtn; + LCDDisplay * m_pPeakLCD; }; @@ -264,19 +325,21 @@ class LadspaFXMixerLine : public PixmapWidget { - H2_OBJECT + H2_OBJECT Q_OBJECT public: LadspaFXMixerLine(QWidget* parent); ~LadspaFXMixerLine(); - bool isFxActive(); - void setFxActive( bool active ); - void setPeaks( float fPeak_L, float fPeak_R ); - void getPeaks( float *fPeak_L, float *fPeak_R ); - void setName( QString name ); - float getVolume(); - void setVolume( float value ); + bool isFxActive(); + void setFxActive( bool active ); + + void setPeaks( float fPeak_L, float fPeak_R ); + void getPeaks( float *fPeak_L, float *fPeak_R ); + void setName( QString name ); + + float getVolume(); + void setVolume( float value ); public slots: void click(Button *ref); @@ -288,11 +351,11 @@ void volumeChanged( LadspaFXMixerLine *ref); private: - float m_fMaxPeak; - ToggleButton *m_pActiveBtn; - Button *m_pEditBtn; - Rotary *m_pRotary; - LCDDisplay *m_pNameLCD; + float m_fMaxPeak; + ToggleButton * m_pActiveBtn; + Button * m_pEditBtn; + Rotary * m_pRotary; + LCDDisplay * m_pNameLCD; }; diff -Nru hydrogen-0.9.6.1/src/gui/src/PatternEditor/DrumPatternEditor.cpp hydrogen-0.9.7/src/gui/src/PatternEditor/DrumPatternEditor.cpp --- hydrogen-0.9.6.1/src/gui/src/PatternEditor/DrumPatternEditor.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/PatternEditor/DrumPatternEditor.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -29,8 +29,10 @@ #include #include #include +#include #include #include +#include #include #include #include @@ -72,7 +74,7 @@ resize( nEditorWidth, m_nEditorHeight ); HydrogenApp::get_instance()->addEventListener( this ); - + } @@ -156,7 +158,7 @@ int nColumn = getColumn( ev ); int nRealColumn = 0; if( ev->x() > 20 ) { - nRealColumn = (ev->x() - 20) / static_cast(m_nGridWidth); + nRealColumn = ev->x() / static_cast(m_nGridWidth) - 20; } if ( nColumn >= (int)m_pPattern->get_length() ) { update( 0, 0, width(), height() ); @@ -326,7 +328,7 @@ AudioEngine::get_instance()->get_sampler()->note_on(pNote2); } } - pSong->__is_modified = true; + pSong->set_is_modified( true ); AudioEngine::get_instance()->unlock(); // unlock the audio engine // update the selected line @@ -428,11 +430,11 @@ fStep = pow( 1.0594630943593, ( double )fNotePitch ); }else { - fStep = 1.0; + fStep = 1.0; } m_pDraggedNote->set_length( nLen * fStep); - Hydrogen::get_instance()->getSong()->__is_modified = true; + Hydrogen::get_instance()->getSong()->set_is_modified( true ); AudioEngine::get_instance()->unlock(); // unlock the audio engine //__draw_pattern(); @@ -474,7 +476,7 @@ InstrumentList * pInstrList = pSong->get_instrument_list(); - + if ( m_nEditorHeight != (int)( m_nGridHeight * pInstrList->size() ) ) { // the number of instruments is changed...recreate all m_nEditorHeight = m_nGridHeight * pInstrList->size(); @@ -491,13 +493,13 @@ // draw the grid __draw_grid( painter ); - + /* BUGFIX - - if m_pPattern is not renewed every time we draw a note, - hydrogen will crash after you save a song and create a new one. + + if m_pPattern is not renewed every time we draw a note, + hydrogen will crash after you save a song and create a new one. -smoors */ Hydrogen *pEngine = Hydrogen::get_instance(); @@ -608,7 +610,7 @@ - } + } else { float fNotePitch = note->get_octave() * 12 + note->get_key(); float fStep = pow( 1.0594630943593, ( double )fNotePitch ); @@ -779,7 +781,7 @@ { //INFOLOG( "paint" ); //QWidget::paintEvent(ev); - + QPainter painter( this ); __draw_pattern( painter ); } @@ -914,9 +916,10 @@ pNote->set_lead_lag( leadLag ); } else if ( mode == "NOTEKEY" ){ - pNote->set_key_octave( (Note::Key)noteKeyVal, (Note::Octave)octaveKeyVal ); + pNote->set_key_octave( (Note::Key)noteKeyVal, (Note::Octave)octaveKeyVal ); } - pSong->__is_modified = true; + + pSong->set_is_modified( true ); break; } updateEditor(); @@ -974,7 +977,7 @@ // Get song's pattern list Hydrogen * H = Hydrogen::get_instance(); PatternList *patternList = H->getSong()->get_pattern_list(); - + AudioEngine::get_instance()->lock( RIGHT_HERE ); // lock the audio engine while (appliedList.size() > 0) @@ -982,7 +985,7 @@ // Get next applied pattern Pattern *pApplied = appliedList.front(); assert(pApplied); - + // Find destination pattern to perform undo Pattern *pat = patternList->find(pApplied->get_name()); @@ -995,7 +998,7 @@ // Get note to remove Note *pNote = it->second; assert(pNote); - + // Check if note is not present Pattern::notes_t* notes = (Pattern::notes_t *)pat->get_notes(); FOREACH_NOTE_IT_BOUND(notes, it, pNote->get_position()) @@ -1010,8 +1013,8 @@ } } } - - + + // Remove applied pattern; delete pApplied; appliedList.pop_front(); @@ -1033,7 +1036,7 @@ { Hydrogen * H = Hydrogen::get_instance(); PatternList *patternList = H->getSong()->get_pattern_list(); - + AudioEngine::get_instance()->lock( RIGHT_HERE ); // lock the audio engine // Add notes to pattern @@ -1053,7 +1056,7 @@ pat->get_info(), pat->get_category(), pat->get_length()); - + // Add all notes of source pattern to destination pattern // and store all applied notes in applied pattern const Pattern::notes_t* notes = pPattern->get_notes(); @@ -1061,7 +1064,7 @@ { Note *pNote = it->second; assert(pNote); - + // Check if note is not present bool noteExists = false; const Pattern::notes_t* notes = pat->get_notes(); @@ -1075,7 +1078,7 @@ break; } } - + // Apply note and store it as applied if (!noteExists) { @@ -1083,7 +1086,7 @@ pApplied->insert_note(new Note(pNote)); } } - + // Add applied pattern to applied list appliedList.push_back(pApplied); } @@ -1226,40 +1229,95 @@ return; } - pInstrumentList->move( nSourceInstrument, nTargetInstrument ); + pInstrumentList->move( nSourceInstrument, nTargetInstrument ); #ifdef H2CORE_HAVE_JACK - engine->renameJackPorts(); + engine->renameJackPorts( pSong ); #endif AudioEngine::get_instance()->unlock(); engine->setSelectedInstrumentNumber( nTargetInstrument ); - pSong->__is_modified = true; + pSong->set_is_modified( true ); } -void DrumPatternEditor::functionDropInstrumentUndoAction( int nTargetInstrument ) +void DrumPatternEditor::functionDropInstrumentUndoAction( int nTargetInstrument, std::vector* AddedComponents ) { Hydrogen *pEngine = Hydrogen::get_instance(); pEngine->removeInstrument( nTargetInstrument, false ); - + + std::vector* pDrumkitComponents = pEngine->getSong()->get_components(); + + for (std::vector::iterator it = AddedComponents->begin() ; it != AddedComponents->end(); ++it) { + int p_compoID = *it; + + for ( int n = 0 ; n < pDrumkitComponents->size() ; n++ ) { + DrumkitComponent* pTmpDrumkitComponent = pDrumkitComponents->at( n ); + if( pTmpDrumkitComponent->get_id() == p_compoID ) { + pDrumkitComponents->erase( pDrumkitComponents->begin() + n ); + break; + } + } + } + AudioEngine::get_instance()->lock( RIGHT_HERE ); #ifdef H2CORE_HAVE_JACK - pEngine->renameJackPorts(); + Song *pSong = pEngine->getSong(); + pEngine->renameJackPorts(pSong); #endif AudioEngine::get_instance()->unlock(); updateEditor(); } -void DrumPatternEditor::functionDropInstrumentRedoAction( QString sDrumkitName, QString sInstrumentName, int nTargetInstrument ) +void DrumPatternEditor::functionDropInstrumentRedoAction( QString sDrumkitName, QString sInstrumentName, int nTargetInstrument, std::vector* AddedComponents) { Instrument *pNewInstrument = Instrument::load_instrument( sDrumkitName, sInstrumentName ); - if( pNewInstrument == NULL ) return; + if( pNewInstrument == NULL ){ + return; + } + + Drumkit *pNewDrumkit = Drumkit::load_by_name( sDrumkitName, false ); + if( pNewDrumkit == NULL ){ + return; + } Hydrogen *pEngine = Hydrogen::get_instance(); + AudioEngine::get_instance()->lock( RIGHT_HERE ); + + std::vector* pOldInstrumentComponents = new std::vector ( pNewInstrument->get_components()->begin(), pNewInstrument->get_components()->end() ); + pNewInstrument->get_components()->clear(); + + for (std::vector::iterator it = pNewDrumkit->get_components()->begin() ; it != pNewDrumkit->get_components()->end(); ++it) { + DrumkitComponent* pComponent = *it; + int OldID = pComponent->get_id(); + int NewID = -1; + + NewID = findExistingCompo( pComponent->get_name() ); + + if ( NewID == -1 ) { + NewID = findFreeCompoID(); + + AddedComponents->push_back( NewID ); + + pComponent->set_id( NewID ); + pComponent->set_name( renameCompo( pComponent->get_name() ) ); + Hydrogen::get_instance()->getSong()->get_components()->push_back( pComponent ); + } + + for ( std::vector::iterator it2 = pOldInstrumentComponents->begin() ; it2 != pOldInstrumentComponents->end(); ++it2 ) { + InstrumentComponent* pOldInstrCompo = *it2; + if( pOldInstrCompo->get_drumkit_componentID() == OldID ) { + InstrumentComponent* pNewInstrCompo = new InstrumentComponent( pOldInstrCompo ); + pNewInstrCompo->set_drumkit_componentID( NewID ); + + pNewInstrument->get_components()->push_back( pNewInstrCompo ); + } + } + } + // create a new valid ID for this instrument int nID = -1; for ( uint i = 0; i < pEngine->getSong()->get_instrument_list()->size(); ++i ) { @@ -1272,11 +1330,10 @@ pNewInstrument->set_id( nID ); - AudioEngine::get_instance()->lock( RIGHT_HERE ); pEngine->getSong()->get_instrument_list()->add( pNewInstrument ); #ifdef H2CORE_HAVE_JACK - pEngine->renameJackPorts(); + pEngine->renameJackPorts( pEngine->getSong() ); #endif AudioEngine::get_instance()->unlock(); @@ -1285,9 +1342,52 @@ // select the new instrument pEngine->setSelectedInstrumentNumber(nTargetInstrument); + EventQueue::get_instance()->push_event( EVENT_SELECTED_INSTRUMENT_CHANGED, -1 ); updateEditor(); } +QString DrumPatternEditor::renameCompo( QString OriginalName ) +{ + std::vector* pComponentList = Hydrogen::get_instance()->getSong()->get_components(); + for (std::vector::iterator it = pComponentList->begin() ; it != pComponentList->end(); ++it) { + DrumkitComponent* pComponent = *it; + if( pComponent->get_name().compare( OriginalName ) == 0 ){ + return renameCompo( OriginalName + "_new" ); + } + } + return OriginalName; +} + +int DrumPatternEditor::findFreeCompoID( int startingPoint ) +{ + bool FoundFreeSlot = true; + std::vector* pComponentList = Hydrogen::get_instance()->getSong()->get_components(); + for (std::vector::iterator it = pComponentList->begin() ; it != pComponentList->end(); ++it) { + DrumkitComponent* pComponent = *it; + if( pComponent->get_id() == startingPoint ) { + FoundFreeSlot = false; + break; + } + } + + if(FoundFreeSlot){ + return startingPoint; + } else { + return findFreeCompoID( startingPoint + 1 ); + } +} + +int DrumPatternEditor::findExistingCompo( QString SourceName ) +{ + std::vector* pComponentList = Hydrogen::get_instance()->getSong()->get_components(); + for (std::vector::iterator it = pComponentList->begin() ; it != pComponentList->end(); ++it) { + DrumkitComponent* pComponent = *it; + if ( pComponent->get_name().compare( SourceName ) == 0 ){ + return pComponent->get_id(); + } + } + return -1; +} @@ -1301,7 +1401,7 @@ { pNewInstrument = Instrument::load_instrument( drumkitName, instrumentName ); } - if( pNewInstrument == NULL ) return; + if( pNewInstrument == NULL ) return; // create a new valid ID for this instrument int nID = -1; @@ -1320,7 +1420,7 @@ pEngine->getSong()->get_instrument_list()->add( pNewInstrument ); #ifdef H2CORE_HAVE_JACK - pEngine->renameJackPorts(); + pEngine->renameJackPorts( pEngine->getSong() ); #endif AudioEngine::get_instance()->unlock(); // unlock the audio engine @@ -1358,10 +1458,10 @@ Hydrogen *pEngine = Hydrogen::get_instance(); pEngine->removeInstrument( pEngine->getSong()->get_instrument_list()->size() -1 , false ); - + AudioEngine::get_instance()->lock( RIGHT_HERE ); #ifdef H2CORE_HAVE_JACK - pEngine->renameJackPorts(); + pEngine->renameJackPorts( pEngine->getSong() ); #endif AudioEngine::get_instance()->unlock(); updateEditor(); @@ -1371,7 +1471,8 @@ void DrumPatternEditor::functionAddEmptyInstrumentRedo() { AudioEngine::get_instance()->lock( RIGHT_HERE ); - InstrumentList* pList = Hydrogen::get_instance()->getSong()->get_instrument_list(); + Song* pSong = Hydrogen::get_instance()->getSong(); + InstrumentList* pList = pSong->get_instrument_list(); // create a new valid ID for this instrument int nID = -1; @@ -1385,11 +1486,11 @@ Instrument *pNewInstr = new Instrument( nID, "New instrument"); pList->add( pNewInstr ); - + #ifdef H2CORE_HAVE_JACK - Hydrogen::get_instance()->renameJackPorts(); + Hydrogen::get_instance()->renameJackPorts( pSong ); #endif - + AudioEngine::get_instance()->unlock(); Hydrogen::get_instance()->setSelectedInstrumentNumber( pList->size() - 1 ); diff -Nru hydrogen-0.9.6.1/src/gui/src/PatternEditor/DrumPatternEditor.h hydrogen-0.9.7/src/gui/src/PatternEditor/DrumPatternEditor.h --- hydrogen-0.9.6.1/src/gui/src/PatternEditor/DrumPatternEditor.h 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/PatternEditor/DrumPatternEditor.h 2016-11-05 08:22:50.000000000 +0000 @@ -96,8 +96,8 @@ void functionFillNotesRedoAction( QStringList noteList, int nSelectedInstrument, int patternNumber ); void functionRandomVelocityAction( QStringList noteVeloValue, int nSelectedInstrument, int selectedPatternNumber ); void functionMoveInstrumentAction( int nSourceInstrument, int nTargetInstrument ); - void functionDropInstrumentUndoAction( int nTargetInstrument ); - void functionDropInstrumentRedoAction( QString sDrumkitName, QString sInstrumentName, int nTargetInstrument ); + void functionDropInstrumentUndoAction( int nTargetInstrument, std::vector* AddedComponents ); + void functionDropInstrumentRedoAction(QString sDrumkitName, QString sInstrumentName, int nTargetInstrument, std::vector* AddedComponents ); void functionDeleteInstrumentUndoAction( std::list< H2Core::Note* > noteList, int nSelectedInstrument, QString instrumentName, QString drumkitName ); void functionAddEmptyInstrumentUndo(); void functionAddEmptyInstrumentRedo(); @@ -114,10 +114,6 @@ uint m_nResolution; bool m_bUseTriplets; - //QPixmap *m_pBackground; - //QPixmap *m_pTemp; - - // usati per la lunghezza della nota bool m_bRightBtnPressed; H2Core::Note *m_pDraggedNote; //~ @@ -141,6 +137,10 @@ int getColumn(QMouseEvent *ev); + int findFreeCompoID( int startingPoint = 0 ); + int findExistingCompo( QString SourceName ); + QString renameCompo( QString OriginalName ); + int __nRealColumn; int __nColumn; int __row; diff -Nru hydrogen-0.9.6.1/src/gui/src/PatternEditor/NotePropertiesRuler.cpp hydrogen-0.9.7/src/gui/src/PatternEditor/NotePropertiesRuler.cpp --- hydrogen-0.9.6.1/src/gui/src/PatternEditor/NotePropertiesRuler.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/PatternEditor/NotePropertiesRuler.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -191,7 +191,7 @@ } } - pSong->__is_modified = true; + pSong->set_is_modified( true ); startUndoAction(); updateEditor(); break; @@ -425,7 +425,7 @@ __columnCheckOnXmouseMouve = column; - pSong->__is_modified = true; + pSong->set_is_modified( true ); updateEditor(); break; } diff -Nru hydrogen-0.9.6.1/src/gui/src/PatternEditor/PatternEditorInstrumentList.cpp hydrogen-0.9.7/src/gui/src/PatternEditor/PatternEditorInstrumentList.cpp --- hydrogen-0.9.6.1/src/gui/src/PatternEditor/PatternEditorInstrumentList.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/PatternEditor/PatternEditorInstrumentList.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -74,7 +74,7 @@ ); m_pMuteBtn->move( 145, 5 ); m_pMuteBtn->setPressed(false); - m_pMuteBtn->setToolTip( trUtf8("Mute instrument") ); + m_pMuteBtn->setToolTip( trUtf8("Mute instrument") ); connect(m_pMuteBtn, SIGNAL(clicked(Button*)), this, SLOT(muteClicked())); m_pSoloBtn = new ToggleButton( @@ -86,7 +86,7 @@ ); m_pSoloBtn->move( 163, 5 ); m_pSoloBtn->setPressed(false); - m_pSoloBtn->setToolTip( trUtf8("Solo") ); + m_pSoloBtn->setToolTip( trUtf8("Solo") ); connect(m_pSoloBtn, SIGNAL(clicked(Button*)), this, SLOT(soloClicked())); @@ -111,7 +111,7 @@ m_pCopyPopupSub->addAction( trUtf8( "Only for this pattern" ), this, SLOT( functionCopyInstrumentPattern() ) ); m_pCopyPopupSub->addAction( trUtf8( "For all patterns" ), this, SLOT( functionCopyAllInstrumentPatterns() ) ); m_pFunctionPopup->addMenu( m_pCopyPopupSub ); - + m_pPastePopupSub = new QMenu( trUtf8( "Paste notes ..." ), m_pFunctionPopup ); m_pPastePopupSub->addAction( trUtf8( "Only for this pattern" ), this, SLOT( functionPasteInstrumentPattern() ) ); m_pPastePopupSub->addAction( trUtf8( "For all patterns" ), this, SLOT( functionPasteAllInstrumentPatterns() ) ); @@ -200,9 +200,9 @@ const int nLength = -1; const float fPitch = 0.0f; Song *pSong = Hydrogen::get_instance()->getSong(); - + Instrument *pInstr = pSong->get_instrument_list()->get( m_nInstrumentNumber ); - + Note *pNote = new Note( pInstr, 0, velocity, pan_L, pan_R, nLength, fPitch); AudioEngine::get_instance()->get_sampler()->note_on(pNote); } @@ -241,8 +241,8 @@ Instrument *pSelectedInstrument = pEngine->getSong()->get_instrument_list()->get( m_nInstrumentNumber ); std::list< Note* > noteList; - const Pattern::notes_t* notes = pPattern->get_notes(); - FOREACH_NOTE_CST_IT_BEGIN_END(notes,it) { + const Pattern::notes_t* notes = pPattern->get_notes(); + FOREACH_NOTE_CST_IT_BEGIN_END(notes,it) { Note *pNote = it->second; assert( pNote ); if ( pNote->get_instrument() == pSelectedInstrument ) { @@ -261,7 +261,7 @@ int selectedPatternNr = pEngine->getSelectedPatternNumber(); Song *song = pEngine->getSong(); assert(song); - + // Serialize & put to clipboard QString serialized = LocalFileMng::copyInstrumentLineToString(song, selectedPatternNr, m_nInstrumentNumber); QClipboard *clipboard = QApplication::clipboard(); @@ -273,7 +273,7 @@ Hydrogen * pEngine = Hydrogen::get_instance(); Song *song = pEngine->getSong(); assert(song); - + // Serialize & put to clipboard QString serialized = LocalFileMng::copyInstrumentLineToString(song, -1, m_nInstrumentNumber); QClipboard *clipboard = QApplication::clipboard(); @@ -284,7 +284,7 @@ { Hydrogen * pEngine = Hydrogen::get_instance(); int selectedPatternNr = pEngine->getSelectedPatternNumber(); - + functionPasteInstrumentPatternExec(selectedPatternNr); } @@ -298,20 +298,20 @@ Hydrogen * pEngine = Hydrogen::get_instance(); Song *song = pEngine->getSong(); assert(song); - + // This is a note list for pasted notes collection std::list< Pattern* > patternList; - + // Get from clipboard & deserialize QClipboard *clipboard = QApplication::clipboard(); QString serialized = clipboard->text(); if (!LocalFileMng::pasteInstrumentLineFromString(song, serialized, patternID, m_nInstrumentNumber, patternList)) return; - + // Ignore empty result if (patternList.size() <= 0) return; - + // Create action SE_pasteNotesPatternEditorAction *action = new SE_pasteNotesPatternEditorAction(patternList); HydrogenApp::get_instance()->m_undoStack->push(action); @@ -355,8 +355,8 @@ for (int i = 0; i < nPatternSize; i += nResolution) { bool noteAlreadyPresent = false; - const Pattern::notes_t* notes = pCurrentPattern->get_notes(); - FOREACH_NOTE_CST_IT_BOUND(notes,it,i) { + const Pattern::notes_t* notes = pCurrentPattern->get_notes(); + FOREACH_NOTE_CST_IT_BOUND(notes,it,i) { Note *pNote = it->second; if ( pNote->get_instrument() == instrRef ) { // note already exists @@ -396,7 +396,7 @@ int nResolution = 4 * MAX_NOTES / ( nBase * pPatternEditor->getResolution() ); Song *pSong = pEngine->getSong(); - + QStringList noteVeloValue; QStringList oldNoteVeloValue; @@ -409,8 +409,8 @@ Instrument *instrRef = (pSong->get_instrument_list())->get( nSelectedInstrument ); for (int i = 0; i < nPatternSize; i += nResolution) { - const Pattern::notes_t* notes = pCurrentPattern->get_notes(); - FOREACH_NOTE_CST_IT_BOUND(notes,it,i) { + const Pattern::notes_t* notes = pCurrentPattern->get_notes(); + FOREACH_NOTE_CST_IT_BOUND(notes,it,i) { Note *pNote = it->second; if ( pNote->get_instrument() == instrRef ) { float fVal = ( rand() % 100 ) / 100.0; @@ -597,7 +597,7 @@ { //WARNINGLOG("Drop!"); QString sText = event->mimeData()->text(); - + if(sText.startsWith("Songs:") || sText.startsWith("Patterns:") || sText.startsWith("move pattern:") || sText.startsWith("drag pattern:")) return; @@ -608,6 +608,10 @@ int nTargetInstrument = event->pos().y() / m_nGridHeight; + if( nTargetInstrument > engine->getSong()->get_instrument_list()->size() ){ + nTargetInstrument = engine->getSong()->get_instrument_list()->size() - 1; + } + if ( nSourceInstrument == nTargetInstrument ) { event->acceptProposedAction(); return; @@ -631,11 +635,16 @@ /* "X > 181": border between the instrument names on the left and the grid - Because the right part of the grid starts above the name column, we have to subtract the difference + Because the right part of the grid starts above the name column, we have to subtract the difference */ if ( event->pos().x() > 181 ) nTargetInstrument = ( event->pos().y() - 90 ) / m_nGridHeight ; - SE_dragInstrumentAction *action = new SE_dragInstrumentAction( sDrumkitName, sInstrumentName, nTargetInstrument ); + Hydrogen *engine = Hydrogen::get_instance(); + if( nTargetInstrument > engine->getSong()->get_instrument_list()->size() ){ + nTargetInstrument = engine->getSong()->get_instrument_list()->size(); + } + + SE_dragInstrumentAction *action = new SE_dragInstrumentAction( sDrumkitName, sInstrumentName, nTargetInstrument); HydrogenApp::get_instance()->m_undoStack->push( action ); event->acceptProposedAction(); diff -Nru hydrogen-0.9.6.1/src/gui/src/PatternEditor/PatternEditorPanel.cpp hydrogen-0.9.7/src/gui/src/PatternEditor/PatternEditorPanel.cpp --- hydrogen-0.9.6.1/src/gui/src/PatternEditor/PatternEditorPanel.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/PatternEditor/PatternEditorPanel.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -878,7 +878,7 @@ AudioEngine::get_instance()->unlock(); engine->setSelectedInstrumentNumber( nSelectedInstrument - 1 ); - pSong->__is_modified = true; + pSong->set_is_modified( true ); } else { AudioEngine::get_instance()->unlock(); @@ -903,7 +903,7 @@ AudioEngine::get_instance()->unlock(); engine->setSelectedInstrumentNumber( nSelectedInstrument + 1 ); - pSong->__is_modified = true; + pSong->set_is_modified( true ); } else { AudioEngine::get_instance()->unlock(); diff -Nru hydrogen-0.9.6.1/src/gui/src/PatternEditor/PatternEditorPanel.h hydrogen-0.9.7/src/gui/src/PatternEditor/PatternEditorPanel.h --- hydrogen-0.9.6.1/src/gui/src/PatternEditor/PatternEditorPanel.h 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/PatternEditor/PatternEditorPanel.h 2016-11-05 08:22:50.000000000 +0000 @@ -53,7 +53,7 @@ /// class PatternEditorPanel : public QWidget, public EventListener, public H2Core::Object { - H2_OBJECT + H2_OBJECT Q_OBJECT public: @@ -67,7 +67,7 @@ NotePropertiesRuler* getNoteKeyEditor() { return m_pNoteNoteKeyEditor; } PatternEditorInstrumentList* getInstrumentList() { return m_pInstrumentList; } PianoRollEditor* getPianoRollEditor() { return m_pPianoRollEditor; } - QString getPropertiesComboText(){ return __pPropertiesCombo->getText(); } + QString getPropertiesComboText(){ return __pPropertiesCombo->getText(); } void updateSLnameLabel(); void displayorHidePrePostCB(); @@ -104,73 +104,73 @@ void recPostDeleteSelect( int index ); private: - H2Core::Pattern *m_pPattern; - QPixmap m_backgroundPixmap; - QLabel *pSLlabel; + H2Core::Pattern * m_pPattern; + QPixmap m_backgroundPixmap; + QLabel * pSLlabel; // Editor top - LCDCombo *__pattern_size_combo; - LCDCombo *__resolution_combo; - ToggleButton *__show_drum_btn; - ToggleButton *__show_piano_btn; - QComboBox *__recpredelete; - QComboBox *__recpostdelete; + LCDCombo * __pattern_size_combo; + LCDCombo * __resolution_combo; + ToggleButton * __show_drum_btn; + ToggleButton * __show_piano_btn; + QComboBox * __recpredelete; + QComboBox * __recpostdelete; // ~Editor top - //note properties combo - LCDCombo * __pPropertiesCombo; + //note properties combo + LCDCombo * __pPropertiesCombo; // drum editor - QScrollArea* m_pEditorScrollView; - DrumPatternEditor *m_pDrumPatternEditor; + QScrollArea* m_pEditorScrollView; + DrumPatternEditor * m_pDrumPatternEditor; // piano roll editor - QScrollArea* m_pPianoRollInternScrollView; - QScrollArea* m_pPianoRollScrollView; - PianoRollEditor *m_pPianoRollEditor; + QScrollArea* m_pPianoRollInternScrollView; + QScrollArea* m_pPianoRollScrollView; + PianoRollEditor * m_pPianoRollEditor; // ruler - QScrollArea* m_pRulerScrollView; + QScrollArea* m_pRulerScrollView; PatternEditorRuler *m_pPatternEditorRuler; // instr list - QScrollArea* m_pInstrListScrollView; + QScrollArea* m_pInstrListScrollView; PatternEditorInstrumentList *m_pInstrumentList; // note velocity editor - QScrollArea* m_pNoteVelocityScrollView; + QScrollArea* m_pNoteVelocityScrollView; NotePropertiesRuler *m_pNoteVelocityEditor; // note pan editor - QScrollArea* m_pNotePanScrollView; + QScrollArea* m_pNotePanScrollView; NotePropertiesRuler *m_pNotePanEditor; // note leadlag editor - QScrollArea* m_pNoteLeadLagScrollView; + QScrollArea* m_pNoteLeadLagScrollView; NotePropertiesRuler *m_pNoteLeadLagEditor; // note notekey editor - QScrollArea* m_pNoteNoteKeyScrollView; + QScrollArea* m_pNoteNoteKeyScrollView; NotePropertiesRuler *m_pNoteNoteKeyEditor; - QScrollBar *m_pPatternEditorHScrollBar; - QScrollBar *m_pPatternEditorVScrollBar; + QScrollBar * m_pPatternEditorHScrollBar; + QScrollBar * m_pPatternEditorVScrollBar; // TOOLBAR - QLabel *m_pPatternNameLbl; + QLabel * m_pPatternNameLbl; - Button *m_pRandomVelocityBtn; + Button * m_pRandomVelocityBtn; //~ TOOLBAR - Button *sizeDropdownBtn; - Button *resDropdownBtn; + Button * sizeDropdownBtn; + Button * resDropdownBtn; - bool m_bEnablePatternResize; + bool m_bEnablePatternResize; virtual void dragEnterEvent(QDragEnterEvent *event); diff -Nru hydrogen-0.9.6.1/src/gui/src/PatternEditor/PianoRollEditor.cpp hydrogen-0.9.7/src/gui/src/PatternEditor/PianoRollEditor.cpp --- hydrogen-0.9.6.1/src/gui/src/PatternEditor/PianoRollEditor.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/PatternEditor/PianoRollEditor.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -688,7 +688,7 @@ AudioEngine::get_instance()->get_sampler()->note_on(pNote2); } } - pSong->__is_modified = true; + pSong->set_is_modified( true ); AudioEngine::get_instance()->unlock(); // unlock the audio engine updateEditor(); @@ -734,7 +734,7 @@ } m_pDraggedNote->set_length( nLen * fStep); - Hydrogen::get_instance()->getSong()->__is_modified = true; + Hydrogen::get_instance()->getSong()->set_is_modified( true ); AudioEngine::get_instance()->unlock(); // unlock the audio engine //__draw_pattern(); @@ -769,7 +769,7 @@ __velocity = val; - Hydrogen::get_instance()->getSong()->__is_modified = true; + Hydrogen::get_instance()->getSong()->set_is_modified( true ); AudioEngine::get_instance()->unlock(); // unlock the audio engine //__draw_pattern(); @@ -810,7 +810,7 @@ __pan_L = pan_L; __pan_R = pan_R; - Hydrogen::get_instance()->getSong()->__is_modified = true; + Hydrogen::get_instance()->getSong()->set_is_modified( true ); AudioEngine::get_instance()->unlock(); // unlock the audio engine //__draw_pattern(); @@ -856,7 +856,7 @@ HydrogenApp::get_instance()->setStatusBarMessage( QString("Note on beat"), 2000 ); } - Hydrogen::get_instance()->getSong()->__is_modified = true; + Hydrogen::get_instance()->getSong()->set_is_modified( true ); AudioEngine::get_instance()->unlock(); // unlock the audio engine //__draw_pattern(); diff -Nru hydrogen-0.9.6.1/src/gui/src/PatternFillDialog.h hydrogen-0.9.7/src/gui/src/PatternFillDialog.h --- hydrogen-0.9.6.1/src/gui/src/PatternFillDialog.h 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/PatternFillDialog.h 2016-11-05 08:22:50.000000000 +0000 @@ -47,7 +47,7 @@ /// class PatternFillDialog : public QDialog, public Ui_PatternFillDialog_UI, public H2Core::Object { - H2_OBJECT + H2_OBJECT Q_OBJECT public: PatternFillDialog( QWidget* parent, FillRange* range ); @@ -60,7 +60,6 @@ void on_toText_textChanged(const QString & text); private: - H2Core::Pattern* __pattern; FillRange* __fill_range; /// Does some name check diff -Nru hydrogen-0.9.6.1/src/gui/src/PlayerControl.cpp hydrogen-0.9.7/src/gui/src/PlayerControl.cpp --- hydrogen-0.9.6.1/src/gui/src/PlayerControl.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/PlayerControl.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -335,22 +335,24 @@ "/lcd/LCDSpinBox_up_on.png", "/lcd/LCDSpinBox_up_off.png", "/lcd/LCDSpinBox_up_over.png", - QSize(16, 8) + QSize(16, 8), + false, + true ); m_pBPMUpBtn->move( 12, 5 ); connect( m_pBPMUpBtn, SIGNAL( clicked( Button* ) ), this, SLOT(bpmButtonClicked( Button* ) ) ); - connect( m_pBPMUpBtn, SIGNAL( mousePress( Button* ) ), this, SLOT(bpmButtonPressed( Button* ) ) ); m_pBPMDownBtn = new Button( pBPMPanel, "/lcd/LCDSpinBox_down_on.png", "/lcd/LCDSpinBox_down_off.png", "/lcd/LCDSpinBox_down_over.png", - QSize(16, 8) + QSize(16, 8), + false, + true ); m_pBPMDownBtn->move( 12, 14 ); connect( m_pBPMDownBtn, SIGNAL( clicked( Button* ) ), this, SLOT(bpmButtonClicked( Button* ) ) ); - connect( m_pBPMDownBtn, SIGNAL( mousePress( Button* ) ), this, SLOT(bpmButtonPressed( Button* ) ) ); m_pRubberBPMChange = new ToggleButton( pBPMPanel, @@ -484,9 +486,6 @@ connect(timer, SIGNAL(timeout()), this, SLOT(updatePlayerControl())); timer->start(100); // update player control at 10 fps - m_pBPMTimer = new QTimer( this ); - connect(m_pBPMTimer, SIGNAL(timeout()), this, SLOT(onBpmTimerEvent())); - m_pStatusTimer = new QTimer( this ); connect( m_pStatusTimer, SIGNAL( timeout() ), this, SLOT( onStatusTimerEvent() ) ); @@ -509,6 +508,7 @@ { Preferences *pPref = Preferences::get_instance(); HydrogenApp *pH2App = HydrogenApp::get_instance(); + m_pShowMixerBtn->setPressed( pH2App->getMixer()->isVisible() ); m_pShowInstrumentRackBtn->setPressed( pH2App->getInstrumentRack()->isVisible() ); @@ -577,7 +577,9 @@ #ifdef H2CORE_HAVE_JACK - if ( pPref->m_sAudioDriver == "Jack" ) { + AudioOutput *p_Driver = m_pEngine->getAudioOutput(); + + if ( p_Driver && strncmp(p_Driver->class_name(), "JackOutput", 10) == 0){ m_pJackTransportBtn->show(); switch ( pPref->m_bJackTransportMode ) { case Preferences::NO_JACK_TRANSPORT: @@ -678,12 +680,6 @@ } //~ beatcounter - - //timeline check -// if( Preferences::get_instance()->__usetimeline ){ -// m_pRubberBPMChange->setPressed( false ); -// Preferences::get_instance()->m_useTheRubberbandBpmChangeEvent = false; -// } } @@ -770,7 +766,6 @@ m_pEngine->sequencer_stop(); m_pEngine->getSong()->set_mode( Song::PATTERN_MODE ); - //m_pEngine->sequencer_setNextPattern( m_pEngine->getSelectedPatternNumber() ); // imposto il pattern correntemente selezionato come il prossimo da suonare m_pSongModeBtn->setPressed(false); m_pLiveModeBtn->setPressed(true); (HydrogenApp::get_instance())->setStatusBarMessage(trUtf8("Pattern mode selected."), 5000); @@ -787,7 +782,7 @@ fNewBpmValue = 400; } - m_pEngine->getSong()->__is_modified = true; + m_pEngine->getSong()->set_is_modified( true ); AudioEngine::get_instance()->lock( RIGHT_HERE ); m_pEngine->setBPM( fNewBpmValue ); @@ -907,8 +902,9 @@ void PlayerControl::jackTransportBtnClicked( Button* ) { Preferences *pPref = Preferences::get_instance(); + AudioOutput *p_Driver = m_pEngine->getAudioOutput(); - if (pPref->m_sAudioDriver != "Jack") { + if ( ! ( p_Driver && strncmp(p_Driver->class_name(), "JackOutput", 10) == 0 ) ){ QMessageBox::warning( this, "Hydrogen", trUtf8( "JACK-transport will work only with JACK driver." ) ); return; } @@ -935,8 +931,9 @@ { #ifdef H2CORE_HAVE_JACK Preferences *pPref = Preferences::get_instance(); + AudioOutput *p_Driver = m_pEngine->getAudioOutput(); - if (pPref->m_sAudioDriver != "Jack") { + if ( ! ( p_Driver && strncmp(p_Driver->class_name(), "JackOutput", 10) == 0 ) ){ QMessageBox::warning( this, "Hydrogen", trUtf8( "JACK-transport will work only with JACK driver." ) ); return; } @@ -954,7 +951,6 @@ pPref->m_bJackMasterMode = Preferences::NO_JACK_TIME_MASTER; AudioEngine::get_instance()->unlock(); (HydrogenApp::get_instance())->setStatusBarMessage(trUtf8(" Jack-Time-Master mode = Off"), 5000); - //m_pControlsBBTPanel->hide(); Hydrogen::get_instance()->offJackMaster(); } #endif @@ -970,7 +966,7 @@ return; } - m_pEngine->getSong()->__is_modified = true; + m_pEngine->getSong()->set_is_modified( true ); AudioEngine::get_instance()->lock( RIGHT_HERE ); m_pEngine->setBPM( fNewVal ); @@ -982,34 +978,12 @@ } -void PlayerControl::bpmButtonPressed( Button* pBtn) -{ - if ( pBtn == m_pBPMUpBtn ) { - m_pLCDBPMSpinbox->upBtnClicked(); - m_nBPMIncrement = 1; - } - else { - m_pLCDBPMSpinbox->downBtnClicked(); - m_nBPMIncrement = -1; - } - m_pBPMTimer->start( 100 ); -} - - -void PlayerControl::bpmButtonClicked( Button* ) +void PlayerControl::bpmButtonClicked( Button* pBtn ) { - m_pBPMTimer->stop(); -} - - -void PlayerControl::onBpmTimerEvent() -{ - if (m_nBPMIncrement == 1) { + if ( pBtn == m_pBPMUpBtn ) m_pLCDBPMSpinbox->upBtnClicked(); - } - else { + else m_pLCDBPMSpinbox->downBtnClicked(); - } } @@ -1035,7 +1009,7 @@ Hydrogen *pEngine = Hydrogen::get_instance(); Song *song = pEngine->getSong(); song->set_loop_enabled( ! song->is_loop_enabled() ); - song->__is_modified = true; + song->set_is_modified( true ); if ( song->is_loop_enabled() ) { HydrogenApp::get_instance()->setStatusBarMessage(trUtf8("Loop song = On"), 5000); diff -Nru hydrogen-0.9.6.1/src/gui/src/PlayerControl.h hydrogen-0.9.7/src/gui/src/PlayerControl.h --- hydrogen-0.9.6.1/src/gui/src/PlayerControl.h 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/PlayerControl.h 2016-11-05 08:22:50.000000000 +0000 @@ -106,13 +106,11 @@ //~ jack time master void bpmChanged(); void bpmButtonClicked( Button *pRef ); - void bpmButtonPressed( Button* pBtn); void bpmClicked(); void FFWDBtnClicked(Button *pRef); void RewindBtnClicked(Button *pRef); void songLoopBtnClicked(Button* ref); void metronomeButtonClicked(Button* ref); - void onBpmTimerEvent(); void onStatusTimerEvent(); void onScrollTimerEvent(); void showButtonClicked( Button* pRef ); @@ -184,10 +182,6 @@ MetronomeWidget *m_pMetronomeWidget; ToggleButton *m_pMetronomeBtn; - QTimer *m_pBPMTimer; - - int m_nBPMIncrement; - ToggleButton *m_pShowMixerBtn; ToggleButton *m_pShowInstrumentRackBtn; diff -Nru hydrogen-0.9.6.1/src/gui/src/PlaylistEditor/PlaylistDialog.cpp hydrogen-0.9.7/src/gui/src/PlaylistEditor/PlaylistDialog.cpp --- hydrogen-0.9.6.1/src/gui/src/PlaylistEditor/PlaylistDialog.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/PlaylistEditor/PlaylistDialog.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -33,6 +33,7 @@ #include #include #include +#include #include #include "../widgets/Button.h" @@ -67,7 +68,6 @@ // menubar QMenuBar *m_pMenubar = new QMenuBar( this ); -// setMenuBar( m_pMenubar ); // Playlist menu QMenu *m_pPlaylistMenu = m_pMenubar->addMenu( trUtf8( "&Playlist" ) ); @@ -76,7 +76,7 @@ m_pPlaylistMenu->addAction( trUtf8( "Add ¤t song to Playlist" ), this, SLOT( addCurrentSong() ), QKeySequence( "" ) ); m_pPlaylistMenu->addSeparator(); // ----- m_pPlaylistMenu->addAction( trUtf8( "&Remove selected song from Playlist" ), this, SLOT( removeFromList() ), QKeySequence( "" ) ); - m_pPlaylistMenu->addAction( trUtf8( "&New Playlist" ), this, SLOT( clearPlaylist() ), QKeySequence( "" ) ); + m_pPlaylistMenu->addAction( trUtf8( "&New Playlist" ), this, SLOT( clearPlaylist() ), QKeySequence( "" ) ); m_pPlaylistMenu->addSeparator(); m_pPlaylistMenu->addAction( trUtf8( "&Open Playlist" ), this, SLOT( loadList() ), QKeySequence( "" ) ); m_pPlaylistMenu->addSeparator(); @@ -330,14 +330,41 @@ void PlaylistDialog::clearPlaylist() { - QTreeWidget* m_pPlaylist = m_pPlaylistTree; + bool DiscardChanges = false; + bool IsModified = Playlist::get_instance()->getIsModified(); - m_pPlaylist->clear(); - Hydrogen::get_instance()->m_PlayList.clear(); - Playlist::get_instance()->setSelectedSongNr( -1 ); - Playlist::get_instance()->setActiveSongNumber( -1 ); - Playlist::get_instance()->set_filename ( "" ); - setWindowTitle ( trUtf8 ( "Playlist Browser" ) ); + if( IsModified ) + { + switch(QMessageBox::information( this, "Hydrogen", + trUtf8("\nThe current playlist contains unsaved changes.\n" + "Do you want to discard the changes?\n"), + trUtf8("&Discard"), trUtf8("&Cancel"), + 0, // Enter == button 0 + 2 ) ) { // Escape == button 1 + case 0: // Discard clicked or Alt+D pressed + // don't save but exit + DiscardChanges = true; + break; + case 1: // Cancel clicked or Alt+C pressed or Escape pressed + // don't exit + DiscardChanges = false; + break; + } + } + + if(!IsModified || (IsModified && DiscardChanges)) + { + QTreeWidget* m_pPlaylist = m_pPlaylistTree; + + m_pPlaylist->clear(); + Hydrogen::get_instance()->m_PlayList.clear(); + Playlist::get_instance()->setSelectedSongNr( -1 ); + Playlist::get_instance()->setActiveSongNumber( -1 ); + Playlist::get_instance()->set_filename ( "" ); + setWindowTitle ( trUtf8 ( "Playlist Browser" ) ); + + Playlist::get_instance()->setIsModified(false); + } return; } @@ -352,7 +379,6 @@ QTreeWidget* m_pPlaylist = m_pPlaylistTree; m_pPlaylist->setCurrentItem ( m_pPlaylistItem ); - } void PlaylistDialog::loadList() @@ -370,30 +396,30 @@ filename = fd.selectedFiles().first(); - Playlist* P = Playlist::load( filename ); - if ( ! P ) { + Playlist* pPlaylist = Playlist::load( filename ); + if ( ! pPlaylist ) { _ERRORLOG( "Error loading the playlist" ); /* FIXME: get current instance (?) */ - P = Playlist::get_instance(); + pPlaylist = Playlist::get_instance(); } - Hydrogen* H = Hydrogen::get_instance(); - if(H->m_PlayList.size() > 0) { + Hydrogen* pHydrogen = Hydrogen::get_instance(); + if(pHydrogen->m_PlayList.size() > 0) { QTreeWidget* m_pPlaylist = m_pPlaylistTree; m_pPlaylist->clear(); - for ( uint i = 0; i < H->m_PlayList.size(); ++i ){ + for ( uint i = 0; i < pHydrogen->m_PlayList.size(); ++i ){ QTreeWidgetItem* m_pPlaylistItem = new QTreeWidgetItem ( m_pPlaylistTree ); - if( H->m_PlayList[i].m_hFileExists ){ - m_pPlaylistItem->setText ( 0, H->m_PlayList[i].m_hFile ); + if( pHydrogen->m_PlayList[i].m_hFileExists ){ + m_pPlaylistItem->setText ( 0, pHydrogen->m_PlayList[i].m_hFile ); } else { - m_pPlaylistItem->setText ( 0, trUtf8("File not found: ") + H->m_PlayList[i].m_hFile ); + m_pPlaylistItem->setText ( 0, trUtf8("File not found: ") + pHydrogen->m_PlayList[i].m_hFile ); } - m_pPlaylistItem->setText ( 1, H->m_PlayList[i].m_hScript ); + m_pPlaylistItem->setText ( 1, pHydrogen->m_PlayList[i].m_hScript ); - if ( H->m_PlayList[i].m_hScriptEnabled == "Use Script" ) { + if ( pHydrogen->m_PlayList[i].m_hScriptEnabled == "Use Script" ) { m_pPlaylistItem->setCheckState( 2, Qt::Checked ); } else { m_pPlaylistItem->setCheckState( 2, Qt::Unchecked ); @@ -402,8 +428,8 @@ QTreeWidgetItem* m_pPlaylistItem = m_pPlaylist->topLevelItem ( 0 ); m_pPlaylist->setCurrentItem ( m_pPlaylistItem ); - P->setSelectedSongNr( 0 ); - setWindowTitle ( trUtf8 ( "Playlist Browser" ) + QString(" - ") + P->get_filename() ); + pPlaylist->setSelectedSongNr( 0 ); + setWindowTitle ( trUtf8 ( "Playlist Browser" ) + QString(" - ") + pPlaylist->get_filename() ); } } @@ -491,32 +517,42 @@ QString defaultFilename = "untitled.h2playlist"; fd.selectFile ( defaultFilename ); - if ( fd.exec() != QDialog::Accepted ) return; + if ( fd.exec() != QDialog::Accepted ){ + return; + } + QString filename = fd.selectedFiles().first(); - Playlist* P = Playlist::get_instance(); - if ( ! P->save ( filename ) ) return; + Playlist* pPlaylist = Playlist::get_instance(); + if ( ! pPlaylist->save ( filename ) ){ + return; + } + + Playlist::get_instance()->setIsModified(false); setWindowTitle ( trUtf8 ( "Playlist Browser" ) + QString(" - ") + filename ); } void PlaylistDialog::saveList() { - Playlist* P = Playlist::get_instance(); - if ( P->get_filename() == "") { + Playlist* pPlaylist = Playlist::get_instance(); + if ( pPlaylist->get_filename() == "") { // just in case! return saveListAs(); } - if ( ! P->save ( P->get_filename() ) ) + if ( ! pPlaylist->save ( pPlaylist->get_filename() ) ){ return; + } + + Playlist::get_instance()->setIsModified(false); } void PlaylistDialog::loadScript() { - QTreeWidgetItem* m_pPlaylistItem = m_pPlaylistTree->currentItem(); - if ( m_pPlaylistItem == NULL ){ + QTreeWidgetItem* pPlaylistItem = m_pPlaylistTree->currentItem(); + if ( pPlaylistItem == NULL ){ QMessageBox::information ( this, "Hydrogen", trUtf8 ( "No Song in List or no Song selected!" ) ); return; } @@ -538,7 +574,7 @@ return; } - m_pPlaylistItem->setText ( 1, filename ); + pPlaylistItem->setText ( 1, filename ); updatePlayListVector(); } @@ -590,14 +626,14 @@ } } - QTreeWidgetItem* m_pPlaylistItem = m_pPlaylistTree->currentItem(); + QTreeWidgetItem* pPlaylistItem = m_pPlaylistTree->currentItem(); - if ( m_pPlaylistItem == NULL ){ + if ( pPlaylistItem == NULL ){ QMessageBox::information ( this, "Hydrogen", trUtf8 ( "No Song selected!" ) ); return; } QString selected; - selected = m_pPlaylistItem->text ( 1 ); + selected = pPlaylistItem->text ( 1 ); QString filename = pPref->getDefaultEditor() + " " + selected + "&"; @@ -619,33 +655,33 @@ { timer->stop(); - Playlist* pList = Playlist::get_instance(); + Playlist* pPlaylist = Playlist::get_instance(); - QTreeWidget* m_pPlaylist = m_pPlaylistTree; - QTreeWidgetItem* m_pPlaylistItem = m_pPlaylistTree->currentItem(); - int index = m_pPlaylist->indexOfTopLevelItem ( m_pPlaylistItem ); + QTreeWidget* pPlaylistTree = m_pPlaylistTree; + QTreeWidgetItem* pPlaylistTreeItem = m_pPlaylistTree->currentItem(); + int index = pPlaylistTree->indexOfTopLevelItem ( pPlaylistTreeItem ); if (index == 0 ){ timer->start( 1000 ); return; } - QTreeWidgetItem* tmpPlaylistItem = m_pPlaylist->takeTopLevelItem ( index ); + QTreeWidgetItem* tmpPlaylistItem = pPlaylistTree->takeTopLevelItem ( index ); - m_pPlaylist->insertTopLevelItem ( index -1, tmpPlaylistItem ); - m_pPlaylist->setCurrentItem ( tmpPlaylistItem ); + pPlaylistTree->insertTopLevelItem ( index -1, tmpPlaylistItem ); + pPlaylistTree->setCurrentItem ( tmpPlaylistItem ); - if ( pList->getSelectedSongNr() >= 0 ) - pList->setSelectedSongNr( pList->getSelectedSongNr() -1 ); + if ( pPlaylist->getSelectedSongNr() >= 0 ){ + pPlaylist->setSelectedSongNr( pPlaylist->getSelectedSongNr() -1 ); + } - if ( pList->getActiveSongNumber() == index ){ - pList->setActiveSongNumber( pList->getActiveSongNumber() -1 ); - }else if ( pList->getActiveSongNumber() == index -1 ){ - pList->setActiveSongNumber( pList->getActiveSongNumber() +1 ); + if ( pPlaylist->getActiveSongNumber() == index ){ + pPlaylist->setActiveSongNumber( pPlaylist->getActiveSongNumber() -1 ); + }else if ( pPlaylist->getActiveSongNumber() == index -1 ){ + pPlaylist->setActiveSongNumber( pPlaylist->getActiveSongNumber() +1 ); } updatePlayListVector(); - } void PlaylistDialog::o_downBClicked() @@ -699,7 +735,7 @@ void PlaylistDialog::nodePlayBTN( Button* ref ) { - Hydrogen *engine = Hydrogen::get_instance(); + Hydrogen *pEngine = Hydrogen::get_instance(); HydrogenApp *pH2App = HydrogenApp::get_instance(); if (ref->isPressed()) { @@ -712,13 +748,13 @@ QString selected = ""; selected = m_pPlaylistItem->text ( 0 ); - if( selected == engine->getSong()->get_filename()){ - engine->sequencer_play(); + if( selected == pEngine->getSong()->get_filename()){ + pEngine->sequencer_play(); return; } - if ( engine->getState() == STATE_PLAYING ){ - engine->sequencer_stop(); + if ( pEngine->getState() == STATE_PLAYING ){ + pEngine->sequencer_stop(); } Song *pSong = Song::load ( selected ); @@ -733,12 +769,12 @@ Playlist::get_instance()->setActiveSongNumber( index ); pH2App->setSong ( pSong ); - engine->setSelectedPatternNumber ( 0 ); + pEngine->setSelectedPatternNumber ( 0 ); - engine->sequencer_play(); + pEngine->sequencer_play(); }else { - engine->sequencer_stop(); + pEngine->sequencer_stop(); pH2App->setStatusBarMessage(trUtf8("Pause."), 5000); } } @@ -782,16 +818,17 @@ Playlist::get_instance()->setActiveSongNumber( index ); HydrogenApp *pH2App = HydrogenApp::get_instance(); - Hydrogen *engine = Hydrogen::get_instance(); + Hydrogen *pEngine = Hydrogen::get_instance(); - if ( engine->getState() == STATE_PLAYING ){ - engine->sequencer_stop(); + if ( pEngine->getState() == STATE_PLAYING ){ + pEngine->sequencer_stop(); } m_pPlayBtn->setPressed(false); - engine->m_timelinetagvector.clear(); + Timeline* pTimeline = pEngine->getTimeline(); + pTimeline->m_timelinetagvector.clear(); Song *pSong = Song::load ( selected ); if ( pSong == NULL ){ @@ -800,7 +837,7 @@ } pH2App->setSong ( pSong ); - engine->setSelectedPatternNumber ( 0 ); + pEngine->setSelectedPatternNumber ( 0 ); HydrogenApp::get_instance()->getSongEditorPanel()->updatePositionRuler(); pH2App->setStatusBarMessage( trUtf8( "Playlist: set song no. %1" ).arg( index +1 ), 5000 ); @@ -863,6 +900,8 @@ playListItem.m_hScriptEnabled = execval; Hydrogen::get_instance()->m_PlayList.push_back( playListItem ); + + Playlist::get_instance()->setIsModified(true); } timer->start( 1000 ); } @@ -887,7 +926,6 @@ QTreeWidgetItem* m_pPlaylistItem = m_pPlaylist->topLevelItem ( selected ); if ( m_pPlaylistItem != NULL ){ - //m_pPlaylist->setCurrentItem ( m_pPlaylistItem ); m_pPlaylistItem->setBackgroundColor ( 0, QColor( 50, 50, 50) ); m_pPlaylistItem->setBackgroundColor ( 1, QColor( 50, 50, 50) ); m_pPlaylistItem->setBackgroundColor ( 2, QColor( 50, 50, 50) ); @@ -923,30 +961,30 @@ return FALSE; // standard event processing } - return NULL; + return FALSE; } bool PlaylistDialog::loadListByFileName( QString filename ) { - Playlist* P = Playlist::load ( filename ); - if ( ! P ) { + Playlist* pPlaylist = Playlist::load ( filename ); + if ( ! pPlaylist ) { _ERRORLOG( "Error loading the playlist" ); return 0; } Preferences::get_instance()->setLastPlaylistFilename( filename ); - Hydrogen* H = Hydrogen::get_instance(); + Hydrogen* pEngine = Hydrogen::get_instance(); - if ( H->m_PlayList.size() > 0 ) { + if ( pEngine->m_PlayList.size() > 0 ) { QTreeWidget* m_pPlaylist = m_pPlaylistTree; m_pPlaylist->clear(); - for ( uint i = 0; i < H->m_PlayList.size(); ++i ){ + for ( uint i = 0; i < pEngine->m_PlayList.size(); ++i ){ QTreeWidgetItem* m_pPlaylistItem = new QTreeWidgetItem ( m_pPlaylistTree ); - m_pPlaylistItem->setText ( 0, H->m_PlayList[i].m_hFile ); - m_pPlaylistItem->setText ( 1, H->m_PlayList[i].m_hScript ); + m_pPlaylistItem->setText ( 0, pEngine->m_PlayList[i].m_hFile ); + m_pPlaylistItem->setText ( 1, pEngine->m_PlayList[i].m_hScript ); - if ( H->m_PlayList[i].m_hScriptEnabled == "Use Script" ) { + if ( pEngine->m_PlayList[i].m_hScriptEnabled == "Use Script" ) { m_pPlaylistItem->setCheckState( 2, Qt::Checked ); } else { m_pPlaylistItem->setCheckState( 2, Qt::Unchecked ); @@ -955,8 +993,8 @@ QTreeWidgetItem* m_pPlaylistItem = m_pPlaylist->topLevelItem ( 0 ); m_pPlaylist->setCurrentItem ( m_pPlaylistItem ); - P->setSelectedSongNr( 0 ); - setWindowTitle ( trUtf8 ( "Playlist Browser" ) + QString(" - ") + P->get_filename() ); + pPlaylist->setSelectedSongNr( 0 ); + setWindowTitle ( trUtf8 ( "Playlist Browser" ) + QString(" - ") + pPlaylist->get_filename() ); } return 1; diff -Nru hydrogen-0.9.6.1/src/gui/src/PreferencesDialog.cpp hydrogen-0.9.7/src/gui/src/PreferencesDialog.cpp --- hydrogen-0.9.6.1/src/gui/src/PreferencesDialog.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/PreferencesDialog.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -31,7 +31,7 @@ #include #include -#include "widgets/midiTable.h" +#include "widgets/MidiTable.h" #include #include @@ -40,6 +40,9 @@ #include #include #include +#include "SongEditor/SongEditor.h" +#include "SongEditor/SongEditorPanel.h" + using namespace H2Core; @@ -116,6 +119,8 @@ } m_pIgnoreNoteOffCheckBox->setChecked( pPref->m_bMidiNoteOffIgnore ); + m_pDiscardMidiMsgCheckbox->setChecked( pPref->m_bMidiDiscardNoteAfterAction ); + m_pFixedMapping->setChecked( pPref->m_bMidiFixedMapping ); updateDriverInfo(); @@ -201,6 +206,24 @@ i++; } + //SongEditor coloring + int coloringMethod = pPref->getColoringMethod(); + int coloringMethodAuxValue = pPref->getColoringMethodAuxValue(); + + coloringMethodCombo->clear(); + coloringMethodCombo->addItem(trUtf8("Automatic")); + coloringMethodCombo->addItem(trUtf8("Steps")); + coloringMethodCombo->addItem(trUtf8("Fixed")); + + coloringMethodAuxSpinBox->setMaximum(300); + + coloringMethodCombo->setCurrentIndex( coloringMethod ); + coloringMethodAuxSpinBox->setValue( coloringMethodAuxValue ); + + coloringMethodCombo_currentIndexChanged( coloringMethod ); + + connect(coloringMethodCombo, SIGNAL(currentIndexChanged(int)), this, SLOT( coloringMethodCombo_currentIndexChanged(int) )); + // midi tab midiPortChannelComboBox->setEnabled( false ); @@ -236,6 +259,7 @@ // General tab restoreLastUsedSongCheckbox->setChecked( pPref->isRestoreLastSongEnabled() ); restoreLastUsedPlaylistCheckbox->setChecked( pPref->isRestoreLastPlaylistEnabled() ); + useRelativePlaylistPathsCheckbox->setChecked( pPref->isPlaylistUsingRelativeFilenames() ); //restore the right m_bsetlash value if ( pPref->m_brestartLash == true ){ @@ -336,8 +360,12 @@ // JACK pPref->m_bJackConnectDefaults = connectDefaultsCheckBox->isChecked(); + /* + * 0: Post-Fader + * 1: Pre-Fader + */ - if (trackOutputComboBox->currentText() == "Post-Fader") + if (trackOutputComboBox->currentIndex() == Preferences::POST_FADER) { pPref->m_nJackTrackOutputMode = Preferences::POST_FADER; } else { @@ -382,6 +410,8 @@ pPref->m_bMidiNoteOffIgnore = m_pIgnoreNoteOffCheckBox->isChecked(); + pPref->m_bMidiFixedMapping = m_pFixedMapping->isChecked(); + pPref->m_bMidiDiscardNoteAfterAction = m_pDiscardMidiMsgCheckbox->isChecked(); // Mixer falloff QString falloffStr = mixerFalloffComboBox->currentText(); @@ -414,6 +444,7 @@ // General tab pPref->setRestoreLastSongEnabled( restoreLastUsedSongCheckbox->isChecked() ); pPref->setRestoreLastPlaylistEnabled( restoreLastUsedPlaylistCheckbox->isChecked() ); + pPref->setUseRelativeFilenamesForPlaylists( useRelativePlaylistPathsCheckbox->isChecked() ); pPref->m_bsetLash = useLashCheckbox->isChecked(); //restore m_bsetLash after saving pref. //path to rubberband @@ -433,6 +464,28 @@ pPref->setDefaultUILayout( uiLayoutComboBox->currentIndex() ); + int coloringMethod = coloringMethodCombo->currentIndex(); + + pPref->setColoringMethod( coloringMethod ); + + switch( coloringMethod ) + { + case 0: + //Automatic + pPref->setColoringMethodAuxValue(0); + break; + case 1: + pPref->setColoringMethodAuxValue( coloringMethodAuxSpinBox->value() ); + break; + case 2: + pPref->setColoringMethodAuxValue( coloringMethodAuxSpinBox->value() ); + break; + } + + HydrogenApp *pH2App = HydrogenApp::get_instance(); + SongEditorPanel* pSongEditorPanel = pH2App->getSongEditorPanel(); + SongEditor * pSongEditor = pSongEditorPanel->getSongEditor(); + pSongEditor->updateEditorandSetTrue(); pPref->savePreferences(); @@ -447,7 +500,6 @@ } - void PreferencesDialog::on_driverComboBox_activated( int index ) { UNUSED( index ); @@ -702,6 +754,26 @@ QMessageBox::information ( this, "Hydrogen", trUtf8 ( "Please restart hydrogen to enable/disable LASH support" ) ); } +void PreferencesDialog::coloringMethodCombo_currentIndexChanged (int index) +{ + switch(index) + { + case 0: + coloringMethodAuxLabel->setText( "" ); + coloringMethodAuxSpinBox->hide(); + break; + case 1: + coloringMethodAuxLabel->setText( trUtf8("Number of steps") ); + coloringMethodAuxSpinBox->setMinimum(1); + coloringMethodAuxSpinBox->show(); + break; + case 2: + coloringMethodAuxLabel->setText( trUtf8("Color (Hue value)") ); + coloringMethodAuxSpinBox->setMinimum(0); + coloringMethodAuxSpinBox->show(); + break; + } +} void PreferencesDialog::on_resampleComboBox_currentIndexChanged ( int index ) { diff -Nru hydrogen-0.9.6.1/src/gui/src/PreferencesDialog.h hydrogen-0.9.7/src/gui/src/PreferencesDialog.h --- hydrogen-0.9.6.1/src/gui/src/PreferencesDialog.h 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/PreferencesDialog.h 2016-11-05 08:22:50.000000000 +0000 @@ -54,6 +54,8 @@ void on_useLashCheckbox_clicked(); void onMidiDriverComboBoxIndexChanged( int index ); void toggleTrackOutsCheckBox(bool toggled); + void coloringMethodCombo_currentIndexChanged (int index); + private: bool m_bNeedDriverRestart; diff -Nru hydrogen-0.9.6.1/src/gui/src/SampleEditor/SampleEditor.cpp hydrogen-0.9.7/src/gui/src/SampleEditor/SampleEditor.cpp --- hydrogen-0.9.6.1/src/gui/src/SampleEditor/SampleEditor.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/SampleEditor/SampleEditor.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -33,6 +33,7 @@ #include #include #include +#include #include #include #include @@ -48,7 +49,7 @@ const char* SampleEditor::__class_name = "SampleEditor"; -SampleEditor::SampleEditor ( QWidget* pParent, int nSelectedLayer, QString mSamplefilename ) +SampleEditor::SampleEditor ( QWidget* pParent, int nSelectedComponent, int nSelectedLayer, QString mSamplefilename ) : QDialog ( pParent ) , Object ( __class_name ) { @@ -63,6 +64,7 @@ m_pSampleEditorStatus = true; m_pSampleFromFile = NULL; m_pSelectedLayer = nSelectedLayer; + m_pSelectedComponent = nSelectedComponent; m_samplename = mSamplefilename; m_pZoomfactor = 1; m_pDetailFrame = 0; @@ -107,16 +109,16 @@ #ifndef H2CORE_HAVE_RUBBERBAND if ( QFile( Preferences::get_instance()->m_rubberBandCLIexecutable ).exists() == false ){ - RubberbandCframe->setDisabled ( true ); + RubberbandCframe->setDisabled ( true ); __rubberband.use = false; - m_pSampleEditorStatus = true; + m_pSampleEditorStatus = true; } #else - RubberbandCframe->setDisabled ( false ); - m_pSampleEditorStatus = true; + RubberbandCframe->setDisabled ( false ); + m_pSampleEditorStatus = true; #endif - __rubberband.pitch = 0.0; + __rubberband.pitch = 0.0; } @@ -149,7 +151,7 @@ int err = QMessageBox::information( this, "Hydrogen", tr( "Unsaved changes left. This changes will be lost. \nAre you sure?"), tr("&Ok"), tr("&Cancel"), 0, 1 ); if ( err == 0 ){ m_pSampleEditorStatus = true; - accept(); + accept(); }else { return; @@ -181,31 +183,31 @@ //INFOLOG( "new instr: " + pInstrument->m_sName ); } } - H2Core::InstrumentLayer *pLayer = pInstrument->get_layer( m_pSelectedLayer ); + H2Core::InstrumentLayer *pLayer = pInstrument->get_component(0)->get_layer( m_pSelectedLayer ); if ( pLayer ) { pSample = pLayer->get_sample(); } -//this values are needed if we restore a sample from from disk if a new song with sample changes will load +//this values are needed if we restore a sample from from disk if a new song with sample changes will load m_sample_is_modified = pSample->get_is_modified(); m_pSamplerate = pSample->get_sample_rate(); - __loops = pSample->get_loops(); - __rubberband = pSample->get_rubberband(); + __loops = pSample->get_loops(); + __rubberband = pSample->get_rubberband(); - if ( pSample->get_velocity_envelope()->size()==0 ) { - m_pTargetSampleView->get_velocity()->clear(); - m_pTargetSampleView->get_velocity()->push_back( Sample::EnvelopePoint( 0, 0 ) ); - m_pTargetSampleView->get_velocity()->push_back( Sample::EnvelopePoint( m_pTargetSampleView->width(), 0 ) ); + if ( pSample->get_velocity_envelope()->size()==0 ) { + m_pTargetSampleView->get_velocity()->clear(); + m_pTargetSampleView->get_velocity()->push_back( Sample::EnvelopePoint( 0, 0 ) ); + m_pTargetSampleView->get_velocity()->push_back( Sample::EnvelopePoint( m_pTargetSampleView->width(), 0 ) ); } else { - *m_pTargetSampleView->get_velocity() = *pSample->get_velocity_envelope(); + *m_pTargetSampleView->get_velocity() = *pSample->get_velocity_envelope(); } - if ( pSample->get_pan_envelope()->size()==0 ) { - m_pTargetSampleView->get_pan()->clear(); - m_pTargetSampleView->get_pan()->push_back( Sample::EnvelopePoint( 0, m_pTargetSampleView->height()/2 ) ); - m_pTargetSampleView->get_pan()->push_back( Sample::EnvelopePoint( m_pTargetSampleView->width(), m_pTargetSampleView->height()/2 ) ); + if ( pSample->get_pan_envelope()->size()==0 ) { + m_pTargetSampleView->get_pan()->clear(); + m_pTargetSampleView->get_pan()->push_back( Sample::EnvelopePoint( 0, m_pTargetSampleView->height()/2 ) ); + m_pTargetSampleView->get_pan()->push_back( Sample::EnvelopePoint( m_pTargetSampleView->width(), m_pTargetSampleView->height()/2 ) ); } else { - *m_pTargetSampleView->get_pan() = *pSample->get_pan_envelope(); + *m_pTargetSampleView->get_pan() = *pSample->get_pan_envelope(); } if (m_sample_is_modified) { @@ -311,7 +313,7 @@ int err = QMessageBox::information( this, "Hydrogen", tr( "Unsaved changes left. This changes will be lost. \nAre you sure?"), tr("&Ok"), tr("&Cancel"), 0, 1 ); if ( err == 0 ){ m_pSampleEditorStatus = true; - accept(); + accept(); }else { return; @@ -326,8 +328,8 @@ void SampleEditor::on_PrevChangesPushButton_clicked() { - QApplication::setOverrideCursor(Qt::WaitCursor); - getAllLocalFrameInfos(); + QApplication::setOverrideCursor(Qt::WaitCursor); + getAllLocalFrameInfos(); createNewLayer(); m_pSampleEditorStatus = true; QApplication::restoreOverrideCursor(); @@ -340,7 +342,7 @@ bool close = false; int err = QMessageBox::information( this, "Hydrogen", tr( "Close dialog! maybe there is some unsaved work on sample.\nAre you sure?"), tr("&Ok"), tr("&Cancel"), 0, 1 ); if ( err == 0 ) close = true; - + return close; } @@ -348,10 +350,9 @@ void SampleEditor::createNewLayer() { - if ( !m_pSampleEditorStatus ){ - Sample *editSample = Sample::load( m_samplename, __loops, __rubberband, *m_pTargetSampleView->get_velocity(), *m_pTargetSampleView->get_pan() ); + Sample *editSample = Sample::load( m_samplename, __loops, __rubberband, *m_pTargetSampleView->get_velocity(), *m_pTargetSampleView->get_pan() ); if( editSample == NULL ){ return; @@ -367,7 +368,7 @@ if ( nInstr >= static_cast(pInstrList->size()) ) { nInstr = -1; } - + if (nInstr == -1) { pInstrument = NULL; } @@ -375,19 +376,18 @@ pInstrument = pInstrList->get( nInstr ); } } - - H2Core::InstrumentLayer *pLayer = pInstrument->get_layer( m_pSelectedLayer ); + + H2Core::InstrumentLayer *pLayer = pInstrument->get_component(0)->get_layer( m_pSelectedLayer ); Sample *oldSample = pLayer->get_sample(); delete oldSample; - + // insert new sample from newInstrument pLayer->set_sample( editSample ); AudioEngine::get_instance()->unlock(); m_pTargetSampleView->updateDisplay( pLayer ); - } - + } } @@ -445,7 +445,7 @@ m_pMainSampleWaveDisplay->updateDisplayPointer(); m_pSampleAdjustView->setDetailSamplePosition( m_pDetailFrame, m_pZoomfactor , m_pLineColor); __loops.start_frame = StartFrameSpinBox->value(); - + }else { m_pSampleAdjustView->setDetailSamplePosition( m_pDetailFrame, m_pZoomfactor , m_pLineColor); @@ -460,7 +460,7 @@ void SampleEditor::valueChangedLoopFrameSpinBox( int ) { - testpTimer(); + testpTimer(); m_pDetailFrame = LoopFrameSpinBox->value(); m_pLineColor = "Loop"; if ( !m_pOnewayLoop ){ @@ -517,7 +517,9 @@ Song *pSong = Hydrogen::get_instance()->getSong(); Instrument *pInstr = pSong->get_instrument_list()->get( Hydrogen::get_instance()->getSelectedInstrumentNumber() ); - Note *pNote = new Note( pInstr, 0, pInstr->get_layer( selectedLayer )->get_end_velocity() - 0.01, pan_L, pan_R, nLength, fPitch); + + Note *pNote = new Note( pInstr, 0, pInstr->get_component( m_pSelectedComponent )->get_layer( selectedLayer )->get_end_velocity() - 0.01, pan_L, pan_R, nLength, fPitch); + pNote->set_specific_compo_id( m_pSelectedComponent ); AudioEngine::get_instance()->get_sampler()->note_on(pNote); setSamplelengthFrames(); @@ -541,8 +543,8 @@ m_prealtimeframeendfortarget = m_pRealtimeFrameEnd; } m_pTargetDisplayTimer->start(40); // update ruler at 25 fps - PlayPushButton->setText( QString( "Stop") ); - + PlayPushButton->setText( QString( "Stop") ); + } @@ -563,7 +565,7 @@ *instrument. Otherwise pInstr would be deleted if consumed by preview_instrument. */ Instrument *tmpInstrument = Instrument::load_instrument( pInstr->get_drumkit_name(), pInstr->get_name() ); - Sample *pNewSample = Sample::load( pInstr->get_layer( selectedlayer )->get_sample()->get_filepath() ); + Sample *pNewSample = Sample::load( pInstr->get_component(0)->get_layer( selectedlayer )->get_sample()->get_filepath() ); if ( pNewSample ){ int length = ( ( pNewSample->get_frames() / pNewSample->get_sample_rate() + 1) * 100 ); @@ -574,9 +576,9 @@ m_pMainSampleWaveDisplay->paintLocatorEvent( StartFrameSpinBox->value() / m_divider + 24 , true); m_pSampleAdjustView->setDetailSamplePosition( __loops.start_frame, m_pZoomfactor , 0); - m_pTimer->start(40); // update ruler at 25 fps + m_pTimer->start(40); // update ruler at 25 fps m_pRealtimeFrameEnd = Hydrogen::get_instance()->getRealtimeFrames() + m_pslframes; - PlayOrigPushButton->setText( QString( "Stop") ); + PlayOrigPushButton->setText( QString( "Stop") ); } @@ -599,7 +601,7 @@ m_pMainSampleWaveDisplay->paintLocatorEvent( -1 , false); m_pTimer->stop(); PlayPushButton->setText( QString("&Play") ); - PlayOrigPushButton->setText( QString( "P&lay original sample") ); + PlayOrigPushButton->setText( QString( "P&lay original sample") ); m_pPlayButton = false; } } @@ -624,7 +626,7 @@ m_pTargetSampleView->paintLocatorEventTargetDisplay( -1 , false); m_pTargetDisplayTimer->stop(); PlayPushButton->setText(QString( "&Play") ); - PlayOrigPushButton->setText( QString( "P&lay original sample") ); + PlayOrigPushButton->setText( QString( "P&lay original sample") ); m_pPlayButton = false; } } @@ -648,17 +650,15 @@ unsigned normalLength = m_pSampleFromFile->get_frames(); - unsigned *normalFrames = new unsigned[ normalLength ]; - + unsigned * normalFrames = new unsigned[ normalLength ]; + unsigned * tempFrames = new unsigned[ newLength ]; + unsigned * loopFrames = new unsigned[ loopLength ]; for ( unsigned i = 0; i < normalLength; i++ ) { normalFrames[i] = i; } - unsigned *tempFrames = new unsigned[ newLength ]; - unsigned *loopFrames = new unsigned[ loopLength ]; - - Sample::Loops::LoopMode loopmode = __loops.mode; + Sample::Loops::LoopMode loopmode = __loops.mode; long int z = __loops.loop_frame; long int y = __loops.start_frame; @@ -675,7 +675,7 @@ loopFrames[i] = normalFrames[z]; } - + if ( loopmode == Sample::Loops::REVERSE ){ reverse(loopFrames, loopFrames + loopLength); } @@ -687,7 +687,7 @@ if ( loopmode == Sample::Loops::PINGPONG && __loops.start_frame == __loops.loop_frame){ reverse(loopFrames, loopFrames + loopLength); } - + for ( int i = 0; i< __loops.count ;i++){ unsigned tempdataend = oneSampleLength + ( loopLength * i ); if ( __loops.start_frame == __loops.loop_frame ){ @@ -699,15 +699,22 @@ if ( __loops.start_frame != __loops.loop_frame ){ copy( loopFrames, loopFrames+loopLength ,tempFrames+ tempdataend ); } - } - + if ( __loops.count == 0 && loopmode == Sample::Loops::REVERSE ){ reverse( tempFrames + __loops.loop_frame, tempFrames + newLength); } + if(m_pPositionsRulerPath) + { + delete[] m_pPositionsRulerPath; + } + m_pPositionsRulerPath = tempFrames; + + delete[] loopFrames; + delete[] normalFrames; } @@ -747,9 +754,9 @@ m_pSampleEditorStatus = false; setSamplelengthFrames(); if ( m_pslframes > Hydrogen::get_instance()->getAudioOutput()->getSampleRate() * 60 * 30){ // >30 min - LoopCountSpinBox->setMaximum(LoopCountSpinBox->value() -1); + LoopCountSpinBox->setMaximum(LoopCountSpinBox->value() -1); } - + } @@ -782,28 +789,28 @@ switch ( rubberComboBox->currentIndex() ){ - case 0 :// + case 0 :// __rubberband.divider = 4.0; break; - case 1 :// + case 1 :// __rubberband.divider = 1.0/64.0; break; - case 2 :// + case 2 :// __rubberband.divider = 1.0/32.0; break; - case 3 :// + case 3 :// __rubberband.divider = 1.0/16.0; break; - case 4 :// + case 4 :// __rubberband.divider = 1.0/8.0; break; - case 5 :// + case 5 :// __rubberband.divider = 1.0/4.0; break; - case 6 :// + case 6 :// __rubberband.divider = 1.0/2.0; break; - case 7 :// + case 7 :// __rubberband.divider = 1.0; break; default: @@ -858,13 +865,13 @@ void SampleEditor::valueChangedProcessingTypeComboBox( const QString unused ) { switch ( ProcessingTypeComboBox->currentIndex() ){ - case 0 :// + case 0 :// __loops.mode = Sample::Loops::FORWARD; break; - case 1 :// + case 1 :// __loops.mode = Sample::Loops::REVERSE; break; - case 2 :// + case 2 :// __loops.mode = Sample::Loops::PINGPONG; break; default: @@ -904,7 +911,7 @@ m_pTimer->stop(); m_pTargetDisplayTimer->stop(); PlayPushButton->setText( QString( "&Play" ) ); - PlayOrigPushButton->setText( QString( "P&lay original sample") ); + PlayOrigPushButton->setText( QString( "P&lay original sample") ); AudioEngine::get_instance()->get_sampler()->stop_playing_notes(); m_pPlayButton = false; } diff -Nru hydrogen-0.9.6.1/src/gui/src/SampleEditor/SampleEditor.h hydrogen-0.9.7/src/gui/src/SampleEditor/SampleEditor.h --- hydrogen-0.9.6.1/src/gui/src/SampleEditor/SampleEditor.h 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/SampleEditor/SampleEditor.h 2016-11-05 08:22:50.000000000 +0000 @@ -44,11 +44,11 @@ /// class SampleEditor : public QDialog, public Ui_SampleEditor_UI, public H2Core::Object { - H2_OBJECT + H2_OBJECT Q_OBJECT public: - SampleEditor( QWidget* pParent, int nSelectedLayer, QString nSampleFilename ); + SampleEditor( QWidget* pParent, int nSelectedComponent, int nSelectedLayer, QString nSampleFilename ); ~SampleEditor(); void setSampleName( QString name); @@ -84,6 +84,7 @@ H2Core::Sample *m_pSampleFromFile; int m_pSelectedLayer; + int m_pSelectedComponent; QString m_samplename; double m_divider; diff -Nru hydrogen-0.9.6.1/src/gui/src/SampleEditor/TargetWaveDisplay.cpp hydrogen-0.9.7/src/gui/src/SampleEditor/TargetWaveDisplay.cpp --- hydrogen-0.9.6.1/src/gui/src/SampleEditor/TargetWaveDisplay.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/SampleEditor/TargetWaveDisplay.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -52,19 +52,19 @@ int h = UI_HEIGHT; resize( w, h ); - bool ok = m_background.load( Skin::getImagePath() + "/waveDisplay/targetsamplewavedisplay.png" ); + bool ok = m_Background.load( Skin::getImagePath() + "/waveDisplay/targetsamplewavedisplay.png" ); if( ok == false ){ ERRORLOG( "Error loading pixmap" ); } - m_pPeakDatal = new int[ w ]; - m_pPeakDatar = new int[ w ]; - m_pvmove = false; - m_info = ""; - m_x = -10; - m_y = -10; - m_plocator = -1; - m_pupdateposi = false; + m_pPeakData_Left = new int[ w ]; + m_pPeakData_Right = new int[ w ]; + m_VMove = false; + m_sInfo = ""; + m_nX = -10; + m_nY = -10; + m_nLocator = -1; + m_UpdatePosition = false; } @@ -74,8 +74,8 @@ { //INFOLOG( "DESTROY" ); - delete[] m_pPeakDatal; - delete[] m_pPeakDatar; + delete[] m_pPeakData_Left; + delete[] m_pPeakData_Right; } @@ -83,29 +83,27 @@ void TargetWaveDisplay::paintEvent(QPaintEvent *ev) { QPainter painter( this ); - painter.setRenderHint( QPainter::HighQualityAntialiasing ); - painter.drawPixmap( ev->rect(), m_background, ev->rect() ); + painter.setRenderHint( QPainter::HighQualityAntialiasing ); + painter.drawPixmap( ev->rect(), m_Background, ev->rect() ); painter.setPen( QColor( 252, 142, 73 )); + int VCenter = height() / 2; - int lcenter = VCenter -4; - int rcenter = VCenter +4; + int LCenter = VCenter -4; + int RCenter = VCenter +4; + for ( int x = 0; x < width(); x++ ) { - painter.drawLine( x, lcenter, x, -m_pPeakDatal[x +1] +lcenter ); + painter.drawLine( x, LCenter, x, -m_pPeakData_Left[x +1] +LCenter ); } painter.setPen( QColor( 116, 186, 255 )); for ( int x = 0; x < width(); x++ ) { - painter.drawLine( x, rcenter, x, -m_pPeakDatar[x +1] +rcenter ); + painter.drawLine( x, RCenter, x, -m_pPeakData_Right[x +1] +RCenter ); } - QFont font; - font.setWeight( 63 ); - painter.setFont( font ); -//start frame pointer -// painter.setPen( QColor( 99, 175, 254, 200 ) ); -// painter.drawLine( m_pFadeOutFramePosition, 4, m_pFadeOutFramePosition, height() -4 ); -// painter.drawText( m_pFadeOutFramePosition , 1, 10,20, Qt::AlignRight, "F" ); + QFont Font; + Font.setWeight( 63 ); + painter.setFont( Font ); for ( int i = 0; i < static_cast(__velocity.size()) -1; i++){ //volume line @@ -126,7 +124,7 @@ painter.setCompositionMode(QPainter::CompositionMode_SourceOver); painter.setPen( QPen( QColor( 255, 255, 255 ), 1, Qt::SolidLine ) ); - painter.drawLine( m_plocator, 4, m_plocator, height() -4); + painter.drawLine( m_nLocator, 4, m_nLocator, height() -4); //volume line //first rect @@ -146,25 +144,27 @@ painter.setPen( QPen( QColor( 255, 255, 255 ), 1, Qt::DotLine ) ); - painter.drawLine( 0, lcenter, UI_WIDTH, lcenter ); + painter.drawLine( 0, LCenter, UI_WIDTH, LCenter ); painter.setPen( QPen( QColor( 255, 255, 255 ), 1, Qt::DotLine ) ); - painter.drawLine( 0, rcenter, UI_WIDTH, rcenter ); + painter.drawLine( 0, RCenter, UI_WIDTH, RCenter ); - if (m_y < 50){ - if (m_x < 790){ - painter.drawText( m_x +5, m_y, 60, 20, Qt::AlignLeft, QString( m_info ) ); - }else + if (m_nY < 50){ + if (m_nX < 790){ + painter.drawText( m_nX +5, m_nY, 60, 20, Qt::AlignLeft, QString( m_sInfo ) ); + } + else { - painter.drawText( m_x - 65, m_y, 60, 20, Qt::AlignRight, QString( m_info ) ); + painter.drawText( m_nX - 65, m_nY, 60, 20, Qt::AlignRight, QString( m_sInfo ) ); } }else { - if (m_x < 790){ - painter.drawText( m_x +5, m_y -20, 60, 20, Qt::AlignLeft, QString( m_info ) ); - }else + if (m_nX < 790){ + painter.drawText( m_nX +5, m_nY -20, 60, 20, Qt::AlignLeft, QString( m_sInfo ) ); + } + else { - painter.drawText( m_x - 65, m_y -20, 60, 20, Qt::AlignRight, QString( m_info ) ); + painter.drawText( m_nX - 65, m_nY -20, 60, 20, Qt::AlignRight, QString( m_sInfo ) ); } } @@ -178,12 +178,13 @@ void TargetWaveDisplay::paintLocatorEventTargetDisplay( int pos, bool updateposi) { - m_pupdateposi = updateposi; + m_UpdatePosition = updateposi; if ( !updateposi ){ - m_plocator = -1; - }else + m_nLocator = -1; + } + else { - m_plocator = pos; + m_nLocator = pos; } update(); } @@ -226,8 +227,8 @@ } ++nSamplePos; } - m_pPeakDatal[ i ] = nVall; - m_pPeakDatar[ i ] = nValr; + m_pPeakData_Left[ i ] = nVall; + m_pPeakData_Right[ i ] = nValr; } } @@ -239,62 +240,61 @@ void TargetWaveDisplay::mouseMoveEvent(QMouseEvent *ev) { int snapradius = 10; - int editType = HydrogenApp::get_instance()->getSampleEditor()->EditTypeComboBox->currentIndex(); - + int editType = HydrogenApp::get_instance()->getSampleEditor()->EditTypeComboBox->currentIndex(); ///edit volume points - if( editType == 0 ){ - m_pvmove = true; - + if( editType == 0 ){ + m_VMove = true; + if ( ev->x() <= 0 || ev->x() >= UI_WIDTH || ev->y() < 0 || ev->y() > UI_HEIGHT ){ update(); - m_pvmove = false; + m_VMove = false; return; } float info = (UI_HEIGHT - ev->y()) / (float)UI_HEIGHT; - m_info.setNum( info, 'g', 2 ); - m_x = ev->x(); - m_y = ev->y(); - + m_sInfo.setNum( info, 'g', 2 ); + m_nX = ev->x(); + m_nY = ev->y(); + for ( int i = 0; i < static_cast(__velocity.size()); i++){ if ( __velocity[i].frame >= ev->x() - snapradius && __velocity[i].frame <= ev->x() + snapradius ) { __velocity.erase( __velocity.begin() + i); - Sample::EnvelopePoint pt; - if ( i == 0 ){ - pt.frame = 0; - pt.value = ev->y(); - } else if ( i == static_cast(__velocity.size()) ) { - pt.frame = __velocity[i].frame; - pt.value = ev->y(); - - } else { - pt.frame = ev->x(); - pt.value = ev->y(); - } - __velocity.push_back( pt ); - sort( __velocity.begin(), __velocity.end(), Sample::EnvelopePoint::Comparator() ); - update(); - return; + Sample::EnvelopePoint pt; + if ( i == 0 ){ + pt.frame = 0; + pt.value = ev->y(); + } else if ( i == static_cast(__velocity.size()) ) { + pt.frame = __velocity[i].frame; + pt.value = ev->y(); + + } else { + pt.frame = ev->x(); + pt.value = ev->y(); + } + __velocity.push_back( pt ); + sort( __velocity.begin(), __velocity.end(), Sample::EnvelopePoint::Comparator() ); + update(); + return; }else { - m_pvmove = false; + m_VMove = false; } } - ///edit panorama points - }else if( editType == 1 ){ - m_pvmove = true; - + ///edit panorama points + }else if( editType == 1 ){ + m_VMove = true; + if ( ev->x() <= 0 || ev->x() >= UI_WIDTH || ev->y() < 0 || ev->y() > UI_HEIGHT ){ update(); - m_pvmove = false; + m_VMove = false; return; } float info = (UI_HEIGHT/2 - ev->y()) / (UI_HEIGHT/2.0); - m_info.setNum( info, 'g', 2 ); - m_x = ev->x(); - m_y = ev->y(); - + m_sInfo.setNum( info, 'g', 2 ); + m_nX = ev->x(); + m_nY = ev->y(); + for ( int i = 0; i < static_cast(__pan.size()); i++){ if ( __pan[i].frame >= ev->x() - snapradius && __pan[i].frame <= ev->x() + snapradius ) { __pan.erase( __pan.begin() + i); @@ -315,7 +315,7 @@ return; }else { - m_pvmove = false; + m_VMove = false; } } } @@ -328,95 +328,97 @@ void TargetWaveDisplay::mousePressEvent(QMouseEvent *ev) { - int snapradius = 6; - bool newpoint = true; + int SnapRadius = 6; + bool NewPoint = true; // add new point - int editType = HydrogenApp::get_instance()->getSampleEditor()->EditTypeComboBox->currentIndex(); + int EditType = HydrogenApp::get_instance()->getSampleEditor()->EditTypeComboBox->currentIndex(); ///edit volume points - if( editType == 0 ){ + if( EditType == 0 ){ + // test if there is already a point for ( int i = 0; i < static_cast(__velocity.size()); ++i){ - if ( __velocity[i].frame >= ev->x() - snapradius && __velocity[i].frame <= ev->x() + snapradius ){ - newpoint = false; + if ( __velocity[i].frame >= ev->x() - SnapRadius && __velocity[i].frame <= ev->x() + SnapRadius ){ + NewPoint = false; } } + int x = ev->x(); - int y = ev->y(); - if (ev->button() == Qt::LeftButton && !m_pvmove && newpoint){ + int y = ev->y(); + if (ev->button() == Qt::LeftButton && !m_VMove && NewPoint){ float info = (UI_HEIGHT - ev->y()) / (float)UI_HEIGHT; - m_info.setNum( info, 'g', 2 ); - m_x = ev->x(); - m_y = ev->y(); + m_sInfo.setNum( info, 'g', 2 ); + m_nX = ev->x(); + m_nY = ev->y(); if ( ev->y() <= 0 ) y = 0; if ( ev->y() >= UI_HEIGHT ) y = UI_HEIGHT; - if ( ev->x() <= snapradius ) x = snapradius; - if ( ev->x() >= UI_WIDTH-snapradius ) x = UI_WIDTH-snapradius; + if ( ev->x() <= SnapRadius ) x = SnapRadius; + if ( ev->x() >= UI_WIDTH-SnapRadius ) x = UI_WIDTH-SnapRadius; __velocity.push_back( new Sample::EnvelopePoint( x, y ) ); sort( __velocity.begin(), __velocity.end(), Sample::EnvelopePoint::Comparator() ); } - - + + //remove point - snapradius = 10; + SnapRadius = 10; if (ev->button() == Qt::RightButton ){ - + if ( ev->x() <= 0 || ev->x() >= UI_WIDTH ){ update(); return; } - m_info = ""; + m_sInfo = ""; for ( int i = 0; i < static_cast(__velocity.size()); i++){ - if ( __velocity[i].frame >= ev->x() - snapradius && __velocity[i].frame <= ev->x() + snapradius ){ + if ( __velocity[i].frame >= ev->x() - SnapRadius && __velocity[i].frame <= ev->x() + SnapRadius ){ if ( __velocity[i].frame == 0 || __velocity[i].frame == UI_WIDTH) return; __velocity.erase( __velocity.begin() + i); } - } + } } } ///edit panorama points - else if( editType == 1 ){ + else if( EditType == 1 ){ // test if there is already a point for ( int i = 0; i < static_cast(__pan.size()); ++i){ - if ( __pan[i].frame >= ev->x() - snapradius && __pan[i].frame <= ev->x() + snapradius ){ - newpoint = false; + if ( __pan[i].frame >= ev->x() - SnapRadius && __pan[i].frame <= ev->x() + SnapRadius ){ + NewPoint = false; } } int x = ev->x(); - int y = ev->y(); - if (ev->button() == Qt::LeftButton && !m_pvmove && newpoint){ + int y = ev->y(); + if (ev->button() == Qt::LeftButton && !m_VMove && NewPoint){ float info = (UI_HEIGHT/2 - ev->y()) / (UI_HEIGHT/2.0); - m_info.setNum( info, 'g', 2 ); - m_x = ev->x(); - m_y = ev->y(); + m_sInfo.setNum( info, 'g', 2 ); + m_nX = ev->x(); + m_nY = ev->y(); if ( ev->y() <= 0 ) y = 0; if ( ev->y() >= UI_HEIGHT ) y = UI_HEIGHT; - if ( ev->x() <= snapradius ) x = snapradius; - if ( ev->x() >= UI_WIDTH-snapradius ) x = UI_WIDTH-snapradius; + if ( ev->x() <= SnapRadius ) x = SnapRadius; + if ( ev->x() >= UI_WIDTH-SnapRadius ) x = UI_WIDTH-SnapRadius; __pan.push_back( new Sample::EnvelopePoint( x, y ) ); sort( __pan.begin(), __pan.end(), Sample::EnvelopePoint::Comparator() ); } - - + + //remove point - snapradius = 10; + SnapRadius = 10; if (ev->button() == Qt::RightButton ){ - + if ( ev->x() <= 0 || ev->x() >= UI_WIDTH ){ update(); return; } - m_info = ""; + m_sInfo = ""; for ( int i = 0; i < static_cast(__pan.size()); i++){ - if ( __pan[i].frame >= ev->x() - snapradius && __pan[i].frame <= ev->x() + snapradius ){ + if ( __pan[i].frame >= ev->x() - SnapRadius && __pan[i].frame <= ev->x() + SnapRadius ){ if ( __pan[i].frame == 0 || __pan[i].frame == UI_WIDTH) return; __pan.erase( __pan.begin() + i); } - } + } } } diff -Nru hydrogen-0.9.6.1/src/gui/src/SampleEditor/TargetWaveDisplay.h hydrogen-0.9.7/src/gui/src/SampleEditor/TargetWaveDisplay.h --- hydrogen-0.9.6.1/src/gui/src/SampleEditor/TargetWaveDisplay.h 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/SampleEditor/TargetWaveDisplay.h 2016-11-05 08:22:50.000000000 +0000 @@ -47,27 +47,33 @@ void updateDisplayPointer(); void paintLocatorEventTargetDisplay( int pos, bool last_event); void paintEvent(QPaintEvent *ev); - H2Core::Sample::PanEnvelope* get_pan() { return &__pan; } - H2Core::Sample::VelocityEnvelope* get_velocity() { return &__velocity; } + H2Core::Sample::PanEnvelope* get_pan() { return &__pan; } + H2Core::Sample::VelocityEnvelope* get_velocity() { return &__velocity; } private: - QPixmap m_background; + QPixmap m_Background; + QString m_sSampleName; - int *m_pPeakDatal; - int *m_pPeakDatar; - unsigned m_pSampleLength; - bool m_pvmove; - QString m_info; - int m_x; - int m_y; - int m_plocator; - bool m_pupdateposi; + QString m_sInfo; + + int m_nX; + int m_nY; + int m_nLocator; + + int *m_pPeakData_Left; + int *m_pPeakData_Right; + + unsigned m_nSampleLength; + + bool m_VMove; + bool m_UpdatePosition; + virtual void mouseMoveEvent(QMouseEvent *ev); virtual void mousePressEvent(QMouseEvent *ev); virtual void mouseReleaseEvent(QMouseEvent *ev); + H2Core::Sample::PanEnvelope __pan; H2Core::Sample::VelocityEnvelope __velocity; - }; diff -Nru hydrogen-0.9.6.1/src/gui/src/SongEditor/SongEditor.cpp hydrogen-0.9.7/src/gui/src/SongEditor/SongEditor.cpp --- hydrogen-0.9.6.1/src/gui/src/SongEditor/SongEditor.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/SongEditor/SongEditor.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -32,6 +32,8 @@ #include #include #include +#include +#include using namespace H2Core; #include "UndoActions.h" @@ -51,7 +53,9 @@ #include "../SongPropertiesDialog.h" #include "../Skin.h" #include "../VirtualPatternDialog.h" -#include + + + #ifdef WIN32 #include @@ -277,7 +281,7 @@ } pColumn->add( pPattern ); } - pSong->__is_modified = true; + pSong->set_is_modified( true ); AudioEngine::get_instance()->unlock(); m_bSequenceChanged = true; update(); @@ -308,7 +312,7 @@ break; } } - pSong->__is_modified = true; + pSong->set_is_modified( true ); AudioEngine::get_instance()->unlock(); m_bSequenceChanged = true; update(); @@ -590,7 +594,7 @@ } } - pEngine->getSong()->__is_modified = true; + pEngine->getSong()->set_is_modified( true ); AudioEngine::get_instance()->unlock(); m_bIsMoving = false; @@ -813,6 +817,60 @@ QPainter p( m_pSequencePixmap ); QColor patternColor( pStyle->m_songEditor_pattern1Color.getRed(), pStyle->m_songEditor_pattern1Color.getGreen(), pStyle->m_songEditor_pattern1Color.getBlue() ); + /* + * The following color modes are available: + * + * Fixed: One color. Argument: specified color + * Steps: User defined number of steps. + * Automatic: Steps = Number of pattern in song + */ + + int coloringMethod = pref->getColoringMethod(); + int coloringMethodAuxValue = pref->getColoringMethodAuxValue(); + int steps = 1; + + /* + * This coloring of the song editor "squares" is done using the hsv color model, + * see http://qt-project.org/doc/qt-4.8/qcolor.html#the-hsv-color-model for details. + * + * The default color of the cubes in rgb is 97,167,251. + * The hsv equivalent is 213,156,249. + */ + int hue = 213; + + Song* song = Hydrogen::get_instance()->getSong(); + PatternList *patList = song->get_pattern_list(); + + switch(coloringMethod) + { + case 0: + //Automatic + steps = patList->size(); + + if(steps == 0) + { + //beware of the division by zero.. + steps = 1; + } + + hue = ((number % steps) * (300 / steps) + 213) % 300; + patternColor.setHsv( hue , 156 , 249); + break; + case 1: + //Steps + steps = coloringMethodAuxValue; + hue = ((number % steps) * (300 / steps) + 213) % 300; + patternColor.setHsv( hue , 156, 249); + break; + case 2: + //Fixed color + hue = coloringMethodAuxValue; + patternColor.setHsv( hue , 156, 249); + break; + } + + + if (true == invertColour) { patternColor = patternColor.darker(200); }//if @@ -857,7 +915,7 @@ } pPatternGroupsVect->clear(); - song->__is_modified = true; + song->set_is_modified( true ); AudioEngine::get_instance()->unlock(); m_bSequenceChanged = true; update(); @@ -865,7 +923,7 @@ void SongEditor::updateEditorandSetTrue() { - Hydrogen::get_instance()->getSong()->__is_modified = true; + Hydrogen::get_instance()->getSong()->set_is_modified( true ); m_bSequenceChanged = true; update(); } @@ -932,11 +990,12 @@ update(); ///here we check the timeline && m_pSong->get_mode() == Song::SONG_MODE Hydrogen *engine = Hydrogen::get_instance(); + Timeline *pTimeline = engine->getTimeline(); if ( ( Preferences::get_instance()->getUseTimelineBpm() ) && ( engine->getSong()->get_mode() == Song::SONG_MODE ) ){ - for ( int i = 0; i < static_cast(engine->m_timelinevector.size()); i++){ - if ( ( engine->m_timelinevector[i].m_htimelinebeat == engine->getPatternPos() ) - && ( engine->getNewBpmJTM() != engine->m_timelinevector[i].m_htimelinebpm ) ){ - engine->setBPM( engine->m_timelinevector[i].m_htimelinebpm ); + for ( int i = 0; i < static_cast(pTimeline->m_timelinevector.size()); i++){ + if ( ( pTimeline->m_timelinevector[i].m_htimelinebeat == engine->getPatternPos() ) + && ( engine->getNewBpmJTM() != pTimeline->m_timelinevector[i].m_htimelinebpm ) ){ + engine->setBPM( pTimeline->m_timelinevector[i].m_htimelinebpm ); }//if }//for }//if @@ -975,8 +1034,8 @@ /// void SongEditorPatternList::togglePattern( int row ) { - Hydrogen *engine = Hydrogen::get_instance(); - engine->sequencer_setNextPattern( row, false, true ); + Hydrogen *pEngine = Hydrogen::get_instance(); + pEngine->sequencer_setNextPattern( row ); createBackground(); update(); } @@ -1017,7 +1076,6 @@ line->text(), patternBeingEdited->get_info(), patternBeingEdited->get_category(), nSelectedPattern ); HydrogenApp::get_instance()->m_undoStack->push( action ); } -// patternBeingEdited = NULL; } @@ -1106,12 +1164,7 @@ // Text bool bNext = false, bActive = false; -/* for (uint j = 0; j < pCurrentPatternList->size(); j++) { - if ( pPattern == pCurrentPatternList->get(j) ) { - bActive = true; - break; - } - }*/ + if ( pCurrentPatternList->index( pPattern ) != -1 ) bActive = true; if ( pEngine->getNextPatterns()->index( pPattern ) != -1 ) bNext = true; @@ -1127,7 +1180,6 @@ p.drawPixmap( QPoint( 5, text_y + 3 ), m_playingPattern_off_Pixmap ); } else if (bActive) { -// p.drawText( 5, text_y - 1 - m_nGridHeight, m_nWidth - 25, m_nGridHeight + 2, Qt::AlignVCenter, ">" ); //mark active pattern with triangular if( ! pref->patternModePlaysSelected() ){ @@ -1260,7 +1312,7 @@ pPatternList->replace( position, pNewPattern ); engine->setSelectedPatternNumber( position ); - song->__is_modified = true; + song->set_is_modified( true ); createBackground(); HydrogenApp::get_instance()->getSongEditorPanel()->updateAll(); } @@ -1344,7 +1396,7 @@ pattern->set_name( newPatternName ); pattern->set_info( newPatternInfo ); pattern->set_category( newPatternCategory ); - song->__is_modified = true; + song->set_is_modified( true ); EventQueue::get_instance()->push_event( EVENT_SELECTED_PATTERN_CHANGED, -1 ); createBackground(); update(); @@ -1359,7 +1411,7 @@ H2Core::Pattern *pattern = patternList->get( patternNr ); pattern->set_name( oldPatternName ); pattern->set_category( oldPatternCategory ); - song->__is_modified = true; + song->set_is_modified( true ); EventQueue::get_instance()->push_event( EVENT_SELECTED_PATTERN_CHANGED, -1 ); createBackground(); update(); @@ -1395,7 +1447,7 @@ Hydrogen *pEngine = Hydrogen::get_instance(); if ( pEngine->getSong()->get_mode() == Song::PATTERN_MODE ) { - pEngine->sequencer_setNextPattern( -1, false, false ); // reimposto il prossimo pattern a NULL, altrimenti viene scelto quello che sto distruggendo ora... + pEngine->sequencer_setNextPattern( -1 ); // reimposto il prossimo pattern a NULL, altrimenti viene scelto quello che sto distruggendo ora... } Song *song = pEngine->getSong(); @@ -1422,7 +1474,7 @@ //~save pattern end H2Core::Pattern *pattern = pSongPatternList->get( patternPosition ); - INFOLOG( QString("[patternPopup_delete] Delete pattern: %1 @%2").arg(pattern->get_name()).arg( (long)pattern ) ); + INFOLOG( QString("[patternPopup_delete] Delete pattern: %1 @%2").arg(pattern->get_name()).arg( (long long)pattern ) ); pSongPatternList->del(pattern); vector *patternGroupVect = song->get_pattern_group_vector(); @@ -1477,7 +1529,7 @@ pSongPatternList->flattened_virtual_patterns_compute(); delete pattern; - song->__is_modified = true; + song->set_is_modified( true ); HydrogenApp::get_instance()->getSongEditorPanel()->updateAll(); } @@ -1506,7 +1558,7 @@ } pPatternList->replace( tmpselectedpatternpos, pNewPattern ); - song->__is_modified = true; + song->set_is_modified( true ); createBackground(); HydrogenApp::get_instance()->getSongEditorPanel()->updateAll(); EventQueue::get_instance()->push_event( EVENT_SELECTED_PATTERN_CHANGED, -1 ); @@ -1578,7 +1630,7 @@ pPatternList->replace( patternposition, pNewPattern ); engine->setSelectedPatternNumber( patternposition ); - song->__is_modified = true; + song->set_is_modified( true ); createBackground(); HydrogenApp::get_instance()->getSongEditorPanel()->updateAll(); EventQueue::get_instance()->push_event( EVENT_SELECTED_PATTERN_CHANGED, -1 ); @@ -1676,7 +1728,7 @@ // Update - pSong->__is_modified = true; + pSong->set_is_modified( true ); HydrogenApp::get_instance()->getSongEditorPanel()->updateAll(); } @@ -1694,7 +1746,7 @@ { QString sText = event->mimeData()->text(); - if( sText.startsWith("Songs:") || sText.startsWith("move instrument:") ){ + if( sText.startsWith("Songs:") || sText.startsWith("move instrument:") || sText.startsWith("importInstrument:")){ event->acceptProposedAction(); return; } @@ -1712,11 +1764,9 @@ SE_movePatternListItemAction *action = new SE_movePatternListItemAction( nSourcePattern , nTargetPattern ) ; HydrogenApp::get_instance()->m_undoStack->push( action ); - //movePatternLine( nSourcePattern , nTargetPattern ); event->acceptProposedAction(); }else { - QStringList tokens = sText.split( "::" ); QString sPatternName = tokens.at( 1 ); @@ -1770,7 +1820,7 @@ } engine->setSelectedPatternNumber( nTargetPattern ); HydrogenApp::get_instance()->getSongEditorPanel()->updateAll(); - pSong->__is_modified = true; + pSong->set_is_modified( true ); } @@ -1868,6 +1918,8 @@ m_pBackgroundPixmap->fill( backgroundColor ); Preferences *pref = Preferences::get_instance(); + Timeline * pTimeline = Hydrogen::get_instance()->getTimeline(); + QString family = pref->getApplicationFontFamily(); int size = pref->getApplicationFontPointSize(); QFont font( family, size ); @@ -1879,8 +1931,8 @@ char tmp[10]; for (uint i = 0; i < m_nMaxPatternSequence + 1; i++) { uint x = 10 + i * m_nGridWidth; - for ( int t = 0; t < static_cast(Hydrogen::get_instance()->m_timelinetagvector.size()); t++){ - if ( Hydrogen::get_instance()->m_timelinetagvector[t].m_htimelinetagbeat == i ) { + for ( int t = 0; t < static_cast(pTimeline->m_timelinetagvector.size()); t++){ + if ( pTimeline->m_timelinetagvector[t].m_htimelinetagbeat == i ) { p.setPen( Qt::cyan ); p.drawText( x - m_nGridWidth / 2 , 12, m_nGridWidth * 2, height() , Qt::AlignCenter, "T"); } @@ -1913,9 +1965,9 @@ uint x = 10 + i * m_nGridWidth; p.drawLine( x, 2, x, 5 ); p.drawLine( x, 19, x, 20 ); - for ( int t = 0; t < static_cast(Hydrogen::get_instance()->m_timelinevector.size()); t++){ - if ( Hydrogen::get_instance()->m_timelinevector[t].m_htimelinebeat == i ) { - sprintf( tempo, "%d", ((int)Hydrogen::get_instance()->m_timelinevector[t].m_htimelinebpm) ); + for ( int t = 0; t < static_cast(pTimeline->m_timelinevector.size()); t++){ + if ( pTimeline->m_timelinevector[t].m_htimelinebeat == i ) { + sprintf( tempo, "%d", ((int)pTimeline->m_timelinevector[t].m_htimelinebpm) ); p.drawText( x - m_nGridWidth, 3, m_nGridWidth * 2, height() / 2 - 5, Qt::AlignCenter, tempo ); } } @@ -2088,25 +2140,26 @@ void SongEditorPositionRuler::editTimeLineAction( int newPosition, float newBpm ) { Hydrogen* engine = Hydrogen::get_instance(); + Timeline* pTimeline = engine->getTimeline(); //erase the value to set the new value - if( engine->m_timelinevector.size() >= 1 ){ - for ( int t = 0; t < engine->m_timelinevector.size(); t++){ - if ( engine->m_timelinevector[t].m_htimelinebeat == newPosition -1 ) { - engine->m_timelinevector.erase( engine->m_timelinevector.begin() + t); + if( pTimeline->m_timelinevector.size() >= 1 ){ + for ( int t = 0; t < pTimeline->m_timelinevector.size(); t++){ + if ( pTimeline->m_timelinevector[t].m_htimelinebeat == newPosition -1 ) { + pTimeline->m_timelinevector.erase( pTimeline->m_timelinevector.begin() + t); } } } - Hydrogen::HTimelineVector tlvector; + Timeline::HTimelineVector tlvector; tlvector.m_htimelinebeat = newPosition -1 ; if( newBpm < 30.0 ) newBpm = 30.0; if( newBpm > 500.0 ) newBpm = 500.0; tlvector.m_htimelinebpm = newBpm; - engine->m_timelinevector.push_back( tlvector ); - engine->sortTimelineVector(); + pTimeline->m_timelinevector.push_back( tlvector ); + pTimeline->sortTimelineVector(); createBackground(); } @@ -2115,11 +2168,13 @@ void SongEditorPositionRuler::deleteTimeLinePosition( int position ) { Hydrogen* engine = Hydrogen::get_instance(); + Timeline* pTimeline = engine->getTimeline(); + //erase the value to set the new value - if( engine->m_timelinevector.size() >= 1 ){ - for ( int t = 0; t < engine->m_timelinevector.size(); t++){ - if ( engine->m_timelinevector[t].m_htimelinebeat == position -1 ) { - engine->m_timelinevector.erase( engine->m_timelinevector.begin() + t); + if( pTimeline->m_timelinevector.size() >= 1 ){ + for ( int t = 0; t < pTimeline->m_timelinevector.size(); t++){ + if ( pTimeline->m_timelinevector[t].m_htimelinebeat == position -1 ) { + pTimeline->m_timelinevector.erase( pTimeline->m_timelinevector.begin() + t); } } } @@ -2130,21 +2185,22 @@ void SongEditorPositionRuler::editTagAction( QString text, int position, QString textToReplace) { Hydrogen* engine = Hydrogen::get_instance(); + Timeline* pTimeline = engine->getTimeline(); //check vector for old entries and remove them. - for( int i = 0; i < engine->m_timelinetagvector.size(); ++i ){ - if( ( engine->m_timelinetagvector[i].m_htimelinetag == textToReplace ) && - ( engine->m_timelinetagvector[i].m_htimelinetagbeat == position ) ){ + for( int i = 0; i < pTimeline->m_timelinetagvector.size(); ++i ){ + if( ( pTimeline->m_timelinetagvector[i].m_htimelinetag == textToReplace ) && + ( pTimeline->m_timelinetagvector[i].m_htimelinetagbeat == position ) ){ - engine->m_timelinetagvector.erase( engine->m_timelinetagvector.begin() + i ); + pTimeline->m_timelinetagvector.erase( pTimeline->m_timelinetagvector.begin() + i ); break; } } - Hydrogen::HTimelineTagVector tlvector; + Timeline::HTimelineTagVector tlvector; tlvector.m_htimelinetagbeat = position; tlvector.m_htimelinetag = text; - engine->m_timelinetagvector.push_back( tlvector ); - engine->sortTimelineTagVector(); + pTimeline->m_timelinetagvector.push_back( tlvector ); + pTimeline->sortTimelineTagVector(); createBackground(); } @@ -2152,14 +2208,16 @@ { Hydrogen* engine = Hydrogen::get_instance(); - for( int i = 0; i < engine->m_timelinetagvector.size(); ++i ){ - if( ( engine->m_timelinetagvector[i].m_htimelinetag == text ) && - ( engine->m_timelinetagvector[i].m_htimelinetagbeat == position ) ){ + Timeline* pTimeline = engine->getTimeline(); + + for( int i = 0; i < pTimeline->m_timelinetagvector.size(); ++i ){ + if( ( pTimeline->m_timelinetagvector[i].m_htimelinetag == text ) && + ( pTimeline->m_timelinetagvector[i].m_htimelinetagbeat == position ) ){ - engine->m_timelinetagvector.erase( engine->m_timelinetagvector.begin() + i ); + pTimeline->m_timelinetagvector.erase( pTimeline->m_timelinetagvector.begin() + i ); break; } } - engine->sortTimelineTagVector(); + pTimeline->sortTimelineTagVector(); createBackground(); } diff -Nru hydrogen-0.9.6.1/src/gui/src/SongEditor/SongEditorPanelBpmWidget.cpp hydrogen-0.9.7/src/gui/src/SongEditor/SongEditorPanelBpmWidget.cpp --- hydrogen-0.9.6.1/src/gui/src/SongEditor/SongEditorPanelBpmWidget.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/SongEditor/SongEditorPanelBpmWidget.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -28,6 +28,7 @@ #include "SongEditorPanel.h" #include "SongEditor.h" #include +#include namespace H2Core { @@ -48,7 +49,8 @@ deleteBtn->setEnabled ( false ); Hydrogen* engine = Hydrogen::get_instance(); - std::vector timelineVector = engine->m_timelinevector; + Timeline* pTimeline = engine->getTimeline(); + std::vector timelineVector = pTimeline->m_timelinevector; //restore the bpm value if( timelineVector.size() > 0 ){ @@ -90,12 +92,14 @@ void SongEditorPanelBpmWidget::on_okBtn_clicked() { Hydrogen* engine = Hydrogen::get_instance(); + Timeline* pTimeline = engine->getTimeline(); + float oldBpm = -1.0; //search for an old entry - if( engine->m_timelinevector.size() >= 1 ){ - for ( int t = 0; t < engine->m_timelinevector.size(); t++){ - if ( engine->m_timelinevector[t].m_htimelinebeat == ( QString( lineEditBeat->text() ).toInt() ) -1 ) { - oldBpm = engine->m_timelinevector[t].m_htimelinebpm; + if( pTimeline->m_timelinevector.size() >= 1 ){ + for ( int t = 0; t < pTimeline->m_timelinevector.size(); t++){ + if ( pTimeline->m_timelinevector[t].m_htimelinebeat == ( QString( lineEditBeat->text() ).toInt() ) -1 ) { + oldBpm = pTimeline->m_timelinevector[t].m_htimelinebpm; } } } @@ -110,12 +114,14 @@ void SongEditorPanelBpmWidget::on_deleteBtn_clicked() { Hydrogen* engine = Hydrogen::get_instance(); + Timeline* pTimeline = engine->getTimeline(); + float oldBpm = -1.0; //search for an old entry - if( engine->m_timelinevector.size() >= 1 ){ - for ( int t = 0; t < engine->m_timelinevector.size(); t++){ - if ( engine->m_timelinevector[t].m_htimelinebeat == ( QString( lineEditBeat->text() ).toInt() ) -1 ) { - oldBpm = engine->m_timelinevector[t].m_htimelinebpm; + if( pTimeline->m_timelinevector.size() >= 1 ){ + for ( int t = 0; t < pTimeline->m_timelinevector.size(); t++){ + if ( pTimeline->m_timelinevector[t].m_htimelinebeat == ( QString( lineEditBeat->text() ).toInt() ) -1 ) { + oldBpm = pTimeline->m_timelinevector[t].m_htimelinebpm; } } } diff -Nru hydrogen-0.9.6.1/src/gui/src/SongEditor/SongEditorPanel.cpp hydrogen-0.9.7/src/gui/src/SongEditor/SongEditorPanel.cpp --- hydrogen-0.9.6.1/src/gui/src/SongEditor/SongEditorPanel.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/SongEditor/SongEditorPanel.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -383,7 +383,7 @@ Song *song = engine->getSong(); PatternList *patternList = song->get_pattern_list(); patternList->insert( idx, new Pattern( newPatternName, newPatternInfo, newPatternCategory ) ); - song->__is_modified = true; + song->set_is_modified( true ); updateAll(); } @@ -396,7 +396,7 @@ if( idx == engine->getSelectedPatternNumber() ) engine->setSelectedPatternNumber( idx -1 ); patternList->del( pattern ); delete pattern; - song->__is_modified = true; + song->set_is_modified( true ); updateAll(); } diff -Nru hydrogen-0.9.6.1/src/gui/src/SongEditor/SongEditorPanelTagWidget.cpp hydrogen-0.9.7/src/gui/src/SongEditor/SongEditorPanelTagWidget.cpp --- hydrogen-0.9.6.1/src/gui/src/SongEditor/SongEditorPanelTagWidget.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/SongEditor/SongEditorPanelTagWidget.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -27,7 +27,9 @@ #include "SongEditorPanelTagWidget.h" #include "SongEditorPanel.h" #include "SongEditor.h" + #include +#include namespace H2Core { @@ -62,6 +64,7 @@ void SongEditorPanelTagWidget::createTheTagTableWidget() { Hydrogen* engine = Hydrogen::get_instance(); + Timeline* pTimeline = engine->getTimeline(); int patterngroupvectorsize; patterngroupvectorsize = engine->getSong()->get_pattern_group_vector()->size(); @@ -70,7 +73,7 @@ tagTableWidget->insertRow( i ); } - std::vector timelineTagVector = engine->m_timelinetagvector; + std::vector timelineTagVector = pTimeline->m_timelinetagvector; //read the tag vector and fill all tags into items if( timelineTagVector.size() > 0 ){ @@ -124,18 +127,20 @@ void SongEditorPanelTagWidget::on_okBtn_clicked() { Hydrogen* engine = Hydrogen::get_instance(); + Timeline* pTimeline = engine->getTimeline(); + int patterngroupvectorsize; patterngroupvectorsize = engine->getSong()->get_pattern_group_vector()->size(); //oldText list contains all old item values. we need them for undo an item QStringList oldText; - if(engine->m_timelinetagvector.size() > 0){ + if(pTimeline->m_timelinetagvector.size() > 0){ for (int i = 0; i < patterngroupvectorsize; i++){ oldText << ""; } - for(int i = 0; i < engine->m_timelinetagvector.size(); ++i){ - oldText.replace(engine->m_timelinetagvector[i].m_htimelinetagbeat , engine->m_timelinetagvector[i].m_htimelinetag); + for(int i = 0; i < pTimeline->m_timelinetagvector.size(); ++i){ + oldText.replace(pTimeline->m_timelinetagvector[i].m_htimelinetagbeat , pTimeline->m_timelinetagvector[i].m_htimelinetag); } } diff -Nru hydrogen-0.9.6.1/src/gui/src/SongEditor/SongEditorPanelTagWidget_UI.ui hydrogen-0.9.7/src/gui/src/SongEditor/SongEditorPanelTagWidget_UI.ui --- hydrogen-0.9.6.1/src/gui/src/SongEditor/SongEditorPanelTagWidget_UI.ui 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/SongEditor/SongEditorPanelTagWidget_UI.ui 2016-11-05 08:22:50.000000000 +0000 @@ -19,6 +19,12 @@ QAbstractItemView::InternalMove + + 100 + + + true + Tag diff -Nru hydrogen-0.9.6.1/src/gui/src/SoundLibrary/SoundLibraryDatastructures.cpp hydrogen-0.9.7/src/gui/src/SoundLibrary/SoundLibraryDatastructures.cpp --- hydrogen-0.9.6.1/src/gui/src/SoundLibrary/SoundLibraryDatastructures.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/SoundLibrary/SoundLibraryDatastructures.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -177,6 +177,9 @@ setLicense( LocalFileMng::readXmlString( rootNode,"license", "undefined license" ) ); setName( LocalFileMng::readXmlString( rootNode,"name", "" ) ); setInfo( LocalFileMng::readXmlString( rootNode,"info", "No information available." ) ); + setImage( LocalFileMng::readXmlString( rootNode,"image", "" ) ); + setImageLicense( LocalFileMng::readXmlString( rootNode,"imageLicense", "undefined license" ) ); + //setCategory( LocalFileMng::readXmlString( rootNode,"category", "" ) ); } diff -Nru hydrogen-0.9.6.1/src/gui/src/SoundLibrary/SoundLibraryDatastructures.h hydrogen-0.9.7/src/gui/src/SoundLibrary/SoundLibraryDatastructures.h --- hydrogen-0.9.6.1/src/gui/src/SoundLibrary/SoundLibraryDatastructures.h 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/SoundLibrary/SoundLibraryDatastructures.h 2016-11-05 08:22:50.000000000 +0000 @@ -97,6 +97,14 @@ return m_sLicense; } + QString getImage() const { + return m_sImage; + } + + QString getImageLicense() const { + return m_sImageLicense; + } + void setName( const QString& name ){ m_sName = name; } @@ -125,6 +133,14 @@ m_sLicense = license; } + void setImage( const QString& image ){ + m_sImage = image; + } + + void setImageLicense( const QString& imageLicense ){ + m_sImageLicense = imageLicense; + } + void setPath( const QString& path){ m_sPath = path; } @@ -142,6 +158,8 @@ QString m_sCategory; QString m_sType; QString m_sLicense; + QString m_sImage; + QString m_sImageLicense; QString m_sPath; }; diff -Nru hydrogen-0.9.6.1/src/gui/src/SoundLibrary/SoundLibraryExportDialog.cpp hydrogen-0.9.7/src/gui/src/SoundLibrary/SoundLibraryExportDialog.cpp --- hydrogen-0.9.6.1/src/gui/src/SoundLibrary/SoundLibraryExportDialog.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/SoundLibrary/SoundLibraryExportDialog.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -30,6 +30,10 @@ #include #include #include +#include +#include +#include +#include #include #include #include @@ -81,6 +85,34 @@ QString drumkitDir = Filesystem::drumkit_dir_search( drumkitName ); QString saveDir = drumkitPathTxt->text(); + Preferences *pref = Preferences::get_instance(); + QDir qdTempFolder( pref->getTmpDirectory() ); + bool TmpFileCreated = false; + + + int componentID = -1; + Drumkit* info; + if( versionList->currentIndex() == 1 ) { + for (uint i = 0; i < drumkitInfoList.size(); i++ ) { + info = drumkitInfoList[i]; + if( info->get_name().compare( drumkitName ) == 0 ) { + QString temporaryDrumkitXML = qdTempFolder.filePath( "drumkit.xml" ); + INFOLOG( "[ExportSoundLibrary]" ); + INFOLOG( "Saving temporary file into: " + temporaryDrumkitXML ); + TmpFileCreated = true; + for (std::vector::iterator it = info->get_components()->begin() ; it != info->get_components()->end(); ++it) { + DrumkitComponent* pComponent = *it; + if( pComponent->get_name().compare( componentList->currentText() ) == 0) { + componentID = pComponent->get_id(); + break; + } + } + info->save_file( temporaryDrumkitXML, true, componentID ); + break; + } + } + } + #if defined(H2CORE_HAVE_LIBARCHIVE) QString fullDir = drumkitDir + "/" + drumkitName; QDir sourceDir(fullDir); @@ -97,6 +129,7 @@ int len; int fd; + a = archive_write_new(); #if ARCHIVE_VERSION_NUMBER < 3000000 @@ -110,6 +143,37 @@ for (int i = 0; i < filesList.size(); i++) { QString filename = fullDir + "/" + filesList.at(i); QString targetFilename = drumkitName + "/" + filesList.at(i); + + if( versionList->currentIndex() == 1 ) { + if( filesList.at(i).compare( QString("drumkit.xml") ) == 0 ) { + filename = qdTempFolder.filePath( "drumkit.xml" ); + } + else { + bool bFoundFileInRightComponent = false; + for( int j = 0; j < info->get_instruments()->size() ; j++){ + InstrumentList instrList = info->get_instruments(); + Instrument* instr = instrList[j]; + for (std::vector::iterator it = instr->get_components()->begin() ; it != instr->get_components()->end(); ++it) { + InstrumentComponent* component = *it; + if( component->get_drumkit_componentID() == componentID ){ + for( int n = 0; n < MAX_LAYERS; n++ ) { + InstrumentLayer* layer = component->get_layer( n ); + if( layer ) { + if( layer->get_sample()->get_filename().compare(filesList.at(i)) == 0 ) { + bFoundFileInRightComponent = true; + break; + } + } + } + } + } + } + if( !bFoundFileInRightComponent ) + continue; + } + } + + stat(filename.toUtf8().constData(), &st); entry = archive_entry_new(); archive_entry_set_pathname(entry, targetFilename.toUtf8().constData()); @@ -139,8 +203,43 @@ QApplication::restoreOverrideCursor(); QMessageBox::information( this, "Hydrogen", "Drumkit exported." ); #elif !defined(WIN32) - QString cmd = QString( "cd " ) + drumkitDir + "; tar czf \"" + saveDir + "/" + drumkitName + ".h2drumkit\" -- \"" + drumkitName + "\""; - int ret = system( cmd.toLocal8Bit() ); + + + if(TmpFileCreated) + { + /* + * If a temporary drumkit.xml has been created: + * 1. move the original drumkit.xml to drumkit_backup.xml + * 2. copy the temporary file to drumkitDir/drumkit.xml + * 3. export the drumkit + * 4. move the drumkit_backup.xml to drumkit.xml + */ + + int ret = 0; + + //1. + QString cmd = QString( "cd " ) + drumkitDir + "; " + "cp " + drumkitName + "/drumkit.xml " + drumkitName + "/drumkit_097.xml"; + ret = system( cmd.toLocal8Bit() ); + + + //2. + cmd = QString( "cd " ) + drumkitDir + "; " + "mv " + qdTempFolder.filePath( "drumkit.xml" ) + " " + drumkitName + "/drumkit.xml"; + ret = system( cmd.toLocal8Bit() ); + + //3. + cmd = QString( "cd " ) + drumkitDir + ";" + "tar czf \"" + saveDir + "/" + drumkitName + ".h2drumkit\" -- \"" + drumkitName + "\""; + ret = system( cmd.toLocal8Bit() ); + + //4. + cmd = QString( "cd " ) + drumkitDir + "; " + "mv " + drumkitName + "/drumkit_097.xml " + drumkitName + "/drumkit.xml"; + ret = system( cmd.toLocal8Bit() ); + + } else { + QString cmd = QString( "cd " ) + drumkitDir + ";" + "tar czf \"" + saveDir + "/" + drumkitName + ".h2drumkit\" -- \"" + drumkitName + "\""; + int ret = system( cmd.toLocal8Bit() ); + } + + QApplication::restoreOverrideCursor(); QMessageBox::information( this, "Hydrogen", "Drumkit exported." ); @@ -175,6 +274,32 @@ } } +void SoundLibraryExportDialog::on_cancelBtn_clicked() +{ + accept(); +} + +void SoundLibraryExportDialog::on_drumkitList_currentIndexChanged( QString str ) +{ + componentList->clear(); + + QStringList p_compoList = kit_components[str]; + + for (QStringList::iterator it = p_compoList.begin() ; it != p_compoList.end(); ++it) { + QString p_compoName = *it; + + componentList->addItem( p_compoName ); + } +} + +void SoundLibraryExportDialog::on_versionList_currentIndexChanged( int index ) +{ + if( index == 0 ) + componentList->setEnabled( false ); + else if( index == 1 ) + componentList->setEnabled( true ); +} + void SoundLibraryExportDialog::updateDrumkitList() { INFOLOG( "[updateDrumkitList]" ); @@ -194,6 +319,12 @@ if (info) { drumkitInfoList.push_back( info ); drumkitList->addItem( info->get_name() ); + QStringList p_components; + for (std::vector::iterator it = info->get_components()->begin() ; it != info->get_components()->end(); ++it) { + DrumkitComponent* p_compo = *it; + p_components.append(p_compo->get_name()); + } + kit_components[info->get_name()] = p_components; } } @@ -204,6 +335,12 @@ if (info) { drumkitInfoList.push_back( info ); drumkitList->addItem( info->get_name() ); + QStringList p_components; + for (std::vector::iterator it = info->get_components()->begin() ; it != info->get_components()->end(); ++it) { + DrumkitComponent* p_compo = *it; + p_components.append(p_compo->get_name()); + } + kit_components[info->get_name()] = p_components; } } @@ -213,8 +350,13 @@ */ int index = drumkitList->findText( preselectedKit ); - if ( index >= 0) + if ( index >= 0) { drumkitList->setCurrentIndex( index ); - else + } + else { drumkitList->setCurrentIndex( 0 ); + } + + on_drumkitList_currentIndexChanged( drumkitList->currentText() ); + on_versionList_currentIndexChanged( 0 ); } diff -Nru hydrogen-0.9.6.1/src/gui/src/SoundLibrary/SoundLibraryExportDialog.h hydrogen-0.9.7/src/gui/src/SoundLibrary/SoundLibraryExportDialog.h --- hydrogen-0.9.6.1/src/gui/src/SoundLibrary/SoundLibraryExportDialog.h 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/SoundLibrary/SoundLibraryExportDialog.h 2016-11-05 08:22:50.000000000 +0000 @@ -45,11 +45,15 @@ private slots: void on_exportBtn_clicked(); void on_browseBtn_clicked(); + void on_cancelBtn_clicked(); + void on_versionList_currentIndexChanged( int index ); + void on_drumkitList_currentIndexChanged( QString str ); void on_drumkitPathTxt_textChanged( QString str ); void updateDrumkitList(); private: std::vector drumkitInfoList; QString preselectedKit; + QHash kit_components; }; diff -Nru hydrogen-0.9.6.1/src/gui/src/SoundLibrary/SoundLibraryExportDialog_UI.ui hydrogen-0.9.7/src/gui/src/SoundLibrary/SoundLibraryExportDialog_UI.ui --- hydrogen-0.9.6.1/src/gui/src/SoundLibrary/SoundLibraryExportDialog_UI.ui 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/SoundLibrary/SoundLibraryExportDialog_UI.ui 2016-11-05 08:22:50.000000000 +0000 @@ -1,71 +1,199 @@ - + + SoundLibraryExportDialog_UI - - + + 0 0 - 396 - 87 + 503 + 281 - + Dialog - - + + - 290 - 10 - 100 - 24 + 10 + 120 + 481 + 101 - - Browse - - - false + + Drumkit + + + + 100 + 20 + 371 + 28 + + + + + + + 100 + 60 + 371 + 28 + + + + + + + 10 + 20 + 81 + 31 + + + + Drumkit + + + + + + 10 + 60 + 81 + 31 + + + + Component + + - - + + - 20 - 10 - 251 - 28 + 10 + 9 + 481 + 101 - - - - - 20 - 50 - 251 - 28 - + + Export + + + + 10 + 20 + 81 + 31 + + + + Path + + + + + + 10 + 60 + 81 + 31 + + + + Version + + + + + + 100 + 20 + 271 + 28 + + + + + + + 380 + 20 + 85 + 27 + + + + Browse... + + + false + + + + + + 100 + 60 + 371 + 28 + + + + + 0.9.7 and higher + + + + + 0.9.6 and lower + + + - - - false - - + + - 290 - 50 - 100 - 24 + 170 + 240 + 178 + 29 - - Export - - - false - + + + + + false + + + Export + + + false + + + + + + + true + + + Cancel + + + false + + + + diff -Nru hydrogen-0.9.6.1/src/gui/src/SoundLibrary/SoundLibraryImportDialog.cpp hydrogen-0.9.7/src/gui/src/SoundLibrary/SoundLibraryImportDialog.cpp --- hydrogen-0.9.6.1/src/gui/src/SoundLibrary/SoundLibraryImportDialog.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/SoundLibrary/SoundLibraryImportDialog.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -108,12 +108,16 @@ void SoundLibraryImportDialog::onRepositoryComboBoxIndexChanged(int i) { UNUSED(i); - QString cacheFile = getCachedFilename(); - if( !H2Core::Filesystem::file_exists( cacheFile ) ) + + if(!repositoryCombo->currentText().isEmpty()) { - SoundLibraryImportDialog::on_UpdateListBtn_clicked(); + QString cacheFile = getCachedFilename(); + if( !H2Core::Filesystem::file_exists( cacheFile, true ) ) + { + SoundLibraryImportDialog::on_UpdateListBtn_clicked(); + } + reloadRepositoryData(); } - reloadRepositoryData(); } /// @@ -126,6 +130,25 @@ updateRepositoryCombo(); } +void SoundLibraryImportDialog::clearImageCache() +{ + // Note: After a kit is installed the list refreshes and this gets called to + // clear the image cache - maybe we want to keep the cache in this case? + QString cacheDir = H2Core::Filesystem::repositories_cache_dir() ; + INFOLOG("Deleting cached image files from " + cacheDir.toLocal8Bit() ); + + QDir dir( cacheDir ); + dir.setNameFilters(QStringList() << "*.png"); + dir.setFilter(QDir::Files); + foreach(QString dirFile, dir.entryList()) + { + if ( !dir.remove(dirFile) ) + { + WARNINGLOG("Error removing image file(s) from cache."); + } + } +} + QString SoundLibraryImportDialog::getCachedFilename() { QString cacheDir = H2Core::Filesystem::repositories_cache_dir(); @@ -134,6 +157,15 @@ return cacheFile; } +QString SoundLibraryImportDialog::getCachedImageFilename() +{ + QString cacheDir = H2Core::Filesystem::repositories_cache_dir(); + QString kitNameMd5 = QString(QCryptographicHash::hash(( SoundLibraryNameLbl->text().toLatin1() ),QCryptographicHash::Md5).toHex()); + QString cacheFile = cacheDir + "/" + kitNameMd5 + ".png"; + return cacheFile; +} + + void SoundLibraryImportDialog::writeCachedData(const QString& fileName, const QString& data) { if( data.isEmpty() ) @@ -154,6 +186,22 @@ outFile.close(); } +void SoundLibraryImportDialog::writeCachedImage( const QString& imageFile, QPixmap& pixmap ) +{ + QString cacheFile = getCachedImageFilename() ; + + QFile outFile( cacheFile ); + if( !outFile.open( QIODevice::WriteOnly ) ) + { + ERRORLOG( "Failed to open file for writing repository image cache." ); + return; + } + + pixmap.save(&outFile); + + outFile.close(); +} + QString SoundLibraryImportDialog::readCachedData(const QString& fileName) { QString content; @@ -177,6 +225,20 @@ return content; } +QString SoundLibraryImportDialog::readCachedImage( const QString& imageFile ) +{ + QString cacheFile = getCachedImageFilename() ; + + QFile file( cacheFile ); + if( !file.exists() ) + { + // no image in cache, just return NULL + return NULL; + } + + return cacheFile; +} + void SoundLibraryImportDialog::reloadRepositoryData() { QString sDrumkitXML; @@ -235,6 +297,17 @@ soundLibInfo.setLicense( licenseNode.text() ); } + QDomElement imageNode = drumkitNode.firstChildElement( "image" ); + if ( !imageNode.isNull() ) { + soundLibInfo.setImage( imageNode.text() ); + } + + QDomElement imageLicenseNode = drumkitNode.firstChildElement( "imageLicense" ); + if ( !imageLicenseNode.isNull() ) { + soundLibInfo.setImageLicense( imageLicenseNode.text() ); + } + + m_soundLibraryList.push_back( soundLibInfo ); } } @@ -263,7 +336,7 @@ * * CACHE_DIR * +-----repositories - * +-----serverlist_$(md5(SERVER_NAME)) + * +-----serverlist_$(md5(SERVER_NAME)) */ @@ -323,6 +396,10 @@ pDrumkitItem->setText( 1, trUtf8( "New" ) ); } } + + // Also clear out the image cache + clearImageCache(); + } @@ -356,7 +433,38 @@ return false; } +void SoundLibraryImportDialog::loadImage(QString img ) +{ + QPixmap pixmap; + pixmap.load( img ) ; + + writeCachedImage( drumkitImageLabel->text(), pixmap ); + showImage( pixmap ); +} + +void SoundLibraryImportDialog::showImage( QPixmap pixmap ) +{ + int x = (int) drumkitImageLabel->size().width(); + int y = drumkitImageLabel->size().height(); + float labelAspect = (float) x / y; + float imageAspect = (float) pixmap.width() / pixmap.height(); + if ( ( x < pixmap.width() ) || ( y < pixmap.height() ) ) + { + if ( labelAspect >= imageAspect ) + { + // image is taller or the same as label frame + pixmap = pixmap.scaledToHeight( y ); + } + else + { + // image is wider than label frame + pixmap = pixmap.scaledToWidth( x ); + } + } + drumkitImageLabel->setPixmap( pixmap ); // TODO: Check if valid! + +} void SoundLibraryImportDialog::soundLibraryItemChanged( QTreeWidgetItem* current, QTreeWidgetItem* previous ) @@ -381,9 +489,81 @@ AuthorLbl->setText( trUtf8( "Author: %1" ).arg( info.getAuthor() ) ); - LicenseLbl->setText( trUtf8( "License: %1" ).arg( info.getLicense()) ); + LicenseLbl->setText( trUtf8( "Drumkit License: %1" ).arg( info.getLicense()) ); + ImageLicenseLbl->setText( trUtf8("Image License: %1" ).arg( info.getImageLicense() ) ); + // Load the drumkit image + // Clear any image first + drumkitImageLabel->setPixmap( NULL ); + drumkitImageLabel->setText( info.getImage() ); + + if ( info.getImage().length() > 0 ) + { + if ( isSoundLibraryItemAlreadyInstalled( info ) ) + { + // get image file from local disk + QString sName = QFileInfo( info.getUrl() ).fileName(); + sName = sName.left( sName.lastIndexOf( "." ) ); + + H2Core::Drumkit* drumkitInfo = H2Core::Drumkit::load_by_name( sName, false ); + if ( drumkitInfo ) + { + // get the image from the local filesystem + QPixmap pixmap ( drumkitInfo->get_path() + "/" + drumkitInfo->get_image() ); + INFOLOG("Loaded image " + drumkitInfo->get_image().toLocal8Bit() + " from local filesystem"); + showImage( pixmap ); + } + else + { + ___ERRORLOG ( "Error loading the drumkit" ); + } + + } + else + { + // Try from the cache + QString cachedFile = readCachedImage( info.getImage() ); + + if ( cachedFile.length() > 0 ) + { + QPixmap pixmap ( cachedFile ); + showImage( pixmap ); + INFOLOG( "Loaded image " + info.getImage().toLocal8Bit() + " from cache (" + cachedFile + ")" ); + } + else + { + // Get the drumkit's directory name from URL + // + // Example: if the server repo URL is: http://www.hydrogen-music.org/feeds/drumkit_list.php + // and the image name from the XML is Roland_TR-808_drum_machine.jpg + // the URL for the image will be: http://www.hydrogen-music.org/feeds/images/Roland_TR-808_drum_machine.jpg + + if ( info.getImage().length() > 0 ) + { + int lastSlash = info.getUrl().lastIndexOf( QString( "/" )); + + QString imageUrl; + QString sLocalFile; + imageUrl = repositoryCombo->currentText().left( repositoryCombo->currentText().lastIndexOf( QString( "/" )) + 1 ) + info.getImage() ; + sLocalFile = QDir::tempPath() + "/" + QFileInfo( imageUrl ).fileName(); + + DownloadWidget dl( this, trUtf8( "" ), imageUrl, sLocalFile ); + dl.exec(); + + loadImage( sLocalFile ); + // Delete the temporary file + QFile::remove( sLocalFile ); + } + } + } + } + else + { + // no image file specified in drumkit.xml + INFOLOG( "No image for this kit specified in drumkit.xml on remote server" ); + } + DownloadBtn->setEnabled( true ); return; } @@ -424,37 +604,49 @@ sLocalFile = dataDir + "patterns/" + QFileInfo( sURL ).fileName(); } + bool Error = false; + for ( int i = 0; i < 30; ++i ) { DownloadWidget dl( this, trUtf8( "Downloading SoundLibrary..." ), sURL, sLocalFile ); dl.exec(); - QString redirect_url = dl.get_redirect_url(); - if (redirect_url == "" ) { + QUrl redirect_url = dl.get_redirect_url(); + if (redirect_url.isEmpty() ) { // ok, we have all data + Error = dl.get_error(); break; } else { - sURL = redirect_url; + sURL = redirect_url.toEncoded(); + Error = dl.get_error(); } } - // install the new soundlibrary - try { - if ( sType == "drumkit" ) { - H2Core::Drumkit::install( sLocalFile ); - QApplication::restoreOverrideCursor(); - QMessageBox::information( this, "Hydrogen", QString( trUtf8( "SoundLibrary imported in %1" ) ).arg( dataDir ) ); + //No 'else', error message has been already displayed by DL widget + if(!Error) + { + // install the new soundlibrary + try { + if ( sType == "drumkit" ) { + H2Core::Drumkit::install( sLocalFile ); + QApplication::restoreOverrideCursor(); + QMessageBox::information( this, "Hydrogen", QString( trUtf8( "SoundLibrary imported in %1" ) ).arg( dataDir ) ); + } + + if ( sType == "song" || sType == "pattern") { + QApplication::restoreOverrideCursor(); + } } - - if ( sType == "song" || sType == "pattern") { + catch( H2Core::H2Exception ex ) { QApplication::restoreOverrideCursor(); + QMessageBox::warning( this, "Hydrogen", trUtf8( "An error occurred importing the SoundLibrary." ) ); } } - catch( H2Core::H2Exception ex ) { + else + { QApplication::restoreOverrideCursor(); - QMessageBox::warning( this, "Hydrogen", trUtf8( "An error occurred importing the SoundLibrary." ) ); } QApplication::setOverrideCursor(Qt::WaitCursor); diff -Nru hydrogen-0.9.6.1/src/gui/src/SoundLibrary/SoundLibraryImportDialog.h hydrogen-0.9.7/src/gui/src/SoundLibrary/SoundLibraryImportDialog.h --- hydrogen-0.9.6.1/src/gui/src/SoundLibrary/SoundLibraryImportDialog.h 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/SoundLibrary/SoundLibraryImportDialog.h 2016-11-05 08:22:50.000000000 +0000 @@ -26,6 +26,8 @@ #include "ui_SoundLibraryImportDialog_UI.h" #include +#include + #include #include "SoundLibraryDatastructures.h" @@ -40,6 +42,8 @@ SoundLibraryImportDialog( QWidget* pParent ); ~SoundLibraryImportDialog(); + signals: + private slots: void on_EditListBtn_clicked(); void on_UpdateListBtn_clicked(); @@ -52,6 +56,8 @@ void soundLibraryItemChanged( QTreeWidgetItem*, QTreeWidgetItem* ); void onRepositoryComboBoxIndexChanged(int); + + private: std::vector m_soundLibraryList; H2Core::Preferences *pPref; @@ -62,12 +68,18 @@ bool isSoundLibraryItemAlreadyInstalled( SoundLibraryInfo sInfo ); void writeCachedData(const QString& fileName, const QString& data); + void writeCachedImage( const QString& imageFile, QPixmap& pixmap ); + void clearImageCache(); + QString readCachedImage( const QString& imageFile ); QString readCachedData(const QString& fileName); QString getCachedFilename(); + QString getCachedImageFilename(); void reloadRepositoryData(); void updateSoundLibraryList(); void updateRepositoryCombo(); -}; + void showImage( QPixmap pixmap ); + void loadImage( QString img ); +}; #endif diff -Nru hydrogen-0.9.6.1/src/gui/src/SoundLibrary/SoundLibraryImportDialog_UI.ui hydrogen-0.9.7/src/gui/src/SoundLibrary/SoundLibraryImportDialog_UI.ui --- hydrogen-0.9.6.1/src/gui/src/SoundLibrary/SoundLibraryImportDialog_UI.ui 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/SoundLibrary/SoundLibraryImportDialog_UI.ui 2016-11-05 08:22:50.000000000 +0000 @@ -1,7 +1,8 @@ - + + SoundLibraryImportDialog_UI - - + + 0 0 @@ -9,21 +10,21 @@ 688 - + Dialog - + - - + + 0 - - + + Internet - - + + 9 9 @@ -31,18 +32,18 @@ 588 - + - + - + - - + + Qt::Horizontal - + 40 20 @@ -51,25 +52,25 @@ - - + + Update list - - + + Edit server list - - + + Qt::Horizontal - + 40 20 @@ -80,21 +81,21 @@ - - + + true - + 15 - + false - + false - + 1 @@ -102,106 +103,150 @@ - - + + 390 - 9 + 86 374 - 588 + 511 - + - - + + 16777215 50 - + 75 true - + Sound Library Name - + Qt::AlignCenter - + true - + - - - Sound library Info - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop - - + + true - - -1 - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - + + + + 0 + 200 + + + + + + + + + 34 + 31 + 30 + + + + + + + + + 34 + 31 + 30 + + + + + + + + + 144 + 141 + 139 + + + + + + + + TextLabel + + + Qt::AlignCenter + + + + + + + + 16777215 + 30 + + + + Image License... + + + + + + 16777215 30 - - License... + + Drumkit License... - - + + 16777215 30 - + Author... - - + + Qt::Horizontal - + 372 21 @@ -210,8 +255,8 @@ - - + + Download and install @@ -219,64 +264,46 @@ - - + + Local file - - + + 10 10 721 - 68 + 74 - - - 0 - - - 0 - - - 0 - - - 0 - - - 6 - - - 6 - - - - + + + + Browse... - + false - - - + + + Install - - - - + + + + 0 0 - + true @@ -287,13 +314,13 @@ - + - - + + Qt::Horizontal - + 40 20 @@ -302,18 +329,18 @@ - - + + Close - - + + Qt::Horizontal - + 40 20 diff -Nru hydrogen-0.9.6.1/src/gui/src/SoundLibrary/SoundLibraryPanel.cpp hydrogen-0.9.7/src/gui/src/SoundLibrary/SoundLibraryPanel.cpp --- hydrogen-0.9.6.1/src/gui/src/SoundLibrary/SoundLibraryPanel.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/SoundLibrary/SoundLibraryPanel.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -178,8 +178,8 @@ __user_drumkit_info_list.clear(); //User drumkit list - QStringList usr_dks = Filesystem::usr_drumkits_list(); - for (int i = 0; i < usr_dks.size(); ++i) { + QStringList usr_dks = Filesystem::usr_drumkits_list(); + for (int i = 0; i < usr_dks.size(); ++i) { QString absPath = Filesystem::usr_drumkits_dir() + "/" + usr_dks[i]; Drumkit *pInfo = Drumkit::load( absPath ); if (pInfo) { @@ -200,8 +200,8 @@ } //System drumkit list - QStringList sys_dks = Filesystem::sys_drumkits_list(); - for (int i = 0; i < sys_dks.size(); ++i) { + QStringList sys_dks = Filesystem::sys_drumkits_list(); + for (int i = 0; i < sys_dks.size(); ++i) { QString absPath = Filesystem::sys_drumkits_dir() + "/" + sys_dks[i]; Drumkit *pInfo = Drumkit::load( absPath ); if (pInfo) { @@ -270,7 +270,7 @@ for( mapIterator=allPatternDirList->begin(); mapIterator != allPatternDirList->end(); mapIterator++ ) { QString patternCategory = (*mapIterator)->getCategory(); - if ( patternCategory == categoryName || patternCategory.isEmpty() && categoryName == "No category" ){ + if ( (patternCategory == categoryName) || (patternCategory.isEmpty() && categoryName == "No category") ){ QTreeWidgetItem* pPatternItem = new QTreeWidgetItem( pCategoryItem ); pPatternItem->setText( 0, (*mapIterator)->getName()); pPatternItem->setText( 1, (*mapIterator)->getPath() ); @@ -475,6 +475,7 @@ break; } } + for ( uint i = 0; i < __user_drumkit_info_list.size(); i++ ) { Drumkit *pInfo = __user_drumkit_info_list[i]; if ( pInfo->get_name() == sDrumkitName ) { @@ -482,17 +483,83 @@ break; } } + + InstrumentList *pSongInstrList = Hydrogen::get_instance()->getSong()->get_instrument_list(); + InstrumentList *pDrumkitInstrList = drumkitInfo->get_instruments(); + + int oldCount = pSongInstrList->size(); + int newCount = pDrumkitInstrList->size(); + + bool conditionalLoad = false; + bool hasNotes = false; + + INFOLOG("Old kit has " + QString::number( oldCount ) + " intruments, new one has " + QString::number( newCount ) ); + + if ( newCount < oldCount ) + { + // Check if any of the instruments that will be removed have notes + for ( int i = 0; i < pSongInstrList->size(); i++) + { + + if ( i >= newCount ) + { + INFOLOG("Checking if Instrument " + QString::number( i ) + " has notes..." ); + + if ( Hydrogen::get_instance()->instrumentHasNotes( pSongInstrList->get( i ) ) ) + { + hasNotes = true; + INFOLOG("Instrument " + QString::number( i ) + " has notes" ); + + } + } + + } + + if ( hasNotes ) + { + QMessageBox msgBox; + msgBox.setWindowTitle("Hydrogen"); + msgBox.setIcon( QMessageBox::Warning ); + msgBox.setText( tr( "The existing kit has %1 instruments but the new one only has %2.\nThe first %2 instruments will be replaced with the new intruments and will keep their notes, but some of the remaining instruments have notes.\nWould you like to keep or discard the remaining instruments and notes?\n").arg( QString::number( oldCount ),QString::number( newCount ) ) ); + + msgBox.setStandardButtons(QMessageBox::Save); + msgBox.setButtonText(QMessageBox::Save, trUtf8("Keep")); + msgBox.addButton(QMessageBox::Discard); + msgBox.addButton(QMessageBox::Cancel); + msgBox.setDefaultButton(QMessageBox::Cancel); + + switch ( msgBox.exec() ) + { + case QMessageBox::Save: + // Save old instruments with notes + conditionalLoad = true; + break; + + case QMessageBox::Discard: + // discard extra instruments + conditionalLoad = false; + break; + + case QMessageBox::Cancel: + // Cancel + return; + } + } + } + + assert( drumkitInfo ); QApplication::setOverrideCursor(Qt::WaitCursor); - Hydrogen::get_instance()->loadDrumkit( drumkitInfo ); - Hydrogen::get_instance()->getSong()->__is_modified = true; + + Hydrogen::get_instance()->loadDrumkit( drumkitInfo, conditionalLoad ); + Hydrogen::get_instance()->getSong()->set_is_modified( true ); HydrogenApp::get_instance()->onDrumkitLoad( drumkitInfo->get_name() ); HydrogenApp::get_instance()->getPatternEditorPanel()->getDrumPatternEditor()->updateEditor(); HydrogenApp::get_instance()->getPatternEditorPanel()->updatePianorollEditor(); - InstrumentEditorPanel::get_instance()->updateInstrumentEditor(); + InstrumentEditorPanel::get_instance()->notifyOfDrumkitChange(); __sound_library_tree->currentItem()->setBackgroundColor ( 0, QColor( 50, 50, 50) ); QApplication::restoreOverrideCursor(); @@ -656,9 +723,9 @@ QString sFilename = sDirectory + "/" + songName + ".h2song"; - Hydrogen *engine = Hydrogen::get_instance(); - if ( engine->getState() == STATE_PLAYING ) { - engine->sequencer_stop(); + Hydrogen *pHydrogen = Hydrogen::get_instance(); + if ( pHydrogen->getState() == STATE_PLAYING ) { + pHydrogen->sequencer_stop(); } Song *pSong = Song::load( sFilename ); @@ -674,12 +741,12 @@ recentFiles.insert( recentFiles.begin(), sFilename ); pPref->setRecentFiles( recentFiles ); - HydrogenApp* h2app = HydrogenApp::get_instance(); + HydrogenApp* pH2App = HydrogenApp::get_instance(); - h2app->setSong( pSong ); + pH2App->setSong( pSong ); //updateRecentUsedSongList(); - engine->setSelectedPatternNumber( 0 ); + pHydrogen->setSelectedPatternNumber( 0 ); } @@ -690,9 +757,9 @@ QString patternName = __sound_library_tree->currentItem()->text( 0 ) + ".h2pattern"; QString drumkitname = __sound_library_tree->currentItem()->toolTip ( 0 ); - Hydrogen *engine = Hydrogen::get_instance(); - Song *song = engine->getSong(); - PatternList *pPatternList = song->get_pattern_list(); + Hydrogen *pHydrogen = Hydrogen::get_instance(); + Song *pSong = pHydrogen->getSong(); + PatternList *pPatternList = pSong->get_pattern_list(); QString sDirectory; @@ -712,15 +779,14 @@ } } - Pattern* err = mng.loadPattern (sDirectory ); + Pattern* pErr = mng.loadPattern (sDirectory ); - if ( err == 0 ) { + if ( pErr == 0 ) { ERRORLOG( "Error loading the pattern" ); } else { - H2Core::Pattern *pNewPattern = err; - pPatternList->add ( pNewPattern ); - song->__is_modified = true; + pPatternList->add ( pErr ); + pSong->set_is_modified( true ); } HydrogenApp::get_instance()->getSongEditorPanel()->updateAll(); diff -Nru hydrogen-0.9.6.1/src/gui/src/SoundLibrary/SoundLibraryPanel.h hydrogen-0.9.7/src/gui/src/SoundLibrary/SoundLibraryPanel.h --- hydrogen-0.9.6.1/src/gui/src/SoundLibrary/SoundLibraryPanel.h 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/SoundLibrary/SoundLibraryPanel.h 2016-11-05 08:22:50.000000000 +0000 @@ -42,7 +42,7 @@ class SoundLibraryPanel : public QWidget, private H2Core::Object { - H2_OBJECT + H2_OBJECT Q_OBJECT public: SoundLibraryPanel( QWidget* parent ); diff -Nru hydrogen-0.9.6.1/src/gui/src/SoundLibrary/SoundLibraryPropertiesDialog.cpp hydrogen-0.9.7/src/gui/src/SoundLibrary/SoundLibraryPropertiesDialog.cpp --- hydrogen-0.9.6.1/src/gui/src/SoundLibrary/SoundLibraryPropertiesDialog.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/SoundLibrary/SoundLibraryPropertiesDialog.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -23,6 +23,8 @@ #include #include "../HydrogenApp.h" +#include "../Skin.h" + #include "SoundLibraryPropertiesDialog.h" #include "../InstrumentRack.h" #include "SoundLibraryPanel.h" @@ -44,7 +46,7 @@ { setupUi( this ); INFOLOG( "INIT" ); - setWindowTitle( trUtf8( "SoundLibrary Properties" ) ); + setWindowTitle( trUtf8( "SoundLibrary Properties" ) ); setFixedSize( width(), height() ); predrumkit = preDrumKit; @@ -56,28 +58,112 @@ authorTxt->setText( QString( drumkitInfo->get_author() ) ); infoTxt->append( QString( drumkitInfo->get_info() ) ); licenseTxt->setText( QString( drumkitInfo->get_license() ) ); + imageText->setText( QString ( drumkitInfo->get_image() ) ); + imageLicenseText->setText( QString ( drumkitInfo->get_image_license() ) ); + // Licence with attribution is often too long... + imageLicenseText->setToolTip( QString( drumkitInfo->get_image_license() ) ); + + QPixmap *pixmap = new QPixmap (drumkitInfo->get_path() + "/" + drumkitInfo->get_image()); + // scale the image down to fit if required + int x = (int) drumkitImageLabel->size().width(); + int y = drumkitImageLabel->size().height(); + float labelAspect = (float) x / y; + float imageAspect = (float) pixmap->width() / pixmap->height(); + + if ( ( x < pixmap->width() ) || ( y < pixmap->height() ) ) + { + if ( labelAspect >= imageAspect ) + { + // image is taller or the same as label frame + *pixmap = pixmap->scaledToHeight( y ); + } + else + { + // image is wider than label frame + *pixmap = pixmap->scaledToWidth( x ); + } + } + drumkitImageLabel->setPixmap(*pixmap); + drumkitImageLabel->show(); + } } - - SoundLibraryPropertiesDialog::~SoundLibraryPropertiesDialog() { INFOLOG( "DESTROY" ); } +void SoundLibraryPropertiesDialog::updateImage( QString& filename ) +{ + QPixmap *pixmap = new QPixmap ( filename ); + // scale the image down to fit if required + int x = (int) drumkitImageLabel->size().width(); + int y = drumkitImageLabel->size().height(); + float labelAspect = (float) x / y; + float imageAspect = (float) pixmap->width() / pixmap->height(); + + if ( ( x < pixmap->width() ) || ( y < pixmap->height() ) ) + { + if ( labelAspect >= imageAspect ) + { + // image is taller or the same as label frame + *pixmap = pixmap->scaledToHeight( y ); + } + else + { + // image is wider than label frame + *pixmap = pixmap->scaledToWidth( x ); + } + } + drumkitImageLabel->setPixmap(*pixmap); + drumkitImageLabel->show(); +} -void SoundLibraryPropertiesDialog::on_saveBtn_clicked() +void SoundLibraryPropertiesDialog::on_imageBrowsePushButton_clicked() { + // Try to get the drumkit directory and open file browser + QString drumkitDir = Filesystem::drumkit_dir_search( nameTxt->text() ) + "/" + nameTxt->text(); + + QString fileName = QFileDialog::getOpenFileName(this, trUtf8("Open Image"), drumkitDir, trUtf8("Image Files (*.png *.jpg *.jpeg)")); + + // If cancel was clicked just abort + if ( fileName == NULL ) + { + return; + } + + // If this file is in different directory copy it here + QFile file( fileName ); + QFileInfo fileInfo(file.fileName()); + + if ( fileInfo.dir().path() != drumkitDir ) + { + INFOLOG("Copying " + fileName + " to " + drumkitDir.toLocal8Bit() ); + if ( !QFile::copy( fileName, drumkitDir + "/" + fileInfo.fileName() )) + { + WARNINGLOG( "Could not copy " + fileInfo.fileName() + " to " + drumkitDir ); + } + + } + QString filename(fileInfo.fileName()); + imageText->setText( filename ); + drumkitinfo->set_image( filename ); + updateImage( fileName ); +} + +void SoundLibraryPropertiesDialog::on_saveBtn_clicked() +{ + bool reload = false; - + if ( saveChanges_checkBox->isChecked() ){ - //test if the drumkit is loaded + //test if the drumkit is loaded if ( Hydrogen::get_instance()->getCurrentDrumkitname() != drumkitinfo->get_name() ){ QMessageBox::information( this, "Hydrogen", trUtf8 ( "This is not possible, you can only save changes inside instruments to the current loaded sound library")); saveChanges_checkBox->setChecked( false ); @@ -85,15 +171,15 @@ } reload = true; } - - //load the selected drumkit to save it correct.... later the old drumkit will be reloaded + + //load the selected drumkit to save it correct.... later the old drumkit will be reloaded if ( drumkitinfo != NULL && ( !saveChanges_checkBox->isChecked() ) ){ if ( Hydrogen::get_instance()->getCurrentDrumkitname() != drumkitinfo->get_name() ){ Hydrogen::get_instance()->loadDrumkit( drumkitinfo ); - Hydrogen::get_instance()->getSong()->__is_modified = true; + Hydrogen::get_instance()->getSong()->set_is_modified( true ); } } - + //check the drumkit name. if the name is a new one, one qmessagebox with question "are you sure" will displayed. if ( nameTxt->text() != oldName ){ int res = QMessageBox::information( this, "Hydrogen", tr( "Warning! Changing the drumkit name will result in creating a new drumkit with this name.\nAre you sure?"), tr("&Ok"), tr("&Cancel"), 0, 1 ); @@ -101,15 +187,10 @@ return; } else - { + { reload = true; } } - - //save the drumkit - if( !H2Core::Drumkit::save( nameTxt->text(), authorTxt->text(), infoTxt->toHtml(), licenseTxt->text(), H2Core::Hydrogen::get_instance()->getSong()->get_instrument_list(), true ) ) { - QMessageBox::information( this, "Hydrogen", trUtf8 ( "Saving of this drumkit failed.")); - } //check the name and set the drumkitinfo to current drumkit if ( drumkitinfo != NULL && !nameTxt->text().isEmpty() ){ @@ -117,14 +198,23 @@ drumkitinfo->set_author( authorTxt->text() ); drumkitinfo->set_info( infoTxt->toHtml() ); drumkitinfo->set_license( licenseTxt->text() ); + drumkitinfo->set_image( imageText->text() ); + drumkitinfo->set_image_license( imageLicenseText->text() ); } - - //check pre loaded drumkit name and reload the old drumkit + //save the drumkit + // Note: The full path of the image is passed to make copying to a new drumkit easy + if( !H2Core::Drumkit::save( nameTxt->text(), authorTxt->text(), infoTxt->toHtml(), licenseTxt->text(), drumkitinfo->get_path() + "/" + drumkitinfo->get_image(), drumkitinfo->get_image_license(), H2Core::Hydrogen::get_instance()->getSong()->get_instrument_list(), H2Core::Hydrogen::get_instance()->getSong()->get_components(), true ) ) + { + QMessageBox::information( this, "Hydrogen", trUtf8 ( "Saving of this drumkit failed.")); + } + + + //check pre loaded drumkit name and reload the old drumkit if ( predrumkit != NULL ){ if ( predrumkit->get_name() != Hydrogen::get_instance()->getCurrentDrumkitname() ){ Hydrogen::get_instance()->loadDrumkit( predrumkit ); - Hydrogen::get_instance()->getSong()->__is_modified = true; + Hydrogen::get_instance()->getSong()->set_is_modified( true ); } } @@ -135,7 +225,7 @@ } accept(); - + } } diff -Nru hydrogen-0.9.6.1/src/gui/src/SoundLibrary/SoundLibraryPropertiesDialog.h hydrogen-0.9.7/src/gui/src/SoundLibrary/SoundLibraryPropertiesDialog.h --- hydrogen-0.9.6.1/src/gui/src/SoundLibrary/SoundLibraryPropertiesDialog.h 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/SoundLibrary/SoundLibraryPropertiesDialog.h 2016-11-05 08:22:50.000000000 +0000 @@ -35,16 +35,18 @@ class SoundLibraryPropertiesDialog : public QDialog, public Ui_SoundLibraryPropertiesDialog_UI, public H2Core::Object { - H2_OBJECT + H2_OBJECT Q_OBJECT public: SoundLibraryPropertiesDialog( QWidget* pParent , Drumkit *drumkitInfo, Drumkit *preDrumKit ); ~SoundLibraryPropertiesDialog(); private slots: - void on_saveBtn_clicked(); + void on_saveBtn_clicked(); + void on_imageBrowsePushButton_clicked(); private: + void updateImage( QString& filename ); }; } diff -Nru hydrogen-0.9.6.1/src/gui/src/SoundLibrary/SoundLibraryPropertiesDialog_UI.ui hydrogen-0.9.7/src/gui/src/SoundLibrary/SoundLibraryPropertiesDialog_UI.ui --- hydrogen-0.9.6.1/src/gui/src/SoundLibrary/SoundLibraryPropertiesDialog_UI.ui 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/SoundLibrary/SoundLibraryPropertiesDialog_UI.ui 2016-11-05 08:22:50.000000000 +0000 @@ -1,208 +1,363 @@ - + + SoundLibraryPropertiesDialog_UI - - + + 0 0 - 595 - 360 + 592 + 653 - + Dialog - - + + 10 10 - 91 + 111 25 - - + + 0 0 - + Name - - + + 10 40 - 91 + 111 25 - - + + 0 0 - + Author - - + + 10 100 - 91 - 111 + 111 + 120 - + Information - + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - + + - 111 + 120 39 - 471 + 467 22 - - + + 0 0 - + 209 0 - - + + - 111 + 120 11 - 471 + 467 22 - - + + 0 0 - + 209 0 - - + + - 111 + 120 95 - 471 - 192 + 467 + 191 - + false - - + + 10 70 - 91 + 111 21 - - License + + Drumkit License - + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - + + - 111 + 120 67 - 471 + 467 22 - - + + 0 0 - + 209 0 - + - - + + - 420 - 320 - 162 - 28 + 410 + 600 + 176 + 41 - + - - + + Save - - + + Cancel - - + + - 111 - 293 + 10 + 580 469 21 - + Save changes made to instruments into sound library + + + + 10 + 350 + 571 + 221 + + + + + + + + + 34 + 31 + 30 + + + + + + + + + 34 + 31 + 30 + + + + + + + + + 144 + 141 + 139 + + + + + + + + true + + + QFrame::StyledPanel + + + + + + false + + + Qt::AlignCenter + + + + + + 10 + 296 + 111 + 14 + + + + Image + + + + + + 120 + 292 + 378 + 22 + + + + + 0 + 0 + + + + + 209 + 0 + + + + + + + + + + 506 + 292 + 80 + 21 + + + + Browse + + + + + + 120 + 320 + 467 + 25 + + + + + 0 + 0 + + + + + 209 + 0 + + + + + + + 10 + 322 + 111 + 25 + + + + + 0 + 0 + + + + Image License + + nameTxt @@ -221,11 +376,11 @@ SoundLibraryPropertiesDialog_UI reject() - + 121 220 - + 51 196 diff -Nru hydrogen-0.9.6.1/src/gui/src/SoundLibrary/SoundLibraryRepositoryDialog.h hydrogen-0.9.7/src/gui/src/SoundLibrary/SoundLibraryRepositoryDialog.h --- hydrogen-0.9.6.1/src/gui/src/SoundLibrary/SoundLibraryRepositoryDialog.h 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/SoundLibrary/SoundLibraryRepositoryDialog.h 2016-11-05 08:22:50.000000000 +0000 @@ -31,7 +31,7 @@ /// class SoundLibraryRepositoryDialog : public QDialog, public Ui_SoundLibraryRepositoryDialog_UI, public H2Core::Object { - H2_OBJECT + H2_OBJECT Q_OBJECT public: SoundLibraryRepositoryDialog( QWidget* pParent ); diff -Nru hydrogen-0.9.6.1/src/gui/src/SoundLibrary/SoundLibrarySaveDialog.cpp hydrogen-0.9.7/src/gui/src/SoundLibrary/SoundLibrarySaveDialog.cpp --- hydrogen-0.9.6.1/src/gui/src/SoundLibrary/SoundLibrarySaveDialog.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/SoundLibrary/SoundLibrarySaveDialog.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -25,6 +25,9 @@ #include #include +#include "../HydrogenApp.h" +#include "../Skin.h" + const char* SoundLibrarySaveDialog::__class_name = "SoundLibrarySaveDialog"; SoundLibrarySaveDialog::SoundLibrarySaveDialog( QWidget* pParent ) @@ -37,29 +40,111 @@ setFixedSize( width(), height() ); } +SoundLibrarySaveDialog::~SoundLibrarySaveDialog() +{ + INFOLOG( "DESTROY" ); +} -SoundLibrarySaveDialog::~SoundLibrarySaveDialog() +void SoundLibrarySaveDialog::updateImage( QString& filename ) { - INFOLOG( "DESTROY" ); + QPixmap *pixmap = new QPixmap ( filename ); + // scale the image down to fit if required + int x = (int) drumkitImageLabel->size().width(); + int y = drumkitImageLabel->size().height(); + float labelAspect = (float) x / y; + float imageAspect = (float) pixmap->width() / pixmap->height(); + + if ( ( x < pixmap->width() ) || ( y < pixmap->height() ) ) + { + if ( labelAspect >= imageAspect ) + { + // image is taller or the same as label frame + *pixmap = pixmap->scaledToHeight( y ); + } + else + { + // image is wider than label frame + *pixmap = pixmap->scaledToWidth( x ); + } + } + drumkitImageLabel->setPixmap(*pixmap); + drumkitImageLabel->show(); } +void SoundLibrarySaveDialog::on_imageBrowsePushButton_clicked() +{ + // Try to get the drumkit directory and open file browser + QString drumkitDir = H2Core::Filesystem::usr_drumkits_dir() + "/" + nameTxt->text(); + QString fileName = QFileDialog::getOpenFileName(this, trUtf8("Open Image"), drumkitDir, trUtf8("Image Files (*.png *.jpg *.jpeg)")); + + // If this file is in different directory copy it here + + QFile file( fileName ); + QFileInfo fileInfo(file.fileName()); + ERRORLOG(fileInfo.dir().path().toLocal8Bit() + drumkitDir); + if ( fileInfo.dir().path() != drumkitDir ) + { + QDir dir( drumkitDir ); + if ( !dir.exists() ) + { + dir.mkpath("."); + } + + INFOLOG("Copying " + fileName + " to " + drumkitDir.toLocal8Bit() ); + if ( !QFile::copy( fileName, drumkitDir + "/" + fileInfo.fileName() )) + { + WARNINGLOG( "Could not copy " + fileInfo.fileName() + " to " + drumkitDir ); + } + + } + QString filename(fileInfo.fileName()); + imageText->setText( filename ); + updateImage( fileName ); +} void SoundLibrarySaveDialog::on_saveBtn_clicked() { - INFOLOG( "!!!" ); - if( nameTxt->text().isEmpty() ){ - QMessageBox::information( this, "Hydrogen", trUtf8 ( "Please supply at least a valid name")); + QMessageBox::information( this, "Hydrogen", trUtf8 ( "Please supply at least a valid name")); + return; + } + + bool Overwrite = false; + + if(H2Core::Drumkit::user_drumkit_exists( nameTxt->text() )){ + QMessageBox msgBox; + msgBox.setText(trUtf8("A library with the same name already exists. Do you want to overwrite the existing library?")); + msgBox.setIcon(QMessageBox::Warning); + msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No); + msgBox.setDefaultButton(QMessageBox::No); + + int ret = msgBox.exec(); + + if(ret == QMessageBox::Yes){ + Overwrite = true; + } else { return; - } - if( !H2Core::Drumkit::save( nameTxt->text(), authorTxt->text(), infoTxt->toHtml(), licenseTxt->text(), H2Core::Hydrogen::get_instance()->getSong()->get_instrument_list(), false ) ) { - QMessageBox::information( this, "Hydrogen", trUtf8 ( "Saving of this drumkit failed.")); - return; - } + } + } + + // Note: use full path for image - Drumkit->save() will handle copying it if need be + if( !H2Core::Drumkit::save( nameTxt->text(), + authorTxt->text(), + infoTxt->toHtml(), + licenseTxt->text(), + H2Core::Filesystem::usr_drumkits_dir() + "/" + nameTxt->text() + "/" + imageText->text(), + imageLicenseText->text(), + H2Core::Hydrogen::get_instance()->getSong()->get_instrument_list(), + H2Core::Hydrogen::get_instance()->getSong()->get_components(), + Overwrite ) ) { + QMessageBox::information( this, "Hydrogen", trUtf8 ( "Saving of this library failed.")); + return; + } + accept(); } diff -Nru hydrogen-0.9.6.1/src/gui/src/SoundLibrary/SoundLibrarySaveDialog.h hydrogen-0.9.7/src/gui/src/SoundLibrary/SoundLibrarySaveDialog.h --- hydrogen-0.9.6.1/src/gui/src/SoundLibrary/SoundLibrarySaveDialog.h 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/SoundLibrary/SoundLibrarySaveDialog.h 2016-11-05 08:22:50.000000000 +0000 @@ -31,17 +31,19 @@ /// class SoundLibrarySaveDialog : public QDialog, public Ui_SoundLibrarySaveDialog_UI, public H2Core::Object { - H2_OBJECT + H2_OBJECT Q_OBJECT public: SoundLibrarySaveDialog( QWidget* pParent ); ~SoundLibrarySaveDialog(); private slots: - void on_saveBtn_clicked(); - + void on_saveBtn_clicked(); + void on_imageBrowsePushButton_clicked(); private: + void updateImage( QString& filename ); + }; diff -Nru hydrogen-0.9.6.1/src/gui/src/SoundLibrary/SoundLibrarySaveDialog_UI.ui hydrogen-0.9.7/src/gui/src/SoundLibrary/SoundLibrarySaveDialog_UI.ui --- hydrogen-0.9.6.1/src/gui/src/SoundLibrary/SoundLibrarySaveDialog_UI.ui 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/SoundLibrary/SoundLibrarySaveDialog_UI.ui 2016-11-05 08:22:50.000000000 +0000 @@ -1,19 +1,20 @@ - + + SoundLibrarySaveDialog_UI - - + + 0 0 595 - 310 + 595 - + Dialog - - + + 10 10 @@ -21,18 +22,18 @@ 25 - - + + 0 0 - + Name - - + + 10 40 @@ -40,18 +41,18 @@ 25 - - + + 0 0 - + Author - - + + 10 100 @@ -59,15 +60,15 @@ 111 - + Information - + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - + + 110 40 @@ -75,21 +76,21 @@ 25 - - + + 0 0 - + 209 0 - - + + 110 10 @@ -97,21 +98,21 @@ 25 - - + + 0 0 - + 209 0 - - + + 110 100 @@ -119,12 +120,12 @@ 161 - + false - - + + 10 70 @@ -132,15 +133,15 @@ 21 - + License - + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - + + 110 70 @@ -148,53 +149,205 @@ 25 - - + + 0 0 - + 209 0 - - + + 360 - 270 + 560 221 28 - + - - + + Save - - + + Cancel + + + + 10 + 330 + 571 + 221 + + + + + + + + + 34 + 31 + 30 + + + + + + + + + 34 + 31 + 30 + + + + + + + + + 144 + 141 + 139 + + + + + + + + true + + + QFrame::StyledPanel + + + + + + false + + + Qt::AlignCenter + + + + + + 9 + 272 + 57 + 14 + + + + Image + + + + + + 499 + 270 + 81 + 21 + + + + Browse + + + + + + 110 + 270 + 371 + 22 + + + + + 0 + 0 + + + + + 209 + 0 + + + + + + + + + + 9 + 298 + 91 + 25 + + + + + 0 + 0 + + + + Image License + + + + + + 110 + 298 + 471 + 25 + + + + + 0 + 0 + + + + + 209 + 0 + + + nameTxt authorTxt licenseTxt infoTxt - saveBtn - m_cancelBtn @@ -204,11 +357,11 @@ SoundLibrarySaveDialog_UI reject() - + 121 220 - + 51 196 diff -Nru hydrogen-0.9.6.1/src/gui/src/SplashScreen.cpp hydrogen-0.9.7/src/gui/src/SplashScreen.cpp --- hydrogen-0.9.6.1/src/gui/src/SplashScreen.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/SplashScreen.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -33,13 +33,11 @@ const char* SplashScreen::__class_name = "SplashScreen"; SplashScreen::SplashScreen() -// : QWidget( NULL, Qt::SplashScreen ) : QSplashScreen( NULL ) , Object( __class_name ) { //INFOLOG( "SplashScreen" ); - //resize(width, height); setFixedSize(width, height); m_pBackground = new QPixmap( Skin::getImagePath() + "/splash/splash.png" ); @@ -56,7 +54,6 @@ QString version = QString( "v%1 (%2)" ).arg( H2Core::get_version().c_str() ).arg( __DATE__ ); p.drawText( 5, 5, width - 10, 40, Qt::AlignRight | Qt::AlignTop, version ); -// p.drawText( 5, height - 45, width - 10, 40, Qt::AlignHCenter | Qt::AlignBottom, QString( trUtf8( "Modules: %1" ) ).arg( COMPILED_FEATURES ) ); p.end(); setPixmap( *m_pBackground ); diff -Nru hydrogen-0.9.6.1/src/gui/src/UI/about_dialog.ui hydrogen-0.9.7/src/gui/src/UI/about_dialog.ui --- hydrogen-0.9.6.1/src/gui/src/UI/about_dialog.ui 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/UI/about_dialog.ui 2016-11-05 08:22:50.000000000 +0000 @@ -139,352 +139,11 @@ true - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This program is distributed under the terms of the GPL v2.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU GENERAL PUBLIC LICENSE</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Version 2, June 1991</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Copyright (C) 1989, 1991 Free Software Foundation, Inc.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 675 Mass Ave, Cambridge, MA 02139, USA</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Everyone is permitted to copy and distribute verbatim copies</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> of this license document, but changing it is not allowed.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Preamble</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> The licenses for most software are designed to take away your</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">freedom to share and change it. By contrast, the GNU General Public</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">License is intended to guarantee your freedom to share and change free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">software--to make sure the software is free for all its users. This</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">General Public License applies to most of the Free Software</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Foundation's software and to any other program whose authors commit to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">using it. (Some other Free Software Foundation software is covered by</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the GNU Library General Public License instead.) You can apply it to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">your programs, too.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> When we speak of free software, we are referring to freedom, not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">price. Our General Public Licenses are designed to make sure that you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">have the freedom to distribute copies of free software (and charge for</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this service if you wish), that you receive source code or can get it</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">if you want it, that you can change the software or use pieces of it</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">in new free programs; and that you know you can do these things.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> To protect your rights, we need to make restrictions that forbid</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">anyone to deny you these rights or to ask you to surrender the rights.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">These restrictions translate to certain responsibilities for you if you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute copies of the software, or if you modify it.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> For example, if you distribute copies of such a program, whether</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">gratis or for a fee, you must give the recipients all the rights that</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">you have. You must make sure that they, too, receive or can get the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">source code. And you must show them these terms so they know their</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">rights.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> We protect your rights with two steps: (1) copyright the software, and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">(2) offer you this license which gives you legal permission to copy,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute and/or modify the software.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Also, for each author's protection and ours, we want to make certain</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that everyone understands that there is no warranty for this free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">software. If the software is modified by someone else and passed on, we</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">want its recipients to know that what they have is not the original, so</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that any problems introduced by others will not reflect on the original</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">authors' reputations.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Finally, any free program is threatened constantly by software</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patents. We wish to avoid the danger that redistributors of a free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">program will individually obtain patent licenses, in effect making the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">program proprietary. To prevent this, we have made it clear that any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patent must be licensed for everyone's free use or not licensed at all.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> The precise terms and conditions for copying, distribution and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">modification follow.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU GENERAL PUBLIC LICENSE</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 0. This License applies to any program or other work which contains</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">a notice placed by the copyright holder saying it may be distributed</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">under the terms of this General Public License. The &quot;Program&quot;, below,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">refers to any such program or work, and a &quot;work based on the Program&quot;</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">means either the Program or any derivative work under copyright law:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that is to say, a work containing the Program or a portion of it,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">either verbatim or with modifications and/or translated into another</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">language. (Hereinafter, translation is included without limitation in</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the term &quot;modification&quot;.) Each licensee is addressed as &quot;you&quot;.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Activities other than copying, distribution and modification are not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">covered by this License; they are outside its scope. The act of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">running the Program is not restricted, and the output from the Program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">is covered only if its contents constitute a work based on the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program (independent of having been made by running the Program).</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Whether that is true depends on what the Program does.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 1. You may copy and distribute verbatim copies of the Program's</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">source code as you receive it, in any medium, provided that you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">conspicuously and appropriately publish on each copy an appropriate</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">copyright notice and disclaimer of warranty; keep intact all the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">notices that refer to this License and to the absence of any warranty;</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">and give any other recipients of the Program a copy of this License</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">along with the Program.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You may charge a fee for the physical act of transferring a copy, and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">you may at your option offer warranty protection in exchange for a fee.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 2. You may modify your copy or copies of the Program or any portion</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of it, thus forming a work based on the Program, and copy and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute such modifications or work under the terms of Section 1</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">above, provided that you also meet all of these conditions:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a) You must cause the modified files to carry prominent notices</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> stating that you changed the files and the date of any change.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> b) You must cause any work that you distribute or publish, that in</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> whole or in part contains or is derived from the Program or any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> part thereof, to be licensed as a whole at no charge to all third</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> parties under the terms of this License.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> c) If the modified program normally reads commands interactively</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> when run, you must cause it, when started running for such</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> interactive use in the most ordinary way, to print or display an</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> announcement including an appropriate copyright notice and a</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> notice that there is no warranty (or else, saying that you provide</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a warranty) and that users may redistribute the program under</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> these conditions, and telling the user how to view a copy of this</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> License. (Exception: if the Program itself is interactive but</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> does not normally print such an announcement, your work based on</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> the Program is not required to print an announcement.)</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">These requirements apply to the modified work as a whole. If</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">identifiable sections of that work are not derived from the Program,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">and can be reasonably considered independent and separate works in</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">themselves, then this License, and its terms, do not apply to those</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">sections when you distribute them as separate works. But when you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute the same sections as part of a whole which is a work based</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">on the Program, the distribution of the whole must be on the terms of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License, whose permissions for other licensees extend to the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">entire whole, and thus to each and every part regardless of who wrote it.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Thus, it is not the intent of this section to claim rights or contest</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">your rights to work written entirely by you; rather, the intent is to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">exercise the right to control the distribution of derivative or</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">collective works based on the Program.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">In addition, mere aggregation of another work not based on the Program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">with the Program (or with a work based on the Program) on a volume of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">a storage or distribution medium does not bring the other work under</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the scope of this License.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 3. You may copy and distribute the Program (or a work based on it,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">under Section 2) in object code or executable form under the terms of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Sections 1 and 2 above provided that you also do one of the following:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a) Accompany it with the complete corresponding machine-readable</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> source code, which must be distributed under the terms of Sections</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 1 and 2 above on a medium customarily used for software interchange; or,</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> b) Accompany it with a written offer, valid for at least three</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> years, to give any third party, for a charge no more than your</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> cost of physically performing source distribution, a complete</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> machine-readable copy of the corresponding source code, to be</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> distributed under the terms of Sections 1 and 2 above on a medium</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> customarily used for software interchange; or,</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> c) Accompany it with the information you received as to the offer</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> to distribute corresponding source code. (This alternative is</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> allowed only for noncommercial distribution and only if you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> received the program in object code or executable form with such</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> an offer, in accord with Subsection b above.)</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">The source code for a work means the preferred form of the work for</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">making modifications to it. For an executable work, complete source</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">code means all the source code for all modules it contains, plus any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">associated interface definition files, plus the scripts used to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">control compilation and installation of the executable. However, as a</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">special exception, the source code distributed need not include</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">anything that is normally distributed (in either source or binary</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">form) with the major components (compiler, kernel, and so on) of the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">operating system on which the executable runs, unless that component</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">itself accompanies the executable.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If distribution of executable or object code is made by offering</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">access to copy from a designated place, then offering equivalent</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">access to copy the source code from the same place counts as</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribution of the source code, even though third parties are not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">compelled to copy the source along with the object code.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 4. You may not copy, modify, sublicense, or distribute the Program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">except as expressly provided under this License. Any attempt</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">otherwise to copy, modify, sublicense or distribute the Program is</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">void, and will automatically terminate your rights under this License.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">However, parties who have received copies, or rights, from you under</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License will not have their licenses terminated so long as such</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">parties remain in full compliance.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 5. You are not required to accept this License, since you have not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">signed it. However, nothing else grants you permission to modify or</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute the Program or its derivative works. These actions are</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">prohibited by law if you do not accept this License. Therefore, by</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">modifying or distributing the Program (or any work based on the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program), you indicate your acceptance of this License to do so, and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">all its terms and conditions for copying, distributing or modifying</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the Program or works based on it.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 6. Each time you redistribute the Program (or any work based on the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program), the recipient automatically receives a license from the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">original licensor to copy, distribute or modify the Program subject to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">these terms and conditions. You may not impose any further</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">restrictions on the recipients' exercise of the rights granted herein.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You are not responsible for enforcing compliance by third parties to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 7. If, as a consequence of a court judgment or allegation of patent</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">infringement or for any other reason (not limited to patent issues),</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">conditions are imposed on you (whether by court order, agreement or</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">otherwise) that contradict the conditions of this License, they do not</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">excuse you from the conditions of this License. If you cannot</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute so as to satisfy simultaneously your obligations under this</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">License and any other pertinent obligations, then as a consequence you</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">may not distribute the Program at all. For example, if a patent</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">license would not permit royalty-free redistribution of the Program by</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">all those who receive copies directly or indirectly through you, then</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the only way you could satisfy both it and this License would be to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">refrain entirely from distribution of the Program.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If any portion of this section is held invalid or unenforceable under</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">any particular circumstance, the balance of the section is intended to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">apply and the section as a whole is intended to apply in other</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">circumstances.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">It is not the purpose of this section to induce you to infringe any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patents or other property right claims or to contest validity of any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">such claims; this section has the sole purpose of protecting the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">integrity of the free software distribution system, which is</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">implemented by public license practices. Many people have made</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">generous contributions to the wide range of software distributed</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">through that system in reliance on consistent application of that</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">system; it is up to the author/donor to decide if he or she is willing</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to distribute software through any other system and a licensee cannot</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">impose that choice.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This section is intended to make thoroughly clear what is believed to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be a consequence of the rest of this License.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 8. If the distribution and/or use of the Program is restricted in</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">certain countries either by patents or by copyrighted interfaces, the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">original copyright holder who places the Program under this License</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">may add an explicit geographical distribution limitation excluding</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">those countries, so that distribution is permitted only in or among</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">countries not thus excluded. In such case, this License incorporates</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the limitation as if written in the body of this License.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 9. The Free Software Foundation may publish revised and/or new versions</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of the General Public License from time to time. Such new versions will</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be similar in spirit to the present version, but may differ in detail to</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">address new problems or concerns.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Each version is given a distinguishing version number. If the Program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">specifies a version number of this License which applies to it and &quot;any</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">later version&quot;, you have the option of following the terms and conditions</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">either of that version or of any later version published by the Free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Software Foundation. If the Program does not specify a version number of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License, you may choose any version ever published by the Free Software</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Foundation.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 10. If you wish to incorporate parts of the Program into other free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">programs whose distribution conditions are different, write to the author</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to ask for permission. For software which is copyrighted by the Free</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Software Foundation, write to the Free Software Foundation; we sometimes</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">make exceptions for this. Our decision will be guided by the two goals</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of preserving the free status of all derivatives of our free software and</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of promoting the sharing and reuse of software generally.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> NO WARRANTY</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROVIDE THE PROGRAM &quot;AS IS&quot; WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">REPAIR OR CORRECTION.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">POSSIBILITY OF SUCH DAMAGES.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> END OF TERMS AND CONDITIONS</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> How to Apply These Terms to Your New Programs</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> If you develop a new program, and you want it to be of the greatest</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">possible use to the public, the best way to achieve this is to make it</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">free software which everyone can redistribute and change under these terms.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> To do so, attach the following notices to the program. It is safest</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to attach them to the start of each source file to most effectively</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">convey the exclusion of warranty; and each file should have at least</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the &quot;copyright&quot; line and a pointer to where the full notice is found.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> &lt;one line to give the program's name and a brief idea of what it does.&gt;</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Copyright (C) 19yy &lt;name of author&gt;</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This program is free software; you can redistribute it and/or modify</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> it under the terms of the GNU General Public License as published by</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> the Free Software Foundation; either version 2 of the License, or</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> (at your option) any later version.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This program is distributed in the hope that it will be useful,</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> but WITHOUT ANY WARRANTY; without even the implied warranty of</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU General Public License for more details.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> You should have received a copy of the GNU General Public License</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> along with this program; if not, write to the Free Software</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Also add information on how to contact you by electronic and paper mail.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If the program is interactive, make it output a short notice like this</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">when it starts in an interactive mode:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Gnomovision version 69, Copyright (C) 19yy name of author</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This is free software, and you are welcome to redistribute it</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> under certain conditions; type `show c' for details.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">The hypothetical commands `show w' and `show c' should show the appropriate</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">parts of the General Public License. Of course, the commands you use may</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be called something other than `show w' and `show c'; they could even be</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">mouse-clicks or menu items--whatever suits your program.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You should also get your employer (if you work as a programmer) or your</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">school, if any, to sign a &quot;copyright disclaimer&quot; for the program, if</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">necessary. Here is a sample; alter the names:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Yoyodyne, Inc., hereby disclaims all copyright interest in the program</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> `Gnomovision' (which makes passes at compilers) written by James Hacker.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> &lt;signature of Ty Coon&gt;, 1 April 1989</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Ty Coon, President of Vice</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This General Public License does not permit incorporating your program into</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">proprietary programs. If your program is a subroutine library, you may</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">consider it more useful to permit linking proprietary applications with the</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">library. If this is what you want to do, use the GNU Library General</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Public License instead of this License.</span></p></body></html> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> @@ -505,22 +164,22 @@ true - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This program is distributed under the terms of the GPL v2.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU GENERAL PUBLIC LICENSE</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Version 2, June 1991</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Copyright (C) 1989, 1991 Free Software Foundation, Inc.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 675 Mass Ave, Cambridge, MA 02139, USA</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Everyone is permitted to copy and distribute verbatim copies</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> of this license document, but changing it is not allowed.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Preamble</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> The licenses for most software are designed to take away your</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">freedom to share and change it. By contrast, the GNU General Public</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">License is intended to guarantee your freedom to share and change free</span></p> @@ -530,48 +189,48 @@ <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">using it. (Some other Free Software Foundation software is covered by</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the GNU Library General Public License instead.) You can apply it to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">your programs, too.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> When we speak of free software, we are referring to freedom, not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">price. Our General Public Licenses are designed to make sure that you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">have the freedom to distribute copies of free software (and charge for</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this service if you wish), that you receive source code or can get it</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">if you want it, that you can change the software or use pieces of it</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">in new free programs; and that you know you can do these things.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> To protect your rights, we need to make restrictions that forbid</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">anyone to deny you these rights or to ask you to surrender the rights.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">These restrictions translate to certain responsibilities for you if you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute copies of the software, or if you modify it.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> For example, if you distribute copies of such a program, whether</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">gratis or for a fee, you must give the recipients all the rights that</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">you have. You must make sure that they, too, receive or can get the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">source code. And you must show them these terms so they know their</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">rights.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> We protect your rights with two steps: (1) copyright the software, and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">(2) offer you this license which gives you legal permission to copy,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute and/or modify the software.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Also, for each author's protection and ours, we want to make certain</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that everyone understands that there is no warranty for this free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">software. If the software is modified by someone else and passed on, we</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">want its recipients to know that what they have is not the original, so</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">that any problems introduced by others will not reflect on the original</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">authors' reputations.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Finally, any free program is threatened constantly by software</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patents. We wish to avoid the danger that redistributors of a free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">program will individually obtain patent licenses, in effect making the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">program proprietary. To prevent this, we have made it clear that any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patent must be licensed for everyone's free use or not licensed at all.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> The precise terms and conditions for copying, distribution and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">modification follow.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU GENERAL PUBLIC LICENSE</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 0. This License applies to any program or other work which contains</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">a notice placed by the copyright holder saying it may be distributed</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">under the terms of this General Public License. The &quot;Program&quot;, below,</span></p> @@ -581,14 +240,14 @@ <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">either verbatim or with modifications and/or translated into another</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">language. (Hereinafter, translation is included without limitation in</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the term &quot;modification&quot;.) Each licensee is addressed as &quot;you&quot;.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Activities other than copying, distribution and modification are not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">covered by this License; they are outside its scope. The act of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">running the Program is not restricted, and the output from the Program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">is covered only if its contents constitute a work based on the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program (independent of having been made by running the Program).</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Whether that is true depends on what the Program does.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 1. You may copy and distribute verbatim copies of the Program's</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">source code as you receive it, in any medium, provided that you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">conspicuously and appropriately publish on each copy an appropriate</span></p> @@ -596,23 +255,23 @@ <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">notices that refer to this License and to the absence of any warranty;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">and give any other recipients of the Program a copy of this License</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">along with the Program.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You may charge a fee for the physical act of transferring a copy, and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">you may at your option offer warranty protection in exchange for a fee.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 2. You may modify your copy or copies of the Program or any portion</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of it, thus forming a work based on the Program, and copy and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute such modifications or work under the terms of Section 1</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">above, provided that you also meet all of these conditions:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a) You must cause the modified files to carry prominent notices</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> stating that you changed the files and the date of any change.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> b) You must cause any work that you distribute or publish, that in</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> whole or in part contains or is derived from the Program or any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> part thereof, to be licensed as a whole at no charge to all third</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> parties under the terms of this License.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> c) If the modified program normally reads commands interactively</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> when run, you must cause it, when started running for such</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> interactive use in the most ordinary way, to print or display an</span></p> @@ -633,38 +292,38 @@ <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">on the Program, the distribution of the whole must be on the terms of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License, whose permissions for other licensees extend to the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">entire whole, and thus to each and every part regardless of who wrote it.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Thus, it is not the intent of this section to claim rights or contest</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">your rights to work written entirely by you; rather, the intent is to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">exercise the right to control the distribution of derivative or</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">collective works based on the Program.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">In addition, mere aggregation of another work not based on the Program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">with the Program (or with a work based on the Program) on a volume of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">a storage or distribution medium does not bring the other work under</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the scope of this License.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 3. You may copy and distribute the Program (or a work based on it,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">under Section 2) in object code or executable form under the terms of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Sections 1 and 2 above provided that you also do one of the following:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> a) Accompany it with the complete corresponding machine-readable</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> source code, which must be distributed under the terms of Sections</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 1 and 2 above on a medium customarily used for software interchange; or,</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> b) Accompany it with a written offer, valid for at least three</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> years, to give any third party, for a charge no more than your</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> cost of physically performing source distribution, a complete</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> machine-readable copy of the corresponding source code, to be</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> distributed under the terms of Sections 1 and 2 above on a medium</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> customarily used for software interchange; or,</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> c) Accompany it with the information you received as to the offer</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> to distribute corresponding source code. (This alternative is</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> allowed only for noncommercial distribution and only if you</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> received the program in object code or executable form with such</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> an offer, in accord with Subsection b above.)</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">The source code for a work means the preferred form of the work for</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">making modifications to it. For an executable work, complete source</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">code means all the source code for all modules it contains, plus any</span></p> @@ -675,7 +334,7 @@ <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">form) with the major components (compiler, kernel, and so on) of the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">operating system on which the executable runs, unless that component</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">itself accompanies the executable.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If distribution of executable or object code is made by offering</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">access to copy from a designated place, then offering equivalent</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">access to copy the source code from the same place counts as</span></p> @@ -689,7 +348,7 @@ <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">However, parties who have received copies, or rights, from you under</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License will not have their licenses terminated so long as such</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">parties remain in full compliance.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 5. You are not required to accept this License, since you have not</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">signed it. However, nothing else grants you permission to modify or</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">distribute the Program or its derivative works. These actions are</span></p> @@ -698,7 +357,7 @@ <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program), you indicate your acceptance of this License to do so, and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">all its terms and conditions for copying, distributing or modifying</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the Program or works based on it.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 6. Each time you redistribute the Program (or any work based on the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Program), the recipient automatically receives a license from the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">original licensor to copy, distribute or modify the Program subject to</span></p> @@ -706,7 +365,7 @@ <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">restrictions on the recipients' exercise of the rights granted herein.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You are not responsible for enforcing compliance by third parties to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 7. If, as a consequence of a court judgment or allegation of patent</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">infringement or for any other reason (not limited to patent issues),</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">conditions are imposed on you (whether by court order, agreement or</span></p> @@ -719,12 +378,12 @@ <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">all those who receive copies directly or indirectly through you, then</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the only way you could satisfy both it and this License would be to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">refrain entirely from distribution of the Program.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If any portion of this section is held invalid or unenforceable under</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">any particular circumstance, the balance of the section is intended to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">apply and the section as a whole is intended to apply in other</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">circumstances.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">It is not the purpose of this section to induce you to infringe any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">patents or other property right claims or to contest validity of any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">such claims; this section has the sole purpose of protecting the</span></p> @@ -735,7 +394,7 @@ <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">system; it is up to the author/donor to decide if he or she is willing</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to distribute software through any other system and a licensee cannot</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">impose that choice.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This section is intended to make thoroughly clear what is believed to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be a consequence of the rest of this License.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> </span></p> @@ -746,12 +405,12 @@ <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">those countries, so that distribution is permitted only in or among</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">countries not thus excluded. In such case, this License incorporates</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the limitation as if written in the body of this License.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 9. The Free Software Foundation may publish revised and/or new versions</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of the General Public License from time to time. Such new versions will</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be similar in spirit to the present version, but may differ in detail to</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">address new problems or concerns.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Each version is given a distinguishing version number. If the Program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">specifies a version number of this License which applies to it and &quot;any</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">later version&quot;, you have the option of following the terms and conditions</span></p> @@ -759,7 +418,7 @@ <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Software Foundation. If the Program does not specify a version number of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">this License, you may choose any version ever published by the Free Software</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Foundation.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 10. If you wish to incorporate parts of the Program into other free</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">programs whose distribution conditions are different, write to the author</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to ask for permission. For software which is copyrighted by the Free</span></p> @@ -767,9 +426,9 @@ <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">make exceptions for this. Our decision will be guided by the two goals</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of preserving the free status of all derivatives of our free software and</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">of promoting the sharing and reuse of software generally.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> NO WARRANTY</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES</span></p> @@ -779,7 +438,7 @@ <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">REPAIR OR CORRECTION.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,</span></p> @@ -789,63 +448,63 @@ <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">POSSIBILITY OF SUCH DAMAGES.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> END OF TERMS AND CONDITIONS</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> How to Apply These Terms to Your New Programs</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> If you develop a new program, and you want it to be of the greatest</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">possible use to the public, the best way to achieve this is to make it</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">free software which everyone can redistribute and change under these terms.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> To do so, attach the following notices to the program. It is safest</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">to attach them to the start of each source file to most effectively</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">convey the exclusion of warranty; and each file should have at least</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">the &quot;copyright&quot; line and a pointer to where the full notice is found.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> &lt;one line to give the program's name and a brief idea of what it does.&gt;</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Copyright (C) 19yy &lt;name of author&gt;</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This program is free software; you can redistribute it and/or modify</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> it under the terms of the GNU General Public License as published by</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> the Free Software Foundation; either version 2 of the License, or</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> (at your option) any later version.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This program is distributed in the hope that it will be useful,</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> but WITHOUT ANY WARRANTY; without even the implied warranty of</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> GNU General Public License for more details.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> You should have received a copy of the GNU General Public License</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> along with this program; if not, write to the Free Software</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"><br /></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">Also add information on how to contact you by electronic and paper mail.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">If the program is interactive, make it output a short notice like this</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">when it starts in an interactive mode:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Gnomovision version 69, Copyright (C) 19yy name of author</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> This is free software, and you are welcome to redistribute it</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> under certain conditions; type `show c' for details.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">The hypothetical commands `show w' and `show c' should show the appropriate</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">parts of the General Public License. Of course, the commands you use may</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">be called something other than `show w' and `show c'; they could even be</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">mouse-clicks or menu items--whatever suits your program.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">You should also get your employer (if you work as a programmer) or your</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">school, if any, to sign a &quot;copyright disclaimer&quot; for the program, if</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">necessary. Here is a sample; alter the names:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Yoyodyne, Inc., hereby disclaims all copyright interest in the program</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> `Gnomovision' (which makes passes at compilers) written by James Hacker.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> &lt;signature of Ty Coon&gt;, 1 April 1989</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"> Ty Coon, President of Vice</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt; color:#ffffff;"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">This General Public License does not permit incorporating your program into</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">proprietary programs. If your program is a subroutine library, you may</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif'; font-size:9pt; color:#ffffff;">consider it more useful to permit linking proprietary applications with the</span></p> @@ -855,10 +514,6 @@ - layoutWidget - logoLabel - TabWidget3 - aboutTxt diff -Nru hydrogen-0.9.6.1/src/gui/src/UI/DonationDialog.ui hydrogen-0.9.7/src/gui/src/UI/DonationDialog.ui --- hydrogen-0.9.6.1/src/gui/src/UI/DonationDialog.ui 1970-01-01 00:00:00.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/UI/DonationDialog.ui 2016-11-05 08:22:50.000000000 +0000 @@ -0,0 +1,178 @@ + + + DonationDialog_UI + + + + 0 + 0 + 682 + 242 + + + + Form + + + + + 0 + 0 + 681 + 241 + + + + + + + Qt::Horizontal + + + QSizePolicy::Maximum + + + + 30 + 20 + + + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + <html><head/><body><p align="justify">Hydrogen is an open source project which is developed by multiple people in their spare time. By making a donation you can say &quot;thank you&quot; to the involved persons.</p></body></html> + + + true + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + Sebastian Moors (aka mauser): Maintainer / Developer + + + + + + + Michael Wolkstein (aka wolke): Forum hosting + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + Choose random entry. + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Donate! + + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Maximum + + + + 30 + 20 + + + + + + + + + + diff -Nru hydrogen-0.9.6.1/src/gui/src/UI/DrumkitManager_UI.ui hydrogen-0.9.7/src/gui/src/UI/DrumkitManager_UI.ui --- hydrogen-0.9.6.1/src/gui/src/UI/DrumkitManager_UI.ui 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/UI/DrumkitManager_UI.ui 1970-01-01 00:00:00.000000000 +0000 @@ -1,433 +0,0 @@ - - DrumkitManager_UI - - - - 0 - 0 - 522 - 421 - - - - Form1 - - - - - 5 - 5 - 510 - 401 - - - - - Load - - - - - 230 - 10 - 271 - 351 - - - - QFrame::StyledPanel - - - QFrame::Raised - - - - - 10 - 40 - 260 - 35 - - - - ### Drumkit author - - - Qt::AlignVCenter - - - - - false - - - - 150 - 320 - 110 - 24 - - - - Delete drumkit - - - - - - 10 - 10 - 260 - 35 - - - - ### Drumkit name - - - - - - 10 - 80 - 260 - 231 - - - - ### Drumkit info - - - Qt::AlignTop - - - true - - - - - - - 10 - 340 - 211 - 21 - - - - Load drumkit - - - false - - - - - - 10 - 10 - 211 - 331 - - - - true - - - - - - Save - - - - - 10 - 45 - 130 - 24 - - - - Author - - - - - - 10 - 85 - 130 - 24 - - - - Info - - - - - - 140 - 45 - 250 - 24 - - - - - - - 10 - 10 - 130 - 24 - - - - Drumkit name - - - - - - 400 - 10 - 100 - 24 - - - - Save - - - false - - - - - - 140 - 10 - 250 - 24 - - - - - - - 140 - 80 - 251 - 281 - - - - - - - Import - - - - - 10 - 10 - 380 - 20 - - - - Drumkit filename - - - - - - 10 - 30 - 380 - 24 - - - - - - - 400 - 30 - 100 - 24 - - - - Browse - - - false - - - - - - 400 - 65 - 100 - 24 - - - - Import - - - false - - - - - - 10 - 60 - 381 - 301 - - - - - - - - - 10 - 80 - 360 - 115 - - - - <b> -Download more drumkits at <br> -http://www.hydrogen-music.org -</b> - - - Qt::AlignTop - - - - - - 10 - 10 - 360 - 50 - - - - ### The drumkit will be installed zncxbmzbxcmznxbcmz - - - Qt::AlignTop - - - true - - - - - - - Export - - - - - 400 - 30 - 100 - 24 - - - - Browse - - - false - - - - - - 10 - 30 - 380 - 24 - - - - - - - 10 - 10 - 375 - 20 - - - - Drumkit directory - - - - - - 10 - 65 - 380 - 24 - - - - - - false - - - - 400 - 65 - 100 - 24 - - - - Export - - - false - - - - - - - - loadTab_loadDrumkitBtn - loadTab_deleteDrumkitBtn - saveTab_nameTxt - saveTab_authorTxt - saveTab_saveBtn - importTab_drumkitPathTxt - importTab_browseBtn - importTab_importBtn - exportTab_drumkitPathTxt - exportTab_drumkitList - exportTab_browseBtn - exportTab_exportBtn - tabWidget - - - - - diff -Nru hydrogen-0.9.6.1/src/gui/src/UI/ExportSongDialog_UI.ui hydrogen-0.9.7/src/gui/src/UI/ExportSongDialog_UI.ui --- hydrogen-0.9.6.1/src/gui/src/UI/ExportSongDialog_UI.ui 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/UI/ExportSongDialog_UI.ui 2016-11-05 08:22:50.000000000 +0000 @@ -250,6 +250,11 @@ + 88200 + + + + 96000 diff -Nru hydrogen-0.9.6.1/src/gui/src/UI/PreferencesDialog_UI.ui hydrogen-0.9.7/src/gui/src/UI/PreferencesDialog_UI.ui --- hydrogen-0.9.6.1/src/gui/src/UI/PreferencesDialog_UI.ui 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/UI/PreferencesDialog_UI.ui 2016-11-05 08:22:50.000000000 +0000 @@ -7,7 +7,7 @@ 0 0 559 - 440 + 451 @@ -69,6 +69,13 @@ + + + Use relative paths for playlist + + + + Use lash @@ -677,6 +684,24 @@ + + + + Discard midi messages after action has been triggered + + + + + + + + + Use output note as input note + + + + + @@ -828,6 +853,9 @@ QFrame::Box + + 0 + 0 @@ -835,7 +863,7 @@ Default interface layout - Qt::AlignCenter + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter 0 @@ -865,9 +893,33 @@ + + + + + TextLabel + + + + + + + + + + Coloring method for Song Editor elements + + + + + + + + + - <i>After a font change the application must be restarted.</i> + <html><head/><body><p><span style=" font-style:italic;">After changing a font or the interface layout the application must be restarted.</span></p></body></html> true @@ -984,7 +1036,7 @@ MidiTable QTableWidget -
      ../src/widgets/midiTable.h
      +
      ../src/widgets/MidiTable.h
      diff -Nru hydrogen-0.9.6.1/src/gui/src/UndoActions.h hydrogen-0.9.7/src/gui/src/UndoActions.h --- hydrogen-0.9.6.1/src/gui/src/UndoActions.h 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/UndoActions.h 2016-11-05 08:22:50.000000000 +0000 @@ -720,14 +720,14 @@ HydrogenApp* h2app = HydrogenApp::get_instance(); h2app->getPatternEditorPanel()->getDrumPatternEditor()->functionPasteNotesUndoAction( __appliedList ); } - + virtual void redo() { //qDebug() << "paste note sequence Redo " ; HydrogenApp* h2app = HydrogenApp::get_instance(); h2app->getPatternEditorPanel()->getDrumPatternEditor()->functionPasteNotesRedoAction( __patternList, __appliedList ); } - + private: std::list< H2Core::Pattern* > __patternList; std::list< H2Core::Pattern* > __appliedList; @@ -821,28 +821,30 @@ class SE_dragInstrumentAction : public QUndoCommand { public: - SE_dragInstrumentAction( QString sDrumkitName, QString sInstrumentName, int nTargetInstrument ){ + SE_dragInstrumentAction( QString sDrumkitName, QString sInstrumentName, int nTargetInstrument){ setText( QString( "Drop instrument" ) ); __sDrumkitName = sDrumkitName; __sInstrumentName = sInstrumentName; __nTargetInstrument = nTargetInstrument; + __addedComponents = new std::vector(); } virtual void undo() { //qDebug() << "drop Instrument Undo "; HydrogenApp* h2app = HydrogenApp::get_instance(); - h2app->getPatternEditorPanel()->getDrumPatternEditor()->functionDropInstrumentUndoAction( __nTargetInstrument ); + h2app->getPatternEditorPanel()->getDrumPatternEditor()->functionDropInstrumentUndoAction( __nTargetInstrument, __addedComponents ); } virtual void redo() { //qDebug() << "drop Instrument Redo " ; HydrogenApp* h2app = HydrogenApp::get_instance(); - h2app->getPatternEditorPanel()->getDrumPatternEditor()->functionDropInstrumentRedoAction( __sDrumkitName, __sInstrumentName, __nTargetInstrument ); + h2app->getPatternEditorPanel()->getDrumPatternEditor()->functionDropInstrumentRedoAction( __sDrumkitName, __sInstrumentName, __nTargetInstrument, __addedComponents ); } private: QString __sDrumkitName; QString __sInstrumentName; int __nTargetInstrument; + std::vector* __addedComponents; }; @@ -884,7 +886,7 @@ //qDebug() << "delete Instrument Redo " ; HydrogenApp* h2app = HydrogenApp::get_instance(); //delete an instrument from list - h2app->getPatternEditorPanel()->getDrumPatternEditor()->functionDropInstrumentUndoAction( __nSelectedInstrument ); + h2app->getPatternEditorPanel()->getDrumPatternEditor()->functionDropInstrumentUndoAction( __nSelectedInstrument, new std::vector() ); } private: std::list< H2Core::Note* > __noteList; diff -Nru hydrogen-0.9.6.1/src/gui/src/widgets/Button.cpp hydrogen-0.9.7/src/gui/src/widgets/Button.cpp --- hydrogen-0.9.6.1/src/gui/src/widgets/Button.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/widgets/Button.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -36,7 +36,7 @@ const char* Button::__class_name = "Button"; -Button::Button( QWidget * pParent, const QString& sOnImage, const QString& sOffImage, const QString& sOverImage, QSize size, bool use_skin_style ) +Button::Button( QWidget * pParent, const QString& sOnImage, const QString& sOffImage, const QString& sOverImage, QSize size, bool use_skin_style, bool enable_press_hold ) : QWidget( pParent ) , Object( __class_name ) , m_bPressed( false ) @@ -45,6 +45,7 @@ , m_overPixmap( size ) , m_bMouseOver( false ) , __use_skin_style(use_skin_style) + , __enable_press_hold(enable_press_hold) { // draw the background: slower but useful with transparent images! //setAttribute(Qt::WA_NoBackground); @@ -66,6 +67,10 @@ } this->setStyleSheet("font-size: 9px; font-weight: bold;"); + + m_timerTimeout = 0; + m_timer = new QTimer(this); + connect(m_timer, SIGNAL(timeout()), this, SLOT(buttonPressed_timer_timeout())); } @@ -127,6 +132,11 @@ m_bPressed = true; update(); emit mousePress(this); + + if ( ev->button() == Qt::LeftButton && __enable_press_hold) { + m_timerTimeout = 2000; + buttonPressed_timer_timeout(); + } } @@ -136,7 +146,10 @@ setPressed( false ); if (ev->button() == Qt::LeftButton) { - emit clicked(this); + if(__enable_press_hold) + m_timer->stop(); + else + emit clicked(this); } else if (ev->button() == Qt::RightButton) { emit rightClicked(this); @@ -144,6 +157,17 @@ } + +void Button::buttonPressed_timer_timeout() +{ + emit clicked(this); + + if(m_timerTimeout > 100) + m_timerTimeout = m_timerTimeout / 2; + m_timer->start(m_timerTimeout); +} + + void Button::setFontSize(int size) { m_textFont.setPointSize(size); @@ -275,7 +299,7 @@ ToggleButton::ToggleButton( QWidget *pParent, const QString& sOnImg, const QString& sOffImg, const QString& sOverImg, QSize size, bool use_skin_style ) - : Button( pParent, sOnImg, sOffImg, sOverImg, size, use_skin_style ) + : Button( pParent, sOnImg, sOffImg, sOverImg, size, use_skin_style, false ) { } diff -Nru hydrogen-0.9.6.1/src/gui/src/widgets/Button.h hydrogen-0.9.7/src/gui/src/widgets/Button.h --- hydrogen-0.9.6.1/src/gui/src/widgets/Button.h 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/widgets/Button.h 2016-11-05 08:22:50.000000000 +0000 @@ -49,7 +49,8 @@ const QString& sOffImg, const QString& sOverImg, QSize size, - bool use_skin_style = false + bool use_skin_style = false, + bool enable_press_hold = false ); virtual ~Button(); @@ -64,6 +65,9 @@ void rightClicked(Button *pBtn); void mousePress(Button *pBtn); + protected slots: + void buttonPressed_timer_timeout(); + protected: bool m_bPressed; @@ -77,6 +81,7 @@ private: bool m_bMouseOver; bool __use_skin_style; + bool __enable_press_hold; void mousePressEvent(QMouseEvent *ev); void mouseReleaseEvent(QMouseEvent *ev); @@ -84,6 +89,9 @@ void leaveEvent(QEvent *ev); void paintEvent( QPaintEvent* ev); + QTimer *m_timer; + int m_timerTimeout; + bool loadImage( const QString& sFilename, QPixmap& pixmap ); }; diff -Nru hydrogen-0.9.6.1/src/gui/src/widgets/DownloadWidget.cpp hydrogen-0.9.7/src/gui/src/widgets/DownloadWidget.cpp --- hydrogen-0.9.6.1/src/gui/src/widgets/DownloadWidget.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/widgets/DownloadWidget.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -24,6 +24,7 @@ #include #include +#include const char* Download::__class_name = "Download"; @@ -36,15 +37,16 @@ , __bytes_total( 0 ) , __remote_url( download_url ) , __local_file( local_file ) + , __reply(0) + , __error(false) { if ( !__local_file.isEmpty() ) { - INFOLOG( QString( "Downloading '%1' in '%2'" ).arg( __remote_url ).arg( __local_file ) ); - + INFOLOG( QString( "Downloading '%1' in '%2'" ).arg( __remote_url.toString() ).arg( __local_file ) ); } else { - INFOLOG( QString( "Downloading '%1'" ).arg( __remote_url ) ); + INFOLOG( QString( "Downloading '%1'" ).arg( __remote_url.toString() ) ); } - QUrl url( __remote_url ); + __http_client = new QNetworkAccessManager(this); QString sEnvHttpProxy = QString( getenv( "http_proxy" ) ); int nEnvHttpPort = 0; @@ -54,25 +56,27 @@ nEnvHttpPort = sEnvHttpProxy.right( sEnvHttpProxy.length() - sEnvHttpProxy.indexOf(':') - 1 ).toInt(); sEnvHttpProxy = sEnvHttpProxy.left( sEnvHttpProxy.indexOf(':') ); - connect( &__http_client, SIGNAL( done( bool ) ), this, SLOT( __fetch_done( bool ) ) ); - connect( &__http_client, SIGNAL( dataReadProgress( int, int ) ), this, SLOT( __fetch_progress( int, int ) ) ); - connect( &__http_client, SIGNAL( requestFinished( int, bool ) ), this, SLOT( __http_request_finished( int, bool ) ) ); - connect( &__http_client, SIGNAL( responseHeaderReceived( const QHttpResponseHeader& ) ), SLOT( __header_received( const QHttpResponseHeader& ) ) ); - - QString sPath = url.path(); - sPath = sPath.replace( " ", "%20" ); - - QHttpRequestHeader header( "GET", sPath ); - header.setValue( "Host", url.host() ); - __time.start(); if ( ( !sEnvHttpProxy.isNull() ) && ( nEnvHttpPort != 0 ) ) { - __http_client.setProxy( sEnvHttpProxy, nEnvHttpPort, sEnvHttpUser, sEnvHttpPassword ); - } + QNetworkProxy proxy; + proxy.setType( QNetworkProxy::DefaultProxy ); + proxy.setHostName( sEnvHttpProxy ); + proxy.setPort( nEnvHttpPort ); + proxy.setUser( sEnvHttpUser ); + proxy.setPassword( sEnvHttpPassword ); + __http_client->setProxy(proxy); + } + + QNetworkRequest getReq; + getReq.setUrl( __remote_url ); + ERRORLOG(__remote_url.toString()); + getReq.setRawHeader( "User-Agent" , "Hydrogen" ); + + __reply = __http_client->get( getReq ); - __http_client.setHost( url.host() ); - __http_client.request( header ); + connect(__reply, SIGNAL(finished()),this, SLOT(finished())); + connect(__reply, SIGNAL(downloadProgress(qint64,qint64)), this, SLOT(downloadProgress(qint64,qint64))); } @@ -81,35 +85,46 @@ { } - - /// TODO: devo salvare il file sul disco su una dir temporanea e poi spostarlo se e' tutto ok. -void Download::__fetch_done( bool bError ) +void Download::finished() { - if ( bError ) { - ERRORLOG( "Error retrieving the resource." ); + if ( __reply->error() ) { + __error = true; + ERRORLOG(QString( trUtf8( "Importing item failed: %1" ) ).arg( __reply->errorString() )); + QMessageBox::information( this, "Hydrogen", QString( trUtf8( "Importing item failed: %1" ) ).arg( __reply->errorString() ) ); reject(); return; } - if ( !__redirect_url.isEmpty() ) { - reject(); - return; + + int StatusAttribute = __reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); + if(StatusAttribute >= 200 && StatusAttribute < 300){ + //do nothing, handling will be done later.. + } else if(StatusAttribute >= 300 && StatusAttribute < 400){ + QVariant RedirectAttribute = __reply->attribute(QNetworkRequest::RedirectionTargetAttribute); + + if ( RedirectAttribute != 0 ) { + + __redirect_url = __remote_url.resolved(RedirectAttribute.toUrl()); + __reply->deleteLater(); + + reject(); + return; + } } INFOLOG( "Download completed. " ); if ( __local_file.isEmpty() ) { // store the text received only when not using the file. - __feed_xml_string = __http_client.readAll(); + __feed_xml_string = QString( __reply->readAll() ); } else { QFile file( __local_file ); if ( !file.open( QIODevice::WriteOnly ) ) { ERRORLOG( QString( "Unable to save %1" ).arg( __local_file ) ); - } else { - file.write( __http_client.readAll() ); + file.write(__reply->readAll()); file.flush(); file.close(); } @@ -119,7 +134,7 @@ -void Download::__fetch_progress ( int done, int total ) +void Download::downloadProgress( qint64 done, qint64 total ) { __bytes_current = done; __bytes_total = total; @@ -128,28 +143,6 @@ } - -void Download::__http_request_finished( int requestId, bool error ) -{ - if ( error ) { - ERRORLOG( "Error: " + __http_client.errorString() ); - return; - } -} - - - -void Download::__header_received( const QHttpResponseHeader& res ) -{ - //INFOLOG( "Header received: " + to_string( res.statusCode() ) ); - if ( ( res.statusCode() == 301 ) || ( res.statusCode() == 302 ) || ( res.statusCode() == 307 ) ) { - __redirect_url = res.value( "location" ); - INFOLOG( "Received redirect to: " + __redirect_url ); - //__http_client.abort(); - } -} - - // :::::::::::::::::::.. @@ -176,7 +169,6 @@ __progress_bar->setMaximum( 100 ); __eta_label = new QLabel( NULL ); -// __eta_label->setFont( boldFont ); __eta_label->setAlignment( Qt::AlignHCenter ); diff -Nru hydrogen-0.9.6.1/src/gui/src/widgets/DownloadWidget.h hydrogen-0.9.7/src/gui/src/widgets/DownloadWidget.h --- hydrogen-0.9.6.1/src/gui/src/widgets/DownloadWidget.h 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/widgets/DownloadWidget.h 2016-11-05 08:22:50.000000000 +0000 @@ -31,8 +31,8 @@ class Download : public QDialog, public H2Core::Object { - H2_OBJECT -Q_OBJECT + H2_OBJECT + Q_OBJECT public: Download( QWidget* parent, const QString& download_url, const QString& local_file ); @@ -40,40 +40,45 @@ int get_percent_done() { return (int)__download_percent; } const QString& get_xml_content() { return __feed_xml_string; } + bool get_error() { return __error; } private slots: - void __fetch_done( bool bError ); - void __fetch_progress( int done, int total ); - void __http_request_finished( int requestId, bool error ); - void __header_received( const QHttpResponseHeader& res ); + void finished(); + void downloadProgress( qint64 done, qint64 total ); protected: - QHttp __http_client; - QTime __time; + QNetworkAccessManager* __http_client; + QNetworkReply* __reply; - float __download_percent; - int __eta; - int __bytes_current; - int __bytes_total; - QString __remote_url; - QString __local_file; - QString __feed_xml_string; + QTime __time; - QString __redirect_url; + float __download_percent; + int __eta; + qint64 __bytes_current; + qint64 __bytes_total; + + + QUrl __redirect_url; + QUrl __remote_url; + + QString __local_file; + QString __feed_xml_string; + + bool __error; }; class DownloadWidget : public Download { - H2_OBJECT -Q_OBJECT + H2_OBJECT + Q_OBJECT public: DownloadWidget( QWidget* parent, const QString& title, const QString& download_url, const QString& local_file = "" ); ~DownloadWidget(); - QString get_redirect_url() { return __redirect_url; } + QUrl get_redirect_url() { return __redirect_url; } private slots: void updateStats(); diff -Nru hydrogen-0.9.6.1/src/gui/src/widgets/Fader.cpp hydrogen-0.9.7/src/gui/src/widgets/Fader.cpp --- hydrogen-0.9.6.1/src/gui/src/widgets/Fader.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/widgets/Fader.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -95,10 +95,10 @@ void Fader::mousePressEvent(QMouseEvent *ev) { - if ( ev->button() == Qt::LeftButton && ev->modifiers() == Qt::ShiftModifier ){ - MidiSenseWidget midiSense( this, true, this->getAction() ); - midiSense.exec(); - } + if ( ev->button() == Qt::LeftButton && ev->modifiers() == Qt::ShiftModifier ){ + MidiSenseWidget midiSense( this, true, this->getAction() ); + midiSense.exec(); + } } @@ -210,15 +210,11 @@ QPainter painter(this); // background -// painter.drawPixmap( rect(), m_back, QRect( 0, 0, 23, 116 ) ); painter.drawPixmap( ev->rect(), m_back, ev->rect() ); - // peak leds - //float fRange = abs( m_fMaxPeak ) + abs( m_fMinPeak ); float realPeak_L = m_fPeakValue_L - m_fMinPeak; - //int peak_L = 116 - ( realPeak_L / fRange ) * 116.0; int peak_L = 116 - ( realPeak_L / ( m_fMaxPeak - m_fMinPeak ) ) * 116.0; if ( peak_L > 116 ) { @@ -243,11 +239,8 @@ float realVal = m_fValue - m_fMinValue; -// uint knob_y = (uint)( 116.0 - ( 86.0 * ( m_fValue / fRange ) ) ); uint knob_y = (uint)( 116.0 - ( 86.0 * ( realVal / fRange ) ) ); - - painter.drawPixmap( QRect( 4, knob_y - knob_height, knob_width, knob_height), m_knob, QRect( 0, 0, knob_width, knob_height ) ); } } @@ -366,8 +359,8 @@ void MasterFader::mousePressEvent(QMouseEvent *ev) { if ( ev->button() == Qt::LeftButton && ev->modifiers() == Qt::ShiftModifier ){ - MidiSenseWidget midiSense( this, true, this->getAction() ); - midiSense.exec(); + MidiSenseWidget midiSense( this, true, this->getAction() ); + midiSense.exec(); } } @@ -461,17 +454,6 @@ uint knob_y = (uint)( 190.0 - ( 159.0 * ( m_fValue / ( m_fMax - m_fMin ) ) ) ); painter.drawPixmap( QRect( 19, knob_y - knob_height, knob_width, knob_height), m_knob, QRect( 0, 0, knob_width, knob_height ) ); } - - -/* - if ( m_bWithoutKnob == false ) { - // knob - static const uint knob_height = 29; - static const uint knob_width = 15; - uint knob_y = (uint)( 116.0 - ( 86.0 * ( m_fValue / ( m_fMax - m_fMin ) ) ) ); - painter.drawPixmap( QRect( 4, knob_y - knob_height, knob_width, knob_height), knob, QRect( 0, 0, knob_width, knob_height ) ); - } -*/ } @@ -515,6 +497,8 @@ m_nWidgetWidth = 18; m_nWidgetHeight = 18; m_fValue = 0.0; + m_fMousePressValue = 0.0; + m_fMousePressY = 0.0; if ( m_background == NULL ) { QString sBackground_path = Skin::getImagePath() + "/mixerPanel/knob_images.png"; diff -Nru hydrogen-0.9.6.1/src/gui/src/widgets/MidiSenseWidget.cpp hydrogen-0.9.7/src/gui/src/widgets/MidiSenseWidget.cpp --- hydrogen-0.9.6.1/src/gui/src/widgets/MidiSenseWidget.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/widgets/MidiSenseWidget.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -26,32 +26,36 @@ const char* MidiSenseWidget::__class_name = "MidiSenseWidget"; -MidiSenseWidget::MidiSenseWidget(QWidget* pParent, bool directWr , MidiAction* midiAction ): QDialog( pParent ) , Object(__class_name) +MidiSenseWidget::MidiSenseWidget(QWidget* pParent, bool directWr, MidiAction* midiAction): QDialog( pParent ) , Object(__class_name) { - directWrite = directWr; - action = midiAction; - + m_DirectWrite = directWr; + m_pAction = midiAction; setWindowTitle( "Waiting.." ); setFixedSize( 280, 100 ); + + bool midiOperable = false; m_pURLLabel = new QLabel( this ); m_pURLLabel->setAlignment( Qt::AlignCenter ); - if(action != NULL){ - m_pURLLabel->setText( "Waiting for midi input..." ); - } else{ - - /* - * Check if this widget got called from the midiTable in the preferences - * window(directWrite=false) or by clicking on a midiLearn-capable gui item(directWrite=true) - */ - - if(directWrite){ - m_pURLLabel->setText( "This element is not midi operable." ); - } else { - m_pURLLabel->setText( "Waiting for midi input..." ); - } + if(m_pAction != NULL){ + m_pURLLabel->setText( "Waiting for midi input..." ); + midiOperable = true; + } else { + + /* + * Check if this widget got called from the midiTable in the preferences + * window(directWrite=false) or by clicking on a midiLearn-capable gui item(directWrite=true) + */ + + if(m_DirectWrite){ + m_pURLLabel->setText( trUtf8("This element is not midi operable.") ); + midiOperable = false; + } else { + m_pURLLabel->setText( trUtf8("Waiting for midi input...") ); + midiOperable = true; + } } QVBoxLayout* pVBox = new QVBoxLayout( this ); @@ -61,13 +65,21 @@ H2Core::Hydrogen *pEngine = H2Core::Hydrogen::get_instance(); pEngine->lastMidiEvent = ""; pEngine->lastMidiEventParameter = 0; + + m_LastMidiEventParameter = 0; m_pUpdateTimer = new QTimer( this ); - connect( m_pUpdateTimer, SIGNAL( timeout() ), this, SLOT( updateMidi() ) ); - - m_pUpdateTimer->start( 100 ); + if(midiOperable) + { + /* + * If the widget is not midi operable, we can omit + * starting the timer which listens to midi input.. + */ + connect( m_pUpdateTimer, SIGNAL( timeout() ), this, SLOT( updateMidi() ) ); + m_pUpdateTimer->start( 100 ); + } }; MidiSenseWidget::~MidiSenseWidget(){ @@ -78,31 +90,33 @@ void MidiSenseWidget::updateMidi(){ H2Core::Hydrogen *pEngine = H2Core::Hydrogen::get_instance(); if( !pEngine->lastMidiEvent.isEmpty() ){ - lastMidiEvent = pEngine->lastMidiEvent; - lastMidiEventParameter = pEngine->lastMidiEventParameter; + m_sLastMidiEvent = pEngine->lastMidiEvent; + m_LastMidiEventParameter = pEngine->lastMidiEventParameter; + + + if( m_DirectWrite ){ + //write the action / parameter combination to the midiMap + MidiMap *pMidiMap = MidiMap::get_instance(); + + assert(m_pAction); + + MidiAction* pAction = new MidiAction( m_pAction->getType() ); + + pAction->setParameter1( m_pAction->getParameter1() ); + if( m_sLastMidiEvent.left(2) == "CC" ){ + pMidiMap->registerCCEvent( m_LastMidiEventParameter , pAction ); + } else if( m_sLastMidiEvent.left(3) == "MMC" ){ + pMidiMap->registerMMCEvent( m_sLastMidiEvent , pAction ); + } else if( m_sLastMidiEvent.left(4) == "NOTE" ){ + pMidiMap->registerNoteEvent( m_LastMidiEventParameter , pAction ); + } else if (m_sLastMidiEvent.left(14) == "PROGRAM_CHANGE" ){ + pMidiMap->registerPCEvent( pAction ); + } else { + /* In all other cases, the midiMap cares for deleting the pointer */ - if( directWrite ){ - //write the action / parameter combination to the midiMap - MidiMap *mM = MidiMap::get_instance(); - assert(action); - MidiAction* pAction = new MidiAction( action->getType() ); - - //if( action->getParameter1() != 0){ - pAction->setParameter1( action->getParameter1() ); - //} - - if( lastMidiEvent.left(2) == "CC" ){ - mM->registerCCEvent( lastMidiEventParameter , pAction ); - } - - if( lastMidiEvent.left(3) == "MMC" ){ - mM->registerMMCEvent( lastMidiEvent , pAction ); - } - - if( lastMidiEvent.left(4) == "NOTE" ){ - mM->registerNoteEvent( lastMidiEvent.toInt() , pAction ); - } + delete pAction; + } } close(); diff -Nru hydrogen-0.9.6.1/src/gui/src/widgets/MidiSenseWidget.h hydrogen-0.9.7/src/gui/src/widgets/MidiSenseWidget.h --- hydrogen-0.9.6.1/src/gui/src/widgets/MidiSenseWidget.h 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/widgets/MidiSenseWidget.h 2016-11-05 08:22:50.000000000 +0000 @@ -1,4 +1,4 @@ - /* +/* * Hydrogen * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] * @@ -19,33 +19,34 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ - #ifndef MIDISENSE_WIDGET_H - #define MIDISENSE_WIDGET_H +#ifndef MIDISENSE_WIDGET_H +#define MIDISENSE_WIDGET_H - #include +#include - #include - #include +#include +#include - class MidiSenseWidget : public QDialog ,public H2Core::Object +class MidiSenseWidget : public QDialog ,public H2Core::Object { - H2_OBJECT + H2_OBJECT Q_OBJECT + public: - MidiSenseWidget(QWidget*,bool directWrite = false , MidiAction* action = NULL); + MidiSenseWidget(QWidget*,bool m_DirectWrite = false , MidiAction* m_pAction = NULL); ~MidiSenseWidget(); - QString lastMidiEvent; - int lastMidiEventParameter; + QString m_sLastMidiEvent; + int m_LastMidiEventParameter; private slots: - void updateMidi(); + void updateMidi(); private: - QTimer* m_pUpdateTimer; - QLabel* m_pURLLabel; - MidiAction* action; - bool directWrite; + QTimer* m_pUpdateTimer; + QLabel* m_pURLLabel; + MidiAction* m_pAction; + bool m_DirectWrite; }; #endif diff -Nru hydrogen-0.9.6.1/src/gui/src/widgets/midiTable.cpp hydrogen-0.9.7/src/gui/src/widgets/midiTable.cpp --- hydrogen-0.9.6.1/src/gui/src/widgets/midiTable.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/widgets/midiTable.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,258 +0,0 @@ -/* - * Hydrogen - * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] - * - * http://www.hydrogen-music.org - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY, without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - */ - -#include "../Skin.h" -#include "MidiSenseWidget.h" -#include "midiTable.h" - -#include -#include -#include -#include -#include - -#include - -const char* MidiTable::__class_name = "MidiTable"; - -MidiTable::MidiTable( QWidget *pParent ) - : QTableWidget( pParent ) - , Object( __class_name ) -{ - __row_count = 0; - setupMidiTable(); - - m_pUpdateTimer = new QTimer( this ); - currentMidiAutosenseRow = 0; -} - - -MidiTable::~MidiTable() -{ - for( int myRow = 0; myRow <= __row_count ; myRow++ ) { - delete cellWidget( myRow, 0 ); - delete cellWidget( myRow, 1 ); - delete cellWidget( myRow, 2 ); - delete cellWidget( myRow, 3 ); - } -} - -void MidiTable::midiSensePressed( int row ){ - - currentMidiAutosenseRow = row; - MidiSenseWidget mW( this ); - mW.exec(); - - QComboBox * eventCombo = dynamic_cast ( cellWidget( row, 1 ) ); - QSpinBox * eventSpinner = dynamic_cast ( cellWidget( row, 2 ) ); - - - eventCombo->setCurrentIndex( eventCombo->findText( mW.lastMidiEvent ) ); - eventSpinner->setValue( mW.lastMidiEventParameter ); - - m_pUpdateTimer->start( 100 ); -} - - -void MidiTable::updateTable() -{ - if( __row_count > 0 ) { - QComboBox * eventCombo = dynamic_cast ( cellWidget( __row_count - 1, 1 ) ); - QComboBox * actionCombo = dynamic_cast ( cellWidget( __row_count - 1, 3 ) ); - - if( eventCombo == NULL || actionCombo == NULL) return; - - if( actionCombo->currentText() != "" && eventCombo->currentText() != "" ) { - insertNewRow("", "", 0, 0); - } - } -} - - -void MidiTable::insertNewRow(QString actionString , QString eventString, int eventParameter , int actionParameter) -{ - MidiActionManager *aH = MidiActionManager::get_instance(); - - insertRow( __row_count ); - - int oldRowCount = __row_count; - - ++__row_count; - - - - QPushButton *midiSenseButton = new QPushButton(this); - midiSenseButton->setIcon(QIcon(Skin::getImagePath() + "/preferencesDialog/rec.png")); - midiSenseButton->setToolTip( trUtf8("press button to record midi event") ); - - QSignalMapper *signalMapper = new QSignalMapper(this); - - connect(midiSenseButton, SIGNAL( clicked()), signalMapper, SLOT( map() )); - signalMapper->setMapping( midiSenseButton, oldRowCount ); - connect( signalMapper, SIGNAL(mapped( int ) ), - this, SLOT( midiSensePressed(int) ) ); - setCellWidget( oldRowCount, 0, midiSenseButton ); - - - - QComboBox *eventBox = new QComboBox(); - connect( eventBox , SIGNAL( currentIndexChanged( int ) ) , this , SLOT( updateTable() ) ); - eventBox->insertItems( oldRowCount , aH->getEventList() ); - eventBox->setCurrentIndex( eventBox->findText(eventString) ); - setCellWidget( oldRowCount, 1, eventBox ); - - - QSpinBox *eventParameterSpinner = new QSpinBox(); - setCellWidget( oldRowCount , 2, eventParameterSpinner ); - eventParameterSpinner->setMaximum( 999 ); - eventParameterSpinner->setValue( eventParameter ); - - - QComboBox *actionBox = new QComboBox(); - connect( actionBox , SIGNAL( currentIndexChanged( int ) ) , this , SLOT( updateTable() ) ); - actionBox->insertItems( oldRowCount, aH->getActionList()); - actionBox->setCurrentIndex ( actionBox->findText( actionString ) ); - setCellWidget( oldRowCount , 3, actionBox ); - - - QSpinBox *actionParameterSpinner = new QSpinBox(); - - setCellWidget( oldRowCount , 4, actionParameterSpinner ); - actionParameterSpinner->setValue( actionParameter); - actionParameterSpinner->setMaximum( 999 ); - - -} - -void MidiTable::setupMidiTable() -{ - MidiMap *mM = MidiMap::get_instance(); - - QStringList items; - items << "" << trUtf8("Event") << trUtf8("Param.") << trUtf8("Action") << trUtf8("Param.") ; - - setRowCount( 0 ); - setColumnCount( 5 ); - - verticalHeader()->hide(); - - setHorizontalHeaderLabels( items ); - horizontalHeader()->setStretchLastSection(true); - - setColumnWidth( 0 , 25 ); - setColumnWidth( 1 , 155 ); - setColumnWidth( 2, 73 ); - setColumnWidth( 3, 175 ); - setColumnWidth( 4 , 73 ); - - bool ok; - std::map< QString , MidiAction* > mmcMap = mM->getMMCMap(); - std::map< QString , MidiAction* >::iterator dIter( mmcMap.begin() ); - - for( dIter = mmcMap.begin(); dIter != mmcMap.end(); dIter++ ) { - MidiAction * pAction = dIter->second; - QString actionParameter; - int actionParameterInteger = 0; - - actionParameter = pAction->getParameter1(); - actionParameterInteger = actionParameter.toInt(&ok,10); - - insertNewRow(pAction->getType() , dIter->first , 0 , actionParameterInteger ); - } - - for( int note = 0; note < 128; note++ ) { - MidiAction * pAction = mM->getNoteAction( note ); - QString actionParameter; - int actionParameterInteger = 0; - - actionParameter = pAction->getParameter1(); - actionParameterInteger = actionParameter.toInt(&ok,10); - - - if ( pAction->getType() == "NOTHING" ) continue; - - insertNewRow(pAction->getType() , "NOTE" , note , actionParameterInteger ); - } - - for( int parameter = 0; parameter < 128; parameter++ ){ - MidiAction * pAction = mM->getCCAction( parameter ); - QString actionParameter; - int actionParameterInteger = 0; - - actionParameter = pAction->getParameter1(); - actionParameterInteger = actionParameter.toInt(&ok,10); - - if ( pAction->getType() == "NOTHING" ) continue; - - insertNewRow(pAction->getType() , "CC" , parameter , actionParameterInteger ); - } - - { - MidiAction * pAction = mM->getPCAction(); - if ( pAction->getType() != "NOTHING" ) { - QString actionParameter = pAction->getParameter1(); - int actionParameterInteger = actionParameter.toInt(&ok,10); - insertNewRow( pAction->getType() , "PROGRAM_CHANGE" , 0 , actionParameterInteger ); - } - } - - insertNewRow( "", "", 0, 0 ); -} - - -void MidiTable::saveMidiTable() -{ - MidiMap *mM = MidiMap::get_instance(); - - for ( int row = 0; row < __row_count; row++ ) { - - QComboBox * eventCombo = dynamic_cast ( cellWidget( row, 1 ) ); - QSpinBox * eventSpinner = dynamic_cast ( cellWidget( row, 2 ) ); - QComboBox * actionCombo = dynamic_cast ( cellWidget( row, 3 ) ); - QSpinBox * actionSpinner = dynamic_cast ( cellWidget( row, 4 ) ); - - QString eventString; - QString actionString; - - if( !eventCombo->currentText().isEmpty() && !actionCombo->currentText().isEmpty() ){ - eventString = eventCombo->currentText(); - - actionString = actionCombo->currentText(); - - MidiAction* pAction = new MidiAction( actionString ); - - if( actionSpinner->cleanText() != ""){ - pAction->setParameter1( actionSpinner->cleanText() ); - } - - if( eventString.left(2) == "CC" ){ - mM->registerCCEvent( eventSpinner->cleanText().toInt() , pAction ); - } else if( eventString.left(3) == "MMC" ){ - mM->registerMMCEvent( eventString , pAction ); - } else if( eventString.left(4) == "NOTE" ){ - mM->registerNoteEvent( eventSpinner->cleanText().toInt() , pAction ); - } else if( eventString.left(14) == "PROGRAM_CHANGE" ){ - mM->registerPCEvent( pAction ); - } - } - } -} diff -Nru hydrogen-0.9.6.1/src/gui/src/widgets/MidiTable.cpp hydrogen-0.9.7/src/gui/src/widgets/MidiTable.cpp --- hydrogen-0.9.6.1/src/gui/src/widgets/MidiTable.cpp 1970-01-01 00:00:00.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/widgets/MidiTable.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -0,0 +1,259 @@ +/* + * Hydrogen + * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] + * + * http://www.hydrogen-music.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY, without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#include "../Skin.h" +#include "MidiSenseWidget.h" +#include "MidiTable.h" + +#include +#include +#include +#include +#include + +#include + +const char* MidiTable::__class_name = "MidiTable"; + +MidiTable::MidiTable( QWidget *pParent ) + : QTableWidget( pParent ) + , Object( __class_name ) +{ + __row_count = 0; + setupMidiTable(); + + m_pUpdateTimer = new QTimer( this ); + currentMidiAutosenseRow = 0; +} + + +MidiTable::~MidiTable() +{ + for( int myRow = 0; myRow <= __row_count ; myRow++ ) { + delete cellWidget( myRow, 0 ); + delete cellWidget( myRow, 1 ); + delete cellWidget( myRow, 2 ); + delete cellWidget( myRow, 3 ); + } +} + +void MidiTable::midiSensePressed( int row ){ + + currentMidiAutosenseRow = row; + MidiSenseWidget midiSenseWidget( this ); + midiSenseWidget.exec(); + + QComboBox * eventCombo = dynamic_cast ( cellWidget( row, 1 ) ); + QSpinBox * eventSpinner = dynamic_cast ( cellWidget( row, 2 ) ); + + + eventCombo->setCurrentIndex( eventCombo->findText( midiSenseWidget.m_sLastMidiEvent ) ); + eventSpinner->setValue( midiSenseWidget.m_LastMidiEventParameter ); + + m_pUpdateTimer->start( 100 ); +} + + +void MidiTable::updateTable() +{ + if( __row_count > 0 ) { + QComboBox * eventCombo = dynamic_cast ( cellWidget( __row_count - 1, 1 ) ); + QComboBox * actionCombo = dynamic_cast ( cellWidget( __row_count - 1, 3 ) ); + + if( eventCombo == NULL || actionCombo == NULL) return; + + if( actionCombo->currentText() != "" && eventCombo->currentText() != "" ) { + insertNewRow("", "", 0, 0); + } + } +} + + +void MidiTable::insertNewRow(QString actionString , QString eventString, int eventParameter , int actionParameter) +{ + MidiActionManager *pActionHandler = MidiActionManager::get_instance(); + + insertRow( __row_count ); + + int oldRowCount = __row_count; + + ++__row_count; + + + + QPushButton *midiSenseButton = new QPushButton(this); + midiSenseButton->setIcon(QIcon(Skin::getImagePath() + "/preferencesDialog/rec.png")); + midiSenseButton->setToolTip( trUtf8("press button to record midi event") ); + + QSignalMapper *signalMapper = new QSignalMapper(this); + + connect(midiSenseButton, SIGNAL( clicked()), signalMapper, SLOT( map() )); + signalMapper->setMapping( midiSenseButton, oldRowCount ); + connect( signalMapper, SIGNAL(mapped( int ) ), this, SLOT( midiSensePressed(int) ) ); + setCellWidget( oldRowCount, 0, midiSenseButton ); + + + + QComboBox *eventBox = new QComboBox(); + connect( eventBox , SIGNAL( currentIndexChanged( int ) ) , this , SLOT( updateTable() ) ); + eventBox->insertItems( oldRowCount , pActionHandler->getEventList() ); + eventBox->setCurrentIndex( eventBox->findText(eventString) ); + setCellWidget( oldRowCount, 1, eventBox ); + + + QSpinBox *eventParameterSpinner = new QSpinBox(); + setCellWidget( oldRowCount , 2, eventParameterSpinner ); + eventParameterSpinner->setMaximum( 999 ); + eventParameterSpinner->setValue( eventParameter ); + + + QComboBox *actionBox = new QComboBox(); + connect( actionBox , SIGNAL( currentIndexChanged( int ) ) , this , SLOT( updateTable() ) ); + actionBox->insertItems( oldRowCount, pActionHandler->getActionList()); + actionBox->setCurrentIndex ( actionBox->findText( actionString ) ); + setCellWidget( oldRowCount , 3, actionBox ); + + + QSpinBox *actionParameterSpinner = new QSpinBox(); + + setCellWidget( oldRowCount , 4, actionParameterSpinner ); + actionParameterSpinner->setValue( actionParameter); + actionParameterSpinner->setMaximum( 999 ); +} + +void MidiTable::setupMidiTable() +{ + MidiMap *pMidiMap = MidiMap::get_instance(); + + QStringList items; + items << "" << trUtf8("Event") << trUtf8("Param.") << trUtf8("Action") << trUtf8("Param.") ; + + setRowCount( 0 ); + setColumnCount( 5 ); + + verticalHeader()->hide(); + + setHorizontalHeaderLabels( items ); + horizontalHeader()->setStretchLastSection(true); + + setColumnWidth( 0 , 25 ); + setColumnWidth( 1 , 155 ); + setColumnWidth( 2, 73 ); + setColumnWidth( 3, 175 ); + setColumnWidth( 4 , 73 ); + + bool ok; + std::map< QString , MidiAction* > mmcMap = pMidiMap->getMMCMap(); + std::map< QString , MidiAction* >::iterator dIter( mmcMap.begin() ); + + for( dIter = mmcMap.begin(); dIter != mmcMap.end(); dIter++ ) { + MidiAction * pAction = dIter->second; + QString actionParameter; + int actionParameterInteger = 0; + + actionParameter = pAction->getParameter1(); + actionParameterInteger = actionParameter.toInt(&ok,10); + + insertNewRow(pAction->getType() , dIter->first , 0 , actionParameterInteger ); + } + + for( int note = 0; note < 128; note++ ) { + MidiAction * pAction = pMidiMap->getNoteAction( note ); + QString actionParameter; + int actionParameterInteger = 0; + + actionParameter = pAction->getParameter1(); + actionParameterInteger = actionParameter.toInt(&ok,10); + + + if ( pAction->getType() == "NOTHING" ){ + continue; + } + + insertNewRow(pAction->getType() , "NOTE" , note , actionParameterInteger ); + } + + for( int parameter = 0; parameter < 128; parameter++ ){ + MidiAction * pAction = pMidiMap->getCCAction( parameter ); + QString actionParameter; + int actionParameterInteger = 0; + + actionParameter = pAction->getParameter1(); + actionParameterInteger = actionParameter.toInt(&ok,10); + + if ( pAction->getType() == "NOTHING" ){ + continue; + } + + insertNewRow(pAction->getType() , "CC" , parameter , actionParameterInteger ); + } + + { + MidiAction * pAction = pMidiMap->getPCAction(); + if ( pAction->getType() != "NOTHING" ) { + QString actionParameter = pAction->getParameter1(); + int actionParameterInteger = actionParameter.toInt(&ok,10); + insertNewRow( pAction->getType() , "PROGRAM_CHANGE" , 0 , actionParameterInteger ); + } + } + + insertNewRow( "", "", 0, 0 ); +} + + +void MidiTable::saveMidiTable() +{ + MidiMap *mM = MidiMap::get_instance(); + + for ( int row = 0; row < __row_count; row++ ) { + + QComboBox * eventCombo = dynamic_cast ( cellWidget( row, 1 ) ); + QSpinBox * eventSpinner = dynamic_cast ( cellWidget( row, 2 ) ); + QComboBox * actionCombo = dynamic_cast ( cellWidget( row, 3 ) ); + QSpinBox * actionSpinner = dynamic_cast ( cellWidget( row, 4 ) ); + + QString eventString; + QString actionString; + + if( !eventCombo->currentText().isEmpty() && !actionCombo->currentText().isEmpty() ){ + eventString = eventCombo->currentText(); + + actionString = actionCombo->currentText(); + + MidiAction* pAction = new MidiAction( actionString ); + + if( actionSpinner->cleanText() != ""){ + pAction->setParameter1( actionSpinner->cleanText() ); + } + + if( eventString.left(2) == "CC" ){ + mM->registerCCEvent( eventSpinner->cleanText().toInt() , pAction ); + } else if( eventString.left(3) == "MMC" ){ + mM->registerMMCEvent( eventString , pAction ); + } else if( eventString.left(4) == "NOTE" ){ + mM->registerNoteEvent( eventSpinner->cleanText().toInt() , pAction ); + } else if( eventString.left(14) == "PROGRAM_CHANGE" ){ + mM->registerPCEvent( pAction ); + } + } + } +} diff -Nru hydrogen-0.9.6.1/src/gui/src/widgets/midiTable.h hydrogen-0.9.7/src/gui/src/widgets/midiTable.h --- hydrogen-0.9.6.1/src/gui/src/widgets/midiTable.h 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/widgets/midiTable.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,54 +0,0 @@ -/* - * Hydrogen - * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] - * - * http://www.hydrogen-music.org - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY, without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - */ - -#ifndef MIDI_TABLE_H -#define MIDI_TABLE_H - -#include - -#include - -class MidiTable : public QTableWidget, public H2Core::Object -{ - H2_OBJECT - Q_OBJECT - public: - MidiTable( QWidget* pParent ); - ~MidiTable(); - - void setupMidiTable(); - void saveMidiTable(); - void insertNewRow(QString, QString, int, int); - - private slots: - void updateTable(); - void midiSensePressed( int ); - - private: - int __row_count; - int currentMidiAutosenseRow; - QSignalMapper *signalMapper; - QTimer* m_pUpdateTimer; - -}; - -#endif diff -Nru hydrogen-0.9.6.1/src/gui/src/widgets/MidiTable.h hydrogen-0.9.7/src/gui/src/widgets/MidiTable.h --- hydrogen-0.9.6.1/src/gui/src/widgets/MidiTable.h 1970-01-01 00:00:00.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/widgets/MidiTable.h 2016-11-05 08:22:50.000000000 +0000 @@ -0,0 +1,54 @@ +/* + * Hydrogen + * Copyright(c) 2002-2008 by Alex >Comix< Cominu [comix@users.sourceforge.net] + * + * http://www.hydrogen-music.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY, without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef MIDI_TABLE_H +#define MIDI_TABLE_H + +#include + +#include + +class MidiTable : public QTableWidget, public H2Core::Object +{ + H2_OBJECT + Q_OBJECT + public: + MidiTable( QWidget* pParent ); + ~MidiTable(); + + void setupMidiTable(); + void saveMidiTable(); + void insertNewRow(QString, QString, int, int); + + private slots: + void updateTable(); + void midiSensePressed( int ); + + private: + int __row_count; + int currentMidiAutosenseRow; + QSignalMapper *signalMapper; + QTimer* m_pUpdateTimer; + +}; + +#endif diff -Nru hydrogen-0.9.6.1/src/gui/src/widgets/Rotary.cpp hydrogen-0.9.7/src/gui/src/widgets/Rotary.cpp --- hydrogen-0.9.6.1/src/gui/src/widgets/Rotary.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/gui/src/widgets/Rotary.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -72,6 +72,8 @@ , m_type( type ) , m_fMin( 0.0 ) , m_fMax( 1.0 ) + , m_fMousePressValue( 0.0 ) + , m_fMousePressY( 0.0 ) , m_bShowValueToolTip( bUseValueTip ) { setAttribute(Qt::WA_NoBackground); diff -Nru hydrogen-0.9.6.1/src/player/main.cpp hydrogen-0.9.7/src/player/main.cpp --- hydrogen-0.9.6.1/src/player/main.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/player/main.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -32,6 +32,7 @@ #include #include #include +#include using std::cout; using std::endl; @@ -44,7 +45,7 @@ exit(1); } -int main(int argc, char** argv) { +int main(int argc, char** argv){ unsigned logLevelOpt = H2Core::Logger::Error; H2Core::Logger::create_instance(); @@ -52,22 +53,20 @@ H2Core::Logger* logger = H2Core::Logger::get_instance(); H2Core::Object::bootstrap( logger, logger->should_log(H2Core::Logger::Debug) ); - H2Core::Filesystem::bootstrap( logger ); - + QApplication a(argc, argv); + H2Core::Filesystem::bootstrap( logger ); if (argc != 2) { usage(); } cout << "Hydrogen player starting..." << endl << endl; - QApplication a(argc, argv); - QString filename = argv[1]; - + MidiMap::create_instance(); H2Core::Preferences::create_instance(); - H2Core::Hydrogen::create_instance(); + H2Core::Hydrogen::create_instance(); H2Core::Preferences *preferences = H2Core::Preferences::get_instance(); H2Core::Song *pSong = H2Core::Song::load( filename ); @@ -103,7 +102,7 @@ delete H2Core::Logger::get_instance(); std::cout << std::endl << std::endl << H2Core::Object::objects_count() << " alive objects" << std::endl << std::endl; - H2Core::Object::write_objects_map_to_cerr(); + H2Core::Object::write_objects_map_to_cerr(); exit(0); break; @@ -126,7 +125,7 @@ case 'd': cout << "DEBUG" << endl; - H2Core::Object::write_objects_map_to_cerr(); + H2Core::Object::write_objects_map_to_cerr(); int nObj = H2Core::Object::objects_count(); std::cout << std::endl << std::endl << nObj << " alive objects" << std::endl << std::endl; break; diff -Nru hydrogen-0.9.6.1/src/tests/xml_test.cpp hydrogen-0.9.7/src/tests/xml_test.cpp --- hydrogen-0.9.6.1/src/tests/xml_test.cpp 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/tests/xml_test.cpp 2016-11-05 08:22:50.000000000 +0000 @@ -7,6 +7,7 @@ #include #include #include +#include #include #include @@ -17,103 +18,107 @@ static bool check_samples_data( H2Core::Drumkit* dk, bool loaded ) { - int count = 0; - H2Core::InstrumentList* instruments = dk->get_instruments(); - for( int i=0; isize(); i++ ) { - count++; - H2Core::Instrument* instrument = ( *instruments )[i]; - for ( int n = 0; n < MAX_LAYERS; n++ ) { - H2Core::InstrumentLayer* layer = instrument->get_layer( n ); - if( layer ) { - H2Core::Sample* sample = layer->get_sample(); - if( loaded ) { - if( sample->get_data_l()==0 || sample->get_data_l()==0 ) return false; - } else { - if( sample->get_data_l()!=0 || sample->get_data_l()!=0 ) return false; - } - } - } - } - return ( count==4 ); + int count = 0; + H2Core::InstrumentList* instruments = dk->get_instruments(); + for( int i=0; isize(); i++ ) { + count++; + H2Core::Instrument* pInstr = ( *instruments )[i]; + for (std::vector::iterator it = pInstr->get_components()->begin() ; it != pInstr->get_components()->end(); ++it) { + H2Core::InstrumentComponent* pComponent = *it; + for ( int nLayer = 0; nLayer < MAX_LAYERS; nLayer++ ) { + H2Core::InstrumentLayer* pLayer = pComponent->get_layer( nLayer ); + if( pLayer ) { + H2Core::Sample* pSample = pLayer->get_sample(); + if( loaded ) { + if( pSample->get_data_l()==0 || pSample->get_data_l()==0 ) return false; + } else { + if( pSample->get_data_l()!=0 || pSample->get_data_l()!=0 ) return false; + } + } + + } + } + } + return ( count==4 ); } void XmlTest::testDrumkit() { - QString dk_path = H2Core::Filesystem::tmp_dir()+"/dk0"; + QString dk_path = H2Core::Filesystem::tmp_dir()+"/dk0"; - H2Core::Drumkit* dk0 = 0; - H2Core::Drumkit* dk1 = 0; - H2Core::Drumkit* dk2 = 0; - - // load without samples - dk0 = H2Core::Drumkit::load( BASE_DIR"/drumkit" ); - CPPUNIT_ASSERT( dk0!=0 ); - CPPUNIT_ASSERT( dk0->samples_loaded()==false ); - CPPUNIT_ASSERT( check_samples_data( dk0, false ) ); - CPPUNIT_ASSERT_EQUAL( 4, dk0->get_instruments()->size() ); - //dk0->dump(); - // manually load samples - dk0->load_samples(); - CPPUNIT_ASSERT( dk0->samples_loaded()==true ); - CPPUNIT_ASSERT( check_samples_data( dk0, true ) ); - //dk0->dump(); - // load with samples - dk0 = H2Core::Drumkit::load( BASE_DIR"/drumkit", true ); - CPPUNIT_ASSERT( dk0!=0 ); - CPPUNIT_ASSERT( dk0->samples_loaded()==true ); - CPPUNIT_ASSERT( check_samples_data( dk0, true ) ); - //dk0->dump(); - // unload samples - dk0->unload_samples(); - CPPUNIT_ASSERT( dk0->samples_loaded()==false ); - CPPUNIT_ASSERT( check_samples_data( dk0, false ) ); - //dk0->dump(); - // save drumkit elsewhere - dk0->set_name( "dk0" ); - CPPUNIT_ASSERT( dk0->save( dk_path, false ) ); - CPPUNIT_ASSERT( H2Core::Filesystem::file_readable( dk_path+"/drumkit.xml" ) ); - CPPUNIT_ASSERT( H2Core::Filesystem::file_readable( dk_path+"/crash.wav" ) ); - CPPUNIT_ASSERT( H2Core::Filesystem::file_readable( dk_path+"/hh.wav" ) ); - CPPUNIT_ASSERT( H2Core::Filesystem::file_readable( dk_path+"/kick.wav" ) ); - CPPUNIT_ASSERT( H2Core::Filesystem::file_readable( dk_path+"/snare.wav" ) ); - // load file - dk1 = H2Core::Drumkit::load_file( dk_path+"/drumkit.xml" ); - CPPUNIT_ASSERT( dk1!=0 ); - //dk1->dump(); - // copy constructor - dk2 = new H2Core::Drumkit( dk1 ); - dk2->set_name( "COPY" ); - CPPUNIT_ASSERT( dk2!=0 ); - // save file - CPPUNIT_ASSERT( dk2->save_file( dk_path+"/drumkit.xml", true ) );; - - delete dk0; - delete dk1; - delete dk2; + H2Core::Drumkit* dk0 = 0; + H2Core::Drumkit* dk1 = 0; + H2Core::Drumkit* dk2 = 0; + + // load without samples + dk0 = H2Core::Drumkit::load( BASE_DIR"/drumkit" ); + CPPUNIT_ASSERT( dk0!=0 ); + CPPUNIT_ASSERT( dk0->samples_loaded()==false ); + CPPUNIT_ASSERT( check_samples_data( dk0, false ) ); + CPPUNIT_ASSERT_EQUAL( 4, dk0->get_instruments()->size() ); + //dk0->dump(); + // manually load samples + dk0->load_samples(); + CPPUNIT_ASSERT( dk0->samples_loaded()==true ); + CPPUNIT_ASSERT( check_samples_data( dk0, true ) ); + //dk0->dump(); + // load with samples + dk0 = H2Core::Drumkit::load( BASE_DIR"/drumkit", true ); + CPPUNIT_ASSERT( dk0!=0 ); + CPPUNIT_ASSERT( dk0->samples_loaded()==true ); + CPPUNIT_ASSERT( check_samples_data( dk0, true ) ); + //dk0->dump(); + // unload samples + dk0->unload_samples(); + CPPUNIT_ASSERT( dk0->samples_loaded()==false ); + CPPUNIT_ASSERT( check_samples_data( dk0, false ) ); + //dk0->dump(); + // save drumkit elsewhere + dk0->set_name( "dk0" ); + CPPUNIT_ASSERT( dk0->save( dk_path, false ) ); + CPPUNIT_ASSERT( H2Core::Filesystem::file_readable( dk_path+"/drumkit.xml" ) ); + CPPUNIT_ASSERT( H2Core::Filesystem::file_readable( dk_path+"/crash.wav" ) ); + CPPUNIT_ASSERT( H2Core::Filesystem::file_readable( dk_path+"/hh.wav" ) ); + CPPUNIT_ASSERT( H2Core::Filesystem::file_readable( dk_path+"/kick.wav" ) ); + CPPUNIT_ASSERT( H2Core::Filesystem::file_readable( dk_path+"/snare.wav" ) ); + // load file + dk1 = H2Core::Drumkit::load_file( dk_path+"/drumkit.xml" ); + CPPUNIT_ASSERT( dk1!=0 ); + //dk1->dump(); + // copy constructor + dk2 = new H2Core::Drumkit( dk1 ); + dk2->set_name( "COPY" ); + CPPUNIT_ASSERT( dk2!=0 ); + // save file + CPPUNIT_ASSERT( dk2->save_file( dk_path+"/drumkit.xml", true ) );; + + delete dk0; + delete dk1; + delete dk2; } void XmlTest::testPattern() { - QString pat_path = H2Core::Filesystem::tmp_dir()+"/pat"; + QString pat_path = H2Core::Filesystem::tmp_dir()+"/pat"; - H2Core::Pattern* pat0 = 0; - H2Core::Drumkit* dk0 = 0; - H2Core::InstrumentList* instruments = 0; - - dk0 = H2Core::Drumkit::load( BASE_DIR"/drumkit" ); - CPPUNIT_ASSERT( dk0!=0 ); - instruments = dk0->get_instruments(); - CPPUNIT_ASSERT( instruments->size()==4 ); + H2Core::Pattern* pat0 = 0; + H2Core::Drumkit* dk0 = 0; + H2Core::InstrumentList* instruments = 0; + + dk0 = H2Core::Drumkit::load( BASE_DIR"/drumkit" ); + CPPUNIT_ASSERT( dk0!=0 ); + instruments = dk0->get_instruments(); + CPPUNIT_ASSERT( instruments->size()==4 ); - pat0 = H2Core::Pattern::load_file( BASE_DIR"/pattern/pat.h2pattern", instruments ); + pat0 = H2Core::Pattern::load_file( BASE_DIR"/pattern/pat.h2pattern", instruments ); CPPUNIT_ASSERT( pat0 ); - pat0->save_file( pat_path ); + pat0->save_file( pat_path ); - delete pat0; - delete dk0; + delete pat0; + delete dk0; } diff -Nru hydrogen-0.9.6.1/src/www/hydrogen.php hydrogen-0.9.7/src/www/hydrogen.php --- hydrogen-0.9.6.1/src/www/hydrogen.php 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/www/hydrogen.php 2016-11-05 08:22:50.000000000 +0000 @@ -67,6 +67,7 @@ $url = $_SERVER [ 'SERVER_NAME' ] ; $dir = dirname ( $_SERVER['PHP_SELF'] ) ; $url = "http://$url$dir"; + $drumkitImageUrl = $url + '/' + $drumkitImageDir; } $author = ""; @@ -123,6 +124,16 @@ /* Start of drumkit listing */ $dir = "./"; + $hasImages = false; + if ($imageDirHandle = opendir( $drumkitImageDir ) ) { + $hasImages = true; + $imageFiles[] = array(); + while ( ( $f = readdir($imageDirHandle ) ) !== false ) { + $imageFiles[] = $file; + } + closedir($dh); + } + if ($dh = opendir( $dir ) ) { while ( ( $file = readdir( $dh ) ) !== false) { $extension = array_pop( explode( ".", $file ) ); @@ -143,6 +154,25 @@ print "\t\t" . $url.$file ."\n"; print "\t\t$author\n"; print "\t\t$info\n"; + // Get image + // Possible method: Have image filename same as basename of drumkit file. + // ie: for DeathMetal.h2drumkit, image file would be DeathMetal.jpeg + // and allow for .png as well (non-case sensitive extension) + // The drumkit filenames need to be unique, and this would force the + // images to be unique names but be consistant. + // use regex like: /.*\.(?:jpeg|jpg|png)/i + // + // Go through all files in image directory named $basename.* and + // see if there's a regex match, if so use that image file + if ( $hasImages ) + { + // search $imageFiles array for basename that matches with extension that matches regex + $images = preg_grep( "/.*\.(?:jpeg|jpg|png)/i", $imageFiles ); + if ( count( $images ) ) { + // if there's more than one match we'll just use the first + print "\t\t" . $drumkitImageUrl . "/" . $images[0] . ""; + } + } print "\t\n"; } } diff -Nru hydrogen-0.9.6.1/src/www/metaInfo.inc hydrogen-0.9.7/src/www/metaInfo.inc --- hydrogen-0.9.6.1/src/www/metaInfo.inc 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/src/www/metaInfo.inc 2016-11-05 08:22:50.000000000 +0000 @@ -2,9 +2,10 @@ /* $url = "http://example.com/"; + $drumkitImageDir = "drumkitImages/"; // this is a subdirectory under the dir hydrogen.php resides $drumkit_list[ "K-27_Trash_Kit" ][ "author" ] = "wolke"; $drumkit_list[ "K-27_Trash_Kit" ][ "info" ] = "A real trash kit!"; */ -?> \ No newline at end of file +?> diff -Nru hydrogen-0.9.6.1/win32/create_bundle.sh hydrogen-0.9.7/win32/create_bundle.sh --- hydrogen-0.9.6.1/win32/create_bundle.sh 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/win32/create_bundle.sh 1970-01-01 00:00:00.000000000 +0000 @@ -1,26 +0,0 @@ -#!/bin/bash -BUNDLE_DIR=hydrogen_windows_32_bit -mkdir $BUNDLE_DIR -cd $BUNDLE_DIR -cp $HYDROGEN_BUILD/src/gui/hydrogen.exe . -cp $HYDROGEN_BUILD/src/core/libhydrogen-core-0.9.6.dll . -cp $HYDROGEN_BUILD/src/cli/h2cli.exe . -cp $HYDROGEN_BUILD/src/player/h2player.exe . -cp $HYDROGEN_BUILD/src/synth/h2synth.exe . - -cp $MXE/usr/i686-w64-mingw32.shared/qt/bin/QtCore4.dll . -cp $MXE/usr/i686-w64-mingw32.shared/qt/bin/QtXml4.dll . -cp $MXE/usr/i686-w64-mingw32.shared/qt/bin/QtXmlPatterns4.dll . -cp $MXE/usr/i686-w64-mingw32.shared/qt/bin/QtNetwork4.dll . -cp $MXE/usr/i686-w64-mingw32.shared/qt/bin/QtGui4.dll . - -cp $MXE/usr/lib/gcc/i686-w64-mingw32.shared/4.8.2/libgcc_s_sjlj-1.dll . -cp $MXE/usr/lib/gcc/i686-w64-mingw32.shared/4.8.2/libstdc++-6.dll . - -cp $MXE/usr/i686-w64-mingw32.shared/bin/libsndfile-1.dll . -cp $MXE/usr/i686-w64-mingw32.shared/bin/libFLAC-8.dll . -cp $MXE/usr/i686-w64-mingw32.shared/bin/libogg-0.dll . -cp $MXE/usr/i686-w64-mingw32.shared/bin/libvorbis-0.dll . -cp $MXE/usr/i686-w64-mingw32.shared/bin/libvorbisenc-2.dll . - -cp -r $HYDROGEN/data . diff -Nru hydrogen-0.9.6.1/win32/README.md hydrogen-0.9.7/win32/README.md --- hydrogen-0.9.6.1/win32/README.md 2014-09-09 18:39:33.000000000 +0000 +++ hydrogen-0.9.7/win32/README.md 1970-01-01 00:00:00.000000000 +0000 @@ -1,133 +0,0 @@ -# Building for Windows - -## Cross-compiling on a Unix System - -### Installing all necessary packages - -#### On Debian/Ubuntu - - $ sudo apt-get install autoconf automake autopoint bash bison bzip2 \ - cmake flex gettext git gcc g++ intltool \ - libffi-dev libtool libltdl-dev libssl-dev \ - libxml-parser-perl make openssl patch perl \ - pkg-config scons sed unzip wget xz-utils - -#### On 64-bit Debian/Ubuntu (additional packages) - - $ sudo apt-get install g++-multilib libc6-dev-i386 - -#### On other Unix systems - -http://mxe.cc/#requirements - -### Cloning Hydrogen from the github repository - -If you have not already done it. - - $ git clone -b master https://github.com/hydrogen-music/hydrogen.git - -### Setting the Hydrogen environment variable - -Change to your Hydrogen directory. - - $ cd hydrogen - - $ export HYDROGEN=$PWD - - $ cd .. - -### Cloning MXE from the github repository - -Clone the master branch, since it should be more up-to-date than the stable branch. - - $ git clone -b master https://github.com/mxe/mxe.git - -### Configuring MXE - - $ cd mxe - - $ export MXE=$PWD - -Edit *Makefile* and set the value of *MXE_TARGETS* as follows (for 32-bit Windows target). - - MXE_TARGETS := i686-w64-mingw32.shared - -### Configuring and cross-compiling packages - -Most *make* operations below take a considerable amount of time. The lengthy ones have been timed, in order to give you a rough estimate. Adjust your completion expectations according to the values presented and your system capabilities. All operations in this section should be executed in the MXE root directory, where the *Makefile* resides. Packages along with their dependencies are downloaded and cross-compiled automatically as needed. - -#### Cross-compiling gcc - - $ make gcc - - real 13m10.244s - user 30m51.456s - sys 4m17.841s - -#### Cross-compiling winpthreads - - $ make winpthreads - -#### Configuring gcc and cross-compiling again - -Edit *src/gcc.mk* and set the value of *$(PKG)_DEPS* as follows. - - $(PKG)_DEPS := binutils gcc-cloog gcc-gmp gcc-isl gcc-mpc gcc-mpfr winpthreads - -Also set the value of *--enable-threads* as follows. - - --enable-threads=posix - -Then cross-compile gcc again. - - $ make gcc - - real 8m32.152s - user 24m34.296s - sys 2m47.471s - -#### Cross-compiling other packages - - $ make qt libarchive libsndfile - - real 70m17.737s - user 199m0.451s - sys 15m14.591s - -### Cross-compiling Hydrogen - - $ cd $HYDROGEN - - $ cd win32 - - $ mkdir windows_32_bit_build - - $ cd windows_32_bit_build - - $ export HYDROGEN_BUILD=$PWD - - $ cmake ../.. -DCMAKE_TOOLCHAIN_FILE=$MXE/usr/i686-w64-mingw32.shared/share/cmake/mxe-conf.cmake - - $ make - - real 4m32.063s - user 4m14.671s - sys 0m17.105s - - $ cd .. - -### Creating the bundle - - $ ./create_bundle.sh - -This creates a directory *hydrogen_windows_32_bit*, which you can copy to your Windows machine and launch Hydrogen! - -### Troubleshooting - -When copying the directory above to your Windows machine, you will get a copy conflict. This is because Windows' case-insensitivity is put to the test, since two files named *Director.png* and *director.png* exist in the same directory. Resolve the conflict in whichever way you wish, since the aforementioned files seem to be unused. - -Using the method described above, I experience Hydrogen crashing at startup. To fix this, download the precompiled libsndfile-1.dll from *http://www.mega-nerd.com/libsndfile/#Download* and put it in the Hydrogen directory. - -### Bugs? - -Bugs. diff -Nru hydrogen-0.9.6.1/windows/cross_compile.sh hydrogen-0.9.7/windows/cross_compile.sh --- hydrogen-0.9.6.1/windows/cross_compile.sh 1970-01-01 00:00:00.000000000 +0000 +++ hydrogen-0.9.7/windows/cross_compile.sh 2016-11-05 08:22:50.000000000 +0000 @@ -0,0 +1,276 @@ +#!/bin/bash +# Hydrogen Cross Compile Script + +FATBUILD=false + +show_interactive_menu(){ + #clear the screen + clear + + while : + do + # If error exists, display it + if [ "$ERR_MSG" != "" ]; then + echo "Error: $ERR_MSG" + echo "" + fi + + # Write out the menu options... + echo "Welcome to the Hydrogen Cross Compiler. We will now compile Hydrogen for Windows." + echo "Select an option:" + echo " 1: Clone required repositories" + echo " 2: Build Hydrogen 32Bit" + echo " 3: Build Hydrogen 64Bit" + echo " 4: Clean Cmake and CPack Cache Files" + echo " q: Exit" + + # Clear the error message + ERR_MSG="" + + + # Read the user input + read SEL + + case $SEL in + 1) #download the proper git repositories + echo "This will clone the repositories for Hydrogen" + read -e -p "Enter the path where Hydrogen should be built: " -i "$HOME/build/hydrogen/" CLONEPATH + if [ ! -e "${CLONEPATH%/*}" ]; then + echo "Now downloading Hydrogen." + mkdir -p "${CLONEPATH%/*}" + cd "${CLONEPATH%/*}" + BUILD_DIR=$PWD + git clone https://github.com/hydrogen-music/hydrogen.git + + else + if [ -f ${CLONEPATH%/*}/build.sh ]; then + mv ${CLONEPATH%/*} ${CLONEPATH%/*}/../hydrogen.tmp + mkdir -p ${CLONEPATH%/*} + mv ${CLONEPATH%/*}/../hydrogen.tmp ${CLONEPATH%/*}/source + echo "Hydrogen already downloaded to ${CLONEPATH%/*}." + fi + fi + if [ ! -e ${CLONEPATH%/*}/source/jack2 ]; then + cd ${CLONEPATH%/*}/source + echo "Now downloading jack." + git clone git://github.com/jackaudio/jack2.git + cd .. + fi + ;; + 2) #32 Bit Compiling + build_32bit + ;; + 3) #64 Bit Compiling + build_64bit + ;; + 4) #Clean CMake Files + cd $HYDROGEN_BUILD + rm -r CMakeCache.txt CMakeFiles cmake_install.cmake CPackConfig.cmake _CPack_Packages CPackSourceConfig.cmake install_manifest.txt ladspa_listplugins Makefile src try uninstall.cmake + rm ../mxe ../gcc + ;; + + q) echo "Thank you for using the Hydrogen Cross Compiler. Goodbye." + exit + ;; + *) ERR_MSG="Please enter a valid option" + esac + + # clear the screen again for re-display + #clear + done +} + + +build_32bit(){ + build_hydrogen i686 +} + +build_64bit(){ + build_hydrogen x86_64 -DCMAKE_{C,CXX}_FLAGS=-m64 -DWIN64:BOOL=ON +} +mxe_files(){ + # This will search for the required files to package and put their names into a file to be read by cmake. + # This is necessary due to version differences with the libraries and compilers that mxe uses across build systems. + + #set the dir to search + if [ "$1" == "64" ]; then + mxedir="/opt/mxe/usr/x86_64-w64-mingw32.shared/bin" + qtdir="$mxedir/../qt/bin" + gccdir="/opt/mxe/usr/lib/gcc/x86_64-w64-mingw32.shared" + else + mxedir="/opt/mxe/usr/i686-w64-mingw32.shared/bin" + qtdir="$mxedir/../qt/bin" + gccdir="/opt/mxe/usr/lib/gcc/i686-w64-mingw32.shared" + fi + + hydrogendir=`pwd` + extralibs="$hydrogendir/extralibs" + mkdir $extralibs + + #Make arrays for the filenames to loop through. + declare -a libs=("libgnurx" "libsndfile" "libFLAC" "libogg" "libvorbis" "libvorbisenc" "zlib1" "libwinpthread" "libeay32" "ssleay32" "libarchive" "libbz2" "liblzma" "libnettle" "libxml2" "libpng16" "libportmidi" "libportaudio" "libiconv" "libiconv" "jack") + declare -a qtlibs=("QtCore4" "QtXml4" "QtXmlPatterns4" "QtNetwork4" "QtGui4") + declare -a gcclibs=("libgcc" "libstdc++") + #loop through the libs, and put them into a text file. + cd $mxedir + for mylibs in "${libs[@]}" + do + cp `ls -v $mylibs*dll| tail -n 1` $extralibs + done + #loop through the qt files and put them into a text file + cd $qtdir + for myqtlibs in "${qtlibs[@]}" + do + cp `ls -v $myqtlibs*dll| tail -n 1` $extralibs + spa=" " + done + #find the latest gcc dir from mxe + cd $gccdir + echo `ls -v | tail -n 1` > $hydrogendir/../gccversion.txt + #loop through the gcclibs + cd $mxedir + for mygcclibs in "${gcclibs[@]}" + do + cp `ls -v $mygcclibs*dll| tail -n 1` $extralibs + done +} + +build_hydrogen(){ + # Passes either i686 or x86_64 for 32 or 64 bit respectively. + if [ -z "$HYDROGEN" ] || [ ! -d $HYDROGEN ]; then + echo "Now starting the building of Hydrogen for Windows. This will take quite a while and requires no interaction after the intial questions." + if [ -z ${CLONEPATH%/*} ]; then + read -e -p "Enter the path to the Hydrogen download (with a trailing /): " -i "$HOME/build/hydrogen/" CLONEPATH + fi + + HYDROGEN="${CLONEPATH}" + if [ ! -d $HYDROGEN ]; then + echo "Hydrogen source not found in $HYDROGEN." + exit + fi + fi + + echo "Checking for MXE." + if [ -d /opt/mxe ]; then + if [ -f /opt/mxe/usr/i686-w64-mingw32.shared/share/cmake/mxe-conf.cmake ] || [ -f /opt/mxe/usr/x86_64-w64-mingw32.shared/share/cmake/mxe-conf.cmake ]; then + MXE_INSTALLED=1 + MXE=/opt/mxe + fi + else + echo "mxe was not found, please run the mxe_installer.sh script first." + exit + fi + + #Build hydrogen itself now. + echo "Now building Hydrogen." + HYDROGEN_BUILD=$HYDROGEN"windows" + if [ ! -e "$HYDROGEN_BUILD" ]; then + mkdir $HYDROGEN"windows" + fi + echo "We will now build Hydrogen at $HYDROGEN_BUILD" + cd "$HYDROGEN_BUILD" + if [ -e ../CMakeCache.txt ]; then + echo "Previous build detected. We will now remove the caches so the project will build properly." + rm -rf _CPack_Packages CMakeFiles try + rm -f CMakeCache.txt CPackConfig.cmake cmake_install.cmake CPackSourceConfig.cmake install_manifest.txt ladspa_listplugins Makefile uninstall.cmake + fi + + cmake $4 ../ -DCMAKE_TOOLCHAIN_FILE=$MXE/usr/$1-w64-mingw32.shared/share/cmake/mxe-conf.cmake $2 $3 -DWANT_FAT_BUILD:BOOL=$FATBUILD -DWANT_DEBUG:BOOL=OFF + + export HYDROGEN + export HYDROGEN_BUILD + export MXE + + + #Bundle jack_installer if wanted.. + if [ $FATBUILD = true ]; then + if [ ! -e jack_installer ]; then + mkdir jack_installer + fi + cd jack_installer + if [ $1 == "x86_64" ]; then + if [ ! -e "Jack_v1.9.10_64_setup.exe" ]; then + wget https://dl.dropboxusercontent.com/u/28869550/Jack_v1.9.10_64_setup.exe + fi + else + if [ ! -e "Jack_v1.9.10_32_setup.exe" ]; then + wget https://dl.dropboxusercontent.com/u/28869550/Jack_v1.9.10_32_setup.exe + fi + fi + + cd .. + if [ ! -e plugins ]; then + mkdir plugins + cd plugins + if [ ! -e ladspaplugs ]; then + mkdir ladspaplugs + fi + cd ladspaplugs + if [ ! -e "LADSPA_plugins-win-0.4.15.exe" ]; then + wget http://sourceforge.net/projects/audacity/files/audacity/2.0.5/LADSPA_plugins-win-0.4.15.exe + fi + cd .. + fi + fi + + cd $HYDROGEN_BUILD + + if [ -e $HYDROGEN/mxe ]; then + if [ ! -h $HYDROGEN/mxe ]; then + rm -rf $HYDROGEN/mxe + fi + fi + if [ -e $HYDROGEN/extralibs ]; then + rm -rf $HYDROGEN/extralibs + fi + if [ ! -e $HYDROGEN/mxe ]; then + ln -s $MXE/usr/$1-w64-mingw32.shared $HYDROGEN/mxe + fi + if [ ! -e $HYDROGEN/gcc ]; then + ln -s $MXE/usr/lib/gcc $HYDROGEN/gcc + fi + cpack -G NSIS +} + +usage(){ + echo -e "\nManual mode:\t\tcross_compile.sh [-f] [-d SOURCE_DIR] -b i686|x86_64" + echo -e "Interactive mode:\tcross_compile.sh -i" + echo -e "Usage: \n\t-i:\tUse interactive mode \n\t-b:\tBuild hydrogen. Valid values: i686 or x86_64 \n\t-f:\tFat build (includes Jack and Ladspa installers). Only useful in combination with -b." +} + +fatbuild=false + +while getopts "d:fb:i" o; do + case "${o}" in + d) + HYDROGEN=${OPTARG} + if [ ! -d $HYDROGEN ]; then + echo "Hydrogen source not found in $HYDROGEN." + exit + fi + ;; + f) + FATBUILD=true + ;; + b) + arch=${OPTARG} + + if [ "$arch" != "x86_64" ]; then + mxe_files 32 + build_32bit + else + mxe_files 64 + build_64bit + fi + + ;; + i) + show_interactive_menu + ;; + *) + usage + ;; + esac +done +if [ $OPTIND -eq 1 ]; then usage; fi +shift $((OPTIND-1)) diff -Nru hydrogen-0.9.6.1/windows/hydrogen.exe.manifest hydrogen-0.9.7/windows/hydrogen.exe.manifest --- hydrogen-0.9.6.1/windows/hydrogen.exe.manifest 1970-01-01 00:00:00.000000000 +0000 +++ hydrogen-0.9.7/windows/hydrogen.exe.manifest 2016-11-05 08:22:50.000000000 +0000 @@ -0,0 +1,11 @@ + + + + + + + + + + + diff -Nru hydrogen-0.9.6.1/windows/icon.rc hydrogen-0.9.7/windows/icon.rc --- hydrogen-0.9.6.1/windows/icon.rc 1970-01-01 00:00:00.000000000 +0000 +++ hydrogen-0.9.7/windows/icon.rc 2016-11-05 08:22:50.000000000 +0000 @@ -0,0 +1,3 @@ +#include "winuser.h" +1 RT_MANIFEST "hydrogen.exe.manifest" +3 ICON "../data/img/h2-icon.ico" diff -Nru hydrogen-0.9.6.1/windows/mxe_installer.sh hydrogen-0.9.7/windows/mxe_installer.sh --- hydrogen-0.9.6.1/windows/mxe_installer.sh 1970-01-01 00:00:00.000000000 +0000 +++ hydrogen-0.9.7/windows/mxe_installer.sh 2016-11-05 08:22:50.000000000 +0000 @@ -0,0 +1,139 @@ +#!/bin/bash +#This script will try to install mxe for you. + +MXE_INSTALLED=0 + +if [ -d /opt/mxe ]; then + if [ -f /opt/mxe/usr/i686-w64-mingw32.shared/share/cmake/mxe-conf.cmake ] || [ -f /opt/mxe/usr/x86_64-w64-mingw32.shared/share/cmake/mxe-conf.cmake ]; then + MXE_INSTALLED=1 + fi +fi + +install_mxe(){ + if [ $MXE_INSTALLED == 1 ]; then + echo "mxe detected at /opt/mxe" + exit + fi + mkdir -p $HOME/build + cd $HOME/build + git clone https://github.com/mxe/mxe.git + sudo cp -pr mxe /opt/mxe + cd /opt/mxe + MXE=/opt/mxe + PATH=/opt/mxe/usr/bin:$PATH; + #Modify the MXE Makefiles to allow for the cross compilation. + sed -i 's/i686-w64-mingw32.static/i686-w64-mingw32.shared x86_64-w64-mingw32.shared/g' $MXE/Makefile + #Make gcc and winpthreads. gcc will need to be rebuilt once winpthreads is built. + #Note: This needs to happen because winpthreads needs gcc to be built, but we need gcc built with winpthreads support to build hydrogen. + # this creates a cyclical dependancy problem that there seems to be no way around. + make gcc $1 + make winpthreads $1 + sed -i 's/binutils gcc-gmp gcc-isl gcc-mpc gcc-mpfr mingw-w64/binutils gcc-gmp gcc-isl gcc-mpc gcc-mpfr winpthreads/g' $MXE/src/gcc.mk + sed -i 's/--enable-threads=win32/--enable-threads=posix/g' $MXE/src/gcc.mk + make gcc $1 + #Build the dependancies for hydrogen + make qt libarchive libsndfile portaudio portmidi fftw rubberband jack -j4 JOBS=4 $1 + sed -i 's/:= gcc/:= gcc jack/g' $MXE/src/portaudio.mk + make portaudio +} + +while : + do + # If error exists, display it + if [ "$ERR_MSG" != "" ]; then + echo "Error: $ERR_MSG" + echo "" + fi + + # Write out the menu options... + echo "Welcome to the MXE Installer. This will help install MXE on your system." + echo "Note: this script was made using the requirement information found at http://mxe.cc/#requirements" + echo "You can visit the above site for manual instructions on what packages are required. For instructions on how to build MXE you can visit this link: http://mxe.cc/#tutorial" + echo "Select an option:" + echo " 1: Debian and derrivatives" + echo " 2: Fedora" + echo " 3: FreeBSD (NOTE: No longer fully supported by MXE. See above requirements link.)" + echo " 4: Frugalware" + echo " 5: Gentoo" + echo " 6: Mac OS X" + echo " 7: openSUSE" + echo " q: Exit" + + # Clear the error message + ERR_MSG="" + + + # Read the user input + read SEL + + case $SEL in + 1) #Debian and derivatives + echo "Now installing required packages" + sudo apt-get install autoconf automake autopoint bash bison bzip2 cmake flex gettext git gcc g++ gperf intltool libffi-dev libtool libtool-bin libltdl-dev libssl-dev libxml-parser-perl make openssl patch perl pkg-config python ruby scons sed unzip wget xz-utils nsis + if (uname -a | grep x86_64); then + sudo apt-get install g++-multilib libc6-dev-i386 + fi + install_mxe + ;; + 2) #Fedora + echo "Now installing required packages" + yum install autoconf automake bash bison bzip2 cmake flex gcc-c++ gettext git gperf intltool make sed libffi-devel libtool openssl-devel patch perl pkgconfig python ruby scons unzip wget xz + install_mxe EXCLUDE_PKGS='ocaml%' + ;; + 3) #FreeBSD + echo "FreeBSD is no longer fully supported. This may install the package; however, it may not work as expected. please visit http://mxe.cc/#requirements for more information." + echo "Now installing required packages" + pkg_add -r automake autoconf bash bison cmake coreutils flex gettext git glib20 gmake gperf gsed intltool libffi libtool openssl patch perl p5-XML-Parser pkgconf python ruby scons unzip wget + install_mxe EXCLUDE_PKGS='ocaml%' + ;; + 4) #Frugalware + echo "Now installing required packages" + pacman-g2 -S autoconf automake bash bzip2 bison cmake flex gcc gettext git gperf intltool make sed libffi libtool openssl patch perl perl-xml-parser pkgconfig python ruby scons unzip wget xz xz-lzma + install_mxe EXCLUDE_PKGS='ocaml%' + ;; + 5) #Gentoo + echo "Now installing required packages" + emerge sys-devel/autoconf sys-devel/automake app-shells/bash sys-devel/bison app-arch/bzip2 dev-util/cmake sys-devel/flex sys-devel/gcc sys-devel/gettext dev-vcs/git dev-util/gperf dev-util/intltool sys-devel/make sys-apps/sed dev-libs/libffi sys-devel/libtool dev-libs/openssl sys-devel/patch dev-lang/perl dev-perl/XML-Parser dev-util/pkgconfig dev-lang/python dev-lang/ruby dev-util/scons app-arch/unzip net-misc/wget app-arch/xz-utils + install_mxe + ;; + 6) #Mac OS X + echo "You may be prompted to install a java runtime - this is not required." + echo "Mac OS X versions ≤ 10.7 are no longer supported." + while : + do + echo "1) If you have macports installed select this." + echo "2) If you do NOT have macports installed, this will install Rudix and then install MXE." + read MAC + case $MAC in + 1)#Macports IS installed + sudo port install glib2 intltool p5-xml-parser gpatch scons wget xz + make build-requirements + install_mxe + ;; + 2)#Macports is NOT installed. Install Rudix + curl -s https://raw.githubusercontent.com/rudix-mac/rpm/2014.6/rudix.py | sudo python - install rudix + sudo rudix install glib pkg-config scons wget xz + make build-requirements + install_mxe + ;; + esac + + done + ;; + 7) #openSUSE + echo "Now installing required packages" + zypper install -R autoconf automake bash bison bzip2 cmake flex gcc-c++ gettext-tools git gperf intltool libffi-devel libtool make openssl libopenssl-devel patch perl perl-XML-Parser pkg-config python ruby scons sed unzip wget xz + if (uname -a | grep x86_64); then + zypper install -R gcc-32bit glibc-devel-32bit libgcc46-32bit libgomp46-32bit libstdc++46-devel-32bit + fi + install_mxe + ;; + q) echo "Thank you for using the MXE installer. Goodbye." + exit + ;; + *) ERR_MSG="Please enter a valid option" + esac + + # clear the screen again for re-display + #clear +done diff -Nru hydrogen-0.9.6.1/windows/README.md hydrogen-0.9.7/windows/README.md --- hydrogen-0.9.6.1/windows/README.md 1970-01-01 00:00:00.000000000 +0000 +++ hydrogen-0.9.7/windows/README.md 2016-11-05 08:22:50.000000000 +0000 @@ -0,0 +1,146 @@ +# Building for Windows + +## Cross-compiling on a Unix System + +### The easy way: +#### Interactive method + run the script mxe_installer.sh located in the windows folder + + then, + + run the script cross_compile.sh with the -i switch located in the windows folder. + + $./cross_compile.sh -i +#### Manual package + Simply run the script with the -b switch and pass in the architecture you want to build, either i686 or x86_64 + + If you want the "fat" package, which bundles with the jack installer, and the ladspa plugins, then pass in the -f as well. + + $./cross_compile.sh -b x86_64 + +### The manual way: + + +### Installing all necessary packages + + +#### On *nix systems (OS X Included) + +Visit the page: http://mxe.cc/#requirements and install the pre-requesite packages. + +### Cloning Hydrogen from the github repository + +If you have not already done it. + + $ git clone -b master https://github.com/hydrogen-music/hydrogen.git + +### Setting the Hydrogen environment variable + +Change to your Hydrogen directory. + + $mv hydrogen source + + $ cd source + + $ export HYDROGEN=$PWD + + $ cd .. + +### Cloning MXE from the github repository + +Clone the master branch, since it should be more up-to-date than the stable branch. + + $ git clone -b master https://github.com/mxe/mxe.git + +### Configuring MXE + + $ cd mxe + + $ export MXE=$PWD + +Edit *Makefile* and set the value of *MXE_TARGETS* as follows (). + For 32-bit Windows target: + MXE_TARGETS := i686-w64-mingw32.shared + + For 64-bit Windows target: + MXE_TARGETS := x86_64-w64-mingw32.shared + + For both 32 and 64 bit Windows target: + MXE_TARGETS := i686-w64-mingw32.shared x86_64-w64-mingw32.shared + +### Configuring and cross-compiling packages + +Most *make* operations below take a considerable amount of time. The lengthy ones have been timed, in order to give you a rough estimate. If you're compiling both 32 and 64 bit versions then you will need to roughly double all the times listed below. Adjust your completion expectations according to the values presented and your system capabilities. All operations in this section should be executed in the MXE root directory, where the *Makefile* resides. Packages along with their dependencies are downloaded and cross-compiled automatically as needed. + +#### Cross-compiling gcc + + $ make gcc + + real 13m10.244s + user 30m51.456s + sys 4m17.841s + +#### Cross-compiling winpthreads + + $ make winpthreads + +#### Configuring gcc and cross-compile again + +There is a cyclical dependancy problem here that requires gcc to be built once normally, and then once with winpthreads. This is because winpthreads requires gcc to build, but we need gcc built with winpthreads support (which it doesn't have the first time you make it). + +Edit *src/gcc.mk* and set the value of *$(PKG)_DEPS* as follows. + + $(PKG)_DEPS := binutils gcc-gmp gcc-isl gcc-mpc gcc-mpfr winpthreads + +Also set the value of *--enable-threads* as follows. + + --enable-threads=posix + +Then cross-compile gcc again. + + $ make gcc + + real 8m32.152s + user 24m34.296s + sys 2m47.471s + +#### Cross-compiling other packages + + $ make qt libarchive libsndfile portaudio portmidi fftw rubberband jack + + real 70m17.737s + user 199m0.451s + sys 15m14.591s + + Due to a bug in jack, you will need to edit the portaudio.mk file and set jack as a dependancy, then rebuild portaudio + + $ sed -i 's/:= gcc/:= gcc jack/g' $MXE/src/portaudio.mk + + $ make portaudio + +### Cross-compiling Hydrogen + You will want to change the CMAKE_TOOLCHAIN_FILE to reflect which version of hydrogen you want (i686 = 32bit, x86_64 = 64bit). + + $ cd $HYDROGEN + + For 32 bit compilations use + $ cmake -DCMAKE_TOOLCHAIN_FILE=$MXE/usr/i686-w64-mingw32.shared/share/cmake/mxe-conf.cmake + + For 64 bit compilations use + $ cmake -DWIN64:BOOL=ON ../ -DCMAKE_TOOLCHAIN_FILE=$MXE/usr/i686-w64-mingw32.shared/share/cmake/mxe-conf.cmake -DCMAKE_{C,CXX}_FLAGS=-m64 + + $ cpack -G NSIS + + real 4m32.063s + user 4m14.671s + sys 0m17.105s + + cpack will create your installer for you, which you can then copy to a windows machine, and install. + +### Troubleshooting + +Troubleshooting. + +### Bugs? + +Bugs.