# HG changeset patch # User Chris Cannam # Date 1410339289 -3600 # Node ID 4a7c62938a13105180047608149e064618c358bd # Parent 9f82fa990cbd3ffd3895d8302154f893da332c2e# Parent fdc445e736a0a8ff59d85a7765978fc1ad84c47b Pull across beta bits from prior beta branch diff -r fdc445e736a0 -r 4a7c62938a13 .hgsubstate --- a/.hgsubstate Mon Sep 01 13:44:36 2014 +0100 +++ b/.hgsubstate Wed Sep 10 09:54:49 2014 +0100 @@ -1,5 +1,5 @@ d16f0fd6db6104d87882bc43788a3bb1b0f8c528 dataquay 879bdc878826bebec67130326f99397c430419b1 sv-dependency-builds -5fd0dd4ed984a6806ed3fe420ef615dd82ca40f2 svapp -f5810f1270ae64d2a814c55f7d56cc7cfe11192b svcore -57d943a6194318315d96bc2b2c81af47cfeda9e3 svgui +a39a7d6b0f2d0b6bff0b580b733f7db69c63c135 svapp +a8f91db36e9de56198a1d4d5b8ef8948a01f49b2 svcore +d282967236d54945432cdfe5dbce0763d26488cc svgui diff -r fdc445e736a0 -r 4a7c62938a13 CHANGELOG --- a/CHANGELOG Mon Sep 01 13:44:36 2014 +0100 +++ b/CHANGELOG Wed Sep 10 09:54:49 2014 +0100 @@ -1,12 +1,15 @@ Changes in Sonic Visualiser 2.4 since the previous release 2.3: + - Add support for left/right scrolling using a two-finger touchpad + gesture (where available) + - Make the octave numbering into a configurable option, and change the default. Previously Sonic Visualiser labelled middle-C as "C3"; now it labels middle-C as "C4", a more common standard in the world - outside MIDI sequencer software. The previous system available as - an option in the Preferences. This affects only the visible labels: - there is no change to analysis or to the file format + outside MIDI sequencer software. The previous system is available + as an option in the Preferences. This affects only the visible + labels: there is no change to analysis or to the file format - Sonify time-value layers. Any time-value curve whose scale unit is set to Hz will now acquire a playback toggle control; this control @@ -20,6 +23,16 @@ electric piano with sustain. The piano sample is still available, and any sessions saved using it should continue to use it + - Add keyboard shortcuts to cycle the current layer (in addition to + the existing ones to cycle the current pane) + + - Fix various bugs related to layer ordering: layer tabs re-ordering + themselves randomly when new layer added, layers being ordered + randomly when saving and reloading a session + + - Fix incorrect interaction with non-Unicode usernames when creating + temporary and template directories on Windows + - Shade the start and end of the main audio file, to make them easier to see for files that start or end in silence @@ -28,6 +41,10 @@ - Make it possible to import CSV files directly into Note layers by adding Pitch as a data type in the CSV file import dialog + - Fix problems with keyboard shortcuts when using Qt5 on OS/X. This + is the first release in which the official builds use Qt5 for all + platforms. + Changes in Sonic Visualiser 2.3 since the previous release 2.2: diff -r fdc445e736a0 -r 4a7c62938a13 README --- a/README Mon Sep 01 13:44:36 2014 +0100 +++ b/README Wed Sep 10 09:54:49 2014 +0100 @@ -18,7 +18,7 @@ * Run feature-extraction plugins to calculate annotations automatically, using algorithms such as beat trackers, pitch -detectors and so on +detectors and so on (see http://vamp-plugins.org/) * Import annotation data from various text formats and MIDI files @@ -40,13 +40,13 @@ Sonic Visualiser was developed at the Centre for Digital Music, Queen Mary, University of London. - http://www.elec.qmul.ac.uk/digitalmusic/ + http://c4dm.eecs.qmul.ac.uk/ -The main program is by Chris Cannam, with additional DSP and program -design work by Christian Landone. Thanks also to Craig Sapp for his -suggestions and useful feedback. +Sonic Visualiser was written by Chris Cannam with contributions from +Christian Landone, Mathieu Barthet, Dan Stowell, Jesus Corral Garcia, +Matthias Mauch, and Craig Sapp. -Code copyright 2005-2007 Chris Cannam and copyright 2006-2013 Queen +Code copyright 2005-2007 Chris Cannam and copyright 2006-2014 Queen Mary, University of London, except where indicated in the individual source files. @@ -58,11 +58,9 @@ Recorded Music (CHARM). This work was partially funded by the Engineering and Physical -Sciences Research Council through the OMRAS2 project EP/E017614/1. - -This work was partially funded by the Engineering and Physical -Sciences Research Council through the Musicology for the Masses -project EP/I001832/1. +Sciences Research Council through the OMRAS2 project EP/E017614/1, the +Musicology for the Masses project EP/I001832/1, and the Sound Software +project EP/H043101/1. Sonic Visualiser is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -r fdc445e736a0 -r 4a7c62938a13 deploy/win32/sonic-visualiser.wxs --- a/deploy/win32/sonic-visualiser.wxs Mon Sep 01 13:44:36 2014 +0100 +++ b/deploy/win32/sonic-visualiser.wxs Wed Sep 10 09:54:49 2014 +0100 @@ -5,7 +5,7 @@ Id="*" Language="1033" Codepage="1252" - Version="2.3.90" + Version="2.3.91" UpgradeCode="D476941E-65F3-4962-9E72-B40FAAE5DBD0" Manufacturer="Queen Mary, University of London"> diff -r fdc445e736a0 -r 4a7c62938a13 main/MainWindow.cpp --- a/main/MainWindow.cpp Mon Sep 01 13:44:36 2014 +0100 +++ b/main/MainWindow.cpp Wed Sep 10 09:54:49 2014 +0100 @@ -354,6 +354,17 @@ MainWindow::setupMenus() { if (!m_mainMenusCreated) { + +#ifdef Q_OS_LINUX + // In Ubuntu 14.04 the window's menu bar goes missing entirely + // if the user is running any desktop environment other than Unity + // (in which the faux single-menubar appears). The user has a + // workaround, to remove the appmenu-qt5 package, but that is + // awkward and the problem is so severe that it merits disabling + // the system menubar integration altogether. Like this: + menuBar()->setNativeMenuBar(false); // fix #1039 +#endif + m_rightButtonMenu = new QMenu(); // No -- we don't want tear-off enabled on the right-button @@ -758,7 +769,7 @@ menu->addAction(action); action = new QAction(tr("Insert Item at Selection"), this); - action->setShortcut(tr("Ctrl+Shift+Enter")); + action->setShortcut(tr("Ctrl+Shift+Return")); action->setStatusTip(tr("Insert a new note or region item corresponding to the current selection")); connect(action, SIGNAL(triggered()), this, SLOT(insertItemAtSelection())); connect(this, SIGNAL(canInsertItemAtSelection(bool)), action, SLOT(setEnabled(bool))); @@ -1404,7 +1415,6 @@ setupExistingLayersMenus(); -/*!!! These don't work correctly -- fix or omit menu->addSeparator(); action = new QAction(tr("Switch to Previous Layer"), this); @@ -1422,7 +1432,7 @@ connect(this, SIGNAL(canSelectNextLayer(bool)), action, SLOT(setEnabled(bool))); m_keyReference->registerShortcut(action); menu->addAction(action); -*/ + m_rightButtonLayerMenu->addSeparator(); menu->addSeparator(); @@ -2559,8 +2569,6 @@ } else if (selections.size() > 1) { - bool multiple = false; - if (!asData) { // Multi-file export not supported for data QStringList items; @@ -2977,7 +2985,7 @@ if (path.isEmpty()) return; - FileOpenStatus status = open(path, ReplaceSession); + FileOpenStatus status = openPath(path, ReplaceSession); if (status == FileOpenFailed) { emit hideSplash(); @@ -3009,7 +3017,7 @@ if (text.isEmpty()) return; - FileOpenStatus status = open(text, AskUser); + FileOpenStatus status = openPath(text, AskUser); if (status == FileOpenFailed) { emit hideSplash(); @@ -3037,7 +3045,7 @@ QString path = action->text(); if (path == "") return; - FileOpenStatus status = open(path, ReplaceSession); + FileOpenStatus status = openPath(path, ReplaceSession); if (status == FileOpenFailed) { emit hideSplash(); @@ -3165,9 +3173,9 @@ FileOpenStatus status; if (i == uriList.begin()) { - status = open(*i, ReplaceCurrentPane); + status = openPath(*i, ReplaceCurrentPane); } else { - status = open(*i, CreateAdditionalModel); + status = openPath(*i, CreateAdditionalModel); } if (status == FileOpenFailed) { @@ -3649,7 +3657,7 @@ cerr << "WARNING: MainWindow::addLayer: unknown model " << model << " (\"" - << (model ? model->objectName() : "") + << model->objectName() << "\") in layer action map" << endl; } @@ -4063,12 +4071,21 @@ NoteLayer *currentNoteLayer = 0; TimeValueLayer *currentTimeValueLayer = 0; - if (m_paneStack) currentPane = m_paneStack->getCurrentPane(); + if (m_paneStack) { + currentPane = m_paneStack->getCurrentPane(); + } + if (currentPane) { currentNoteLayer = dynamic_cast (currentPane->getSelectedLayer()); currentTimeValueLayer = dynamic_cast (currentPane->getSelectedLayer()); + } else { + // discard these events + while (m_midiInput->getEventsAvailable() > 0) { + (void)m_midiInput->readEvent(); + } + return; } // This is called through a serialised signal/slot invocation @@ -4125,10 +4142,14 @@ (tvm, point, tr("Add Point")); CommandHistory::getInstance()->addCommand(command); } + continue; - } + // This is reached only if !currentNoteLayer and + // !currentTimeValueLayer, i.e. there is some other sort of + // layer that may be insertable-into + if (!noteOn) continue; insertInstantAt(ev.getTime()); } diff -r fdc445e736a0 -r 4a7c62938a13 main/main.cpp --- a/main/main.cpp Mon Sep 01 13:44:36 2014 +0100 +++ b/main/main.cpp Wed Sep 10 09:54:49 2014 +0100 @@ -512,18 +512,18 @@ } if (status != MainWindow::FileOpenSucceeded) { if (!haveMainModel) { - status = m_mainWindow->open(path, MainWindow::ReplaceSession); + status = m_mainWindow->openPath(path, MainWindow::ReplaceSession); if (status == MainWindow::FileOpenSucceeded) { haveMainModel = true; } } else { if (haveSession && !havePriorCommandLineModel) { - status = m_mainWindow->open(path, MainWindow::AskUser); + status = m_mainWindow->openPath(path, MainWindow::AskUser); if (status == MainWindow::FileOpenSucceeded) { havePriorCommandLineModel = true; } } else { - status = m_mainWindow->open(path, MainWindow::CreateAdditionalModel); + status = m_mainWindow->openPath(path, MainWindow::CreateAdditionalModel); } } } diff -r fdc445e736a0 -r 4a7c62938a13 version.h --- a/version.h Mon Sep 01 13:44:36 2014 +0100 +++ b/version.h Wed Sep 10 09:54:49 2014 +0100 @@ -1,1 +1,1 @@ -#define SV_VERSION "2.3.90" +#define SV_VERSION "2.3.91"