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 &copy; 2005&ndash;2017 Chris 
Cannam and "
+        "<p><small>Sonic Visualiser Copyright &copy; 2005&ndash;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"


Reply via email to