Hello community, here is the log from the commit of package sonic-visualiser for openSUSE:Factory checked in at 2018-10-15 09:41:09 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/sonic-visualiser (Old) and /work/SRC/openSUSE:Factory/.sonic-visualiser.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "sonic-visualiser" Mon Oct 15 09:41:09 2018 rev:5 rq:641652 version:3.1.1 Changes: -------- --- /work/SRC/openSUSE:Factory/sonic-visualiser/sonic-visualiser.changes 2018-08-07 09:43:36.901366086 +0200 +++ /work/SRC/openSUSE:Factory/.sonic-visualiser.new/sonic-visualiser.changes 2018-10-15 09:42:36.851419592 +0200 @@ -1,0 +2,11 @@ +Fri Oct 12 09:10:00 UTC 2018 - Luigi Baldoni <[email protected]> + +- Update to version 3.1.1 + * Fix failure to record correctly into an empty session with + certain audio drivers + * Fix failure to run LADSPA plugins at all, except with some + unusual path layouts + * Fix failure to silence sonified notes when rewinding backwards + or jumping back from a loop endpoint + +------------------------------------------------------------------- Old: ---- sonic-visualiser-3.1.tar.gz New: ---- sonic-visualiser-3.1.1.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ sonic-visualiser.spec ++++++ --- /var/tmp/diff_new_pack.6z2oCc/_old 2018-10-15 09:42:40.079416638 +0200 +++ /var/tmp/diff_new_pack.6z2oCc/_new 2018-10-15 09:42:40.079416638 +0200 @@ -16,18 +16,18 @@ # license that conforms to the Open Source Definition (Version 1.9) # published by the Open Source Initiative. -# Please submit bugfixes or comments via http://bugs.opensuse.org/ +# Please submit bugfixes or comments via https://bugs.opensuse.org/ # Name: sonic-visualiser -Version: 3.1 +Version: 3.1.1 Release: 0 Summary: A program for viewing and analysing contents of audio files License: GPL-2.0-or-later Group: Productivity/Multimedia/Sound/Utilities URL: http://www.sonicvisualiser.org/ -Source: https://code.soundsoftware.ac.uk/attachments/download/2381/%{name}-%{version}.tar.gz +Source: https://code.soundsoftware.ac.uk/attachments/download/2391/%{name}-%{version}.tar.gz Source2: %{name}.xml # PATCH-FIX-OPENSUSE sonic-visualiser-system-dataquay.patch [email protected] -- force use of system libdataquay Patch2: sonic-visualiser-system-dataquay.patch @@ -38,6 +38,7 @@ BuildRequires: hicolor-icon-theme BuildRequires: ladspa BuildRequires: libqt5-qtbase-devel >= 5.2 +BuildRequires: perl BuildRequires: pkgconfig BuildRequires: portaudio-devel BuildRequires: shared-mime-info @@ -116,6 +117,8 @@ %if 0%{?BUILD_ORIG} || 0%{?suse_version} >= 1500 %patch2 -p1 %endif +# required with capnproto 0.7.0 +for x in *.pr* config* Makefile* ; do perl -i -p -e 's/c\+\+11/c++14/g' "$x" ; done %build export LC_ALL=en_US.UTF-8 ++++++ sonic-visualiser-3.1.tar.gz -> sonic-visualiser-3.1.1.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sonic-visualiser-3.1/.hgtags new/sonic-visualiser-3.1.1/.hgtags --- old/sonic-visualiser-3.1/.hgtags 2018-07-13 10:14:39.000000000 +0200 +++ new/sonic-visualiser-3.1.1/.hgtags 2018-08-14 10:58:46.000000000 +0200 @@ -76,3 +76,5 @@ 2ea9537868d50ba1a4d4cd54ac3bdeb10b9f4de0 sv_v3.1pre4 2ea9537868d50ba1a4d4cd54ac3bdeb10b9f4de0 sv_v3.1pre4 b465eb7018bcc0add14886ac57d4f79f38401b8f sv_v3.1pre4 +f4d7c9522fcff88292ed2b91bc89b30eeaa6794c sv_v3.1 +4ff2193314d406c3a83c86b409414cf60a0b1406 sv_v3.1.1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sonic-visualiser-3.1/.travis.yml new/sonic-visualiser-3.1.1/.travis.yml --- old/sonic-visualiser-3.1/.travis.yml 2018-07-13 10:14:38.000000000 +0200 +++ new/sonic-visualiser-3.1.1/.travis.yml 2018-08-14 10:58:45.000000000 +0200 @@ -5,7 +5,7 @@ include: - os: linux dist: trusty - sudo: false + sudo: required - os: osx osx_image: xcode9 @@ -20,6 +20,7 @@ - if [[ "$TRAVIS_OS_NAME" = "osx" ]] ; then brew install qt5 ; fi - if [[ "$TRAVIS_OS_NAME" = "osx" ]] ; then export PATH=$PATH:/usr/local/opt/qt5/bin ; fi - ( cd ../ ; git clone https://github.com/sandstorm-io/capnproto ) + - if [[ "$TRAVIS_OS_NAME" = "linux" ]] ; then ( cd ../capnproto ; git checkout v0.6.1 ) ; fi - ( cd ../capnproto/c++ ; ./setup-autotools.sh && autoreconf -i ) - ( cd ../capnproto/c++ ; ./configure && make && sudo make install ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sonic-visualiser-3.1/CHANGELOG new/sonic-visualiser-3.1.1/CHANGELOG --- old/sonic-visualiser-3.1/CHANGELOG 2018-07-13 10:14:38.000000000 +0200 +++ new/sonic-visualiser-3.1.1/CHANGELOG 2018-08-14 10:58:45.000000000 +0200 @@ -1,4 +1,18 @@ +Changes in Sonic Visualiser 3.1.1 (Aug 2018) since the previous release 3.1: + + - Fix failure to record correctly into an empty session with certain + audio drivers + + - Fix failure to run LADSPA plugins at all, except with some unusual + path layouts + + - Fix failure to silence sonified notes when rewinding backwards or + jumping back from a loop endpoint + + - Fix macOS .dmg image so as to use older HFS+ filesystem for compatibility + + Changes in Sonic Visualiser 3.1 (July 2018) since the previous release 3.0.3: - Add Plugins tab to Preferences dialog, from which you can review diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sonic-visualiser-3.1/README.md new/sonic-visualiser-3.1.1/README.md --- old/sonic-visualiser-3.1/README.md 2018-07-13 10:14:38.000000000 +0200 +++ new/sonic-visualiser-3.1.1/README.md 2018-08-14 10:58:45.000000000 +0200 @@ -50,14 +50,14 @@ Christian Landone, Mathieu Barthet, Dan Stowell, Jesus Corral Garcia, Matthias Mauch, and Craig Sapp. -Code copyright 2005-2007 Chris Cannam and copyright 2006-2017 Queen +Code copyright 2005-2007 Chris Cannam and copyright 2006-2018 Queen Mary, University of London, except where indicated in the individual source files. Russian translation provided by Alexandre Prokoudine, copyright -2006-2017 Alexandre Prokoudine. +2006-2018 Alexandre Prokoudine. -Czech translation provided by Pavel Fric, copyright 2010-2017 Pavel +Czech translation provided by Pavel Fric, copyright 2010-2018 Pavel Fric. This work was partially funded by the European Commission through the diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sonic-visualiser-3.1/bqaudioio/src/PulseAudioIO.cpp new/sonic-visualiser-3.1.1/bqaudioio/src/PulseAudioIO.cpp --- old/sonic-visualiser-3.1/bqaudioio/src/PulseAudioIO.cpp 2018-07-13 10:15:40.000000000 +0200 +++ new/sonic-visualiser-3.1.1/bqaudioio/src/PulseAudioIO.cpp 2018-08-14 10:59:24.000000000 +0200 @@ -246,7 +246,7 @@ { #ifdef DEBUG_PULSE_AUDIO_IO - cerr << "PulseAudioIO::threadRun: locking loop mutex for prepare" << endl; +// cerr << "PulseAudioIO::threadRun: locking loop mutex for prepare" << endl; #endif lock_guard<mutex> lguard(m_loopMutex); if (m_done) return; @@ -261,7 +261,7 @@ { #ifdef DEBUG_PULSE_AUDIO_IO - cerr << "PulseAudioIO::threadRun: locking loop mutex for poll" << endl; +// cerr << "PulseAudioIO::threadRun: locking loop mutex for poll" << endl; #endif lock_guard<mutex> lguard(m_loopMutex); if (m_done) return; @@ -275,7 +275,7 @@ { #ifdef DEBUG_PULSE_AUDIO_IO - cerr << "PulseAudioIO::threadRun: locking loop mutex for dispatch" << endl; +// cerr << "PulseAudioIO::threadRun: locking loop mutex for dispatch" << endl; #endif lock_guard<mutex> lguard(m_loopMutex); if (m_done) return; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sonic-visualiser-3.1/capnp-regen.pri new/sonic-visualiser-3.1.1/capnp-regen.pri --- old/sonic-visualiser-3.1/capnp-regen.pri 2018-07-13 10:14:38.000000000 +0200 +++ new/sonic-visualiser-3.1.1/capnp-regen.pri 2018-08-14 10:58:45.000000000 +0200 @@ -5,7 +5,9 @@ capnpc.commands = capnp compile --src-prefix=$$PWD/piper/capnp -oc++:$$PWD/piper-cpp/vamp-capnp $$capnpc.depends macx* { - capnpc.commands=$$PWD/sv-dependency-builds/osx/bin/capnp -I$$PWD/sv-dependency-builds/osx/include compile --src-prefix=$$PWD/piper/capnp -o$$PWD/sv-dependency-builds/osx/bin/capnpc-c++:$$PWD/piper-cpp/vamp-capnp $$capnpc.depends + exists(sv-dependency-builds) { + capnpc.commands=$$PWD/sv-dependency-builds/osx/bin/capnp -I$$PWD/sv-dependency-builds/osx/include compile --src-prefix=$$PWD/piper/capnp -o$$PWD/sv-dependency-builds/osx/bin/capnpc-c++:$$PWD/piper-cpp/vamp-capnp $$capnpc.depends + } } win32-g++ { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sonic-visualiser-3.1/deploy/linux/deploy-appimage.sh new/sonic-visualiser-3.1.1/deploy/linux/deploy-appimage.sh --- old/sonic-visualiser-3.1/deploy/linux/deploy-appimage.sh 2018-07-13 10:14:39.000000000 +0200 +++ new/sonic-visualiser-3.1.1/deploy/linux/deploy-appimage.sh 2018-08-14 10:58:45.000000000 +0200 @@ -104,6 +104,7 @@ cp "$program.desktop" "$targetdir/" cp "icons/sv-icon.svg" "$targetdir/" +cp "icons/sonic-visualiser.svg" "$targetdir/" cp sv-dependency-builds/linux/appimage/AppRun-x86_64 "$targetdir/AppRun" chmod +x "$targetdir/AppRun" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sonic-visualiser-3.1/deploy/linux/docker/Dockerfile_appimage.in new/sonic-visualiser-3.1.1/deploy/linux/docker/Dockerfile_appimage.in --- old/sonic-visualiser-3.1/deploy/linux/docker/Dockerfile_appimage.in 2018-07-13 10:14:39.000000000 +0200 +++ new/sonic-visualiser-3.1.1/deploy/linux/docker/Dockerfile_appimage.in 2018-08-14 10:58:45.000000000 +0200 @@ -51,7 +51,9 @@ ENV LC_ALL en_US.UTF-8 RUN hg clone -r[[REVISION]] https://code.soundsoftware.ac.uk/hg/sonic-visualiser RUN git clone https://github.com/sandstorm-io/capnproto -WORKDIR capnproto/c++ +WORKDIR capnproto +RUN git checkout v0.6.1 +WORKDIR c++ RUN ./setup-autotools.sh && autoreconf -i && ./configure && make -j3 && make install WORKDIR ../../sonic-visualiser ENV QTDIR /opt/qt510 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sonic-visualiser-3.1/deploy/osx/deploy.sh new/sonic-visualiser-3.1.1/deploy/osx/deploy.sh --- old/sonic-visualiser-3.1/deploy/osx/deploy.sh 2018-07-13 10:14:39.000000000 +0200 +++ new/sonic-visualiser-3.1.1/deploy/osx/deploy.sh 2018-08-14 10:58:45.000000000 +0200 @@ -94,7 +94,7 @@ echo echo "Making dmg..." -hdiutil create -srcfolder "$volume" "$dmg" -volname "$volume" && +hdiutil create -srcfolder "$volume" "$dmg" -volname "$volume" -fs HFS+ && rm -r "$volume" echo "Done" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sonic-visualiser-3.1/deploy/win32/sonic-visualiser.wxs new/sonic-visualiser-3.1.1/deploy/win32/sonic-visualiser.wxs --- old/sonic-visualiser-3.1/deploy/win32/sonic-visualiser.wxs 2018-07-13 10:14:39.000000000 +0200 +++ new/sonic-visualiser-3.1.1/deploy/win32/sonic-visualiser.wxs 2018-08-14 10:58:45.000000000 +0200 @@ -5,7 +5,7 @@ Id="*" Language="1033" Codepage="1252" - Version="3.1" + Version="3.1.1" UpgradeCode="D476941E-65F3-4962-9E72-B40FAAE5DBD0" Manufacturer="Queen Mary, University of London"> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sonic-visualiser-3.1/deploy/win64/build-32.bat new/sonic-visualiser-3.1.1/deploy/win64/build-32.bat --- old/sonic-visualiser-3.1/deploy/win64/build-32.bat 2018-07-13 10:14:39.000000000 +0200 +++ new/sonic-visualiser-3.1.1/deploy/win64/build-32.bat 2018-08-14 10:58:45.000000000 +0200 @@ -3,7 +3,7 @@ set STARTPWD=%CD% -set QTDIR=C:\Qt\5.11.0\mingw53_32 +set QTDIR=C:\Qt\5.11.1\mingw53_32 if not exist %QTDIR% ( @ echo Could not find 32-bit Qt @ exit /b 2 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sonic-visualiser-3.1/deploy/win64/build-64.bat new/sonic-visualiser-3.1.1/deploy/win64/build-64.bat --- old/sonic-visualiser-3.1/deploy/win64/build-64.bat 2018-07-13 10:14:39.000000000 +0200 +++ new/sonic-visualiser-3.1.1/deploy/win64/build-64.bat 2018-08-14 10:58:45.000000000 +0200 @@ -5,7 +5,7 @@ set STARTPWD=%CD% -set QTDIR=C:\Qt\5.11.0\msvc2017_64 +set QTDIR=C:\Qt\5.11.1\msvc2017_64 if not exist %QTDIR% ( @ echo Could not find 64-bit Qt @ exit /b 2 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sonic-visualiser-3.1/deploy/win64/sonic-visualiser.wxs new/sonic-visualiser-3.1.1/deploy/win64/sonic-visualiser.wxs --- old/sonic-visualiser-3.1/deploy/win64/sonic-visualiser.wxs 2018-07-13 10:14:39.000000000 +0200 +++ new/sonic-visualiser-3.1.1/deploy/win64/sonic-visualiser.wxs 2018-08-14 10:58:45.000000000 +0200 @@ -9,7 +9,7 @@ Id="*" Language="1033" Codepage="1252" - Version="3.1" + Version="3.1.1" UpgradeCode="D476941E-65F3-4962-9E72-B40FAAE5DBD0" Manufacturer="Queen Mary, University of London"> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sonic-visualiser-3.1/icons/sonic-visualiser.svg new/sonic-visualiser-3.1.1/icons/sonic-visualiser.svg --- old/sonic-visualiser-3.1/icons/sonic-visualiser.svg 1970-01-01 01:00:00.000000000 +0100 +++ new/sonic-visualiser-3.1.1/icons/sonic-visualiser.svg 2018-08-14 10:58:45.000000000 +0200 @@ -0,0 +1,507 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://web.resource.org/cc/" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="32px" + height="32px" + id="svg1900" + sodipodi:version="0.32" + inkscape:version="0.44.1" + sodipodi:docbase="/work/sonic-visualiser" + sodipodi:docname="sv-icon.svg" + inkscape:export-filename="/work/sonic-visualiser/test-d1.png" + inkscape:export-xdpi="106.65" + inkscape:export-ydpi="106.65"> + <defs + id="defs1902"> + <marker + inkscape:stockid="Arrow1Lstart" + orient="auto" + refY="0.0" + refX="0.0" + id="Arrow1Lstart" + style="overflow:visible"> + <path + id="path3958" + d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none" + transform="scale(0.8) translate(12.5,0)" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0.0" + refX="0.0" + id="Arrow1Lend" + style="overflow:visible;"> + <path + id="path3955" + d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;" + transform="scale(0.8) rotate(180) translate(12.5,0)" /> + </marker> + <marker + inkscape:stockid="Arrow1Mstart" + orient="auto" + refY="0.0" + refX="0.0" + id="Arrow1Mstart" + style="overflow:visible"> + <path + id="path3952" + d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none" + transform="scale(0.4) translate(10,0)" /> + </marker> + <marker + inkscape:stockid="Arrow1Mend" + orient="auto" + refY="0.0" + refX="0.0" + id="Arrow1Mend" + style="overflow:visible;"> + <path + id="path3949" + d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;" + transform="scale(0.4) rotate(180) translate(10,0)" /> + </marker> + <marker + inkscape:stockid="Arrow1Sstart" + orient="auto" + refY="0.0" + refX="0.0" + id="Arrow1Sstart" + style="overflow:visible"> + <path + id="path3946" + d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none" + transform="scale(0.2) translate(6,0)" /> + </marker> + <marker + inkscape:stockid="Arrow1Send" + orient="auto" + refY="0.0" + refX="0.0" + id="Arrow1Send" + style="overflow:visible;"> + <path + id="path3943" + d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;" + transform="scale(0.2) rotate(180) translate(6,0)" /> + </marker> + <marker + inkscape:stockid="Arrow2Lstart" + orient="auto" + refY="0.0" + refX="0.0" + id="Arrow2Lstart" + style="overflow:visible"> + <path + id="path3940" + style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + transform="scale(1.1) translate(1,0)" /> + </marker> + <marker + inkscape:stockid="Arrow2Lend" + orient="auto" + refY="0.0" + refX="0.0" + id="Arrow2Lend" + style="overflow:visible;"> + <path + id="path3937" + style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + transform="scale(1.1) rotate(180) translate(1,0)" /> + </marker> + <marker + inkscape:stockid="Arrow2Mstart" + orient="auto" + refY="0.0" + refX="0.0" + id="Arrow2Mstart" + style="overflow:visible"> + <path + id="path3934" + style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + transform="scale(0.6) translate(0,0)" /> + </marker> + <marker + inkscape:stockid="Arrow2Mend" + orient="auto" + refY="0.0" + refX="0.0" + id="Arrow2Mend" + style="overflow:visible;"> + <path + id="path3931" + style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + transform="scale(0.6) rotate(180) translate(0,0)" /> + </marker> + <marker + inkscape:stockid="Arrow2Sstart" + orient="auto" + refY="0.0" + refX="0.0" + id="Arrow2Sstart" + style="overflow:visible"> + <path + id="path3928" + style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + transform="scale(0.3) translate(-2.3,0)" /> + </marker> + <marker + inkscape:stockid="Arrow2Send" + orient="auto" + refY="0.0" + refX="0.0" + id="Arrow2Send" + style="overflow:visible;"> + <path + id="path3925" + style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + transform="scale(0.3) rotate(180) translate(-2.3,0)" /> + </marker> + <marker + inkscape:stockid="Tail" + orient="auto" + refY="0.0" + refX="0.0" + id="Tail" + style="overflow:visible"> + <g + id="g3910" + transform="scale(-1.2)"> + <path + id="path3912" + d="M -3.8048674,-3.9585227 L 0.54352094,0" + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;marker-start:none;marker-end:none;stroke-linecap:round" /> + <path + id="path3914" + d="M -1.2866832,-3.9585227 L 3.0617053,0" + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;marker-start:none;marker-end:none;stroke-linecap:round" /> + <path + id="path3916" + d="M 1.3053582,-3.9585227 L 5.6537466,0" + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;marker-start:none;marker-end:none;stroke-linecap:round" /> + <path + id="path3918" + d="M -3.8048674,4.1775838 L 0.54352094,0.21974226" + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;marker-start:none;marker-end:none;stroke-linecap:round" /> + <path + id="path3920" + d="M -1.2866832,4.1775838 L 3.0617053,0.21974226" + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;marker-start:none;marker-end:none;stroke-linecap:round" /> + <path + id="path3922" + d="M 1.3053582,4.1775838 L 5.6537466,0.21974226" + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;marker-start:none;marker-end:none;stroke-linecap:round" /> + </g> + </marker> + <marker + style="overflow:visible" + id="DistanceIn" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="DistanceIn"> + <g + id="g3904"> + <path + style="fill:none;stroke:#ffffff;stroke-width:1.15;stroke-linecap:square" + d="M 0,0 L 2,0" + id="path2306" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:none" + d="M 0,0 L 13,4 L 9,0 13,-4 L 0,0 z " + id="path2302" /> + <path + style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:square" + d="M 0,-4 L 0,40" + id="path2304" /> + </g> + </marker> + <marker + inkscape:stockid="TriangleOutS" + orient="auto" + refY="0.0" + refX="0.0" + id="TriangleOutS" + style="overflow:visible"> + <path + id="path3854" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none" + transform="scale(0.2)" /> + </marker> + <marker + inkscape:stockid="TriangleOutM" + orient="auto" + refY="0.0" + refX="0.0" + id="TriangleOutM" + style="overflow:visible"> + <path + id="path3857" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:stockid="TriangleOutL" + orient="auto" + refY="0.0" + refX="0.0" + id="TriangleOutL" + style="overflow:visible"> + <path + id="path3860" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none" + transform="scale(0.8)" /> + </marker> + <marker + inkscape:stockid="TriangleInS" + orient="auto" + refY="0.0" + refX="0.0" + id="TriangleInS" + style="overflow:visible"> + <path + id="path3863" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none" + transform="scale(-0.2)" /> + </marker> + <marker + inkscape:stockid="TriangleInM" + orient="auto" + refY="0.0" + refX="0.0" + id="TriangleInM" + style="overflow:visible"> + <path + id="path3866" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none" + transform="scale(-0.4)" /> + </marker> + <marker + inkscape:stockid="TriangleInL" + orient="auto" + refY="0.0" + refX="0.0" + id="TriangleInL" + style="overflow:visible"> + <path + id="path3869" + d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none" + transform="scale(-0.8)" /> + </marker> + <marker + inkscape:stockid="DiamondS" + orient="auto" + refY="0.0" + refX="0.0" + id="DiamondS" + style="overflow:visible"> + <path + id="path3872" + d="M 0,-7.0710768 L -7.0710894,0 L 0,7.0710589 L 7.0710462,0 L 0,-7.0710768 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none" + transform="scale(0.2)" /> + </marker> + <marker + inkscape:stockid="DiamondM" + orient="auto" + refY="0.0" + refX="0.0" + id="DiamondM" + style="overflow:visible"> + <path + id="path3875" + d="M 0,-7.0710768 L -7.0710894,0 L 0,7.0710589 L 7.0710462,0 L 0,-7.0710768 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:stockid="DiamondL" + orient="auto" + refY="0.0" + refX="0.0" + id="DiamondL" + style="overflow:visible"> + <path + id="path3878" + d="M 0,-7.0710768 L -7.0710894,0 L 0,7.0710589 L 7.0710462,0 L 0,-7.0710768 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none" + transform="scale(0.8)" /> + </marker> + <marker + inkscape:stockid="SquareS" + orient="auto" + refY="0.0" + refX="0.0" + id="SquareS" + style="overflow:visible"> + <path + id="path3881" + d="M -5.0,-5.0 L -5.0,5.0 L 5.0,5.0 L 5.0,-5.0 L -5.0,-5.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none" + transform="scale(0.2)" /> + </marker> + <marker + inkscape:stockid="SquareM" + orient="auto" + refY="0.0" + refX="0.0" + id="SquareM" + style="overflow:visible"> + <path + id="path3884" + d="M -5.0,-5.0 L -5.0,5.0 L 5.0,5.0 L 5.0,-5.0 L -5.0,-5.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none" + transform="scale(0.4)" /> + </marker> + <marker + inkscape:stockid="SquareL" + orient="auto" + refY="0.0" + refX="0.0" + id="SquareL" + style="overflow:visible"> + <path + id="path3887" + d="M -5.0,-5.0 L -5.0,5.0 L 5.0,5.0 L 5.0,-5.0 L -5.0,-5.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none" + transform="scale(0.8)" /> + </marker> + <marker + inkscape:stockid="Dot_s" + orient="auto" + refY="0.0" + refX="0.0" + id="Dot_s" + style="overflow:visible"> + <path + id="path3890" + d="M -2.5,-1.0 C -2.5,1.7600000 -4.7400000,4.0 -7.5,4.0 C -10.260000,4.0 -12.5,1.7600000 -12.5,-1.0 C -12.5,-3.7600000 -10.260000,-6.0 -7.5,-6.0 C -4.7400000,-6.0 -2.5,-3.7600000 -2.5,-1.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;marker-end:none" + transform="scale(0.2) translate(7.4, 1)" /> + </marker> + <marker + style="overflow:visible" + id="DistanceOut" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="DistanceOut"> + <g + id="g2300"> + <path + style="fill:none;stroke:#ffffff;stroke-width:1.15;stroke-linecap:square" + d="M 0,0 L -2,0" + id="path2316" /> + <path + style="fill:#000000;fill-rule:evenodd;stroke:none" + d="M 0,0 L -13,4 L -9,0 -13,-4 L 0,0 z " + id="path2312" /> + <path + style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:square" + d="M 0,-4 L 0,40" + id="path2314" /> + </g> + </marker> + <marker + inkscape:stockid="Dot_l" + orient="auto" + refY="0.0" + refX="0.0" + id="Dot_l" + style="overflow:visible"> + <path + id="path3896" + d="M -2.5,-1.0 C -2.5,1.7600000 -4.7400000,4.0 -7.5,4.0 C -10.260000,4.0 -12.5,1.7600000 -12.5,-1.0 C -12.5,-3.7600000 -10.260000,-6.0 -7.5,-6.0 C -4.7400000,-6.0 -2.5,-3.7600000 -2.5,-1.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;marker-end:none" + transform="scale(0.8) translate(7.4, 1)" /> + </marker> + <marker + inkscape:stockid="Dot_m" + orient="auto" + refY="0.0" + refX="0.0" + id="Dot_m" + style="overflow:visible"> + <path + id="path3893" + d="M -2.5,-1.0 C -2.5,1.7600000 -4.7400000,4.0 -7.5,4.0 C -10.260000,4.0 -12.5,1.7600000 -12.5,-1.0 C -12.5,-3.7600000 -10.260000,-6.0 -7.5,-6.0 C -4.7400000,-6.0 -2.5,-3.7600000 -2.5,-1.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;marker-end:none" + transform="scale(0.4) translate(7.4, 1)" /> + </marker> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="11.197802" + inkscape:cx="16.018908" + inkscape:cy="13.653906" + inkscape:current-layer="layer1" + showgrid="true" + inkscape:grid-bbox="true" + inkscape:document-units="px" + inkscape:window-width="816" + inkscape:window-height="606" + inkscape:window-x="145" + inkscape:window-y="175" /> + <metadata + id="metadata1905"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + id="layer1" + inkscape:label="Layer 1" + inkscape:groupmode="layer"> + <path + style="fill:none;fill-rule:evenodd;stroke:#d45500;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="M 3.905299,16.01472 C 27.5,16.01472 27.5,16.01472 27.5,16.01472" + id="path4036" /> + <path + style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1.356;stroke-linecap:butt;stroke-linejoin:miter;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:1.39999998;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + d="M 4.189383,16.015203 C 7.6265694,16.015203 8.0726528,16.025708 8.0726528,16.025708 C 9.66349,9.1090346 9.741433,8.3087074 10.172784,15.048932 C 10.831635,26.830929 11.416632,20.601324 12.258324,15.76545 C 13.844917,0.39957958 14.006502,6.1759314 14.342565,9.4067063 C 15.634829,25.384548 15.579075,28.965284 16.269833,23.658757 C 16.783168,19.715219 18.310939,3.0919969 18.584891,7.6743646 C 20.490285,25.887346 20.546625,24.84451 21.131971,20.132265 C 23.062537,1.6773601 22.472829,16.437356 23.676672,16.115011 C 27.08449,16.115011 27.026616,16.025708 27.026616,16.025708 L 27.47205,16.025708" + id="path3783" + sodipodi:nodetypes="cccccsccccc" /> + <rect + style="fill:none;stroke:#d45500;stroke-width:2;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect3775" + width="25.004908" + height="24.915606" + x="3.4828262" + y="3.5122664" /> + </g> +</svg> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sonic-visualiser-3.1/main/MainWindow.cpp new/sonic-visualiser-3.1.1/main/MainWindow.cpp --- old/sonic-visualiser-3.1/main/MainWindow.cpp 2018-07-13 10:14:39.000000000 +0200 +++ new/sonic-visualiser-3.1.1/main/MainWindow.cpp 2018-08-14 10:58:45.000000000 +0200 @@ -2268,7 +2268,6 @@ menu->addSeparator(); m_rightButtonPlaybackMenu->addAction(m_playAction); - m_rightButtonPlaybackMenu->addAction(m_recordAction); m_rightButtonPlaybackMenu->addAction(m_playSelectionAction); m_rightButtonPlaybackMenu->addAction(m_playLoopAction); m_rightButtonPlaybackMenu->addAction(m_soloAction); @@ -5128,7 +5127,7 @@ aboutText += "</small></p>"; aboutText += - "<p><small>Sonic Visualiser Copyright © 2005–2017 Chris Cannam and " + "<p><small>Sonic Visualiser Copyright © 2005–2018 Chris Cannam and " "Queen Mary, University of London.</small></p>"; aboutText += diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sonic-visualiser-3.1/piper/.travis.yml new/sonic-visualiser-3.1.1/piper/.travis.yml --- old/sonic-visualiser-3.1/piper/.travis.yml 2018-07-13 10:15:02.000000000 +0200 +++ new/sonic-visualiser-3.1.1/piper/.travis.yml 2018-08-14 10:59:02.000000000 +0200 @@ -13,6 +13,7 @@ before_install: - ( cd ../ ; git clone https://github.com/sandstorm-io/capnproto ) + - if [[ "$TRAVIS_OS_NAME" = "linux" ]] ; then ( cd ../capnproto ; git checkout v0.6.1 ) ; fi - ( cd ../capnproto/c++ ; ./setup-autotools.sh && autoreconf -i ) - ( cd ../capnproto/c++ ; ./configure && make && sudo make install ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sonic-visualiser-3.1/piper-cpp/.travis.yml new/sonic-visualiser-3.1.1/piper-cpp/.travis.yml --- old/sonic-visualiser-3.1/piper-cpp/.travis.yml 2018-07-13 10:15:13.000000000 +0200 +++ new/sonic-visualiser-3.1.1/piper-cpp/.travis.yml 2018-08-14 10:59:07.000000000 +0200 @@ -20,6 +20,7 @@ - ( cd ../ ; git clone https://github.com/piper-audio/piper ) - ( cd ../ ; hg clone https://code.soundsoftware.ac.uk/hg/vamp-plugin-sdk ) - ( cd ../ ; git clone https://github.com/sandstorm-io/capnproto ) + - if [[ "$TRAVIS_OS_NAME" = "linux" ]] ; then ( cd ../capnproto ; git checkout v0.6.1 ) ; fi - ( cd ../capnproto/c++ ; ./setup-autotools.sh && autoreconf -i ) - ( cd ../capnproto/c++ ; ./configure && make && sudo make install ) - if [[ "$TRAVIS_OS_NAME" = "osx" ]] ; then brew update ; fi diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sonic-visualiser-3.1/sonic-visualiser.desktop new/sonic-visualiser-3.1.1/sonic-visualiser.desktop --- old/sonic-visualiser-3.1/sonic-visualiser.desktop 2018-07-13 10:14:39.000000000 +0200 +++ new/sonic-visualiser-3.1.1/sonic-visualiser.desktop 2018-08-14 10:58:45.000000000 +0200 @@ -6,6 +6,6 @@ Keywords=audio; sound; visualiser; sonic; Terminal=false Type=Application -Icon=sv-icon +Icon=sonic-visualiser 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 -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sonic-visualiser-3.1/sv.pro new/sonic-visualiser-3.1.1/sv.pro --- old/sonic-visualiser-3.1/sv.pro 2018-07-13 10:14:39.000000000 +0200 +++ new/sonic-visualiser-3.1.1/sv.pro 2018-08-14 10:58:45.000000000 +0200 @@ -23,10 +23,20 @@ } linux* { + sv_bins.path = $$PREFIX_PATH/bin/ sv_bins.files = checker/vamp-plugin-load-checker piper-vamp-simple-server sonic-visualiser sv_bins.CONFIG = no_check_exist - INSTALLS += sv_bins + + sv_desktop.path = $$PREFIX_PATH/share/applications/ + sv_desktop.files = sonic-visualiser.desktop + sv_desktop.CONFIG = no_check_exist + + sv_icon.path = $$PREFIX_PATH/share/icons/hicolor/scalable/apps/ + sv_icon.files = icons/sonic-visualiser.svg + sv_icon.CONFIG = no_check_exist + + INSTALLS += sv_bins sv_desktop sv_icon } TRANSLATIONS += \ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sonic-visualiser-3.1/svapp/audio/AudioCallbackRecordTarget.cpp new/sonic-visualiser-3.1.1/svapp/audio/AudioCallbackRecordTarget.cpp --- old/sonic-visualiser-3.1/svapp/audio/AudioCallbackRecordTarget.cpp 2018-07-13 10:14:54.000000000 +0200 +++ new/sonic-visualiser-3.1.1/svapp/audio/AudioCallbackRecordTarget.cpp 2018-08-14 10:58:58.000000000 +0200 @@ -22,6 +22,10 @@ #include <QDir> #include <QTimer> +//#define DEBUG_AUDIO_CALLBACK_RECORD_TARGET 1 + +static const int recordUpdateTimeout = 200; // ms + AudioCallbackRecordTarget::AudioCallbackRecordTarget(ViewManagerBase *manager, QString clientName) : m_viewManager(manager), @@ -138,7 +142,10 @@ void AudioCallbackRecordTarget::updateModel() { - bool secChanged = false; +#ifdef DEBUG_AUDIO_CALLBACK_RECORD_TARGET + cerr << "AudioCallbackRecordTarget::updateModel" << endl; +#endif + sv_frame_t frameToEmit = 0; int nframes = 0; @@ -149,9 +156,19 @@ } if (nframes == 0) { +#ifdef DEBUG_AUDIO_CALLBACK_RECORD_TARGET + cerr << "AudioCallbackRecordTarget::updateModel: no frames available" << endl; +#endif + if (m_recording) { + QTimer::singleShot(recordUpdateTimeout, this, SLOT(updateModel())); + } return; } +#ifdef DEBUG_AUDIO_CALLBACK_RECORD_TARGET + cerr << "AudioCallbackRecordTarget::updateModel: have " << nframes << " frames" << endl; +#endif + float **samples = new float *[m_recordChannelCount]; for (int c = 0; c < m_recordChannelCount; ++c) { samples[c] = new float[nframes]; @@ -165,27 +182,14 @@ } delete[] samples; - sv_frame_t priorFrameCount = m_frameCount; m_frameCount += nframes; - - RealTime priorRT = - RealTime::frame2RealTime(priorFrameCount, m_recordSampleRate); - RealTime postRT = - RealTime::frame2RealTime(m_frameCount, m_recordSampleRate); - - secChanged = (postRT.sec > priorRT.sec); - if (secChanged) { - m_model->updateModel(); - frameToEmit = m_frameCount; - } - - if (secChanged) { - emit recordDurationChanged(frameToEmit, m_recordSampleRate); - } + m_model->updateModel(); + frameToEmit = m_frameCount; + emit recordDurationChanged(frameToEmit, m_recordSampleRate); if (m_recording) { - QTimer::singleShot(1000, this, SLOT(updateModel())); + QTimer::singleShot(recordUpdateTimeout, this, SLOT(updateModel())); } } @@ -291,7 +295,7 @@ emit recordStatusChanged(true); - QTimer::singleShot(1000, this, SLOT(updateModel())); + QTimer::singleShot(recordUpdateTimeout, this, SLOT(updateModel())); return m_model; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sonic-visualiser-3.1/svapp/audio/AudioGenerator.cpp new/sonic-visualiser-3.1.1/svapp/audio/AudioGenerator.cpp --- old/sonic-visualiser-3.1/svapp/audio/AudioGenerator.cpp 2018-07-13 10:14:54.000000000 +0200 +++ new/sonic-visualiser-3.1.1/svapp/audio/AudioGenerator.cpp 2018-08-14 10:58:58.000000000 +0200 @@ -356,8 +356,10 @@ } sv_frame_t -AudioGenerator::mixModel(Model *model, sv_frame_t startFrame, sv_frame_t frameCount, - float **buffer, sv_frame_t fadeIn, sv_frame_t fadeOut) +AudioGenerator::mixModel(Model *model, + sv_frame_t startFrame, sv_frame_t frameCount, + float **buffer, + sv_frame_t fadeIn, sv_frame_t fadeOut) { if (m_sourceSampleRate == 0) { cerr << "WARNING: AudioGenerator::mixModel: No base source sample rate available" << endl; @@ -566,6 +568,24 @@ std::vector<ClipMixer::NoteStart> starts; std::vector<ClipMixer::NoteEnd> ends; + while (noteOffs.begin() != noteOffs.end() && + noteOffs.begin()->onFrame > reqStart) { + + // We must have jumped back in time, as there is a + // note-off pending for a note that hasn't begun yet. Emit + // the note-off now and discard + + off.frameOffset = 0; + off.frequency = noteOffs.begin()->frequency; + +#ifdef DEBUG_AUDIO_GENERATOR + cerr << "mixModel [clip]: adding rewind-caused note-off at frame offset 0 frequency " << off.frequency << endl; +#endif + + ends.push_back(off); + noteOffs.erase(noteOffs.begin()); + } + for (NoteList::const_iterator ni = notes.begin(); ni != notes.end(); ++ni) { @@ -593,9 +613,9 @@ } while (noteOffs.begin() != noteOffs.end() && - noteOffs.begin()->frame <= noteFrame) { + noteOffs.begin()->offFrame <= noteFrame) { - sv_frame_t eventFrame = noteOffs.begin()->frame; + sv_frame_t eventFrame = noteOffs.begin()->offFrame; if (eventFrame < reqStart) eventFrame = reqStart; off.frameOffset = eventFrame - reqStart; @@ -620,13 +640,14 @@ starts.push_back(on); noteOffs.insert - (NoteOff(on.frequency, noteFrame + noteDuration)); + (NoteOff(on.frequency, noteFrame + noteDuration, noteFrame)); } while (noteOffs.begin() != noteOffs.end() && - noteOffs.begin()->frame <= reqStart + m_processingBlockSize) { + noteOffs.begin()->offFrame <= + reqStart + m_processingBlockSize) { - sv_frame_t eventFrame = noteOffs.begin()->frame; + sv_frame_t eventFrame = noteOffs.begin()->offFrame; if (eventFrame < reqStart) eventFrame = reqStart; off.frameOffset = eventFrame - reqStart; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sonic-visualiser-3.1/svapp/audio/AudioGenerator.h new/sonic-visualiser-3.1.1/svapp/audio/AudioGenerator.h --- old/sonic-visualiser-3.1/svapp/audio/AudioGenerator.h 2018-07-13 10:14:54.000000000 +0200 +++ new/sonic-visualiser-3.1.1/svapp/audio/AudioGenerator.h 2018-08-14 10:58:58.000000000 +0200 @@ -81,8 +81,12 @@ /** * Mix a single model into an output buffer. */ - virtual sv_frame_t mixModel(Model *model, sv_frame_t startFrame, sv_frame_t frameCount, - float **buffer, sv_frame_t fadeIn = 0, sv_frame_t fadeOut = 0); + virtual sv_frame_t mixModel(Model *model, + sv_frame_t startFrame, + sv_frame_t frameCount, + float **buffer, + sv_frame_t fadeIn = 0, + sv_frame_t fadeOut = 0); /** * Specify that only the given set of models should be played. @@ -108,14 +112,29 @@ struct NoteOff { - NoteOff(float _freq, sv_frame_t _frame) : frequency(_freq), frame(_frame) { } + NoteOff(float _freq, sv_frame_t _offFrame, sv_frame_t _onFrame) : + frequency(_freq), offFrame(_offFrame), onFrame(_onFrame) { } float frequency; - sv_frame_t frame; + sv_frame_t offFrame; + + // This is the frame at which the note whose note-off appears + // here began. It is used to determine when we should silence + // a note because the playhead has jumped back in time - if + // the current frame for rendering is earlier than this one, + // then we should end and discard the note + // + sv_frame_t onFrame; struct Comparator { bool operator()(const NoteOff &n1, const NoteOff &n2) const { - return n1.frame < n2.frame; + if (n1.offFrame != n2.offFrame) { + return n1.offFrame < n2.offFrame; + } else if (n1.onFrame != n2.onFrame) { + return n1.onFrame < n2.onFrame; + } else { + return n1.frequency < n2.frequency; + } } }; }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sonic-visualiser-3.1/svapp/framework/MainWindowBase.cpp new/sonic-visualiser-3.1.1/svapp/framework/MainWindowBase.cpp --- old/sonic-visualiser-3.1/svapp/framework/MainWindowBase.cpp 2018-07-13 10:14:54.000000000 +0200 +++ new/sonic-visualiser-3.1.1/svapp/framework/MainWindowBase.cpp 2018-08-14 10:58:58.000000000 +0200 @@ -2459,6 +2459,7 @@ createCallbackIO(m_recordTarget, m_resamplerWrapper, preference, errorString); if (m_audioIO) { + SVCERR << "MainWindowBase::createAudioIO: Suspending on creation" << endl; m_audioIO->suspend(); // start in suspended state m_playSource->setSystemPlaybackTarget(m_audioIO); } else { @@ -2474,6 +2475,7 @@ createCallbackPlayTarget(m_resamplerWrapper, preference, errorString); if (m_playTarget) { + SVCERR << "MainWindowBase::createAudioIO: Suspending on creation" << endl; m_playTarget->suspend(); // start in suspended state m_playSource->setSystemPlaybackTarget(m_playTarget); } @@ -2551,7 +2553,15 @@ void MainWindowBase::audioChannelCountIncreased(int) { + SVCERR << "MainWindowBase::audioChannelCountIncreased" << endl; recreateAudioIO(); + + if (m_recordTarget && + m_recordTarget->isRecording() && + m_audioIO) { + SVCERR << "MainWindowBase::audioChannelCountIncreased: we were recording already, so resuming IO now" << endl; + m_audioIO->resume(); + } } WaveFileModel * @@ -3029,7 +3039,7 @@ } if (!m_audioIO) { - cerr << "MainWindowBase::record: about to create audio IO" << endl; + SVDEBUG << "MainWindowBase::record: about to create audio IO" << endl; createAudioIO(); } @@ -3068,7 +3078,7 @@ if (m_viewManager) m_viewManager->setGlobalCentreFrame(0); - SVDEBUG << "MainWindowBase::record: about to resume" << endl; + SVCERR << "MainWindowBase::record: about to resume" << endl; m_audioIO->resume(); WritableWaveFileModel *model = m_recordTarget->startRecording(); @@ -3082,12 +3092,15 @@ } if (!model->isOK()) { + SVCERR << "MainWindowBase::record: Model not OK, stopping and suspending" << endl; m_recordTarget->stopRecording(); m_audioIO->suspend(); if (action) action->setChecked(false); delete model; return; } + + SVCERR << "MainWindowBase::record: Model is OK, continuing..." << endl; PlayParameterRepository::getInstance()->addPlayable(model); @@ -3101,6 +3114,7 @@ if (templateName != "") { FileOpenStatus tplStatus = openSessionTemplate(templateName); if (tplStatus == FileOpenCancelled) { + SVCERR << "MainWindowBase::record: Session template open cancelled, stopping and suspending" << endl; m_recordTarget->stopRecording(); m_audioIO->suspend(); PlayParameterRepository::getInstance()->removePlayable(model); @@ -3173,7 +3187,7 @@ updateMenuStates(); m_recentFiles.addFile(model->getLocation()); currentPaneChanged(m_paneStack->getCurrentPane()); - + emit audioFileLoaded(); } @@ -3414,6 +3428,8 @@ m_playSource->stop(); + SVCERR << "MainWindowBase::stop: suspending" << endl; + if (m_audioIO) m_audioIO->suspend(); else if (m_playTarget) m_playTarget->suspend(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sonic-visualiser-3.1/svcore/data/fileio/test/CSVStreamWriterTest.h new/sonic-visualiser-3.1.1/svcore/data/fileio/test/CSVStreamWriterTest.h --- old/sonic-visualiser-3.1/svcore/data/fileio/test/CSVStreamWriterTest.h 2018-07-13 10:14:48.000000000 +0200 +++ new/sonic-visualiser-3.1.1/svcore/data/fileio/test/CSVStreamWriterTest.h 2018-08-14 10:58:53.000000000 +0200 @@ -256,7 +256,7 @@ regions.addSelection({0, 2}); regions.addSelection({4, 6}); regions.addSelection({16, 18}); - qDebug("End frame: %lld", (long long int)mwm.getEndFrame()); +// qDebug("End frame: %lld", (long long int)mwm.getEndFrame()); const std::string expectedOutput { "0,0,0\n" "1,0,0\n" @@ -278,7 +278,7 @@ QVERIFY( reporter.getCallCount() == 3 ); const std::vector<int> expectedCallLog { 33, 66, 100 }; QVERIFY( reporter.getPercentageLog() == expectedCallLog ); - qDebug("%s", oss.str().c_str()); +// qDebug("%s", oss.str().c_str()); QVERIFY( oss.str() == expectedOutput ); } @@ -300,15 +300,15 @@ notes.addPoint({startFrame, note, 4, 1.f, ""}); startFrame += 8; } - qDebug("Create Expected Output\n"); +// qDebug("Create Expected Output\n"); // NB. removed end line break const auto expectedOutput = notes.toDelimitedDataString(",").trimmed(); StubReporter reporter { []() -> bool { return false; } }; std::ostringstream oss; - qDebug("End frame: %lld", (long long int)notes.getEndFrame()); - qDebug("Write streaming\n"); +// qDebug("End frame: %lld", (long long int)notes.getEndFrame()); +// qDebug("Write streaming\n"); const auto wroteSparseModel = CSVStreamWriter::writeInChunks( oss, notes, @@ -318,8 +318,8 @@ 2 ); - qDebug("\n%s\n", expectedOutput.toLocal8Bit().data()); - qDebug("\n%s\n", oss.str().c_str()); +// qDebug("\n%s\n", expectedOutput.toLocal8Bit().data()); +// qDebug("\n%s\n", oss.str().c_str()); QVERIFY( wroteSparseModel == true ); QVERIFY( oss.str() == expectedOutput.toStdString() ); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sonic-visualiser-3.1/svcore/data/model/DenseTimeValueModel.cpp new/sonic-visualiser-3.1.1/svcore/data/model/DenseTimeValueModel.cpp --- old/sonic-visualiser-3.1/svcore/data/model/DenseTimeValueModel.cpp 2018-07-13 10:14:48.000000000 +0200 +++ new/sonic-visualiser-3.1.1/svcore/data/model/DenseTimeValueModel.cpp 2018-08-14 10:58:53.000000000 +0200 @@ -33,7 +33,7 @@ { int ch = getChannelCount(); - cerr << "f0 = " << f0 << ", f1 = " << f1 << endl; +// cerr << "f0 = " << f0 << ", f1 = " << f1 << endl; if (f1 <= f0) return ""; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sonic-visualiser-3.1/svcore/data/model/NoteData.h new/sonic-visualiser-3.1.1/svcore/data/model/NoteData.h --- old/sonic-visualiser-3.1/svcore/data/model/NoteData.h 2018-07-13 10:14:48.000000000 +0200 +++ new/sonic-visualiser-3.1.1/svcore/data/model/NoteData.h 2018-08-14 10:58:53.000000000 +0200 @@ -12,8 +12,8 @@ COPYING included with this distribution for more information. */ -#ifndef NOTE_DATA_H -#define NOTE_DATA_H +#ifndef SV_NOTE_DATA_H +#define SV_NOTE_DATA_H #include <vector> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sonic-visualiser-3.1/svcore/data/model/NoteModel.h new/sonic-visualiser-3.1.1/svcore/data/model/NoteModel.h --- old/sonic-visualiser-3.1/svcore/data/model/NoteModel.h 2018-07-13 10:14:48.000000000 +0200 +++ new/sonic-visualiser-3.1.1/svcore/data/model/NoteModel.h 2018-08-14 10:58:53.000000000 +0200 @@ -13,8 +13,8 @@ COPYING included with this distribution for more information. */ -#ifndef _NOTE_MODEL_H_ -#define _NOTE_MODEL_H_ +#ifndef SV_NOTE_MODEL_H +#define SV_NOTE_MODEL_H #include "IntervalModel.h" #include "NoteData.h" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sonic-visualiser-3.1/svcore/plugin/LADSPAPluginFactory.cpp new/sonic-visualiser-3.1.1/svcore/plugin/LADSPAPluginFactory.cpp --- old/sonic-visualiser-3.1/svcore/plugin/LADSPAPluginFactory.cpp 2018-07-13 10:14:48.000000000 +0200 +++ new/sonic-visualiser-3.1.1/svcore/plugin/LADSPAPluginFactory.cpp 2018-08-14 10:58:53.000000000 +0200 @@ -422,7 +422,7 @@ if (m_libraryHandles.find(soname) == m_libraryHandles.end()) { loadLibrary(soname); if (m_libraryHandles.find(soname) == m_libraryHandles.end()) { - cerr << "WARNING: LADSPAPluginFactory::getLADSPADescriptor: loadLibrary failed for " << soname << endl; + SVCERR << "WARNING: LADSPAPluginFactory::getLADSPADescriptor: loadLibrary failed for " << soname << endl; return 0; } } @@ -433,7 +433,7 @@ DLSYM(libraryHandle, "ladspa_descriptor"); if (!fn) { - cerr << "WARNING: LADSPAPluginFactory::getLADSPADescriptor: No descriptor function in library " << soname << endl; + SVCERR << "WARNING: LADSPAPluginFactory::getLADSPADescriptor: No descriptor function in library " << soname << endl; return 0; } @@ -445,7 +445,7 @@ ++index; } - cerr << "WARNING: LADSPAPluginFactory::getLADSPADescriptor: No such plugin as " << label << " in library " << soname << endl; + SVCERR << "WARNING: LADSPAPluginFactory::getLADSPADescriptor: No such plugin as " << label << " in library " << soname << endl; return 0; } @@ -462,7 +462,7 @@ if (QFileInfo(soName).exists()) { DLERROR(); - cerr << "LADSPAPluginFactory::loadLibrary: Library \"" << soName << "\" exists, but failed to load it" << endl; + SVCERR << "LADSPAPluginFactory::loadLibrary: Library \"" << soName << "\" exists, but failed to load it" << endl; return; } @@ -484,7 +484,7 @@ if (QFileInfo(dir.filePath(fileName)).exists()) { #ifdef DEBUG_LADSPA_PLUGIN_FACTORY - cerr << "Loading: " << fileName << endl; + SVDEBUG << "Loading: " << fileName << endl; #endif libraryHandle = DLOPEN(dir.filePath(fileName), RTLD_NOW); if (libraryHandle) { @@ -497,7 +497,7 @@ QString file = dir.filePath(dir[j]); if (QFileInfo(file).baseName() == base) { #ifdef DEBUG_LADSPA_PLUGIN_FACTORY - cerr << "Loading: " << file << endl; + SVDEBUG << "Loading: " << file << endl; #endif libraryHandle = DLOPEN(file, RTLD_NOW); if (libraryHandle) { @@ -508,7 +508,7 @@ } } - cerr << "LADSPAPluginFactory::loadLibrary: Failed to locate plugin library \"" << soName << "\"" << endl; + SVCERR << "LADSPAPluginFactory::loadLibrary: Failed to locate plugin library \"" << soName << "\"" << endl; } void @@ -569,7 +569,7 @@ std::vector<QString> pathList; string path; - (void)getEnvUtf8("DSSI_PATH", path); + (void)getEnvUtf8("LADSPA_PATH", path); if (path == "") { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sonic-visualiser-3.1/svcore/transform/RealTimeEffectModelTransformer.cpp new/sonic-visualiser-3.1.1/svcore/transform/RealTimeEffectModelTransformer.cpp --- old/sonic-visualiser-3.1/svcore/transform/RealTimeEffectModelTransformer.cpp 2018-07-13 10:14:48.000000000 +0200 +++ new/sonic-visualiser-3.1.1/svcore/transform/RealTimeEffectModelTransformer.cpp 2018-08-14 10:58:53.000000000 +0200 @@ -47,14 +47,14 @@ QString pluginId = transform.getPluginIdentifier(); -// SVDEBUG << "RealTimeEffectModelTransformer::RealTimeEffectModelTransformer: plugin " << pluginId << ", output " << output << endl; + SVDEBUG << "RealTimeEffectModelTransformer::RealTimeEffectModelTransformer: plugin " << pluginId << ", output " << transform.getOutput() << endl; RealTimePluginFactory *factory = RealTimePluginFactory::instanceFor(pluginId); if (!factory) { - cerr << "RealTimeEffectModelTransformer: No factory available for plugin id \"" - << pluginId << "\"" << endl; + SVCERR << "RealTimeEffectModelTransformer: No factory available for plugin id \"" + << pluginId << "\"" << endl; return; } @@ -67,8 +67,8 @@ input->getChannelCount()); if (!m_plugin) { - cerr << "RealTimeEffectModelTransformer: Failed to instantiate plugin \"" - << pluginId << "\"" << endl; + SVCERR << "RealTimeEffectModelTransformer: Failed to instantiate plugin \"" + << pluginId << "\"" << endl; return; } @@ -129,13 +129,25 @@ SVDEBUG << "RealTimeEffectModelTransformer::run: Waiting for input model to be ready..." << endl; usleep(500000); } - if (m_abandoned) return; + if (m_abandoned) { + return; + } + if (m_outputs.empty()) { + return; + } + + SparseTimeValueModel *stvm = + dynamic_cast<SparseTimeValueModel *>(m_outputs[0]); + WritableWaveFileModel *wwfm = + dynamic_cast<WritableWaveFileModel *>(m_outputs[0]); - SparseTimeValueModel *stvm = dynamic_cast<SparseTimeValueModel *>(m_outputs[0]); - WritableWaveFileModel *wwfm = dynamic_cast<WritableWaveFileModel *>(m_outputs[0]); - if (!stvm && !wwfm) return; + if (!stvm && !wwfm) { + return; + } - if (stvm && (m_outputNo >= int(m_plugin->getControlOutputCount()))) return; + if (stvm && (m_outputNo >= int(m_plugin->getControlOutputCount()))) { + return; + } sv_samplerate_t sampleRate = input->getSampleRate(); int channelCount = input->getChannelCount(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sonic-visualiser-3.1/svgui/view/Pane.cpp new/sonic-visualiser-3.1.1/svgui/view/Pane.cpp --- old/sonic-visualiser-3.1/svgui/view/Pane.cpp 2018-07-13 10:14:51.000000000 +0200 +++ new/sonic-visualiser-3.1.1/svgui/view/Pane.cpp 2018-08-14 10:58:55.000000000 +0200 @@ -670,10 +670,13 @@ // SVDEBUG << "Pane::paintEvent: calling paint.save() in vertical scale block" << endl; paint.save(); - paint.setPen(getForeground()); + paint.setPen(Qt::NoPen); paint.setBrush(getBackground()); - paint.drawRect(0, -1, m_scaleWidth, height()+1); + paint.drawRect(0, 0, m_scaleWidth, height()); + paint.setPen(getForeground()); + paint.drawLine(m_scaleWidth, 0, m_scaleWidth, height()); + paint.setBrush(Qt::NoBrush); scaleLayer->paintVerticalScale (this, m_manager->shouldShowVerticalColourScale(), diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sonic-visualiser-3.1/version.h new/sonic-visualiser-3.1.1/version.h --- old/sonic-visualiser-3.1/version.h 2018-07-13 10:14:39.000000000 +0200 +++ new/sonic-visualiser-3.1.1/version.h 2018-08-14 10:58:45.000000000 +0200 @@ -1 +1 @@ -#define SV_VERSION "3.1" +#define SV_VERSION "3.1.1"
