# HG changeset patch # User Chris Cannam # Date 1435324725 -3600 # Node ID 2363196deed789326c23c49ffe08a72cabe827df # Parent 8d45d6412ca6338adcc532cbfa5dd194d367ef21# Parent fc742cdbf2b94d38633a0c63fe7ea348738b2e9d Merge from branch normalize_hybrid_option diff -r fc742cdbf2b9 -r 2363196deed7 .hgignore --- a/.hgignore Fri Sep 12 11:38:55 2014 +0100 +++ b/.hgignore Fri Jun 26 14:18:45 2015 +0100 @@ -25,4 +25,4 @@ Sonic Visualiser* .DS_Store *.stash - +cov-int/* diff -r fc742cdbf2b9 -r 2363196deed7 .hgsub --- a/.hgsub Fri Sep 12 11:38:55 2014 +0100 +++ b/.hgsub Fri Jun 26 14:18:45 2015 +0100 @@ -3,3 +3,4 @@ svapp = https://code.soundsoftware.ac.uk/hg/svapp dataquay = https://bitbucket.org/breakfastquay/dataquay sv-dependency-builds = https://code.soundsoftware.ac.uk/hg/sv-dependency-builds +icons/scalable = https://code.soundsoftware.ac.uk/hg/sv-iconset diff -r fc742cdbf2b9 -r 2363196deed7 .hgsubstate --- a/.hgsubstate Fri Sep 12 11:38:55 2014 +0100 +++ b/.hgsubstate Fri Jun 26 14:18:45 2015 +0100 @@ -1,5 +1,6 @@ d16f0fd6db6104d87882bc43788a3bb1b0f8c528 dataquay -879bdc878826bebec67130326f99397c430419b1 sv-dependency-builds -a39a7d6b0f2d0b6bff0b580b733f7db69c63c135 svapp -a54016762f77582f95bb6fedb1f302cb32906612 svcore -1986c9b0d9c3355324cef2b67917d64d660ea949 svgui +845471c833a182376747b44a3ca28181bbdb3c93 icons/scalable +55ece8862b6d3a54aad271a53f9c1615e5d3bcf8 sv-dependency-builds +83370e830c956be0fc4a7d9b5c30761b6ffb7613 svapp +ee0aff1d0743680befe36e5627d31c019778d0b0 svcore +98827470ada2609207b65027dda747869076524b svgui diff -r fc742cdbf2b9 -r 2363196deed7 .hgtags --- a/.hgtags Fri Sep 12 11:38:55 2014 +0100 +++ b/.hgtags Fri Jun 26 14:18:45 2015 +0100 @@ -45,3 +45,6 @@ 0000000000000000000000000000000000000000 sv_v2.3-f 7f7fba33b7de2890ca96dbd15969219bb9fe04b9 sv_v2.3 bf06f4311ec0af43f93a15489a757955e07597cd sv_v2.3 +cfbea29fae640aed5c8b7265d6806df823f34fef sv_v2.4 +8215909b74d2c58be28ce128d40fbc1645bc0d6e sv_v2.4_linux_deploy +2868d5abf1a3baa37099c1b5d7e984bf8bb8177a sv_v2.4.1 diff -r fc742cdbf2b9 -r 2363196deed7 CHANGELOG --- a/CHANGELOG Fri Sep 12 11:38:55 2014 +0100 +++ b/CHANGELOG Fri Jun 26 14:18:45 2015 +0100 @@ -1,3 +1,6 @@ +Changes in Sonic Visualiser 2.4.1 since the previous release 2.4: + + - Fix a crash when rendering certain colour 3d plot layers Changes in Sonic Visualiser 2.4 since the previous release 2.3: @@ -23,6 +26,10 @@ electric piano with sustain. The piano sample is still available, and any sessions saved using it should continue to use it + - Add a cancel button for Vamp plugin processing: currently, + cancelling a transform results in a part-complete layer rather than + removing the results + - Add keyboard shortcuts to cycle the current layer (in addition to the existing ones to cycle the current pane) @@ -41,6 +48,9 @@ - Make it possible to import CSV files directly into Note layers by adding Pitch as a data type in the CSV file import dialog + - Fix play pointer jump to wrong frame when clicking on row in the + layer edit dialog + - Fix problems with keyboard shortcuts when using Qt5 on OS/X. This is the first release in which the official builds use Qt5 for all platforms. diff -r fc742cdbf2b9 -r 2363196deed7 INSTALL.txt --- a/INSTALL.txt Fri Sep 12 11:38:55 2014 +0100 +++ b/INSTALL.txt Fri Jun 26 14:18:45 2015 +0100 @@ -9,25 +9,21 @@ The following additional libraries are required or optional when building the SV core libraries: -REQUIRED Qt v4.4 or newer http://qt.nokia.com/ +REQUIRED Qt v5 http://qt-project.org/ REQUIRED Vamp Plugin SDK v2.x http://www.vamp-plugins.org/ REQUIRED Rubber Band Library http://www.breakfastquay.com/rubberband/ REQUIRED libsndfile http://www.mega-nerd.com/libsndfile/ REQUIRED libsamplerate http://www.mega-nerd.com/SRC/ REQUIRED FFTW3 http://www.fftw.org/ REQUIRED bzip2 library http://www.bzip.org/ -REQUIRED Redland RDF libraries http://librdf.org/ +REQUIRED Sord and Serd libraries http://drobilla.net/software/ Optional MAD mp3 decoder http://www.underbit.com/products/mad/ Optional Oggz and fishsound http://xiph.org/oggz/ Optional liblo OSC library http://www.plugin.org.uk/liblo/ -The Redland RDF libraries include the Raptor RDF parser library, -Rasqal RDF query library, and librdf, the Redland RDF datastore (which -depends on both of those). The SV libraries require all of these. - -If you are going to build the rest of the SV libraries, you will also -need one or more of: +If you are going to build the rest of the SV libraries and the Sonic +Visualiser application, you will also need one or more of: Optional JACK http://www.jackaudio.org/ Optional PortAudio v19 http://www.portaudio.com/ @@ -41,8 +37,9 @@ On Linux, you will need the ALSA libraries (used for MIDI). If you happen to be using a Debian-based Linux, you probably want to -apt-get install the following packages: libqt4-dev libsndfile1-dev -libsamplerate0-dev fftw3-dev libbz2-dev libjack-dev libmad0-dev -liboggz1-dev libfishsound1-dev libasound2-dev liblo0-dev liblrdf0-dev -librdf0-dev . +apt-get install something like the following packages: qtbase5-dev +qt5-default libsndfile1-dev libsamplerate0-dev libfftw3-dev libbz2-dev +libjack-dev libjack0 libpulse-dev libmad0-dev libid3tag0-dev +liboggz2-dev libfishsound1-dev libasound2-dev liblo-dev liblrdf0-dev +libsord-dev libserd-dev vamp-plugin-sdk librubberband-dev. diff -r fc742cdbf2b9 -r 2363196deed7 acinclude.m4 --- a/acinclude.m4 Fri Sep 12 11:38:55 2014 +0100 +++ b/acinclude.m4 Fri Jun 26 14:18:45 2015 +0100 @@ -112,3 +112,146 @@ ]) +# From autoconf archive: + +# ============================================================================ +# http://www.gnu.org/software/autoconf-archive/ax_cxx_compile_stdcxx_11.html +# ============================================================================ +# +# SYNOPSIS +# +# AX_CXX_COMPILE_STDCXX_11([ext|noext],[mandatory|optional]) +# +# DESCRIPTION +# +# Check for baseline language coverage in the compiler for the C++11 +# standard; if necessary, add switches to CXXFLAGS to enable support. +# +# The first argument, if specified, indicates whether you insist on an +# extended mode (e.g. -std=gnu++11) or a strict conformance mode (e.g. +# -std=c++11). If neither is specified, you get whatever works, with +# preference for an extended mode. +# +# The second argument, if specified 'mandatory' or if left unspecified, +# indicates that baseline C++11 support is required and that the macro +# should error out if no mode with that support is found. If specified +# 'optional', then configuration proceeds regardless, after defining +# HAVE_CXX11 if and only if a supporting mode is found. +# +# LICENSE +# +# Copyright (c) 2008 Benjamin Kosnik +# Copyright (c) 2012 Zack Weinberg +# Copyright (c) 2013 Roy Stogner +# Copyright (c) 2014 Alexey Sokolov +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +m4_define([_AX_CXX_COMPILE_STDCXX_11_testbody], [[ + template + struct check + { + static_assert(sizeof(int) <= sizeof(T), "not big enough"); + }; + + struct Base { + virtual void f() {} + }; + struct Child : public Base { + virtual void f() override {} + }; + + typedef check> right_angle_brackets; + + int a; + decltype(a) b; + + typedef check check_type; + check_type c; + check_type&& cr = static_cast(c); + + auto d = a; + auto l = [](){}; +]]) + +AC_DEFUN([AX_CXX_COMPILE_STDCXX_11], [dnl + m4_if([$1], [], [], + [$1], [ext], [], + [$1], [noext], [], + [m4_fatal([invalid argument `$1' to AX_CXX_COMPILE_STDCXX_11])])dnl + m4_if([$2], [], [ax_cxx_compile_cxx11_required=true], + [$2], [mandatory], [ax_cxx_compile_cxx11_required=true], + [$2], [optional], [ax_cxx_compile_cxx11_required=false], + [m4_fatal([invalid second argument `$2' to AX_CXX_COMPILE_STDCXX_11])]) + AC_LANG_PUSH([C++])dnl + ac_success=no + AC_CACHE_CHECK(whether $CXX supports C++11 features by default, + ax_cv_cxx_compile_cxx11, + [AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_11_testbody])], + [ax_cv_cxx_compile_cxx11=yes], + [ax_cv_cxx_compile_cxx11=no])]) + if test x$ax_cv_cxx_compile_cxx11 = xyes; then + ac_success=yes + fi + + m4_if([$1], [noext], [], [dnl + if test x$ac_success = xno; then + for switch in -std=gnu++11 -std=gnu++0x; do + cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx11_$switch]) + AC_CACHE_CHECK(whether $CXX supports C++11 features with $switch, + $cachevar, + [ac_save_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS $switch" + AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_11_testbody])], + [eval $cachevar=yes], + [eval $cachevar=no]) + CXXFLAGS="$ac_save_CXXFLAGS"]) + if eval test x\$$cachevar = xyes; then + CXXFLAGS="$CXXFLAGS $switch" + ac_success=yes + break + fi + done + fi]) + + m4_if([$1], [ext], [], [dnl + if test x$ac_success = xno; then + for switch in -std=c++11 -std=c++0x; do + cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx11_$switch]) + AC_CACHE_CHECK(whether $CXX supports C++11 features with $switch, + $cachevar, + [ac_save_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS $switch" + AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_11_testbody])], + [eval $cachevar=yes], + [eval $cachevar=no]) + CXXFLAGS="$ac_save_CXXFLAGS"]) + if eval test x\$$cachevar = xyes; then + CXXFLAGS="$CXXFLAGS $switch" + ac_success=yes + break + fi + done + fi]) + AC_LANG_POP([C++]) + if test x$ax_cxx_compile_cxx11_required = xtrue; then + if test x$ac_success = xno; then + AC_MSG_ERROR([*** A compiler with support for C++11 language features is required.]) + fi + else + if test x$ac_success = xno; then + HAVE_CXX11=0 + AC_MSG_NOTICE([No compiler with C++11 support was found]) + else + HAVE_CXX11=1 + AC_DEFINE(HAVE_CXX11,1, + [define if the compiler supports basic C++11 syntax]) + fi + + AC_SUBST(HAVE_CXX11) + fi +]) + diff -r fc742cdbf2b9 -r 2363196deed7 configure --- a/configure Fri Sep 12 11:38:55 2014 +0100 +++ b/configure Fri Jun 26 14:18:45 2015 +0100 @@ -1,8 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for Sonic Visualiser 2.4. -# -# Report bugs to . +# Generated by GNU Autoconf 2.69. # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. @@ -266,8 +264,7 @@ $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else - $as_echo "$0: Please tell bug-autoconf@gnu.org and -$0: cannam@all-day-breakfast.com about your system, + $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." @@ -578,13 +575,14 @@ MAKEFLAGS= # Identity of this package. -PACKAGE_NAME='Sonic Visualiser' -PACKAGE_TARNAME='sonic-visualiser' -PACKAGE_VERSION='2.4' -PACKAGE_STRING='Sonic Visualiser 2.4' -PACKAGE_BUGREPORT='cannam@all-day-breakfast.com' -PACKAGE_URL='' - +PACKAGE_NAME= +PACKAGE_TARNAME= +PACKAGE_VERSION= +PACKAGE_STRING= +PACKAGE_BUGREPORT= +PACKAGE_URL= + +ac_unique_file="Sonic Visualiser" ac_unique_file="main/main.cpp" # Factoring default headers for most tests. ac_includes_default="\ @@ -681,6 +679,7 @@ EGREP GREP CXXCPP +HAVE_CXX11 MKDIR_P INSTALL_DATA INSTALL_SCRIPT @@ -833,7 +832,7 @@ localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' -docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +docdir='${datarootdir}/doc/${PACKAGE}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' @@ -1333,7 +1332,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures Sonic Visualiser 2.4 to adapt to many kinds of systems. +\`configure' configures this package to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1381,8 +1380,7 @@ --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] - --docdir=DIR documentation root - [DATAROOTDIR/doc/sonic-visualiser] + --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] @@ -1394,9 +1392,7 @@ fi if test -n "$ac_init_help"; then - case $ac_init_help in - short | recursive ) echo "Configuration of Sonic Visualiser 2.4:";; - esac + cat <<\_ACEOF Optional Features: @@ -1483,7 +1479,7 @@ Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. -Report bugs to . +Report bugs to the package provider. _ACEOF ac_status=$? fi @@ -1546,7 +1542,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -Sonic Visualiser configure 2.4 +configure generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -1785,10 +1781,6 @@ $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} -( $as_echo "## ------------------------------------------- ## -## Report this to cannam@all-day-breakfast.com ## -## ------------------------------------------- ##" - ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 @@ -1886,7 +1878,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by Sonic Visualiser $as_me 2.4, which was +It was created by $as_me, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -3470,6 +3462,146 @@ $as_echo "$MKDIR_P" >&6; } +# We are daringly making use of C++11 now + + ax_cxx_compile_cxx11_required=true + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + ac_success=no + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features by default" >&5 +$as_echo_n "checking whether $CXX supports C++11 features by default... " >&6; } +if ${ax_cv_cxx_compile_cxx11+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + template + struct check + { + static_assert(sizeof(int) <= sizeof(T), "not big enough"); + }; + + struct Base { + virtual void f() {} + }; + struct Child : public Base { + virtual void f() override {} + }; + + typedef check> right_angle_brackets; + + int a; + decltype(a) b; + + typedef check check_type; + check_type c; + check_type&& cr = static_cast(c); + + auto d = a; + auto l = [](){}; + +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ax_cv_cxx_compile_cxx11=yes +else + ax_cv_cxx_compile_cxx11=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_cxx_compile_cxx11" >&5 +$as_echo "$ax_cv_cxx_compile_cxx11" >&6; } + if test x$ax_cv_cxx_compile_cxx11 = xyes; then + ac_success=yes + fi + + + + if test x$ac_success = xno; then + for switch in -std=c++11 -std=c++0x; do + cachevar=`$as_echo "ax_cv_cxx_compile_cxx11_$switch" | $as_tr_sh` + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features with $switch" >&5 +$as_echo_n "checking whether $CXX supports C++11 features with $switch... " >&6; } +if eval \${$cachevar+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS $switch" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + template + struct check + { + static_assert(sizeof(int) <= sizeof(T), "not big enough"); + }; + + struct Base { + virtual void f() {} + }; + struct Child : public Base { + virtual void f() override {} + }; + + typedef check> right_angle_brackets; + + int a; + decltype(a) b; + + typedef check check_type; + check_type c; + check_type&& cr = static_cast(c); + + auto d = a; + auto l = [](){}; + +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + eval $cachevar=yes +else + eval $cachevar=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CXXFLAGS="$ac_save_CXXFLAGS" +fi +eval ac_res=\$$cachevar + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + if eval test x\$$cachevar = xyes; then + CXXFLAGS="$CXXFLAGS $switch" + ac_success=yes + break + fi + done + fi + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + if test x$ax_cxx_compile_cxx11_required = xtrue; then + if test x$ac_success = xno; then + as_fn_error $? "*** A compiler with support for C++11 language features is required." "$LINENO" 5 + fi + else + if test x$ac_success = xno; then + HAVE_CXX11=0 + { $as_echo "$as_me:${as_lineno-$LINENO}: No compiler with C++11 support was found" >&5 +$as_echo "$as_me: No compiler with C++11 support was found" >&6;} + else + HAVE_CXX11=1 + +$as_echo "#define HAVE_CXX11 1" >>confdefs.h + + fi + + + fi + ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' @@ -4223,9 +4355,10 @@ CXXFLAGS_MINIMAL="$AUTOCONF_CXXFLAGS" if test "x$GCC" = "xyes"; then - CXXFLAGS_DEBUG="-Wall -Wextra -Werror -Woverloaded-virtual -Wformat-nonliteral -Wformat-security -Winit-self -Wswitch-enum -g -pipe" - CXXFLAGS_RELEASE="-g0 -O2 -Wall -pipe" - CXXFLAGS_MINIMAL="-g0 -O0" + CXXFLAGS_ANY="-Wall -Wextra -Werror -Woverloaded-virtual -Wformat-nonliteral -Wformat-security -Winit-self -Wswitch-enum -Wconversion -pipe" + CXXFLAGS_DEBUG="$CXXFLAGS_ANY -g" + CXXFLAGS_RELEASE="$CXXFLAGS_ANY -g0 -O2" + CXXFLAGS_MINIMAL="$CXXFLAGS_ANY -g0 -O0" fi CXXFLAGS_BUILD="$CXXFLAGS_RELEASE" @@ -7357,7 +7490,7 @@ subdirs="$subdirs svcore svgui svapp" -ac_config_files="$ac_config_files config.pri version.h" +ac_config_files="$ac_config_files config.pri" cat >confcache <<\_ACEOF @@ -7902,7 +8035,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by Sonic Visualiser $as_me 2.4, which was +This file was extended by $as_me, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -7949,13 +8082,13 @@ Configuration files: $config_files -Report bugs to ." +Report bugs to the package provider." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -Sonic Visualiser config.status 2.4 +config.status configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" @@ -8068,7 +8201,6 @@ do case $ac_config_target in "config.pri") CONFIG_FILES="$CONFIG_FILES config.pri" ;; - "version.h") CONFIG_FILES="$CONFIG_FILES version.h" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac diff -r fc742cdbf2b9 -r 2363196deed7 configure.ac --- a/configure.ac Fri Sep 12 11:38:55 2014 +0100 +++ b/configure.ac Fri Jun 26 14:18:45 2015 +0100 @@ -1,5 +1,5 @@ -AC_INIT([Sonic Visualiser], [2.4], cannam@all-day-breakfast.com) +AC_INIT([Sonic Visualiser], [], cannam@all-day-breakfast.com) AC_CONFIG_SRCDIR(main/main.cpp) @@ -25,6 +25,9 @@ AC_PROG_INSTALL AC_PROG_MKDIR_P +# We are daringly making use of C++11 now +AX_CXX_COMPILE_STDCXX_11(noext) + AC_HEADER_STDC # These are the flags Autoconf guesses for us; we use them later if @@ -50,9 +53,10 @@ CXXFLAGS_MINIMAL="$AUTOCONF_CXXFLAGS" if test "x$GCC" = "xyes"; then - CXXFLAGS_DEBUG="-Wall -Wextra -Werror -Woverloaded-virtual -Wformat-nonliteral -Wformat-security -Winit-self -Wswitch-enum -g -pipe" - CXXFLAGS_RELEASE="-g0 -O2 -Wall -pipe" - CXXFLAGS_MINIMAL="-g0 -O0" + CXXFLAGS_ANY="-Wall -Wextra -Werror -Woverloaded-virtual -Wformat-nonliteral -Wformat-security -Winit-self -Wswitch-enum -Wconversion -pipe" + CXXFLAGS_DEBUG="$CXXFLAGS_ANY -g" + CXXFLAGS_RELEASE="$CXXFLAGS_ANY -g0 -O2" + CXXFLAGS_MINIMAL="$CXXFLAGS_ANY -g0 -O0" fi CXXFLAGS_BUILD="$CXXFLAGS_RELEASE" @@ -117,7 +121,7 @@ AC_SUBST(QMAKE_CONFIG) AC_CONFIG_SUBDIRS([svcore svgui svapp]) -AC_CONFIG_FILES([config.pri version.h]) +AC_CONFIG_FILES([config.pri]) AC_OUTPUT diff -r fc742cdbf2b9 -r 2363196deed7 deploy/linux/control.example --- a/deploy/linux/control.example Fri Sep 12 11:38:55 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,16 +0,0 @@ -Package: sonic-visualiser -Priority: optional -Maintainer: Chris Cannam -Architecture: PLACE ARCHITECTURE HERE i386 or amd64 -Version: PLACE VERSION HERE e.g. 2.2cc-1 -Depends: libqtgui4 (>= 4.5.0), libexpat1, libfontconfig1, libfreetype6, libice6, - libpcre3, libstdc++6, libx11-6, libxau6, libxcursor1, libxdmcp6, libxext6, libx -fixes3, libxrender1, zlib1g, libasound2, libc6 -Description: View and analyse the contents of music audio files - Sonic Visualiser is an application for viewing and analysing the contents of mu -sic audio files. It was developed at the Centre for Digital Music at Queen Mary, - University of London. Our aim is for it to be the first program you reach for w -hen want to study a musical recording rather than simply listen to it. - We hope Sonic Visualiser will be of particular interest to musicologists, archi -vists, signal-processing researchers and anyone else looking for a friendly way -to take a look at what lies inside the audio file. diff -r fc742cdbf2b9 -r 2363196deed7 deploy/linux/deb-skeleton/DEBIAN/control --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/deploy/linux/deb-skeleton/DEBIAN/control Fri Jun 26 14:18:45 2015 +0100 @@ -0,0 +1,17 @@ +Package: sonic-visualiser +Priority: optional +Maintainer: Chris Cannam +Architecture: amd64 +Version: 2.4cc-1 +Installed-Size: 6056 +Section: contrib/sound +Depends: libqt5core5a, libsndfile1, libsamplerate0, libfftw3-3, libbz2-1.0, libpulse0, libmad0, libid3tag0, liboggz2, libfishsound1, libasound2, liblo7, liblrdf0, libsord-0-0, libserd-0-0, vamp-plugin-sdk, librubberband2, libc6 +Description: View and analyse the contents of music audio files + Sonic Visualiser is an application for viewing and analysing the contents + of music audio files. It was developed at the Centre for Digital Music at + Queen Mary, University of London. Our aim is for it to be the first program + you reach for when want to study a musical recording rather than simply + listen to it. + We hope Sonic Visualiser will be of particular interest to musicologists, + archivists, signal-processing researchers and anyone else looking for a + friendly way to take a look at what lies inside the audio file. diff -r fc742cdbf2b9 -r 2363196deed7 deploy/linux/deb-skeleton/usr/share/applications/sonic-visualiser.desktop --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/deploy/linux/deb-skeleton/usr/share/applications/sonic-visualiser.desktop Fri Jun 26 14:18:45 2015 +0100 @@ -0,0 +1,9 @@ +[Desktop Entry] +Name=Sonic Visualiser +Exec=sonic-visualiser %U +Keywords=audio; sound; visualiser; sonic; +Terminal=false +Type=Application +Icon=sv-icon +Categories=Audio;AudioVideo; +MimeType=application/x-sonicvisualiser;application/x-sonicvisualiser-layer;application/x-ogg;audio/mp3;audio/mpeg;audio/mpegurl;audio/x-flac;audio/x-mp3;audio/x-mpeg;audio/x-mpegurl;audio/x-wav;audio/wav;application/ogg;audio/x-vorbis+ogg; diff -r fc742cdbf2b9 -r 2363196deed7 deploy/linux/deb-skeleton/usr/share/doc/sonic-visualiser/README --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/deploy/linux/deb-skeleton/usr/share/doc/sonic-visualiser/README Fri Jun 26 14:18:45 2015 +0100 @@ -0,0 +1,107 @@ + +Sonic Visualiser +================ + +Sonic Visualiser is a program for viewing and analysing the contents +of music audio files. + +With Sonic Visualiser you can: + + * Load audio files in various formats (WAV/AIFF, plus Ogg and mp3 +if compiled in) and view their waveforms + + * Look at audio visualisations such as spectrogram views, with +interactive adjustment of display parameters + + * Annotate audio data by adding labelled time points and defining +segments, point values and curves + + * Run feature-extraction plugins to calculate annotations +automatically, using algorithms such as beat trackers, pitch +detectors and so on (see http://vamp-plugins.org/) + + * Import annotation data from various text formats and MIDI files + + * Play back the original audio with synthesised annotations, taking +care to synchronise playback with the display position + + * Slow down and speed up playback and loop segments of interest, +including seamless looping of complex non-contiguous areas + + * Export annotations and audio selections to external files. + +Sonic Visualiser can also be controlled remotely using the Open Sound +Control (OSC) protocol (if support is compiled in). + + +Credits +------- + +Sonic Visualiser was developed at the Centre for Digital Music, +Queen Mary, University of London. + + http://c4dm.eecs.qmul.ac.uk/ + +Sonic Visualiser was written by Chris Cannam with contributions from +Christian Landone, Mathieu Barthet, Dan Stowell, Jesus Corral Garcia, +Matthias Mauch, and Craig Sapp. + +Code copyright 2005-2007 Chris Cannam and copyright 2006-2014 Queen +Mary, University of London, except where indicated in the individual +source files. + +This work was partially funded by the European Commission through the +SIMAC project IST-FP6-507142 and the EASAIER project IST-FP6-033902. + +This work was partially funded by the Arts and Humanities Research +Council through its Research Centre for the History and Analysis of +Recorded Music (CHARM). + +This work was partially funded by the Engineering and Physical +Sciences Research Council through the OMRAS2 project EP/E017614/1, the +Musicology for the Masses project EP/I001832/1, and the Sound Software +project EP/H043101/1. + +Sonic Visualiser is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or (at +your option) any later version. See the file COPYING included with +this distribution for more information. + +Sonic Visualiser may also make use of the following libraries: + + * Qt5 -- Copyright Digia Oyj, distributed under the LGPL + * JACK -- Copyright Paul Davis, Jack O'Quin et al, under the LGPL + * PortAudio -- Copyright Ross Bencina, Phil Burk et al, BSD license + * Ogg decoder -- Copyright CSIRO Australia, BSD license + * MAD mp3 decoder -- Copyright Underbit Technologies Inc, GPL + * libsamplerate -- Copyright Erik de Castro Lopo, GPL + * libsndfile -- Copyright Erik de Castro Lopo, LGPL + * FFTW3 -- Copyright Matteo Frigo and MIT, GPL + * Rubber Band -- Copyright Chris Cannam, GPL + * Vamp plugin SDK -- Copyright Chris Cannam and QMUL, BSD license + * LADSPA plugin SDK -- Copyright Richard Furse et al, LGPL + * RtMIDI -- Copyright Gary P. Scavone, BSD license + * Dataquay -- Copyright Breakfast Quay, BSD license + * Sord and Serd -- Copyright David Robillard, BSD license + * Redland -- Copyright Dave Beckett and the University of Bristol, LGPL/Apache license + * liblo OSC library -- Copyright Steve Harris, GPL + +(Some distributions of Sonic Visualiser may have one or more of these +libraries statically linked.) Many thanks to their authors. + + +Compiling Sonic Visualiser +-------------------------- + +If you are planning to compile Sonic Visualiser from source code, +please read the file INSTALL.txt. + + +More information +---------------- + +For more information about Sonic Visualiser, please go to + + http://www.sonicvisualiser.org/ + diff -r fc742cdbf2b9 -r 2363196deed7 deploy/linux/deb-skeleton/usr/share/doc/sonic-visualiser/changelog.Debian.gz Binary file deploy/linux/deb-skeleton/usr/share/doc/sonic-visualiser/changelog.Debian.gz has changed diff -r fc742cdbf2b9 -r 2363196deed7 deploy/linux/deb-skeleton/usr/share/doc/sonic-visualiser/copyright --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/deploy/linux/deb-skeleton/usr/share/doc/sonic-visualiser/copyright Fri Jun 26 14:18:45 2015 +0100 @@ -0,0 +1,32 @@ +Sonic Visualiser was developed at the Centre for Digital Music, +Queen Mary, University of London. + + http://www.elec.qmul.ac.uk/digitalmusic/ + +The main program is by Chris Cannam, with additional DSP and program +design work by Christian Landone. Thanks also to Craig Sapp for his +suggestions and useful feedback. + +Code copyright 2005-2007 Chris Cannam and copyright 2006-2014 Queen +Mary, University of London, except where indicated in the individual +source files. + +This work was partially funded by the European Commission through the +SIMAC project IST-FP6-507142 and the EASAIER project IST-FP6-033902. + +This work was partially funded by the Arts and Humanities Research +Council through its Research Centre for the History and Analysis of +Recorded Music (CHARM). + +This work was partially funded by the Engineering and Physical +Sciences Research Council through the OMRAS2 project EP/E017614/1. + +This work was partially funded by the Engineering and Physical +Sciences Research Council through the Musicology for the Masses +project EP/I001832/1. + +Sonic Visualiser is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or (at +your option) any later version. See the file /usr/share/common-licenses/GPL-2 +for more information. diff -r fc742cdbf2b9 -r 2363196deed7 deploy/linux/debian-dependencies.sh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/deploy/linux/debian-dependencies.sh Fri Jun 26 14:18:45 2015 +0100 @@ -0,0 +1,42 @@ +#!/bin/bash + +target=$1 + +if [ ! -f "$target" ]; then + echo "Usage: $0 target-executable" + exit 1 +fi + +pfile=/tmp/packages_$$ +rfile=/tmp/redundant_$$ + +trap "rm -f $pfile $rfile" 0 +echo 1>&2 + +ldd "$target" | awk '{ print $3; }' | grep '^/' | while read lib; do + if test -n "$lib" ; then + dpkg-query -S "$lib" + fi + done | grep ': ' | awk -F: '{ print $1 }' | sort | uniq > $pfile + +echo "Packages providing required libraries:" 1>&2 +cat $pfile 1>&2 +echo 1>&2 + +for p in `cat $pfile`; do + echo Looking at $p 1>&2 + apt-cache showpkg "$p" | grep '^ ' | grep ',' | awk -F, '{ print $1; }' | \ + while read d; do + if grep -q '^'$d'$' $pfile; then + echo $p + fi + done +done | sort | uniq > $rfile + +echo "Packages that can be eliminated because other packages depend on them:" 1>&2 +cat $rfile 1>&2 +echo 1>&2 + +cat $pfile $rfile | sort | uniq -u | sed 's/$/,/' | fmt -1000 | sed 's/^/Depends: /' | sed 's/,$/, libc6/' + + diff -r fc742cdbf2b9 -r 2363196deed7 deploy/linux/deploy-deb.sh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/deploy/linux/deploy-deb.sh Fri Jun 26 14:18:45 2015 +0100 @@ -0,0 +1,56 @@ +#!/bin/bash +# +# Run this from the build root + +usage() { + echo + echo "Usage:" + echo + echo "$0 " + echo + echo "For example: $0 2.4cc1-1 amd64" + echo + exit 2 +} + +version="$1" +arch="$2" + +if [ -z "$version" ] || [ -z "$arch" ]; then + usage +fi + +program=sonic-visualiser +depdir=deploy/linux + +targetdir="${program}_${version}_${arch}" + +echo "Target dir is $targetdir" + +if [ -d "$targetdir" ]; then + echo "Target directory exists, not overwriting" + exit +fi + +mkdir "$targetdir" + +cp -r "$depdir"/deb-skeleton/* "$targetdir"/ + +mkdir -p "$targetdir"/usr/bin "$targetdir"/usr/share/pixmaps + +cp "$program" "$targetdir"/usr/bin/ + +cp icons/sv-icon*.svg "$targetdir"/usr/share/pixmaps/ +cp "$program".desktop "$targetdir"/usr/share/applications/ +cp README "$targetdir"/usr/share/doc/"$program"/ + +perl -i -p -e "s/Architecture: .*/Architecture: $arch/" "$targetdir"/DEBIAN/control + +deps=`bash "$depdir"/debian-dependencies.sh "$program"` + +perl -i -p -e "s/Depends: .*/$deps/" "$targetdir"/DEBIAN/control + +bash "$depdir"/fix-lintian-bits.sh "$targetdir" + +sudo dpkg-deb --build "$targetdir" && lintian "$targetdir".deb + diff -r fc742cdbf2b9 -r 2363196deed7 deploy/linux/doc/sonic-visualiser/copyright --- a/deploy/linux/doc/sonic-visualiser/copyright Fri Sep 12 11:38:55 2014 +0100 +++ b/deploy/linux/doc/sonic-visualiser/copyright Fri Jun 26 14:18:45 2015 +0100 @@ -7,7 +7,7 @@ design work by Christian Landone. Thanks also to Craig Sapp for his suggestions and useful feedback. -Code copyright 2005-2007 Chris Cannam and copyright 2006-2013 Queen +Code copyright 2005-2007 Chris Cannam and copyright 2006-2014 Queen Mary, University of London, except where indicated in the individual source files. diff -r fc742cdbf2b9 -r 2363196deed7 deploy/linux/fix-lintian-bits.sh --- a/deploy/linux/fix-lintian-bits.sh Fri Sep 12 11:38:55 2014 +0100 +++ b/deploy/linux/fix-lintian-bits.sh Fri Jun 26 14:18:45 2015 +0100 @@ -13,3 +13,4 @@ sudo chown -R root.root "$dir"/* +sudo chmod -R g-w "$dir"/* diff -r fc742cdbf2b9 -r 2363196deed7 deploy/osx/copy-qt.sh --- a/deploy/osx/copy-qt.sh Fri Sep 12 11:38:55 2014 +0100 +++ b/deploy/osx/copy-qt.sh Fri Jun 26 14:18:45 2015 +0100 @@ -7,9 +7,9 @@ exit 2 fi -frameworks="QtCore QtNetwork QtGui QtXml QtWidgets QtPrintSupport" +frameworks="QtCore QtNetwork QtGui QtXml QtSvg QtWidgets QtPrintSupport" -plugins="taccessiblewidgets dds gif icns ico jp2 jpeg mng tga tiff wbmp webp cocoa minimal offscreen" +plugins="dds gif icns ico jp2 jpeg mng tga tiff wbmp webp cocoa minimal offscreen" qtdir=$(grep "Command:" Makefile | head -1 | awk '{ print $3; }' | sed s,/bin/.*,,) diff -r fc742cdbf2b9 -r 2363196deed7 deploy/osx/paths.sh --- a/deploy/osx/paths.sh Fri Sep 12 11:38:55 2014 +0100 +++ b/deploy/osx/paths.sh Fri Jun 26 14:18:45 2015 +0100 @@ -7,7 +7,7 @@ exit 2 fi -frameworks="QtCore QtNetwork QtGui QtXml QtWidgets QtPrintSupport" +frameworks="QtCore QtNetwork QtGui QtXml QtSvg QtWidgets QtPrintSupport" echo echo "I expect you to have already copied these frameworks from the Qt installation to" diff -r fc742cdbf2b9 -r 2363196deed7 deploy/win32/build.cmd --- a/deploy/win32/build.cmd Fri Sep 12 11:38:55 2014 +0100 +++ b/deploy/win32/build.cmd Fri Jun 26 14:18:45 2015 +0100 @@ -1,7 +1,7 @@ @ECHO OFF -SET WIXPATH="C:\Program Files (x86)\WiX Toolset v3.8\bin" +SET WIXPATH="C:\Program Files (x86)\WiX Toolset v3.9\bin" IF NOT EXIST %WIXPATH% ( - SET WIXPATH="C:\Program Files\WiX Toolset v3.8\bin" + SET WIXPATH="C:\Program Files\WiX Toolset v3.9\bin" ) DEL sonic-visualiser.msi %WIXPATH%\candle.exe -v sonic-visualiser.wxs diff -r fc742cdbf2b9 -r 2363196deed7 deploy/win32/sonic-visualiser.wxs --- a/deploy/win32/sonic-visualiser.wxs Fri Sep 12 11:38:55 2014 +0100 +++ b/deploy/win32/sonic-visualiser.wxs Fri Jun 26 14:18:45 2015 +0100 @@ -5,7 +5,7 @@ Id="*" Language="1033" Codepage="1252" - Version="2.3.90" + Version="2.5.0" UpgradeCode="D476941E-65F3-4962-9E72-B40FAAE5DBD0" Manufacturer="Queen Mary, University of London"> @@ -144,20 +144,20 @@ DiskId="1" Source="release\Qt5Xml.dll"/> + Source="release\icudt53.dll"/> + Source="release\icuin53.dll"/> + Source="release\icuuc53.dll"/> - + + diff -r fc742cdbf2b9 -r 2363196deed7 main/MainWindow.cpp --- a/main/MainWindow.cpp Fri Sep 12 11:38:55 2014 +0100 +++ b/main/MainWindow.cpp Fri Jun 26 14:18:45 2015 +0100 @@ -24,6 +24,7 @@ #include "data/model/SparseOneDimensionalModel.h" #include "data/model/RangeSummarisableTimeValueModel.h" #include "data/model/NoteModel.h" +#include "data/model/AggregateWaveModel.h" #include "data/model/Labeller.h" #include "data/osc/OSCQueue.h" #include "framework/Document.h" @@ -55,6 +56,7 @@ #include "widgets/TransformFinder.h" #include "widgets/LabelCounterInputDialog.h" #include "widgets/ActivityLog.h" +#include "widgets/UnitConverter.h" #include "audioio/AudioCallbackPlaySource.h" #include "audioio/AudioCallbackPlayTarget.h" #include "audioio/AudioTargetFactory.h" @@ -66,7 +68,6 @@ #include "data/fileio/MIDIFileWriter.h" #include "data/fileio/BZipFileDevice.h" #include "data/fileio/FileSource.h" -#include "data/fft/FFTDataServer.h" #include "data/midi/MIDIInput.h" #include "base/RecentFiles.h" #include "transform/TransformFactory.h" @@ -106,6 +107,7 @@ #include #include #include +#include #include #include #include @@ -161,6 +163,7 @@ m_preferencesDialog(0), m_layerTreeDialog(0), m_activityLog(new ActivityLog()), + m_unitConverter(new UnitConverter()), m_keyReference(new KeyReference()), m_templateWatcher(0) { @@ -296,6 +299,8 @@ connect(this, SIGNAL(replacedDocument()), this, SLOT(documentReplaced())); m_activityLog->hide(); + m_unitConverter->hide(); + newSession(); connect(m_midiInput, SIGNAL(eventsAvailable()), @@ -325,6 +330,7 @@ // SVDEBUG << "MainWindow::~MainWindow" << endl; delete m_keyReference; delete m_activityLog; + delete m_unitConverter; delete m_preferencesDialog; delete m_layerTreeDialog; delete m_versionTester; @@ -452,7 +458,6 @@ IconLoader il; QIcon icon = il.load("filenew"); - icon.addPixmap(il.loadPixmap("filenew-22")); QAction *action = new QAction(icon, tr("&New Session"), this); action->setShortcut(tr("Ctrl+N")); action->setStatusTip(tr("Abandon the current %1 session and start a new one").arg(QApplication::applicationName())); @@ -462,7 +467,6 @@ toolbar->addAction(action); icon = il.load("fileopen"); - icon.addPixmap(il.loadPixmap("fileopen-22")); action = new QAction(icon, tr("&Open..."), this); action->setShortcut(tr("Ctrl+O")); action->setStatusTip(tr("Open a session file, audio file, or layer")); @@ -503,7 +507,6 @@ menu->addSeparator(); icon = il.load("filesave"); - icon.addPixmap(il.loadPixmap("filesave-22")); action = new QAction(icon, tr("&Save Session"), this); action->setShortcut(tr("Ctrl+S")); action->setStatusTip(tr("Save the current session into a %1 session file").arg(QApplication::applicationName())); @@ -514,7 +517,6 @@ toolbar->addAction(action); icon = il.load("filesaveas"); - icon.addPixmap(il.loadPixmap("filesaveas-22")); action = new QAction(icon, tr("Save Session &As..."), this); action->setShortcut(tr("Ctrl+Shift+S")); action->setStatusTip(tr("Save the current session into a new %1 session file").arg(QApplication::applicationName())); @@ -562,10 +564,12 @@ m_keyReference->registerShortcut(action); menu->addAction(action); - action = new QAction(tr("Export Annotation Layer..."), this); + action = new QAction(tr("Export Annotation La&yer..."), this); + action->setShortcut(tr("Ctrl+Y")); action->setStatusTip(tr("Export layer data to a file")); connect(action, SIGNAL(triggered()), this, SLOT(exportLayer())); connect(this, SIGNAL(canExportLayer(bool)), action, SLOT(setEnabled(bool))); + m_keyReference->registerShortcut(action); menu->addAction(action); menu->addSeparator(); @@ -1025,6 +1029,11 @@ connect(action, SIGNAL(triggered()), this, SLOT(showActivityLog())); menu->addAction(action); + action = new QAction(tr("Show &Unit Converter"), this); + action->setStatusTip(tr("Open a window of pitch and timing conversion utilities")); + connect(action, SIGNAL(triggered()), this, SLOT(showUnitConverter())); + menu->addAction(action); + menu->addSeparator(); action = new QAction(tr("Go Full-Screen"), this); @@ -2330,8 +2339,8 @@ QString description; - int ssr = getMainModel()->getSampleRate(); - int tsr = ssr; + sv_samplerate_t ssr = getMainModel()->getSampleRate(); + sv_samplerate_t tsr = ssr; if (m_playSource) tsr = m_playSource->getTargetSampleRate(); if (ssr != tsr) { @@ -2715,6 +2724,7 @@ error = tr("Failed to open file %1 for writing").arg(path); } else { QTextStream out(&file); + out.setCodec(QTextCodec::codecForName("UTF-8")); out << "\n" << "\n" << "\n" @@ -2795,7 +2805,7 @@ visible = pane->getImageSize(pane->getFirstVisibleFrame(), pane->getLastVisibleFrame()); - int sf0 = 0, sf1 = 0; + sv_frame_t sf0 = 0, sf1 = 0; if (haveSelection) { MultiSelection::SelectionList selections = m_viewManager->getSelections(); @@ -2942,6 +2952,7 @@ delete m_preferencesDialog.data(); m_activityLog->hide(); + m_unitConverter->hide(); m_keyReference->hide(); delete m_document; @@ -3388,7 +3399,7 @@ QMessageBox::critical(this, tr("Failed to save file"), tr("Save failed

Session file \"%1\" could not be saved.").arg(path)); } else { - setWindowTitle(tr("%1: %1") + setWindowTitle(tr("%1: %2") .arg(QApplication::applicationName()) .arg(QFileInfo(path).fileName())); m_sessionFile = path; @@ -3694,25 +3705,49 @@ m_document->getTransformInputModels(); Model *defaultInputModel = 0; + for (int j = 0; j < pane->getLayerCount(); ++j) { + Layer *layer = pane->getLayer(j); if (!layer) continue; + if (LayerFactory::getInstance()->getLayerType(layer) != LayerFactory::Waveform && !layer->isLayerOpaque()) continue; + Model *model = layer->getModel(); if (!model) continue; + for (size_t k = 0; k < candidateInputModels.size(); ++k) { if (candidateInputModels[k] == model) { defaultInputModel = model; break; } } + if (defaultInputModel) break; } + + if (candidateInputModels.size() > 1) { + // Add an aggregate model as another option + AggregateWaveModel::ChannelSpecList sl; + foreach (Model *m, candidateInputModels) { + RangeSummarisableTimeValueModel *r = + qobject_cast(m); + if (r) { + sl.push_back(AggregateWaveModel::ModelChannelSpec(r, -1)); + } + } + if (!sl.empty()) { + AggregateWaveModel *aggregate = new AggregateWaveModel(sl); + aggregate->setObjectName(tr("Multiplex all of the above")); + candidateInputModels.push_back(aggregate); + //!!! but it leaks + } + } - int startFrame = 0, duration = 0; - int endFrame = 0; + sv_frame_t startFrame = 0, duration = 0; + sv_frame_t endFrame = 0; m_viewManager->getSelection().getExtents(startFrame, endFrame); if (endFrame > startFrame) duration = endFrame - startFrame; else startFrame = 0; @@ -3836,14 +3871,14 @@ { PlaySpeedRangeMapper mapper(0, 200); - float percent = m_playSpeed->mappedValue(); - float factor = mapper.getFactorForValue(percent); + double percent = m_playSpeed->mappedValue(); + double factor = mapper.getFactorForValue(percent); // cerr << "speed = " << position << " percent = " << percent << " factor = " << factor << endl; bool something = (position != 100); - int pc = lrintf(percent); + int pc = int(lrint(percent)); if (!something) { contextHelpChanged(tr("Playback speed: Normal")); @@ -3934,7 +3969,7 @@ } bool haveSelection = false; - int startFrame = 0, endFrame = 0; + sv_frame_t startFrame = 0, endFrame = 0; if (m_viewManager && m_viewManager->haveInProgressSelection()) { @@ -3987,7 +4022,7 @@ if (!statusBar()->isVisible()) return; Pane *pane = 0; - int frame = m_viewManager->getPlaybackFrame(); + sv_frame_t frame = m_viewManager->getPlaybackFrame(); if (m_paneStack) pane = m_paneStack->getCurrentPane(); if (!pane) return; @@ -4014,7 +4049,8 @@ } void -MainWindow::sampleRateMismatch(int requested, int actual, +MainWindow::sampleRateMismatch(sv_samplerate_t requested, + sv_samplerate_t actual, bool willResample) { if (!willResample) { @@ -4080,7 +4116,7 @@ MIDIEvent ev(m_midiInput->readEvent()); - int frame = currentPane->alignFromReference(ev.getTime()); + sv_frame_t frame = currentPane->alignFromReference(ev.getTime()); bool noteOn = (ev.getMessageType() == MIDIConstants::MIDI_NOTE_ON && ev.getVelocity() > 0); @@ -4255,20 +4291,25 @@ { emit hideSplash(); + QString quoted; + if (transformName != "") { + quoted = QString("\"%1\" ").arg(transformName); + } + if (message != "") { QMessageBox::warning (this, tr("Failed to generate layer"), - tr("Layer generation failed

Failed to generate derived layer.

The layer transform \"%1\" failed:

%2") - .arg(transformName).arg(message), + tr("Layer generation failed

Failed to generate derived layer.

The layer transform %1failed:

%2") + .arg(quoted).arg(message), QMessageBox::Ok); } else { QMessageBox::warning (this, tr("Failed to generate layer"), - tr("Layer generation failed

Failed to generate a derived layer.

The layer transform \"%1\" failed.

No error information is available.") - .arg(transformName), + tr("Layer generation failed

Failed to generate a derived layer.

The layer transform %1failed.

No error information is available.") + .arg(quoted), QMessageBox::Ok); } } @@ -4361,6 +4402,13 @@ } void +MainWindow::showUnitConverter() +{ + m_unitConverter->show(); + m_unitConverter->raise(); +} + +void MainWindow::preferences() { bool goToTemplateTab = @@ -4548,7 +4596,7 @@ #endif aboutText += - "

Sonic Visualiser Copyright © 2005–2013 Chris Cannam and " + "

Sonic Visualiser Copyright © 2005–2015 Chris Cannam and " "Queen Mary, University of London.

" "

This program is free software; you can redistribute it and/or " "modify it under the terms of the GNU General Public License as " diff -r fc742cdbf2b9 -r 2363196deed7 main/MainWindow.h --- a/main/MainWindow.h Fri Sep 12 11:38:55 2014 +0100 +++ b/main/MainWindow.h Fri Jun 26 14:18:45 2015 +0100 @@ -22,6 +22,7 @@ class Surveyer; class LayerTreeDialog; class ActivityLog; +class UnitConverter; class QFileSystemWatcher; class QScrollArea; @@ -65,7 +66,7 @@ virtual void closeSession(); virtual void preferences(); - virtual void sampleRateMismatch(int, int, bool); + virtual void sampleRateMismatch(sv_samplerate_t, sv_samplerate_t, bool); virtual void audioOverloadPluginDisabled(); virtual void audioTimeStretchMultiChannelDisabled(); @@ -136,6 +137,7 @@ virtual void showLayerTree(); virtual void showActivityLog(); + virtual void showUnitConverter(); virtual void mouseEnteredWidget(); virtual void mouseLeftWidget(); @@ -208,6 +210,7 @@ QPointer m_layerTreeDialog; ActivityLog *m_activityLog; + UnitConverter *m_unitConverter; KeyReference *m_keyReference; QFileSystemWatcher *m_templateWatcher; diff -r fc742cdbf2b9 -r 2363196deed7 main/OSCHandler.cpp --- a/main/OSCHandler.cpp Fri Sep 12 11:38:55 2014 +0100 +++ b/main/OSCHandler.cpp Fri Jun 26 14:18:45 2015 +0100 @@ -123,7 +123,7 @@ if (getMainModel()) { - int frame = m_viewManager->getPlaybackFrame(); + sv_frame_t frame = m_viewManager->getPlaybackFrame(); bool selection = false; bool play = (message.getMethod() == "play"); @@ -233,8 +233,8 @@ if (getMainModel()) { - int f0 = getMainModel()->getStartFrame(); - int f1 = getMainModel()->getEndFrame(); + sv_frame_t f0 = getMainModel()->getStartFrame(); + sv_frame_t f1 = getMainModel()->getEndFrame(); bool done = false; @@ -452,7 +452,7 @@ double level = message.getArg(0).toDouble(); Pane *currentPane = m_paneStack->getCurrentPane(); if (level < 1.0) level = 1.0; - if (currentPane) currentPane->setZoomLevel(lrint(level)); + if (currentPane) currentPane->setZoomLevel(int(lrint(level))); } } diff -r fc742cdbf2b9 -r 2363196deed7 main/PreferencesDialog.cpp --- a/main/PreferencesDialog.cpp Fri Sep 12 11:38:55 2014 +0100 +++ b/main/PreferencesDialog.cpp Fri Jun 26 14:18:45 2015 +0100 @@ -122,7 +122,6 @@ connect(propertyLayout, SIGNAL(currentIndexChanged(int)), this, SLOT(propertyLayoutChanged(int))); - m_tuningFrequency = prefs->getTuningFrequency(); @@ -224,6 +223,15 @@ settings.beginGroup("Preferences"); +#ifdef Q_OS_MAC + m_retina = settings.value("scaledHiDpi", true).toBool(); + QCheckBox *retina = new QCheckBox; + retina->setCheckState(m_retina ? Qt::Checked : Qt::Unchecked); + connect(retina, SIGNAL(stateChanged(int)), this, SLOT(retinaChanged(int))); +#else + m_retina = false; +#endif + QString userLocale = settings.value("locale", "").toString(); m_currentLocale = userLocale; @@ -292,6 +300,14 @@ connect(ttMode, SIGNAL(currentIndexChanged(int)), this, SLOT(timeToTextModeChanged(int))); + QCheckBox *hms = new QCheckBox; + int showHMS = prefs->getPropertyRangeAndValue + ("Show Hours And Minutes", &min, &max, &deflt); + m_showHMS = (showHMS != 0); + hms->setCheckState(m_showHMS ? Qt::Checked : Qt::Unchecked); + connect(hms, SIGNAL(stateChanged(int)), + this, SLOT(showHMSChanged(int))); + // General tab QFrame *frame = new QFrame; @@ -342,6 +358,18 @@ row = 0; subgrid->addWidget(new QLabel(tr("%1:").arg(prefs->getPropertyLabel + ("Show Splash Screen"))), + row, 0); + subgrid->addWidget(showSplash, row++, 1, 1, 1); + +#ifdef Q_OS_MAC + if (devicePixelRatio() > 1) { + subgrid->addWidget(new QLabel(tr("Draw layers at Retina resolution:")), row, 0); + subgrid->addWidget(retina, row++, 1, 1, 1); + } +#endif + + subgrid->addWidget(new QLabel(tr("%1:").arg(prefs->getPropertyLabel ("Property Box Layout"))), row, 0); subgrid->addWidget(propertyLayout, row++, 1, 1, 2); @@ -364,9 +392,9 @@ subgrid->addWidget(ttMode, row++, 1, 1, 2); subgrid->addWidget(new QLabel(tr("%1:").arg(prefs->getPropertyLabel - ("Show Splash Screen"))), + ("Show Hours And Minutes"))), row, 0); - subgrid->addWidget(showSplash, row++, 1, 1, 1); + subgrid->addWidget(hms, row++, 1, 1, 1); subgrid->setRowStretch(row, 10); @@ -552,6 +580,14 @@ } void +PreferencesDialog::retinaChanged(int state) +{ + m_retina = (state == Qt::Checked); + m_applyButton->setEnabled(true); + // Does not require a restart +} + +void PreferencesDialog::showSplashChanged(int state) { m_showSplash = (state == Qt::Checked); @@ -609,6 +645,13 @@ } void +PreferencesDialog::showHMSChanged(int state) +{ + m_showHMS = (state == Qt::Checked); + m_applyButton->setEnabled(true); +} + +void PreferencesDialog::octaveSystemChanged(int system) { m_octaveSystem = system; @@ -647,6 +690,7 @@ prefs->setTemporaryDirectoryRoot(m_tempDirRoot); prefs->setBackgroundMode(Preferences::BackgroundMode(m_backgroundMode)); prefs->setTimeToTextMode(Preferences::TimeToTextMode(m_timeToTextMode)); + prefs->setShowHMS(m_showHMS); prefs->setViewFontSize(m_viewFontSize); prefs->setProperty("Octave Numbering System", m_octaveSystem); @@ -660,6 +704,9 @@ settings.setValue(permishTag, m_networkPermission); settings.setValue("audio-target", devices[m_audioDevice]); settings.setValue("locale", m_currentLocale); +#ifdef Q_OS_MAC + settings.setValue("scaledHiDpi", m_retina); +#endif settings.endGroup(); settings.beginGroup("MainWindow"); diff -r fc742cdbf2b9 -r 2363196deed7 main/PreferencesDialog.h --- a/main/PreferencesDialog.h Fri Sep 12 11:38:55 2014 +0100 +++ b/main/PreferencesDialog.h Fri Jun 26 14:18:45 2015 +0100 @@ -57,12 +57,14 @@ void tempDirRootChanged(QString root); void backgroundModeChanged(int mode); void timeToTextModeChanged(int mode); + void showHMSChanged(int state); void octaveSystemChanged(int system); void viewFontSizeChanged(int sz); void showSplashChanged(int state); void defaultTemplateChanged(int); void localeChanged(int); void networkPermissionChanged(int state); + void retinaChanged(int state); void tempDirButtonClicked(); @@ -89,14 +91,16 @@ int m_spectrogramSmoothing; int m_spectrogramXSmoothing; int m_propertyLayout; - float m_tuningFrequency; + double m_tuningFrequency; int m_audioDevice; int m_resampleQuality; bool m_resampleOnLoad; bool m_networkPermission; + bool m_retina; QString m_tempDirRoot; int m_backgroundMode; int m_timeToTextMode; + bool m_showHMS; int m_octaveSystem; int m_viewFontSize; bool m_showSplash; diff -r fc742cdbf2b9 -r 2363196deed7 main/SVSplash.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main/SVSplash.cpp Fri Jun 26 14:18:45 2015 +0100 @@ -0,0 +1,100 @@ +/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ + +/* + Sonic Visualiser + An audio file viewer and annotation editor. + Centre for Digital Music, Queen Mary, University of London. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. See the file + COPYING included with this distribution for more information. +*/ + +#include "SVSplash.h" + +#include "../version.h" + +#include +#include +#include +#include + +#include + +#include +using namespace std; + +SVSplash::SVSplash() +{ + setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint); + + QPixmap *p1 = new QPixmap(":icons/scalable/sv-splash.png"); + + int w = p1->width(), h = p1->height(); + QRect desk = QApplication::desktop()->availableGeometry(); + + double dpratio = devicePixelRatio(); + double widthMultiple = double(desk.width()) / double(w); + + int sw = w, sh = h; + + if (widthMultiple > 2.5 || dpratio > 1.0) { + + // Hi-dpi either via pixel doubling or simply via lots of + // pixels + + double factor = widthMultiple / 2.5; + if (factor < 1.0) factor = 1.0; + sw = int(floor(w * factor)); + sh = int(floor(h * factor)); + + delete p1; + m_pixmap = new QPixmap(int(floor(sw * dpratio)), + int(floor(sh * dpratio))); + + cerr << "pixmap size = " << m_pixmap->width() << " * " + << m_pixmap->height() << endl; + + m_pixmap->fill(Qt::red); + QSvgRenderer renderer(QString(":icons/scalable/sv-splash.svg")); + QPainter painter(m_pixmap); + renderer.render(&painter); + painter.end(); + + } else { + // The "low dpi" case + m_pixmap = p1; + } + + setFixedWidth(sw); + setFixedHeight(sh); + setGeometry(desk.x() + desk.width()/2 - sw/2, + desk.y() + desk.height()/2 - sh/2, + sw, sh); +} + +SVSplash::~SVSplash() +{ + delete m_pixmap; +} + +void +SVSplash::finishSplash(QWidget *w) +{ + finish(w); +} + +void +SVSplash::drawContents(QPainter *painter) +{ + painter->drawPixmap(rect(), *m_pixmap, m_pixmap->rect()); + QString text = QString("v%1").arg(SV_VERSION); + painter->drawText + (width() - painter->fontMetrics().width(text) - (width()/50), + (width()/70) + painter->fontMetrics().ascent(), + text); +} + + diff -r fc742cdbf2b9 -r 2363196deed7 main/SVSplash.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main/SVSplash.h Fri Jun 26 14:18:45 2015 +0100 @@ -0,0 +1,39 @@ +/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ + +/* + Sonic Visualiser + An audio file viewer and annotation editor. + Centre for Digital Music, Queen Mary, University of London. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. See the file + COPYING included with this distribution for more information. +*/ + +#ifndef SV_SPLASH_H +#define SV_SPLASH_H + +#include + +class QPixmap; + +class SVSplash : public QSplashScreen +{ + Q_OBJECT + +public: + SVSplash(); + virtual ~SVSplash(); + +public slots: + void finishSplash(QWidget *); + +protected: + void drawContents(QPainter *); + QPixmap *m_pixmap; +}; + +#endif + diff -r fc742cdbf2b9 -r 2363196deed7 main/main.cpp --- a/main/main.cpp Fri Sep 12 11:38:55 2014 +0100 +++ b/main/main.cpp Fri Jun 26 14:18:45 2015 +0100 @@ -14,12 +14,14 @@ */ #include "MainWindow.h" +#include "SVSplash.h" #include "system/System.h" #include "system/Init.h" #include "base/TempDirectory.h" #include "base/PropertyContainer.h" #include "base/Preferences.h" +#include "data/fileio/FileSource.h" #include "widgets/TipDialog.h" #include "widgets/InteractiveFileFinder.h" #include "svapp/framework/TransformUserConfigurator.h" @@ -35,13 +37,10 @@ #include #include #include -#include #include #include #include -#include "../version.h" - #include #include @@ -214,7 +213,7 @@ if (!success) manager.cancel(); } - void handleFilepathArgument(QString path, QSplashScreen *splash); + void handleFilepathArgument(QString path, SVSplash *splash); bool m_readyForFiles; QStringList m_filepathQueue; @@ -222,7 +221,6 @@ protected: MainWindow *m_mainWindow; bool event(QEvent *); - }; int @@ -271,22 +269,15 @@ QApplication::setOrganizationDomain("sonicvisualiser.org"); QApplication::setApplicationName(QApplication::tr("Sonic Visualiser")); - QSplashScreen *splash = 0; + QApplication::setAttribute(Qt::AA_UseHighDpiPixmaps); + + SVSplash *splash = 0; QSettings settings; settings.beginGroup("Preferences"); if (settings.value("show-splash", true).toBool()) { - QPixmap pixmap(":/icons/sv-splash.png"); - QPainter painter; - painter.begin(&pixmap); - QString text = QString("v%1").arg(SV_VERSION); - painter.drawText - (pixmap.width() - painter.fontMetrics().width(text) - 10, - 10 + painter.fontMetrics().ascent(), - text); - painter.end(); - splash = new QSplashScreen(pixmap); + splash = new SVSplash(); splash->show(); QTimer::singleShot(5000, splash, SLOT(hide())); application.processEvents(); @@ -350,6 +341,8 @@ TransformUserConfigurator::setParentWidget(gui); if (splash) { QObject::connect(gui, SIGNAL(hideSplash()), splash, SLOT(hide())); + QObject::connect(gui, SIGNAL(hideSplash(QWidget *)), + splash, SLOT(finishSplash(QWidget *))); } QDesktopWidget *desktop = QApplication::desktop(); @@ -417,15 +410,6 @@ settings.endGroup(); #endif - if (splash) splash->finish(gui); - delete splash; - -/* - TipDialog tipDialog; - if (tipDialog.isOK()) { - tipDialog.exec(); - } -*/ int rv = application.exec(); gui->hide(); @@ -457,6 +441,8 @@ settings.endGroup(); #endif + FileSource::debugReport(); + delete gui; cleanupMutex.unlock(); @@ -487,7 +473,7 @@ } /** Application-global handler for filepaths passed in, e.g. as command-line arguments or apple events */ -void SVApplication::handleFilepathArgument(QString path, QSplashScreen *splash){ +void SVApplication::handleFilepathArgument(QString path, SVSplash *splash){ static bool haveSession = false; static bool haveMainModel = false; static bool havePriorCommandLineModel = false; diff -r fc742cdbf2b9 -r 2363196deed7 misc/debian-dependencies.sh --- a/misc/debian-dependencies.sh Fri Sep 12 11:38:55 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,42 +0,0 @@ -#!/bin/bash - -target=$1 - -if [ ! -f "$target" ]; then - echo "Usage: $0 target-executable" - exit 1 -fi - -pfile=/tmp/packages_$$ -rfile=/tmp/redundant_$$ - -trap "rm -f $pfile $rfile" 0 -echo - -ldd "$target" | awk '{ print $3; }' | grep '^/' | while read lib; do - if test -n "$lib" ; then - dpkg-query -S "$lib" - fi - done | grep ': ' | awk -F: '{ print $1 }' | sort | uniq > $pfile - -echo "Packages providing required libraries:" -cat $pfile -echo - -for p in `cat $pfile`; do - echo Looking at $p 1>&2 - apt-cache showpkg "$p" | grep '^ ' | grep ',' | awk -F, '{ print $1; }' | \ - while read d; do - if grep -q '^'$d'$' $pfile; then - echo $p - fi - done -done | sort | uniq > $rfile - -echo "Packages that can be eliminated because other packages depend on them:" -cat $rfile -echo - -echo "Remaining required packages:" -cat $pfile $rfile | sort | uniq -u - diff -r fc742cdbf2b9 -r 2363196deed7 platform-dataquay.pri --- a/platform-dataquay.pri Fri Sep 12 11:38:55 2014 +0100 +++ b/platform-dataquay.pri Fri Jun 26 14:18:45 2015 +0100 @@ -3,10 +3,11 @@ include(./config.pri) } -CONFIG += staticlib +CONFIG += staticlib c++11 DEFINES -= USE_REDLAND QMAKE_CXXFLAGS -= -I/usr/include/rasqal -I/usr/include/raptor2 +QMAKE_CXXFLAGS -= -Werror EXTRALIBS -= -lrdf DEFINES += USE_SORD diff -r fc742cdbf2b9 -r 2363196deed7 sonic-visualiser.desktop --- a/sonic-visualiser.desktop Fri Sep 12 11:38:55 2014 +0100 +++ b/sonic-visualiser.desktop Fri Jun 26 14:18:45 2015 +0100 @@ -1,8 +1,9 @@ [Desktop Entry] Name=Sonic Visualiser -Exec=sonic-visualiser +Exec=sonic-visualiser %U +Keywords=audio; sound; visualiser; sonic; Terminal=false Type=Application Icon=sv-icon -Categories=Application;Multimedia;Audio;AudioVideo -MimeType=application/x-sonicvisualiser;application/x-sonicvisualiser-layer;application/x-ogg;audio/mp3;audio/mpeg;audio/mpegurl;audio/x-flac;audio/x-mp3;audio/x-mpeg;audio/x-mpegurl;audio/x-wav;audio/wav;application/ogg;audio/x-vorbis+ogg +Categories=Audio;AudioVideo; +MimeType=application/x-sonicvisualiser;application/x-sonicvisualiser-layer;application/x-ogg;audio/mp3;audio/mpeg;audio/mpegurl;audio/x-flac;audio/x-mp3;audio/x-mpeg;audio/x-mpegurl;audio/x-wav;audio/wav;application/ogg;audio/x-vorbis+ogg; diff -r fc742cdbf2b9 -r 2363196deed7 sonic-visualiser.pro --- a/sonic-visualiser.pro Fri Sep 12 11:38:55 2014 +0100 +++ b/sonic-visualiser.pro Fri Jun 26 14:18:45 2015 +0100 @@ -5,7 +5,7 @@ # We should build and run the tests on any platform, # but doing it automatically doesn't work so well from # within an IDE on Windows, so remove that from here - SUBDIRS += svcore/base/test svcore/data/fileio/test + SUBDIRS += svcore/base/test svcore/data/fileio/test svcore/data/model/test } sub_sv.file = sv.pro diff -r fc742cdbf2b9 -r 2363196deed7 sonic-visualiser.qrc --- a/sonic-visualiser.qrc Fri Sep 12 11:38:55 2014 +0100 +++ b/sonic-visualiser.qrc Fri Jun 26 14:18:45 2015 +0100 @@ -1,9 +1,50 @@ - + + icons/scalable/align.svg + icons/scalable/colour3d.svg + icons/scalable/cross.svg + icons/scalable/draw.svg + icons/scalable/erase.svg + icons/scalable/filenew.svg + icons/scalable/fileopen.svg + icons/scalable/filesaveas.svg + icons/scalable/filesave.svg + icons/scalable/filesavesv.svg + icons/scalable/ffwd-end.svg + icons/scalable/ffwd.svg + icons/scalable/navigate.svg + icons/scalable/pause.svg + icons/scalable/playloop.svg + icons/scalable/playpause.svg + icons/scalable/playselection.svg + icons/scalable/solo.svg + icons/scalable/play.svg + icons/scalable/rewind-start.svg + icons/scalable/rewind.svg + icons/scalable/undo.svg + icons/scalable/redo.svg + icons/scalable/select.svg + icons/scalable/instants.svg + icons/scalable/notes.svg + icons/scalable/values.svg + icons/scalable/regions.svg + icons/scalable/spectrogram.svg + icons/scalable/spectrum.svg + icons/scalable/text.svg + icons/scalable/timeruler.svg + icons/scalable/zoom.svg + icons/scalable/zoom-in.svg + icons/scalable/zoom-out.svg + icons/scalable/zoom-fit.svg + icons/scalable/sv-icon-light.svg + icons/scalable/sv-icon.svg + icons/scalable/sv-splash.svg + icons/scalable/sv-splash.png + icons/scalable/sv-splash@2x.png + icons/scalable/waveform.svg icons/waveform.png icons/spectrum.png icons/spectrogram.png - icons/timeruler.png icons/pane.png icons/instants.png icons/notes.png @@ -44,10 +85,6 @@ icons/measure2mask.xbm icons/move.png icons/navigate.png - icons/zoom.png - icons/zoom-in.png - icons/zoom-out.png - icons/zoom-fit.png icons/zoom-reset.png icons/undo.png icons/redo.png diff -r fc742cdbf2b9 -r 2363196deed7 sv.pro --- a/sv.pro Fri Sep 12 11:38:55 2014 +0100 +++ b/sv.pro Fri Jun 26 14:18:45 2015 +0100 @@ -36,8 +36,8 @@ } } -CONFIG += qt thread warn_on stl rtti exceptions -QT += network xml gui widgets +CONFIG += qt thread warn_on stl rtti exceptions c++11 +QT += network xml gui widgets svg TARGET = "Sonic Visualiser" linux*:TARGET = sonic-visualiser @@ -86,12 +86,14 @@ HEADERS += main/MainWindow.h \ main/NetworkPermissionTester.h \ main/Surveyer.h \ + main/SVSplash.h \ main/PreferencesDialog.h SOURCES += main/main.cpp \ main/OSCHandler.cpp \ main/MainWindow.cpp \ main/NetworkPermissionTester.cpp \ main/Surveyer.cpp \ + main/SVSplash.cpp \ main/PreferencesDialog.cpp # for mac integration diff -r fc742cdbf2b9 -r 2363196deed7 version.h --- a/version.h Fri Sep 12 11:38:55 2014 +0100 +++ b/version.h Fri Jun 26 14:18:45 2015 +0100 @@ -1,1 +1,1 @@ -#define SV_VERSION "2.4" +#define SV_VERSION "2.5"