sv1-commits Mailing List for Sonic Visualiser (Page 4)
Brought to you by:
cannam
You can subscribe to this list here.
2006 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(25) |
Oct
(57) |
Nov
(25) |
Dec
(11) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2007 |
Jan
(36) |
Feb
(34) |
Mar
(55) |
Apr
(41) |
May
(25) |
Jun
(27) |
Jul
(22) |
Aug
(16) |
Sep
(33) |
Oct
(52) |
Nov
(79) |
Dec
(28) |
2008 |
Jan
(27) |
Feb
(56) |
Mar
(38) |
Apr
(32) |
May
(22) |
Jun
(55) |
Jul
(48) |
Aug
(10) |
Sep
(23) |
Oct
(32) |
Nov
(56) |
Dec
(71) |
2009 |
Jan
(35) |
Feb
(61) |
Mar
(52) |
Apr
(3) |
May
(18) |
Jun
(24) |
Jul
(13) |
Aug
(20) |
Sep
(27) |
Oct
(29) |
Nov
|
Dec
(1) |
2010 |
Jan
(3) |
Feb
(5) |
Mar
(8) |
Apr
(1) |
May
(20) |
Jun
(15) |
Jul
(8) |
Aug
(4) |
Sep
(3) |
Oct
|
Nov
(1) |
Dec
|
2011 |
Jan
(3) |
Feb
(1) |
Mar
|
Apr
(9) |
May
|
Jun
|
Jul
|
Aug
(3) |
Sep
|
Oct
(3) |
Nov
(2) |
Dec
|
2012 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(1) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2013 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(2) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: <ca...@us...> - 2010-04-07 11:39:02
|
Revision: 1688 http://sv1.svn.sourceforge.net/sv1/?rev=1688&view=rev Author: cannam Date: 2010-04-07 11:38:56 +0000 (Wed, 07 Apr 2010) Log Message: ----------- * Add new video link from Matthias Modified Paths: -------------- website/videos.html Modified: website/videos.html =================================================================== --- website/videos.html 2010-03-16 13:05:18 UTC (rev 1687) +++ website/videos.html 2010-04-07 11:38:56 UTC (rev 1688) @@ -27,11 +27,30 @@ <h2 id="firstpara">Videos</h2> <table border=0 cellspacing=8 cellpadding=8> + <tr> <td valign=top> <object width="400" height="250"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" +value="http://vimeo.com/moogaloop.swf?clip_id=10436580&server=vimeo.com&show_title=1&show_byline=0&show_portrait=0&color=ef6a35&fullscreen=1" +/><embed +src="http://vimeo.com/moogaloop.swf?clip_id=10436580&server=vimeo.com&show_title=1&show_byline=0&show_portrait=0&color=ef6a35&fullscreen=1" +type="application/x-shockwave-flash" allowfullscreen="true" +allowscriptaccess="always" width="400" height="250"></embed></object> +</td> +<td valign=top><b>March 2010: A Sonic Visualiser chord labelling example</b><p>Matthias Mauch from the Centre for Digital Music at Queen Mary, University of London talks us through a simple example of labelling a song excerpt with chords in Sonic Visualiser. +</p><p> +Chord labelling can be useful for musicological purposes, or as a reference transcription to test automatic chord labelling algorithms. Or just for music-loving fun. +<br><br> +</td> +</tr> + +<tr> +<td valign=top> +<object width="400" height="250"><param name="allowfullscreen" +value="true" /><param name="allowscriptaccess" value="always" /><param +name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=9644153&server=vimeo.com&show_title=1&show_byline=0&show_portrait=0&color=ef6a35&fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=9644153&server=vimeo.com&show_title=1&show_byline=0&show_portrait=0&color=ef6a35&fullscreen=1" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ca...@us...> - 2010-03-12 15:34:24
|
Revision: 1686 http://sv1.svn.sourceforge.net/sv1/?rev=1686&view=rev Author: cannam Date: 2010-03-12 15:34:18 +0000 (Fri, 12 Mar 2010) Log Message: ----------- * Pop view progress bars back into "indeterminate" mode if they are not updated for a couple of seconds (useful for plugins with very active getRemainingFeatures()) Modified Paths: -------------- sonic-visualiser/trunk/audioio/AudioCallbackPlaySource.cpp sonic-visualiser/trunk/view/View.cpp sonic-visualiser/trunk/view/View.h Modified: sonic-visualiser/trunk/audioio/AudioCallbackPlaySource.cpp =================================================================== --- sonic-visualiser/trunk/audioio/AudioCallbackPlaySource.cpp 2010-03-12 15:06:38 UTC (rev 1685) +++ sonic-visualiser/trunk/audioio/AudioCallbackPlaySource.cpp 2010-03-12 15:34:18 UTC (rev 1686) @@ -394,7 +394,9 @@ startFrame = m_viewManager->alignReferenceToPlaybackFrame(startFrame); +#ifdef DEBUG_AUDIO_PLAY_SOURCE std::cerr << startFrame << std::endl; +#endif // The fill thread will automatically empty its buffers before // starting again if we have not so far been playing, but not if Modified: sonic-visualiser/trunk/view/View.cpp =================================================================== --- sonic-visualiser/trunk/view/View.cpp 2010-03-12 15:06:38 UTC (rev 1685) +++ sonic-visualiser/trunk/view/View.cpp 2010-03-12 15:34:18 UTC (rev 1686) @@ -531,22 +531,27 @@ m_layers.push_back(layer); -// m_progressBars[layer] = new LayerProgressBar(this); - m_progressBars[layer] = new QProgressBar(this); - m_progressBars[layer]->setMinimum(0); - m_progressBars[layer]->setMaximum(0); -// m_progressBars[layer]->setMaximum(100); -// m_progressBars[layer]->setMinimumWidth(80); - m_progressBars[layer]->setFixedWidth(80); -// m_progressBars[layer]->setText(""); //!!! - m_progressBars[layer]->setTextVisible(false); + QProgressBar *pb = new QProgressBar(this); + pb->setMinimum(0); + pb->setMaximum(0); + pb->setFixedWidth(80); + pb->setTextVisible(false); - QFont f(m_progressBars[layer]->font()); + ProgressBarRec pbr; + pbr.bar = pb; + pbr.lastCheck = 0; + pbr.checkTimer = new QTimer(); + connect(pbr.checkTimer, SIGNAL(timeout()), this, + SLOT(progressCheckStalledTimerElapsed())); + + m_progressBars[layer] = pbr; + + QFont f(pb->font()); int fs = Preferences::getInstance()->getViewFontSize(); f.setPointSize(std::min(fs, int(ceil(fs * 0.85)))); - m_progressBars[layer]->setFont(f); - m_progressBars[layer]->hide(); + pb->setFont(f); + pb->hide(); connect(layer, SIGNAL(layerParametersChanged()), this, SLOT(layerParametersChanged())); @@ -586,7 +591,8 @@ if (*i == layer) { m_layers.erase(i); if (m_progressBars.find(layer) != m_progressBars.end()) { - delete m_progressBars[layer]; + delete m_progressBars[layer].bar; + delete m_progressBars[layer].checkTimer; m_progressBars.erase(layer); } break; @@ -1406,11 +1412,18 @@ int ph = height(); - for (ProgressMap::const_iterator i = m_progressBars.begin(); + for (ProgressMap::iterator i = m_progressBars.begin(); i != m_progressBars.end(); ++i) { + QProgressBar *pb = i->second.bar; + if (i->first == object) { + // The timer is used to test for stalls. If the progress + // bar does not get updated for some length of time, the + // timer prompts it to go back into "indeterminate" mode + QTimer *timer = i->second.checkTimer; + int completion = i->first->getCompletion(this); QString text = i->first->getPropertyContainerName(); @@ -1419,7 +1432,7 @@ dynamic_cast<RangeSummarisableTimeValueModel *>(model); if (completion > 0) { - i->second->setMaximum(100); // was 0, for indeterminate start + pb->setMaximum(100); // was 0, for indeterminate start } if (completion >= 100) { @@ -1441,34 +1454,62 @@ if (completion >= 100) { - i->second->hide(); + pb->hide(); + timer->stop(); } else { -// i->second->setText(text); +// std::cerr << "progress = " << completion << std::endl; - i->second->setValue(completion); - i->second->move(0, ph - i->second->height()); + if (!pb->isVisible()) { + i->second.lastCheck = 0; + timer->setInterval(2000); + timer->start(); + } - i->second->show(); - i->second->update(); + pb->setValue(completion); + pb->move(0, ph - pb->height()); - ph -= i->second->height(); + pb->show(); + pb->update(); + + ph -= pb->height(); } } else { - if (i->second->isVisible()) { - ph -= i->second->height(); + if (pb->isVisible()) { + ph -= pb->height(); } } } } +void +View::progressCheckStalledTimerElapsed() +{ + QObject *s = sender(); + QTimer *t = qobject_cast<QTimer *>(s); + if (!t) return; + for (ProgressMap::iterator i = m_progressBars.begin(); + i != m_progressBars.end(); ++i) { + if (i->second.checkTimer == t) { + int value = i->second.bar->value(); + if (value > 0 && value == i->second.lastCheck) { + i->second.bar->setMaximum(0); // indeterminate + } + i->second.lastCheck = value; + return; + } + } +} + int View::getProgressBarWidth() const { for (ProgressMap::const_iterator i = m_progressBars.begin(); i != m_progressBars.end(); ++i) { - if (i->second && i->second->isVisible()) return i->second->width(); + if (i->second.bar && i->second.bar->isVisible()) { + return i->second.bar->width(); + } } return 0; Modified: sonic-visualiser/trunk/view/View.h =================================================================== --- sonic-visualiser/trunk/view/View.h 2010-03-12 15:06:38 UTC (rev 1685) +++ sonic-visualiser/trunk/view/View.h 2010-03-12 15:34:18 UTC (rev 1686) @@ -305,6 +305,8 @@ virtual void overlayModeChanged(); virtual void zoomWheelsEnabledChanged(); + virtual void progressCheckStalledTimerElapsed(); + protected: View(QWidget *, bool showProgress); virtual void paintEvent(QPaintEvent *e); @@ -373,8 +375,12 @@ QString m_text; }; -// typedef std::map<Layer *, LayerProgressBar *> ProgressMap; - typedef std::map<Layer *, QProgressBar *> ProgressMap; + struct ProgressBarRec { + QProgressBar *bar; + int lastCheck; + QTimer *checkTimer; + }; + typedef std::map<Layer *, ProgressBarRec> ProgressMap; ProgressMap m_progressBars; // I own the ProgressBars ViewManager *m_manager; // I don't own this This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ca...@us...> - 2010-03-12 15:06:44
|
Revision: 1685 http://sv1.svn.sourceforge.net/sv1/?rev=1685&view=rev Author: cannam Date: 2010-03-12 15:06:38 +0000 (Fri, 12 Mar 2010) Log Message: ----------- ... Modified Paths: -------------- sonic-visualiser/trunk/data/data.pro Modified: sonic-visualiser/trunk/data/data.pro =================================================================== --- sonic-visualiser/trunk/data/data.pro 2010-03-12 14:53:44 UTC (rev 1684) +++ sonic-visualiser/trunk/data/data.pro 2010-03-12 15:06:38 UTC (rev 1685) @@ -99,7 +99,6 @@ fileio/CSVFileWriter.cpp \ fileio/CSVFormat.cpp \ fileio/DataFileReaderFactory.cpp \ - fileio/FileFinder.cpp \ fileio/FileReadThread.cpp \ fileio/FileSource.cpp \ fileio/MatchFileReader.cpp \ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ca...@us...> - 2010-03-12 14:53:50
|
Revision: 1684 http://sv1.svn.sourceforge.net/sv1/?rev=1684&view=rev Author: cannam Date: 2010-03-12 14:53:44 +0000 (Fri, 12 Mar 2010) Log Message: ----------- * Fix potential static initialiser race (FileFinder vs InteractiveFileFinder instance pointers) Modified Paths: -------------- sonic-visualiser/trunk/data/fileio/FileFinder.h Removed Paths: ------------- sonic-visualiser/trunk/data/fileio/FileFinder.cpp Deleted: sonic-visualiser/trunk/data/fileio/FileFinder.cpp =================================================================== --- sonic-visualiser/trunk/data/fileio/FileFinder.cpp 2010-03-12 13:13:06 UTC (rev 1683) +++ sonic-visualiser/trunk/data/fileio/FileFinder.cpp 2010-03-12 14:53:44 UTC (rev 1684) @@ -1,20 +0,0 @@ -/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ - -/* - Sonic Visualiser - An audio file viewer and annotation editor. - Centre for Digital Music, Queen Mary, University of London. - This file copyright 2009 QMUL. - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License as - published by the Free Software Foundation; either version 2 of the - License, or (at your option) any later version. See the file - COPYING included with this distribution for more information. -*/ - -#include "FileFinder.h" - -FileFinder * -FileFinder::m_instance = 0; - Modified: sonic-visualiser/trunk/data/fileio/FileFinder.h =================================================================== --- sonic-visualiser/trunk/data/fileio/FileFinder.h 2010-03-12 13:13:06 UTC (rev 1683) +++ sonic-visualiser/trunk/data/fileio/FileFinder.h 2010-03-12 14:53:44 UTC (rev 1684) @@ -37,11 +37,28 @@ virtual QString find(FileType type, QString location, QString lastKnownLocation = "") = 0; - static FileFinder *getInstance() { return m_instance; } + static FileFinder *getInstance() { + FFContainer *container = FFContainer::getInstance(); + return container->getFileFinder(); + } protected: - static void registerFileFinder(FileFinder *ff) { m_instance = ff; } - static FileFinder *m_instance; + class FFContainer { + public: + static FFContainer *getInstance() { + static FFContainer instance; + return &instance; + } + void setFileFinder(FileFinder *ff) { m_ff = ff; } + FileFinder *getFileFinder() const { return m_ff; } + private: + FileFinder *m_ff; + }; + + static void registerFileFinder(FileFinder *ff) { + FFContainer *container = FFContainer::getInstance(); + container->setFileFinder(ff); + } }; #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ca...@us...> - 2010-03-12 13:13:12
|
Revision: 1683 http://sv1.svn.sourceforge.net/sv1/?rev=1683&view=rev Author: cannam Date: 2010-03-12 13:13:06 +0000 (Fri, 12 Mar 2010) Log Message: ----------- * Be more diligent about removing abandoned temporary directories: remove directories that have no .pid files Modified Paths: -------------- sonic-visualiser/trunk/base/TempDirectory.cpp Modified: sonic-visualiser/trunk/base/TempDirectory.cpp =================================================================== --- sonic-visualiser/trunk/base/TempDirectory.cpp 2010-03-12 13:03:53 UTC (rev 1682) +++ sonic-visualiser/trunk/base/TempDirectory.cpp 2010-03-12 13:13:06 UTC (rev 1683) @@ -248,8 +248,18 @@ for (unsigned int i = 0; i < dir.count(); ++i) { - QDir subdir(dir.filePath(dir[i]), "*.pid", QDir::Name, QDir::Files); + QString dirpath = dir.filePath(dir[i]); + QDir subdir(dirpath, "*.pid", QDir::Name, QDir::Files); + + if (subdir.count() == 0) { + std::cerr << "INFO: Found temporary directory with no .pid file in it!\n(directory=\"" + << dirpath.toStdString() << "\"). Removing it..." << std::endl; + cleanupDirectory(dirpath); + std::cerr << "...done." << std::endl; + continue; + } + for (unsigned int j = 0; j < subdir.count(); ++j) { bool ok = false; @@ -260,9 +270,9 @@ std::cerr << "INFO: Found abandoned temporary directory from " << "a previous, defunct process\n(pid=" << pid << ", directory=\"" - << dir.filePath(dir[i]).toStdString() + << dirpath.toStdString() << "\"). Removing it..." << std::endl; - cleanupDirectory(dir.filePath(dir[i])); + cleanupDirectory(dirpath); std::cerr << "...done." << std::endl; break; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ca...@us...> - 2010-03-12 13:04:00
|
Revision: 1682 http://sv1.svn.sourceforge.net/sv1/?rev=1682&view=rev Author: cannam Date: 2010-03-12 13:03:53 +0000 (Fri, 12 Mar 2010) Log Message: ----------- * Simpler & better fix for oggz 1.1.0 compatibility Modified Paths: -------------- sonic-visualiser/trunk/data/fileio/OggVorbisFileReader.cpp sonic-visualiser/trunk/data/fileio/OggVorbisFileReader.h Modified: sonic-visualiser/trunk/data/fileio/OggVorbisFileReader.cpp =================================================================== --- sonic-visualiser/trunk/data/fileio/OggVorbisFileReader.cpp 2010-03-12 12:08:21 UTC (rev 1681) +++ sonic-visualiser/trunk/data/fileio/OggVorbisFileReader.cpp 2010-03-12 13:03:53 UTC (rev 1682) @@ -66,7 +66,7 @@ m_fishSound = fish_sound_new(FISH_SOUND_DECODE, &fsinfo); fish_sound_set_decoded_callback(m_fishSound, acceptFrames, this); - oggz_set_read_callback(m_oggz, -1, readPacket, this); + oggz_set_read_callback(m_oggz, -1, (OggzReadPacket)readPacket, this); if (decodeMode == DecodeAtOnce) { @@ -138,15 +138,15 @@ } int -OggVorbisFileReader::readPacket(OGGZ *, oggz_packet *packet, long, void *data) +OggVorbisFileReader::readPacket(OGGZ *, ogg_packet *packet, long, void *data) { OggVorbisFileReader *reader = (OggVorbisFileReader *)data; FishSound *fs = reader->m_fishSound; - fish_sound_prepare_truncation(fs, packet->op.granulepos, packet->op.e_o_s); - fish_sound_decode(fs, packet->op.packet, packet->op.bytes); + fish_sound_prepare_truncation(fs, packet->granulepos, packet->e_o_s); + fish_sound_decode(fs, packet->packet, packet->bytes); - reader->m_bytesRead += packet->op.bytes; + reader->m_bytesRead += packet->bytes; // The number of bytes read by this function is smaller than // the file size because of the packet headers Modified: sonic-visualiser/trunk/data/fileio/OggVorbisFileReader.h =================================================================== --- sonic-visualiser/trunk/data/fileio/OggVorbisFileReader.h 2010-03-12 12:08:21 UTC (rev 1681) +++ sonic-visualiser/trunk/data/fileio/OggVorbisFileReader.h 2010-03-12 13:03:53 UTC (rev 1682) @@ -82,7 +82,7 @@ bool m_cancelled; int m_completion; - static int readPacket(OGGZ *, oggz_packet *, long, void *); + static int readPacket(OGGZ *, ogg_packet *, long, void *); static int acceptFrames(FishSound *, float **, long, void *); class DecodeThread : public Thread This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ca...@us...> - 2010-03-12 12:08:27
|
Revision: 1681 http://sv1.svn.sourceforge.net/sv1/?rev=1681&view=rev Author: cannam Date: 2010-03-12 12:08:21 +0000 (Fri, 12 Mar 2010) Log Message: ----------- * Commit old fix (which I hope was correct!) to avoid leaking fds on exceptions * Remove dependency on audioio library Modified Paths: -------------- sonic-annotator/trunk/runner/FeatureExtractionManager.cpp sonic-annotator/trunk/runner/FeatureExtractionManager.h sonic-annotator/trunk/runner/runner.pro sonic-annotator/trunk/sonic-annotator.pro Modified: sonic-annotator/trunk/runner/FeatureExtractionManager.cpp =================================================================== --- sonic-annotator/trunk/runner/FeatureExtractionManager.cpp 2010-03-12 12:04:39 UTC (rev 1680) +++ sonic-annotator/trunk/runner/FeatureExtractionManager.cpp 2010-03-12 12:08:21 UTC (rev 1681) @@ -383,6 +383,8 @@ { if (m_plugins.empty()) return; + testOutputFiles(audioSource); + ProgressPrinter retrievalProgress("Retrieving audio data..."); FileSource source(audioSource, &retrievalProgress); @@ -429,6 +431,7 @@ // reject file if it has too few channels, plugin will handle if it has too many if ((int)channels < m_channels) { + delete reader; throw FileOperationFailed (audioSource, QString("read sufficient channels (found %1, require %2)") @@ -440,6 +443,24 @@ for (int c = 0; c < m_channels; ++c) { data[c] = new float[m_blockSize]; } + + struct LifespanMgr { // unintrusive hack introduced to ensure + // destruction on exceptions + AudioFileReader *m_r; + int m_c; + float **m_d; + LifespanMgr(AudioFileReader *r, int c, float **d) : + m_r(r), m_c(c), m_d(d) { } + ~LifespanMgr() { destroy(); } + void destroy() { + if (!m_r) return; + delete m_r; + for (int i = 0; i < m_c; ++i) delete[] m_d[i]; + delete[] m_d; + m_r = 0; + } + }; + LifespanMgr lifemgr(reader, m_channels, data); size_t frameCount = reader->getFrameCount(); @@ -593,7 +614,7 @@ // std::cerr << "FeatureExtractionManager: deleting audio file reader" << std::endl; - delete reader; + lifemgr.destroy(); // deletes reader, data for (PluginMap::iterator pi = m_plugins.begin(); pi != m_plugins.end(); ++pi) { @@ -722,6 +743,23 @@ } } +void FeatureExtractionManager::testOutputFiles(QString audioSource) +{ + for (PluginMap::iterator pi = m_plugins.begin(); + pi != m_plugins.end(); ++pi) { + + for (TransformWriterMap::iterator ti = pi->second.begin(); + ti != pi->second.end(); ++ti) { + + vector<FeatureWriter *> &writers = ti->second; + + for (int i = 0; i < (int)writers.size(); ++i) { + writers[i]->testOutputFile(audioSource, ti->first.getIdentifier()); + } + } + } +} + void FeatureExtractionManager::finish() { for (PluginMap::iterator pi = m_plugins.begin(); Modified: sonic-annotator/trunk/runner/FeatureExtractionManager.h =================================================================== --- sonic-annotator/trunk/runner/FeatureExtractionManager.h 2010-03-12 12:04:39 UTC (rev 1680) +++ sonic-annotator/trunk/runner/FeatureExtractionManager.h 2010-03-12 12:08:21 UTC (rev 1681) @@ -97,6 +97,8 @@ const Vamp::Plugin::FeatureSet &, Transform::SummaryType summaryType = Transform::NoSummary); + + void testOutputFiles(QString audioSource); void finish(); int m_blockSize; Modified: sonic-annotator/trunk/runner/runner.pro =================================================================== --- sonic-annotator/trunk/runner/runner.pro 2010-03-12 12:04:39 UTC (rev 1680) +++ sonic-annotator/trunk/runner/runner.pro 2010-03-12 12:08:21 UTC (rev 1681) @@ -28,17 +28,15 @@ DEPENDPATH += . .. i18n main INCLUDEPATH += . .. main -LIBPATH = ../audioio ../data ../plugin ../rdf ../transform ../base ../system $$LIBPATH +LIBPATH = ../data ../plugin ../rdf ../transform ../base ../system $$LIBPATH QMAKE_CXXFLAGS_RELEASE += -fmessage-length=80 -fdiagnostics-show-location=every-line contains(DEFINES, BUILD_STATIC):LIBS -= -ljack -#LIBS = -lsvaudioio -lsvdata -lsvtransform -lsvplugin -lsvrdf -lsvbase -lsvsystem $$LIBS LIBS = -lsvdata -lsvtransform -lsvplugin -lsvrdf -lsvdata -lsvbase -lsvsystem $$LIBS -PRE_TARGETDEPS += ../audioio/libsvaudioio.a \ - ../data/libsvdata.a \ +PRE_TARGETDEPS += ../data/libsvdata.a \ ../transform/libsvtransform.a \ ../plugin/libsvplugin.a \ ../rdf/libsvrdf.a \ Modified: sonic-annotator/trunk/sonic-annotator.pro =================================================================== --- sonic-annotator/trunk/sonic-annotator.pro 2010-03-12 12:04:39 UTC (rev 1680) +++ sonic-annotator/trunk/sonic-annotator.pro 2010-03-12 12:08:21 UTC (rev 1681) @@ -1,6 +1,6 @@ TEMPLATE = subdirs -SUBDIRS = audioio base data plugin rdf system transform runner +SUBDIRS = base data plugin rdf system transform runner This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ca...@us...> - 2010-03-12 12:04:48
|
Revision: 1680 http://sv1.svn.sourceforge.net/sv1/?rev=1680&view=rev Author: cannam Date: 2010-03-12 12:04:39 +0000 (Fri, 12 Mar 2010) Log Message: ----------- * Update for oggz 1.1.0 API Modified Paths: -------------- sonic-visualiser/trunk/data/fileio/OggVorbisFileReader.cpp sonic-visualiser/trunk/data/fileio/OggVorbisFileReader.h Modified: sonic-visualiser/trunk/data/fileio/OggVorbisFileReader.cpp =================================================================== --- sonic-visualiser/trunk/data/fileio/OggVorbisFileReader.cpp 2010-02-23 11:28:32 UTC (rev 1679) +++ sonic-visualiser/trunk/data/fileio/OggVorbisFileReader.cpp 2010-03-12 12:04:39 UTC (rev 1680) @@ -138,15 +138,15 @@ } int -OggVorbisFileReader::readPacket(OGGZ *, ogg_packet *packet, long, void *data) +OggVorbisFileReader::readPacket(OGGZ *, oggz_packet *packet, long, void *data) { OggVorbisFileReader *reader = (OggVorbisFileReader *)data; FishSound *fs = reader->m_fishSound; - fish_sound_prepare_truncation(fs, packet->granulepos, packet->e_o_s); - fish_sound_decode(fs, packet->packet, packet->bytes); + fish_sound_prepare_truncation(fs, packet->op.granulepos, packet->op.e_o_s); + fish_sound_decode(fs, packet->op.packet, packet->op.bytes); - reader->m_bytesRead += packet->bytes; + reader->m_bytesRead += packet->op.bytes; // The number of bytes read by this function is smaller than // the file size because of the packet headers Modified: sonic-visualiser/trunk/data/fileio/OggVorbisFileReader.h =================================================================== --- sonic-visualiser/trunk/data/fileio/OggVorbisFileReader.h 2010-02-23 11:28:32 UTC (rev 1679) +++ sonic-visualiser/trunk/data/fileio/OggVorbisFileReader.h 2010-03-12 12:04:39 UTC (rev 1680) @@ -82,7 +82,7 @@ bool m_cancelled; int m_completion; - static int readPacket(OGGZ *, ogg_packet *, long, void *); + static int readPacket(OGGZ *, oggz_packet *, long, void *); static int acceptFrames(FishSound *, float **, long, void *); class DecodeThread : public Thread This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ca...@us...> - 2010-02-23 11:28:38
|
Revision: 1679 http://sv1.svn.sourceforge.net/sv1/?rev=1679&view=rev Author: cannam Date: 2010-02-23 11:28:32 +0000 (Tue, 23 Feb 2010) Log Message: ----------- ... Modified Paths: -------------- website/videos.html Modified: website/videos.html =================================================================== --- website/videos.html 2010-02-23 11:24:46 UTC (rev 1678) +++ website/videos.html 2010-02-23 11:28:32 UTC (rev 1679) @@ -40,7 +40,7 @@ </td> <td valign=top><b>February 2010: A Sonic Visualiser audio and data visualisation example</b><p>Matthias Mauch from the Centre for Digital Music at Queen Mary, University of London talks us through a simple example of loading an audio file and some associated data into Sonic Visualiser and looking at the results. </p><p> -This example is drawn directly from Matthias's everyday use in research on audio chord transcription. Note that the data shown here was calculated by a separate program and is simply loaded (from text files) for inspection in SV, rather than being calculated within the application. For information about the chord transcription method, see <a href="http://matthiasmauch.net/index.php?sub=scien">Matthias's research</a>. +This example is drawn directly from Matthias's everyday use in research on audio chord transcription. Note that the data shown here was calculated by a separate program and is simply loaded (from text files) for inspection in SV, rather than being calculated within the application. For information about the chord transcription and segmentation methods, see <a href="http://matthiasmauch.net/index.php?sub=scien">Matthias's research</a>. <br><br> </td> </tr> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ca...@us...> - 2010-02-23 11:24:52
|
Revision: 1678 http://sv1.svn.sourceforge.net/sv1/?rev=1678&view=rev Author: cannam Date: 2010-02-23 11:24:46 +0000 (Tue, 23 Feb 2010) Log Message: ----------- * link to matthias's page Modified Paths: -------------- website/videos.html Modified: website/videos.html =================================================================== --- website/videos.html 2010-02-23 10:36:22 UTC (rev 1677) +++ website/videos.html 2010-02-23 11:24:46 UTC (rev 1678) @@ -40,7 +40,7 @@ </td> <td valign=top><b>February 2010: A Sonic Visualiser audio and data visualisation example</b><p>Matthias Mauch from the Centre for Digital Music at Queen Mary, University of London talks us through a simple example of loading an audio file and some associated data into Sonic Visualiser and looking at the results. </p><p> -This example is drawn directly from Matthias's everyday use in research on audio chord transcription. Note that the data shown here was calculated by a research procedure elsewhere and is simply loaded (from text files) for inspection in SV, rather than being calculated within the application. +This example is drawn directly from Matthias's everyday use in research on audio chord transcription. Note that the data shown here was calculated by a separate program and is simply loaded (from text files) for inspection in SV, rather than being calculated within the application. For information about the chord transcription method, see <a href="http://matthiasmauch.net/index.php?sub=scien">Matthias's research</a>. <br><br> </td> </tr> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ca...@us...> - 2010-02-23 10:36:28
|
Revision: 1677 http://sv1.svn.sourceforge.net/sv1/?rev=1677&view=rev Author: cannam Date: 2010-02-23 10:36:22 +0000 (Tue, 23 Feb 2010) Log Message: ----------- * Make the videos page nicer Modified Paths: -------------- website/videos.html Modified: website/videos.html =================================================================== --- website/videos.html 2010-02-22 16:36:12 UTC (rev 1676) +++ website/videos.html 2010-02-23 10:36:22 UTC (rev 1677) @@ -26,6 +26,9 @@ <h2 id="firstpara">Videos</h2> +<table border=0 cellspacing=8 cellpadding=8> +<tr> +<td valign=top> <object width="400" height="250"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" @@ -34,7 +37,16 @@ src="http://vimeo.com/moogaloop.swf?clip_id=9644153&server=vimeo.com&show_title=1&show_byline=0&show_portrait=0&color=ef6a35&fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="250"></embed></object> +</td> +<td valign=top><b>February 2010: A Sonic Visualiser audio and data visualisation example</b><p>Matthias Mauch from the Centre for Digital Music at Queen Mary, University of London talks us through a simple example of loading an audio file and some associated data into Sonic Visualiser and looking at the results. +</p><p> +This example is drawn directly from Matthias's everyday use in research on audio chord transcription. Note that the data shown here was calculated by a research procedure elsewhere and is simply loaded (from text files) for inspection in SV, rather than being calculated within the application. +<br><br> +</td> +</tr> +<tr> +<td valign=top> <object width="400" height="250"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" @@ -43,17 +55,32 @@ src="http://vimeo.com/moogaloop.swf?clip_id=3310893&server=vimeo.com&show_title=1&show_byline=0&show_portrait=0&color=ef6a35&fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="250"></embed></object> +</td> +<td valign=top><b>February 2009: Audio alignment using Sonic Visualiser and MATCH</b><p>An example of automatic alignment of audio for the purpose of comparing recordings, using Sonic Visualiser with the MATCH audio alignment plugin. This is an example with three different historical recordings of the same classical work. +</p><p> +The three audio recordings are loaded, and are first played all together (cacophonously, because they have quite different timing), then solo'ed but unaligned. Then we hit the magic Align button which calculates a time-alignment, and play again with alignment, switching between tracks at will while remaining at the same point in the underlying musical score. +<br><br> +</tr> - <ul> - <li><a href="http://vimeo.com/9644153">An audio and data visualisation example</a> from Matthias Mauch.</li> - <li><a href="http://vimeo.com/3310893">An example of audio alignment using MATCH</a>.</li> - <li><a href="/doc/demo/en/sv-demo.html">A demo video</a>.<br>This video uses Ron Parker's mix of Cold Duck - played by the Terrace Martin Trio, taken from the tutorial <a - href="http://jamin.sourceforge.net/en/tutorial.html">Mastering - with JAMin and Ardour</a>. The video is large (about 50MB) and - some browsers (or browser plugins) have trouble playing - the whole thing from the network. It may be better to save the - .swf file (the raw video) to your hard disc and play it from there.</li> - </ul> +<tr> +<td valign=top> +<object width="400" height="250"><param name="allowfullscreen" +value="true" /><param name="allowscriptaccess" value="always" /><param +name="movie" +value="http://vimeo.com/moogaloop.swf?clip_id=9648622&server=vimeo.com&show_title=1&show_byline=0&show_portrait=0&color=ef6a35&fullscreen=1" +/><embed +src="http://vimeo.com/moogaloop.swf?clip_id=9648622&server=vimeo.com&show_title=1&show_byline=0&show_portrait=0&color=ef6a35&fullscreen=1" +type="application/x-shockwave-flash" allowfullscreen="true" +allowscriptaccess="always" width="400" height="250"></embed></object> +</td> +<td valign=top><b>December 2006: Sonic Visualiser runthrough</b><p>A quick tour (with sound, but no narration) of some of the features of Sonic Visualiser. +</p><p> +The music is Ron Parker's mix of "Cold Duck" played by the Terrace Martin Trio, taken from the tutorial <a href="jamin.sourceforge.net/en/tutorial.html">Mastering with JAMin and Ardour</a>. +</p><p>This video dates from the end of 2006, covering Sonic Visualiser 1.0. Some occasional audio dropouts seem to have appeared during conversion: sorry about that. The video quality wasn't all that great to start with, but this is a nice outline — and the music's good! +</td> +<br><br> +</tr> + +</table> </body> </html> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ca...@us...> - 2010-02-22 16:36:18
|
Revision: 1676 http://sv1.svn.sourceforge.net/sv1/?rev=1676&view=rev Author: cannam Date: 2010-02-22 16:36:12 +0000 (Mon, 22 Feb 2010) Log Message: ----------- * New page for videos Modified Paths: -------------- website/community.html website/documentation.html website/download.html website/features.html website/index.html website/screenshots.html Added Paths: ----------- website/videos.html Modified: website/community.html =================================================================== --- website/community.html 2010-02-22 16:13:00 UTC (rev 1675) +++ website/community.html 2010-02-22 16:36:12 UTC (rev 1676) @@ -21,6 +21,7 @@ <li><a href="download.html">Download</a></li> <li><a href="community.html">Community</a></li> <li><a href="documentation.html">Documentation</a></li> + <li><a href="videos.html">Videos</a></li> <li><a href="http://www.vamp-plugins.org/">Vamp Plugins</a></li> </ul></div> Modified: website/documentation.html =================================================================== --- website/documentation.html 2010-02-22 16:13:00 UTC (rev 1675) +++ website/documentation.html 2010-02-22 16:36:12 UTC (rev 1676) @@ -20,6 +20,7 @@ <li><a href="download.html">Download</a></li> <li><a href="community.html">Community</a></li> <li><a href="documentation.html">Documentation</a></li> + <li><a href="videos.html">Videos</a></li> <li><a href="http://www.vamp-plugins.org/">Vamp Plugins</a></li> </ul></div> @@ -42,18 +43,11 @@ <li>A tutorial on <a href="doc/tutorial/en/sv-alignment.pdf">aligning different performances using the MATCH plugin</a>.</li> <li>A brief tutorial on <a href="doc/tutorial/en/selections-inspection.html">using selections and looping</a>.</li> </ul> + <h3>Videos</h3> - <ul> - <li><a href="http://vimeo.com/9644153">An audio and data visualisation example</a> from Matthias Mauch.</li> - <li><a href="http://vimeo.com/3310893">An example of audio alignment using MATCH</a>.</li> - <li><a href="/doc/demo/en/sv-demo.html">A demo video</a>.<br>This video uses Ron Parker's mix of Cold Duck - played by the Terrace Martin Trio, taken from the tutorial <a - href="http://jamin.sourceforge.net/en/tutorial.html">Mastering - with JAMin and Ardour</a>. The video is large (about 50MB) and - some browsers (or browser plugins) have trouble playing - the whole thing from the network. It may be better to save the - .swf file (the raw video) to your hard disc and play it from there.</li> - </ul> + + <ul><li>For tutorial and demo videos, see the <a href="videos.html">videos page</a>.</li></ul> + <h3>For Developers</h3> <ul> <li>For all developer and technical documentation, please see the <a href="community.html">community page</a>. Modified: website/download.html =================================================================== --- website/download.html 2010-02-22 16:13:00 UTC (rev 1675) +++ website/download.html 2010-02-22 16:36:12 UTC (rev 1676) @@ -20,6 +20,7 @@ <li><a href="download.html">Download</a></li> <li><a href="community.html">Community</a></li> <li><a href="documentation.html">Documentation</a></li> + <li><a href="videos.html">Videos</a></li> <li><a href="http://www.vamp-plugins.org/">Vamp Plugins</a></li> </ul></div> Modified: website/features.html =================================================================== --- website/features.html 2010-02-22 16:13:00 UTC (rev 1675) +++ website/features.html 2010-02-22 16:36:12 UTC (rev 1676) @@ -20,6 +20,7 @@ <li><a href="download.html">Download</a></li> <li><a href="community.html">Community</a></li> <li><a href="documentation.html">Documentation</a></li> + <li><a href="videos.html">Videos</a></li> <li><a href="http://www.vamp-plugins.org/">Vamp Plugins</a></li> </ul></div> Modified: website/index.html =================================================================== --- website/index.html 2010-02-22 16:13:00 UTC (rev 1675) +++ website/index.html 2010-02-22 16:36:12 UTC (rev 1676) @@ -20,6 +20,7 @@ <li><a href="download.html">Download</a></li> <li><a href="community.html">Community</a></li> <li><a href="documentation.html">Documentation</a></li> + <li><a href="videos.html">Videos</a></li> <li><a href="http://www.vamp-plugins.org/">Vamp Plugins</a></li> </ul></div> Modified: website/screenshots.html =================================================================== --- website/screenshots.html 2010-02-22 16:13:00 UTC (rev 1675) +++ website/screenshots.html 2010-02-22 16:36:12 UTC (rev 1676) @@ -20,6 +20,7 @@ <li><a href="download.html">Download</a></li> <li><a href="community.html">Community</a></li> <li><a href="documentation.html">Documentation</a></li> + <li><a href="videos.html">Videos</a></li> <li><a href="http://www.vamp-plugins.org/">Vamp Plugins</a></li> </ul></div> Added: website/videos.html =================================================================== --- website/videos.html (rev 0) +++ website/videos.html 2010-02-22 16:36:12 UTC (rev 1676) @@ -0,0 +1,59 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> + <head> + <link rel="stylesheet" media="screen" type="text/css" href="screen.css"/> + <link rel="icon" type="image/png" href="images/waveform.png"/> + <link rel="shortcut" type="image/png" href="images/waveform.png"/> + <title>Sonic Visualiser</title> + <meta name="robots" content="index"/> + <meta name="keywords" content="sonic visualiser visualizer visualise visualize audio music spectrogram feature extraction"/> + <meta name="description" content="Sonic Visualiser is a program for viewing and analysing the contents of music audio files."/> + </head> + <body> + <h1 id="header"><span>Sonic Visualiser</span></h1> + + <div id="nav"> + <ul> + <li class="first"><a href="index.html">Home</a></li> + <li><a href="features.html">Features</a></li> + <li><a href="screenshots.html">Screenshots</a></li> + <li><a href="download.html">Download</a></li> + <li><a href="community.html">Community</a></li> + <li><a href="documentation.html">Documentation</a></li> + <li><a href="videos.html">Videos</a></li> + <li><a href="http://www.vamp-plugins.org/">Vamp Plugins</a></li> + </ul></div> + + <h2 id="firstpara">Videos</h2> + +<object width="400" height="250"><param name="allowfullscreen" +value="true" /><param name="allowscriptaccess" value="always" /><param +name="movie" +value="http://vimeo.com/moogaloop.swf?clip_id=9644153&server=vimeo.com&show_title=1&show_byline=0&show_portrait=0&color=ef6a35&fullscreen=1" +/><embed +src="http://vimeo.com/moogaloop.swf?clip_id=9644153&server=vimeo.com&show_title=1&show_byline=0&show_portrait=0&color=ef6a35&fullscreen=1" +type="application/x-shockwave-flash" allowfullscreen="true" +allowscriptaccess="always" width="400" height="250"></embed></object> + +<object width="400" height="250"><param name="allowfullscreen" +value="true" /><param name="allowscriptaccess" value="always" /><param +name="movie" +value="http://vimeo.com/moogaloop.swf?clip_id=3310893&server=vimeo.com&show_title=1&show_byline=0&show_portrait=0&color=ef6a35&fullscreen=1" +/><embed +src="http://vimeo.com/moogaloop.swf?clip_id=3310893&server=vimeo.com&show_title=1&show_byline=0&show_portrait=0&color=ef6a35&fullscreen=1" +type="application/x-shockwave-flash" allowfullscreen="true" +allowscriptaccess="always" width="400" height="250"></embed></object> + + <ul> + <li><a href="http://vimeo.com/9644153">An audio and data visualisation example</a> from Matthias Mauch.</li> + <li><a href="http://vimeo.com/3310893">An example of audio alignment using MATCH</a>.</li> + <li><a href="/doc/demo/en/sv-demo.html">A demo video</a>.<br>This video uses Ron Parker's mix of Cold Duck + played by the Terrace Martin Trio, taken from the tutorial <a + href="http://jamin.sourceforge.net/en/tutorial.html">Mastering + with JAMin and Ardour</a>. The video is large (about 50MB) and + some browsers (or browser plugins) have trouble playing + the whole thing from the network. It may be better to save the + .swf file (the raw video) to your hard disc and play it from there.</li> + </ul> + </body> +</html> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ca...@us...> - 2010-02-22 16:13:07
|
Revision: 1675 http://sv1.svn.sourceforge.net/sv1/?rev=1675&view=rev Author: cannam Date: 2010-02-22 16:13:00 +0000 (Mon, 22 Feb 2010) Log Message: ----------- * add new vid Modified Paths: -------------- website/documentation.html Modified: website/documentation.html =================================================================== --- website/documentation.html 2010-01-29 13:54:25 UTC (rev 1674) +++ website/documentation.html 2010-02-22 16:13:00 UTC (rev 1675) @@ -44,10 +44,9 @@ </ul> <h3>Videos</h3> <ul> - <li>An <a href="http://vimeo.com/3310893">example of audio alignment using MATCH</a>.</li> - <li>A demo video: <a href="/doc/demo/en/sv-demo.html">HTML - wrapper</a>, <a href="/doc/demo/en/sv-demo.swf">raw Flash - video</a>.<br>This video uses Ron Parker's mix of Cold Duck + <li><a href="http://vimeo.com/9644153">An audio and data visualisation example</a> from Matthias Mauch.</li> + <li><a href="http://vimeo.com/3310893">An example of audio alignment using MATCH</a>.</li> + <li><a href="/doc/demo/en/sv-demo.html">A demo video</a>.<br>This video uses Ron Parker's mix of Cold Duck played by the Terrace Martin Trio, taken from the tutorial <a href="http://jamin.sourceforge.net/en/tutorial.html">Mastering with JAMin and Ardour</a>. The video is large (about 50MB) and This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ca...@us...> - 2010-01-29 13:54:31
|
Revision: 1674 http://sv1.svn.sourceforge.net/sv1/?rev=1674&view=rev Author: cannam Date: 2010-01-29 13:54:25 +0000 (Fri, 29 Jan 2010) Log Message: ----------- * Add origin line (y=0) to time-value layer Modified Paths: -------------- sonic-visualiser/trunk/layer/TimeValueLayer.cpp Modified: sonic-visualiser/trunk/layer/TimeValueLayer.cpp =================================================================== --- sonic-visualiser/trunk/layer/TimeValueLayer.cpp 2010-01-28 16:46:04 UTC (rev 1673) +++ sonic-visualiser/trunk/layer/TimeValueLayer.cpp 2010-01-29 13:54:25 UTC (rev 1674) @@ -905,6 +905,14 @@ int textY = 0; if (m_plotStyle == PlotSegmentation) { textY = v->getTextLabelHeight(this, paint); + } else { + int originY = getYForValue(v, 0.f); + if (originY > 0 && originY < v->height()) { + paint.save(); + paint.setPen(getPartialShades(v)[1]); + paint.drawLine(x0, originY, x1, originY); + paint.restore(); + } } for (SparseTimeValueModel::PointList::const_iterator i = points.begin(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ca...@us...> - 2010-01-28 16:46:24
|
Revision: 1673 http://sv1.svn.sourceforge.net/sv1/?rev=1673&view=rev Author: cannam Date: 2010-01-28 16:46:04 +0000 (Thu, 28 Jan 2010) Log Message: ----------- * Add "plot derivatives" option to time value layer (scale is not always right) Modified Paths: -------------- sonic-visualiser/trunk/layer/TimeValueLayer.cpp sonic-visualiser/trunk/layer/TimeValueLayer.h sonic-visualiser/trunk/sv/sonic-visualiser.qrc Added Paths: ----------- sonic-visualiser/trunk/sv/icons/derivative.png Modified: sonic-visualiser/trunk/layer/TimeValueLayer.cpp =================================================================== --- sonic-visualiser/trunk/layer/TimeValueLayer.cpp 2010-01-05 15:57:34 UTC (rev 1672) +++ sonic-visualiser/trunk/layer/TimeValueLayer.cpp 2010-01-28 16:46:04 UTC (rev 1673) @@ -55,6 +55,7 @@ m_plotStyle(PlotConnectedPoints), m_verticalScale(AutoAlignScale), m_drawSegmentDivisions(true), + m_derivative(false), m_scaleMinimum(0), m_scaleMaximum(0) { @@ -94,6 +95,7 @@ list.push_back("Vertical Scale"); list.push_back("Scale Units"); list.push_back("Draw Segment Division Lines"); + list.push_back("Show Derivative"); return list; } @@ -104,6 +106,7 @@ if (name == "Vertical Scale") return tr("Vertical Scale"); if (name == "Scale Units") return tr("Scale Units"); if (name == "Draw Segment Division Lines") return tr("Draw Segment Division Lines"); + if (name == "Show Derivative") return tr("Show Derivative"); return SingleColourLayer::getPropertyLabel(name); } @@ -111,6 +114,7 @@ TimeValueLayer::getPropertyIconName(const PropertyName &name) const { if (name == "Draw Segment Division Lines") return "lines"; + if (name == "Show Derivative") return "derivative"; return ""; } @@ -122,6 +126,7 @@ if (name == "Scale Units") return UnitsProperty; if (name == "Colour" && m_plotStyle == PlotSegmentation) return ValueProperty; if (name == "Draw Segment Division Lines") return ToggleProperty; + if (name == "Show Derivative") return ToggleProperty; return SingleColourLayer::getPropertyType(name); } @@ -131,7 +136,8 @@ if (name == "Vertical Scale" || name == "Scale Units") { return tr("Scale"); } - if (name == "Plot Type" || name == "Draw Segment Division Lines") { + if (name == "Plot Type" || name == "Draw Segment Division Lines" || + name == "Show Derivative") { return tr("Plot Type"); } return SingleColourLayer::getPropertyGroupName(name); @@ -182,6 +188,13 @@ if (deflt) *deflt = 1; val = (m_drawSegmentDivisions ? 1.0 : 0.0); + } else if (name == "Show Derivative") { + + if (min) *min = 0; + if (max) *max = 0; + if (deflt) *deflt = 0; + val = (m_derivative ? 1.0 : 0.0); + } else { val = SingleColourLayer::getPropertyRangeAndValue(name, min, max, deflt); @@ -235,6 +248,8 @@ } } else if (name == "Draw Segment Division Lines") { setDrawSegmentDivisions(value > 0.5); + } else if (name == "Show Derivative") { + setShowDerivative(value > 0.5); } else { SingleColourLayer::setProperty(name, value); } @@ -277,6 +292,14 @@ emit layerParametersChanged(); } +void +TimeValueLayer::setShowDerivative(bool show) +{ + if (m_derivative == show) return; + m_derivative = show; + emit layerParametersChanged(); +} + bool TimeValueLayer::isLayerScrollable(const View *v) const { @@ -299,6 +322,10 @@ max = m_model->getValueMaximum(); logarithmic = (m_verticalScale == LogScale); unit = m_model->getScaleUnits(); + if (m_derivative) { + max = std::max(fabsf(min), fabsf(max)); + min = -max; + } return true; } @@ -310,11 +337,15 @@ if (m_scaleMinimum == m_scaleMaximum) { min = m_model->getValueMinimum(); max = m_model->getValueMaximum(); - return true; + } else { + min = m_scaleMinimum; + max = m_scaleMaximum; } - min = m_scaleMinimum; - max = m_scaleMaximum; + if (m_derivative) { + max = std::max(fabsf(min), fabsf(max)); + min = -max; + } #ifdef DEBUG_TIME_VALUE_LAYER std::cerr << "TimeValueLayer::getDisplayExtents: min = " << min << ", max = " << max << std::endl; @@ -372,12 +403,7 @@ int nr = mapper->getPositionForValue(dmax - dmin); #ifdef DEBUG_TIME_VALUE_LAYER - int n0 = mapper->getPositionForValue(dmax); - int n1 = mapper->getPositionForValue(dmin); - int nr = n1 - n0; - if (nr < 0) nr = -nr; - - std::cerr << "TimeValueLayer::getCurrentVerticalZoomStep: dmin = " << dmin << ", dmax = " << dmax << ", n0 = " << n0 << ", n1 = " << n1 << ", nr = " << nr << std::endl; + std::cerr << "TimeValueLayer::getCurrentVerticalZoomStep: dmin = " << dmin << ", dmax = " << dmax << ", nr = " << nr << std::endl; #endif delete mapper; @@ -831,6 +857,7 @@ int x0 = rect.left(), x1 = rect.right(); long frame0 = v->getFrameForX(x0); long frame1 = v->getFrameForX(x1); + if (m_derivative) --frame0; SparseTimeValueModel::PointList points(m_model->getPoints (frame0, frame1)); @@ -883,10 +910,19 @@ for (SparseTimeValueModel::PointList::const_iterator i = points.begin(); i != points.end(); ++i) { + if (m_derivative && i == points.begin()) continue; + const SparseTimeValueModel::Point &p(*i); + float value = p.value; + if (m_derivative) { + SparseTimeValueModel::PointList::const_iterator j = i; + --j; + value -= j->value; + } + int x = v->getXForFrame(p.frame); - int y = getYForValue(v, p.value); + int y = getYForValue(v, value); if (m_plotStyle != PlotSegmentation) { textY = y - paint.fontMetrics().height() @@ -905,8 +941,10 @@ if (j != points.end()) { const SparseTimeValueModel::Point &q(*j); + float nvalue = q.value; + if (m_derivative) nvalue -= p.value; nx = v->getXForFrame(q.frame); - ny = getYForValue(v, q.value); + ny = getYForValue(v, nvalue); haveNext = true; } @@ -918,7 +956,7 @@ if (m_plotStyle == PlotSegmentation) { paint.setPen(getForegroundQColor(v)); - paint.setBrush(getColourForValue(v, p.value)); + paint.setBrush(getColourForValue(v, value)); } else if (m_plotStyle == PlotLines || m_plotStyle == PlotCurve) { paint.setBrush(Qt::NoBrush); @@ -1314,7 +1352,7 @@ TimeValueLayer::drawEnd(View *, QMouseEvent *) { #ifdef DEBUG_TIME_VALUE_LAYER - std::cerr << "TimeValueLayer::drawEnd(" << e->x() << "," << e->y() << ")" << std::endl; + std::cerr << "TimeValueLayer::drawEnd" << std::endl; #endif if (!m_model || !m_editing) return; finish(m_editingCommand); @@ -1420,7 +1458,7 @@ TimeValueLayer::editEnd(View *, QMouseEvent *) { #ifdef DEBUG_TIME_VALUE_LAYER - std::cerr << "TimeValueLayer::editEnd(" << e->x() << "," << e->y() << ")" << std::endl; + std::cerr << "TimeValueLayer::editEnd" << std::endl; #endif if (!m_model || !m_editing) return; @@ -1796,13 +1834,14 @@ { SingleColourLayer::toXml(stream, indent, extraAttributes + - QString(" colourMap=\"%1\" plotStyle=\"%2\" verticalScale=\"%3\" scaleMinimum=\"%4\" scaleMaximum=\"%5\" drawDivisions=\"%6\" ") + QString(" colourMap=\"%1\" plotStyle=\"%2\" verticalScale=\"%3\" scaleMinimum=\"%4\" scaleMaximum=\"%5\" drawDivisions=\"%6\" derivative=\"%7\" ") .arg(m_colourMap) .arg(m_plotStyle) .arg(m_verticalScale) .arg(m_scaleMinimum) .arg(m_scaleMaximum) - .arg(m_drawSegmentDivisions ? "true" : "false")); + .arg(m_drawSegmentDivisions ? "true" : "false") + .arg(m_derivative ? "true" : "false")); } void @@ -1826,6 +1865,9 @@ bool draw = (attributes.value("drawDivisions").trimmed() == "true"); setDrawSegmentDivisions(draw); + bool derivative = (attributes.value("derivative").trimmed() == "true"); + setShowDerivative(derivative); + float min = attributes.value("scaleMinimum").toFloat(&ok); float max = attributes.value("scaleMaximum").toFloat(&alsoOk); #ifdef DEBUG_TIME_VALUE_LAYER Modified: sonic-visualiser/trunk/layer/TimeValueLayer.h =================================================================== --- sonic-visualiser/trunk/layer/TimeValueLayer.h 2010-01-05 15:57:34 UTC (rev 1672) +++ sonic-visualiser/trunk/layer/TimeValueLayer.h 2010-01-28 16:46:04 UTC (rev 1673) @@ -111,6 +111,9 @@ void setDrawSegmentDivisions(bool); bool getDrawSegmentDivisions() const { return m_drawSegmentDivisions; } + void setShowDerivative(bool); + bool getShowDerivative() const { return m_derivative; } + virtual bool isLayerScrollable(const View *v) const; virtual bool isLayerEditable() const { return true; } @@ -165,6 +168,7 @@ PlotStyle m_plotStyle; VerticalScale m_verticalScale; bool m_drawSegmentDivisions; + bool m_derivative; mutable float m_scaleMinimum; mutable float m_scaleMaximum; Added: sonic-visualiser/trunk/sv/icons/derivative.png =================================================================== (Binary files differ) Property changes on: sonic-visualiser/trunk/sv/icons/derivative.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Modified: sonic-visualiser/trunk/sv/sonic-visualiser.qrc =================================================================== --- sonic-visualiser/trunk/sv/sonic-visualiser.qrc 2010-01-05 15:57:34 UTC (rev 1672) +++ sonic-visualiser/trunk/sv/sonic-visualiser.qrc 2010-01-28 16:46:04 UTC (rev 1673) @@ -81,6 +81,7 @@ <file>icons/opaque.png</file> <file>icons/smooth.png</file> <file>icons/lines.png</file> + <file>icons/derivative.png</file> <file>icons/sv-16x16.png</file> <file>icons/sv-22x22.png</file> <file>icons/sv-24x24.png</file> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ca...@us...> - 2010-01-05 15:57:41
|
Revision: 1672 http://sv1.svn.sourceforge.net/sv1/?rev=1672&view=rev Author: cannam Date: 2010-01-05 15:57:34 +0000 (Tue, 05 Jan 2010) Log Message: ----------- * Fix crash on play after New Session Modified Paths: -------------- sonic-visualiser/trunk/framework/MainWindowBase.cpp Modified: sonic-visualiser/trunk/framework/MainWindowBase.cpp =================================================================== --- sonic-visualiser/trunk/framework/MainWindowBase.cpp 2009-12-09 22:06:12 UTC (rev 1671) +++ sonic-visualiser/trunk/framework/MainWindowBase.cpp 2010-01-05 15:57:34 UTC (rev 1672) @@ -404,7 +404,7 @@ emit canEditLayerTabular(haveCurrentEditableLayer || haveTabularLayer); emit canMeasureLayer(haveCurrentLayer); emit canSelect(haveMainModel && haveCurrentPane); - emit canPlay(havePlayTarget); + emit canPlay(haveMainModel && havePlayTarget); emit canFfwd(true); emit canRewind(true); emit canPaste(haveClipboardContents); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ca...@us...> - 2009-12-09 22:06:18
|
Revision: 1671 http://sv1.svn.sourceforge.net/sv1/?rev=1671&view=rev Author: cannam Date: 2009-12-09 22:06:12 +0000 (Wed, 09 Dec 2009) Log Message: ----------- * build fixes Modified Paths: -------------- vect/trunk/main/MainWindow.cpp vect/trunk/main/MainWindow.h vect/trunk/vect.pro Modified: vect/trunk/main/MainWindow.cpp =================================================================== --- vect/trunk/main/MainWindow.cpp 2009-10-28 15:06:24 UTC (rev 1670) +++ vect/trunk/main/MainWindow.cpp 2009-12-09 22:06:12 UTC (rev 1671) @@ -1651,6 +1651,13 @@ } void +MainWindow::updatePositionStatusDisplays() const +{ + if (!statusBar()->isVisible()) return; + +} + +void MainWindow::outputLevelsChanged(float left, float right) { m_fader->setPeakLeft(left); @@ -2065,3 +2072,4 @@ m_keyReference->show(); } + Modified: vect/trunk/main/MainWindow.h =================================================================== --- vect/trunk/main/MainWindow.h 2009-10-28 15:06:24 UTC (rev 1670) +++ vect/trunk/main/MainWindow.h 2009-12-09 22:06:12 UTC (rev 1671) @@ -30,7 +30,7 @@ #include "layer/LayerFactory.h" #include "transform/Transform.h" #include "framework/SVFileReader.h" -#include "widgets/FileFinder.h" +#include "widgets/InteractiveFileFinder.h" #include <map> class Document; @@ -196,6 +196,7 @@ virtual Model *selectExistingModeLayer(Pane *, QString); virtual void updateVisibleRangeDisplay(Pane *p) const; + virtual void updatePositionStatusDisplays() const; }; Modified: vect/trunk/vect.pro =================================================================== --- vect/trunk/vect.pro 2009-10-28 15:06:24 UTC (rev 1670) +++ vect/trunk/vect.pro 2009-12-09 22:06:12 UTC (rev 1671) @@ -2,7 +2,7 @@ TEMPLATE = app SV_UNIT_PACKAGES = vamp vamp-hostsdk fftw3f samplerate libpulse jack portaudio-2.0 mad id3tag oggz fishsound lrdf raptor rasqal redland sndfile liblo rubberband fftw3 -load(../sonic-visualiser/sv.prf) +load(../sonic-visualiser/prf/sv.prf) CONFIG += release sv qt thread warn_on stl rtti exceptions QT += xml network This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ca...@us...> - 2009-10-28 15:06:35
|
Revision: 1670 http://sv1.svn.sourceforge.net/sv1/?rev=1670&view=rev Author: cannam Date: 2009-10-28 15:06:24 +0000 (Wed, 28 Oct 2009) Log Message: ----------- * update latest version Modified Paths: -------------- website/latest-version.txt Modified: website/latest-version.txt =================================================================== --- website/latest-version.txt 2009-10-28 14:53:38 UTC (rev 1669) +++ website/latest-version.txt 2009-10-28 15:06:24 UTC (rev 1670) @@ -1 +1 @@ -1.7 +1.7.1 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ca...@us...> - 2009-10-28 14:53:43
|
Revision: 1669 http://sv1.svn.sourceforge.net/sv1/?rev=1669&view=rev Author: cannam Date: 2009-10-28 14:53:38 +0000 (Wed, 28 Oct 2009) Log Message: ----------- * osol url fix Modified Paths: -------------- website/download.html Modified: website/download.html =================================================================== --- website/download.html 2009-10-28 14:51:52 UTC (rev 1668) +++ website/download.html 2009-10-28 14:53:38 UTC (rev 1669) @@ -58,7 +58,7 @@ </td> <td align=center><br><a - href="http://downloads.sourceforge.net/sv1/sonic-visualiser-1.7.1-i386-osol.tar.bz2"><img src="images/osol.png" valign=middle style="padding-right:8px" border=0>Download</a><br><br> + href="http://downloads.sourceforge.net/sv1/sonic-visualiser-1.7.1-osol.tar.bz2"><img src="images/osol.png" valign=middle style="padding-right:8px" border=0>Download</a><br><br> <span style="font-size: 0.9em">32-bit Solaris or OpenSolaris<br> </span><br><br> </td> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ca...@us...> - 2009-10-28 14:52:02
|
Revision: 1668 http://sv1.svn.sourceforge.net/sv1/?rev=1668&view=rev Author: cannam Date: 2009-10-28 14:51:52 +0000 (Wed, 28 Oct 2009) Log Message: ----------- * Update website for 1.7.1 Modified Paths: -------------- website/download.html website/index.html Added Paths: ----------- website/doc/reference/1.7.1/ Modified: website/download.html =================================================================== --- website/download.html 2009-10-28 13:01:32 UTC (rev 1667) +++ website/download.html 2009-10-28 14:51:52 UTC (rev 1668) @@ -28,7 +28,7 @@ <p>Sonic Visualiser is available ready-to-run for Linux, OS/X, Windows, and OpenSolaris.</p> - <p>The current release is 1.7. Read the <a href="https://sourceforge.net/projects/sv1/files/sonic-visualiser/1.7/CHANGELOG/download">release notes</a>.</p> + <p>The current release is 1.7.1. Read the <a href="https://sourceforge.net/projects/sv1/files/sonic-visualiser/1.7.1/CHANGELOG/download">release notes</a>.</p> <table align=center border=1 cellpadding=5 style="clear:right"> <tr><th> </th> @@ -39,34 +39,34 @@ </tr> <tr> - <td align=center>Version<br><big><b>1.7</b></big></td> + <td align=center>Version<br><big><b>1.7.1</b></big></td> <td align=center><br><a - href="http://downloads.sourceforge.net/sv1/sonic-visualiser_1.7cc-1_i386.deb"><img src="images/linux.png" valign=middle style="padding-right:8px" border=0>32-bit</a> or <a - href="http://downloads.sourceforge.net/sv1/sonic-visualiser_1.7cc-1_amd64.deb">64-bit</a><br><br> + href="http://downloads.sourceforge.net/sv1/sonic-visualiser_1.7.1cc-1_i386.deb"><img src="images/linux.png" valign=middle style="padding-right:8px" border=0>32-bit</a> or <a + href="http://downloads.sourceforge.net/sv1/sonic-visualiser_1.7.1cc-1_amd64.deb">64-bit</a><br><br> <span style="font-size: 0.9em">Package for Ubuntu 8.10 and 9.04</span><br><br> </td> <td align=center><br><a - href="http://downloads.sourceforge.net/sv1/Sonic%20Visualiser%201.7.dmg"><img src="images/mac.png" valign=middle style="padding-right:8px" border=0>Download</a><br><br> + href="http://downloads.sourceforge.net/sv1/Sonic%20Visualiser%201.7.1.dmg"><img src="images/mac.png" valign=middle style="padding-right:8px" border=0>Download</a><br><br> <span style="font-size: 0.9em">Universal for 10.4 or newer</span><br><br> </td> <td align=center><br><a - href="http://downloads.sourceforge.net/sv1/sonic-visualiser-1.7-win32.zip"><img src="images/win.png" valign=middle style="padding-right:8px" border=0>Download</a><br><br> + href="http://downloads.sourceforge.net/sv1/sonic-visualiser-1.7.1-win32.zip"><img src="images/win.png" valign=middle style="padding-right:8px" border=0>Download</a><br><br> <span style="font-size: 0.9em">32-bit Windows executable<br> </span><br><br> </td> <td align=center><br><a - href="http://downloads.sourceforge.net/sv1/sonic-visualiser-1.7-i386-osol.zip"><img src="images/osol.png" valign=middle style="padding-right:8px" border=0>Download</a><br><br> + href="http://downloads.sourceforge.net/sv1/sonic-visualiser-1.7.1-i386-osol.tar.bz2"><img src="images/osol.png" valign=middle style="padding-right:8px" border=0>Download</a><br><br> <span style="font-size: 0.9em">32-bit Solaris or OpenSolaris<br> </span><br><br> </td> </tr><tr> <td align=center><b>Source code</b></td> -<!-- <td colspan=4 align=center valign=top><br> <a href="http://downloads.sourceforge.net/sv1/sonic-visualiser-1.7.tar.bz2"><img src="images/source.png" valign=middle style="padding-right:8px" border=0>Download</a> </td> --> - <td colspan=4 align=center valign=middle><a href="http://downloads.sourceforge.net/sv1/sonic-visualiser-1.7.tar.bz2"><img src="images/source.png" valign=middle style="padding-right:8px" border=0>Download</a></td> +<!-- <td colspan=4 align=center valign=top><br> <a href="http://downloads.sourceforge.net/sv1/sonic-visualiser-1.7.1.tar.bz2"><img src="images/source.png" valign=middle style="padding-right:8px" border=0>Download</a> </td> --> + <td colspan=4 align=center valign=middle><a href="http://downloads.sourceforge.net/sv1/sonic-visualiser-1.7.1.tar.bz2"><img src="images/source.png" valign=middle style="padding-right:8px" border=0>Download</a></td> </tr><tr> Modified: website/index.html =================================================================== --- website/index.html 2009-10-28 13:01:32 UTC (rev 1667) +++ website/index.html 2009-10-28 14:51:52 UTC (rev 1668) @@ -28,7 +28,7 @@ <a href="screenshots.html"><img src="images/sv2-thumb.png" width=336 height=285 alt="Sonic Visualiser screen shot" border=0 style="float:left;padding-top:2em;padding-bottom:3em;padding-right:3em"/></a> - <p><b>5th October 2009:</b> Sonic Visualiser 1.7 has been released. Get it <a href="download.html">here</a>!</p> + <p><b>28th October 2009:</b> Sonic Visualiser 1.7.1 has been released. Get it <a href="download.html">here</a>!</p> <p>The aim of Sonic Visualiser is to be the first program you reach for when want to study a musical recording rather than This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ca...@us...> - 2009-10-28 13:01:48
|
Revision: 1667 http://sv1.svn.sourceforge.net/sv1/?rev=1667&view=rev Author: cannam Date: 2009-10-28 13:01:32 +0000 (Wed, 28 Oct 2009) Log Message: ----------- * Tag for 1.7.1 Added Paths: ----------- sonic-visualiser/tags/sv-v1.7.1/ sonic-visualiser/tags/sv-v1.7.1/CHANGELOG Removed Paths: ------------- sonic-visualiser/tags/sv-v1.7.1/CHANGELOG Property changes on: sonic-visualiser/tags/sv-v1.7.1 ___________________________________________________________________ Added: svn:mergeinfo + /sonic-visualiser/branches/one-fftdataserver-per-fftmodel:1406-1415 Deleted: sonic-visualiser/tags/sv-v1.7.1/CHANGELOG =================================================================== --- sonic-visualiser/trunk/CHANGELOG 2009-10-22 15:54:21 UTC (rev 1665) +++ sonic-visualiser/tags/sv-v1.7.1/CHANGELOG 2009-10-28 13:01:32 UTC (rev 1667) @@ -1,261 +0,0 @@ - -Changes in Sonic Visualiser 1.7 since the previous release 1.6: - - - A new "Insert Item At Selection" function on the Edit menu - can be used to create Note and Region layer items whose time - extents correspond to the current selection(s) - - - Interactively editing points in the Note and Region layers - now works much more smoothly - - - SV can now import MIDI files that use SMPTE timecode for event - timing (importing MIDI files using with the more common - timebase-based timing was already supported) - - - Time values throughout the display may optionally be shown in - seconds and frames at various frame rates - - - A crash on exit in Windows has been fixed - - - A very unobtrusive user survey is now included - - - Various other bug fixes. - -Changes in Sonic Visualiser 1.6 since the previous release 1.5: - - - The Colour 3D Plot layer now supports logarithmic vertical - scale and linear interpolation options. - - - A new colour scheme (High Gain) has been added for spectrogram - and Colour 3D Plot, which improves readability for some data. - - - Further performance improvements have been made to Colour 3D - Plot. - - - Various other bug fixes. - -Changes in Sonic Visualiser 1.5 since the previous version 1.4: - - - You can now insert time instants, time values, and notes using - a MIDI device during playback. If a time value or note layer is - current it will be used for insertion (giving a value equal to - the pitch class, or the played note, respectively); otherwise an - existing or new time instants layer will be used just as it is - when inserting instants using the PC keyboard. Using a MIDI - device should give better timing than using the PC keyboard. - - - There is a new Activity Log window with a (purely informative) list - of events and user interactions that happen while SV is running. - - - The spectrogram has somewhat improved graphical scaling, and - this is now the default (being much faster than the 4x oversampled - method). The previous default is still available as a preference. - - - Visualisation of very dense colour plots (such as spectrograms - calculated by plugins) is substantially faster in this release. - - - Spectrogram display is now faster in many circumstances. - - - Alignment using the MATCH plugin is faster on OS/X than before. - - - SV will take into account RDF plugin descriptions, if available, - in order to make somewhat better decisions about display of plugin - outputs (for example, placing segmentation data into a layer with - segmentation plot type). - - - You can now switch layers by clicking on the spare area at the left - end of the pane that is also used for the current pane indicator. - - - The vertical black lines dividing segments in the time value - layer's segmentation plot style are now optional. - - - Several widget layout bugs on OS/X have been fixed. - - - Several serious crashing, deadlock, and data corruption bugs have - been fixed. - - -New features in Sonic Visualiser 1.4 since the previous version 1.3: - - - SV now has a Region layer type, used for display of features with - durations. It also supports Vamp v2.0 plugins that provide durations - for features. - - - Layer data can now be imported from RDF described using the Audio - Features Ontology, as well as from the existing text file types. SV - can also export annotation layer data to RDF/Turtle, although in a - somewhat simplistic manner at present. - - - You can search for transforms by text in the new "Find a Transform" - dialog. This searches both installed plugins, and plugins that have - not been installed but that have descriptions available on the - semantic web. - - - You can now zoom and scroll vertically in the time-value, note, - and colour 3d plot layers. - - - Sonic Visualiser can now load sessions from uncompressed XML files - as well as its own compressed-XML .sv format. Files with extension - .xml that contain suitable session data will be loaded as sessions. - Note that .xml extension files still do not show up in the default - file load filter. This is intentional, as there may be any kind of - data in them -- if you want to load uncompressed session files from - XML, you need to know you're doing it. - - - Several crashes and other bugs have been fixed. - -Changes in Sonic Visualiser 1.3 since the previous version 1.2: - - - There is a new spreadsheet-style data viewer and editor for - viewing and editing the data in some types of annotation layer. - - - Alignments are now saved to the session file. - - - The spectrogram layer is usually somewhat faster than it was. - - - You can now hold Shift while dragging to move an item, in order - to override the initial drag resistance introduced in 1.2. - - - The gross mis-labelling of time lines in the ruler has been fixed. - - - There is a new, somewhat provisional PulseAudio output driver. - - - Several other bug fixes. - -New features in Sonic Visualiser 1.2, since the previous version 1.0: - - - SV now supports time-alignment of multiple performances of a work - loaded at the same time. This option is enabled when the MATCH Vamp - plugin is installed. When alignment is switched on and more than one - audio file is open, SV will assume that all open files are - differently timed performances of the same work, and will calculate - time alignments for them. Playback will then play only a single file - at a time, and the playback cursors in other files will track at the - varying speeds to try to ensure that each is at the same point in the - underlying score. This enables effective comparison of several such - files, as well as a meaningful way to switch from one performance to - another during playback (ensuring that the switch happens at the - correct point in the performance being switched to). - - - There is a new Image layer, which can display images from the - local filesystem or retrieved via HTTP or FTP. - - - A new measurement tool has been added. With the measurement tool - selected, dragging in a pane draws a rectangle labelled with the - scale values for its start and end corners and its size. You can - have any number of measurements present at once; they are associated - with the top layer, their scale values depend on the scale for that - layer, and they are only shown when that layer is at the top and the - measurement tool is active. Measurements are saved and reloaded in - the session file. Drawing measurements can be undone and redone, and - a measurement can be deleted by hitting Del when highlighted. Note - that the measurement tool shows the scale values associated with the - pixel positions of the mouse when dragging, not any values associated - with actual features present in the audio or its analysis (e.g. the - values are not rounded to the nearest spectrogram bin). - - - You can double-click using the measurement tool in the spectrogram - to get an instant measurement rectangle for a feature. This is a - purely graphical feature that works by calculating the boundary of a - contiguous region of pixels "similar to" the one you double-clicked - on; it does not use audio analysis. Adjusting the gain and colour - scheme etc of the spectrogram will (by design) affect the - measurements obtained this way. - - - The spectrum can now optionally show frequency estimates of peaks - aligned with a piano keyboard along the horizontal axis (this needs - some refinement). - - - The harmonic cursor in the spectrogram has moved from the Select - tool to the Measurement tool. There is now a similar harmonic cursor - in the spectrum. Both of them show more information as text - alongside the cursor than previously. - - - There is a new Erase tool for erasing individual points from an - editable layer. - - - Several keyboard shortcuts have changed -- all of the Alt+key - shortcuts now either use Ctrl or a plain keypress with no modifier, - to avoid clashes with window manager shortcuts and to make them - easier to use and remember - - - The playback controls are now in a Playback menu as well as the - toolbar. - - - There is a new key and mouse control reference under Help (or press - F2). - - - You can double-click on a pane in navigate mode to jump to a time. - - - All of the single-colour layers (waveform, time values etc) now - allow you to define your own colours as well as using the built-in - set. The colour of a layer is now shown next to its name on the pane. - - - When you add a new single-colour layer it will use a default colour - that is not yet in use in another layer (if there is one). - - - Single-colour layers can now optionally have black backgrounds (with - a set of lighter colours in the default colour palette that use black - backgrounds by default). - - - There's a new Printer colour scheme in the spectrogram with only a - small number of grey shades. - - - Vertical zoom in a log-scaled spectrogram is much more intuitive; - it now leaves the point that was in the centre of the visible area in - the centre after zoom, instead of the point that was in the centre of - the linear range corresponding to the visible area. - - - You can now turn a colour 3d plot layer upside down by clicking the - Invert Vertical Scale button. - - - There's a new Layer Summary window which shows the panes and - layer data in a tree layout. This is very simplistic at the moment. - - - Each pane now has an [X] button at its top left, which removes that - pane when clicked. - - - There's a new Solo play mode toggle button; when active, only the - currently selected pane is played. This is also the default when - time alignment is in use. - - - Rewind/ffwd now stay confined to the selection if Play Selection is - enabled; also, the rewind and ffwd "one step" buttons are now enabled - even if there is no time instants layer for them to align to (they - align to the time ruler instead and so jump in steps of a size - dependent on the zoom level). - - - You can now export note layers to MIDI. - - - MIDI note velocity is partially supported. Note velocity is - retained when importing and exporting MIDI and is used in playback, - but it is not yet shown in the display and cannot yet be edited. - - - You can now drag-and-drop files (of whatever type) onto SV from - other programs such as file managers or web browsers. - - - mp3 files (and Ogg, but they aren't supported on Windows at the - moment) are now decoded in a background thread so you can see the - start of the track without waiting for the rest to decode. - - - Mac builds of SV can now load AAC/mp4 files and anything else - supported by QuickTime. - - - There is now an option to resample audio files on import if they - don't match the samplerate of the first file loaded. By default this - is switched off, as it affects the visible waveform. The default - behaviour is unchanged (play at the wrong rate). There is still no - option to handle multiple rates "correctly" (i.e. by resampling - on playback and showing the waveforms at different resolutions - according to each one's underlying rate) and there probably never - will be. - - - SV can now open .m3u playlist files, though it's a hazardous thing - to do as it simply loads all the files in the playlist at once. - - - SV now has various options for how to number tapped time instants - (bar/beat, plain counter, time in seconds, tempo etc). - - - The official builds use Qt 4.3, which fixes some nasty - bugs in the file dialog that the version 1.0 builds suffered from. - Copied: sonic-visualiser/tags/sv-v1.7.1/CHANGELOG (from rev 1666, sonic-visualiser/trunk/CHANGELOG) =================================================================== --- sonic-visualiser/tags/sv-v1.7.1/CHANGELOG (rev 0) +++ sonic-visualiser/tags/sv-v1.7.1/CHANGELOG 2009-10-28 13:01:32 UTC (rev 1667) @@ -0,0 +1,277 @@ + +Changes in Sonic Visualiser 1.7.1 since the previous release 1.7: + + - The RDF importer does a better job of assigning labels to layers, + layers to panes, and values to labelled regions + + - Interactive editing in the Text layer benefits from the same + improvements as made in 1.7 to Note and Region layers + + - The layer data editor window has a text search feature + + - The main window status bar now shows the last label to have passed + the playback position in the current layer, at the right end of the + status bar + + - The Russian translation has been updated (thanks Alexandre) + +Changes in Sonic Visualiser 1.7 since the previous release 1.6: + + - A new "Insert Item At Selection" function on the Edit menu + can be used to create Note and Region layer items whose time + extents correspond to the current selection(s) + + - Interactively editing points in the Note and Region layers + now works much more smoothly + + - SV can now import MIDI files that use SMPTE timecode for event + timing (importing MIDI files using with the more common + timebase-based timing was already supported) + + - Time values throughout the display may optionally be shown in + seconds and frames at various frame rates + + - A crash on exit in Windows has been fixed + + - A very unobtrusive user survey is now included + + - Various other bug fixes. + +Changes in Sonic Visualiser 1.6 since the previous release 1.5: + + - The Colour 3D Plot layer now supports logarithmic vertical + scale and linear interpolation options. + + - A new colour scheme (High Gain) has been added for spectrogram + and Colour 3D Plot, which improves readability for some data. + + - Further performance improvements have been made to Colour 3D + Plot. + + - Various other bug fixes. + +Changes in Sonic Visualiser 1.5 since the previous version 1.4: + + - You can now insert time instants, time values, and notes using + a MIDI device during playback. If a time value or note layer is + current it will be used for insertion (giving a value equal to + the pitch class, or the played note, respectively); otherwise an + existing or new time instants layer will be used just as it is + when inserting instants using the PC keyboard. Using a MIDI + device should give better timing than using the PC keyboard. + + - There is a new Activity Log window with a (purely informative) list + of events and user interactions that happen while SV is running. + + - The spectrogram has somewhat improved graphical scaling, and + this is now the default (being much faster than the 4x oversampled + method). The previous default is still available as a preference. + + - Visualisation of very dense colour plots (such as spectrograms + calculated by plugins) is substantially faster in this release. + + - Spectrogram display is now faster in many circumstances. + + - Alignment using the MATCH plugin is faster on OS/X than before. + + - SV will take into account RDF plugin descriptions, if available, + in order to make somewhat better decisions about display of plugin + outputs (for example, placing segmentation data into a layer with + segmentation plot type). + + - You can now switch layers by clicking on the spare area at the left + end of the pane that is also used for the current pane indicator. + + - The vertical black lines dividing segments in the time value + layer's segmentation plot style are now optional. + + - Several widget layout bugs on OS/X have been fixed. + + - Several serious crashing, deadlock, and data corruption bugs have + been fixed. + + +New features in Sonic Visualiser 1.4 since the previous version 1.3: + + - SV now has a Region layer type, used for display of features with + durations. It also supports Vamp v2.0 plugins that provide durations + for features. + + - Layer data can now be imported from RDF described using the Audio + Features Ontology, as well as from the existing text file types. SV + can also export annotation layer data to RDF/Turtle, although in a + somewhat simplistic manner at present. + + - You can search for transforms by text in the new "Find a Transform" + dialog. This searches both installed plugins, and plugins that have + not been installed but that have descriptions available on the + semantic web. + + - You can now zoom and scroll vertically in the time-value, note, + and colour 3d plot layers. + + - Sonic Visualiser can now load sessions from uncompressed XML files + as well as its own compressed-XML .sv format. Files with extension + .xml that contain suitable session data will be loaded as sessions. + Note that .xml extension files still do not show up in the default + file load filter. This is intentional, as there may be any kind of + data in them -- if you want to load uncompressed session files from + XML, you need to know you're doing it. + + - Several crashes and other bugs have been fixed. + +Changes in Sonic Visualiser 1.3 since the previous version 1.2: + + - There is a new spreadsheet-style data viewer and editor for + viewing and editing the data in some types of annotation layer. + + - Alignments are now saved to the session file. + + - The spectrogram layer is usually somewhat faster than it was. + + - You can now hold Shift while dragging to move an item, in order + to override the initial drag resistance introduced in 1.2. + + - The gross mis-labelling of time lines in the ruler has been fixed. + + - There is a new, somewhat provisional PulseAudio output driver. + + - Several other bug fixes. + +New features in Sonic Visualiser 1.2, since the previous version 1.0: + + - SV now supports time-alignment of multiple performances of a work + loaded at the same time. This option is enabled when the MATCH Vamp + plugin is installed. When alignment is switched on and more than one + audio file is open, SV will assume that all open files are + differently timed performances of the same work, and will calculate + time alignments for them. Playback will then play only a single file + at a time, and the playback cursors in other files will track at the + varying speeds to try to ensure that each is at the same point in the + underlying score. This enables effective comparison of several such + files, as well as a meaningful way to switch from one performance to + another during playback (ensuring that the switch happens at the + correct point in the performance being switched to). + + - There is a new Image layer, which can display images from the + local filesystem or retrieved via HTTP or FTP. + + - A new measurement tool has been added. With the measurement tool + selected, dragging in a pane draws a rectangle labelled with the + scale values for its start and end corners and its size. You can + have any number of measurements present at once; they are associated + with the top layer, their scale values depend on the scale for that + layer, and they are only shown when that layer is at the top and the + measurement tool is active. Measurements are saved and reloaded in + the session file. Drawing measurements can be undone and redone, and + a measurement can be deleted by hitting Del when highlighted. Note + that the measurement tool shows the scale values associated with the + pixel positions of the mouse when dragging, not any values associated + with actual features present in the audio or its analysis (e.g. the + values are not rounded to the nearest spectrogram bin). + + - You can double-click using the measurement tool in the spectrogram + to get an instant measurement rectangle for a feature. This is a + purely graphical feature that works by calculating the boundary of a + contiguous region of pixels "similar to" the one you double-clicked + on; it does not use audio analysis. Adjusting the gain and colour + scheme etc of the spectrogram will (by design) affect the + measurements obtained this way. + + - The spectrum can now optionally show frequency estimates of peaks + aligned with a piano keyboard along the horizontal axis (this needs + some refinement). + + - The harmonic cursor in the spectrogram has moved from the Select + tool to the Measurement tool. There is now a similar harmonic cursor + in the spectrum. Both of them show more information as text + alongside the cursor than previously. + + - There is a new Erase tool for erasing individual points from an + editable layer. + + - Several keyboard shortcuts have changed -- all of the Alt+key + shortcuts now either use Ctrl or a plain keypress with no modifier, + to avoid clashes with window manager shortcuts and to make them + easier to use and remember + + - The playback controls are now in a Playback menu as well as the + toolbar. + + - There is a new key and mouse control reference under Help (or press + F2). + + - You can double-click on a pane in navigate mode to jump to a time. + + - All of the single-colour layers (waveform, time values etc) now + allow you to define your own colours as well as using the built-in + set. The colour of a layer is now shown next to its name on the pane. + + - When you add a new single-colour layer it will use a default colour + that is not yet in use in another layer (if there is one). + + - Single-colour layers can now optionally have black backgrounds (with + a set of lighter colours in the default colour palette that use black + backgrounds by default). + + - There's a new Printer colour scheme in the spectrogram with only a + small number of grey shades. + + - Vertical zoom in a log-scaled spectrogram is much more intuitive; + it now leaves the point that was in the centre of the visible area in + the centre after zoom, instead of the point that was in the centre of + the linear range corresponding to the visible area. + + - You can now turn a colour 3d plot layer upside down by clicking the + Invert Vertical Scale button. + + - There's a new Layer Summary window which shows the panes and + layer data in a tree layout. This is very simplistic at the moment. + + - Each pane now has an [X] button at its top left, which removes that + pane when clicked. + + - There's a new Solo play mode toggle button; when active, only the + currently selected pane is played. This is also the default when + time alignment is in use. + + - Rewind/ffwd now stay confined to the selection if Play Selection is + enabled; also, the rewind and ffwd "one step" buttons are now enabled + even if there is no time instants layer for them to align to (they + align to the time ruler instead and so jump in steps of a size + dependent on the zoom level). + + - You can now export note layers to MIDI. + + - MIDI note velocity is partially supported. Note velocity is + retained when importing and exporting MIDI and is used in playback, + but it is not yet shown in the display and cannot yet be edited. + + - You can now drag-and-drop files (of whatever type) onto SV from + other programs such as file managers or web browsers. + + - mp3 files (and Ogg, but they aren't supported on Windows at the + moment) are now decoded in a background thread so you can see the + start of the track without waiting for the rest to decode. + + - Mac builds of SV can now load AAC/mp4 files and anything else + supported by QuickTime. + + - There is now an option to resample audio files on import if they + don't match the samplerate of the first file loaded. By default this + is switched off, as it affects the visible waveform. The default + behaviour is unchanged (play at the wrong rate). There is still no + option to handle multiple rates "correctly" (i.e. by resampling + on playback and showing the waveforms at different resolutions + according to each one's underlying rate) and there probably never + will be. + + - SV can now open .m3u playlist files, though it's a hazardous thing + to do as it simply loads all the files in the playlist at once. + + - SV now has various options for how to number tapped time instants + (bar/beat, plain counter, time in seconds, tempo etc). + + - The official builds use Qt 4.3, which fixes some nasty + bugs in the file dialog that the version 1.0 builds suffered from. + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ca...@us...> - 2009-10-28 12:58:28
|
Revision: 1666 http://sv1.svn.sourceforge.net/sv1/?rev=1666&view=rev Author: cannam Date: 2009-10-28 12:58:21 +0000 (Wed, 28 Oct 2009) Log Message: ----------- * Update change log for 1.7.1 Modified Paths: -------------- sonic-visualiser/trunk/CHANGELOG Modified: sonic-visualiser/trunk/CHANGELOG =================================================================== --- sonic-visualiser/trunk/CHANGELOG 2009-10-22 15:54:21 UTC (rev 1665) +++ sonic-visualiser/trunk/CHANGELOG 2009-10-28 12:58:21 UTC (rev 1666) @@ -1,4 +1,20 @@ +Changes in Sonic Visualiser 1.7.1 since the previous release 1.7: + + - The RDF importer does a better job of assigning labels to layers, + layers to panes, and values to labelled regions + + - Interactive editing in the Text layer benefits from the same + improvements as made in 1.7 to Note and Region layers + + - The layer data editor window has a text search feature + + - The main window status bar now shows the last label to have passed + the playback position in the current layer, at the right end of the + status bar + + - The Russian translation has been updated (thanks Alexandre) + Changes in Sonic Visualiser 1.7 since the previous release 1.6: - A new "Insert Item At Selection" function on the Edit menu This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ca...@us...> - 2009-10-22 15:54:30
|
Revision: 1665 http://sv1.svn.sourceforge.net/sv1/?rev=1665&view=rev Author: cannam Date: 2009-10-22 15:54:21 +0000 (Thu, 22 Oct 2009) Log Message: ----------- * Layer data editor window: fix sorting for columns in region model, add Find feature * RDF import: assign names to layers based on event types, if no suitable labels are found in the RDF * Add label to status bar showing the last text that was passed in current layer (so e.g. counting 1, 2, 3, 4 if that's what beats are labelled) * Better layout of text labels for region layers in segmentation mode when they are close together * Give text layer the same method for finding "nearest point" as region and note layers, should improve its editability Modified Paths: -------------- sonic-visualiser/trunk/data/model/IntervalModel.h sonic-visualiser/trunk/data/model/ModelDataTableModel.cpp sonic-visualiser/trunk/data/model/ModelDataTableModel.h sonic-visualiser/trunk/data/model/RegionModel.h sonic-visualiser/trunk/framework/MainWindowBase.cpp sonic-visualiser/trunk/framework/MainWindowBase.h sonic-visualiser/trunk/layer/Layer.h sonic-visualiser/trunk/layer/RegionLayer.cpp sonic-visualiser/trunk/layer/RegionLayer.h sonic-visualiser/trunk/layer/TextLayer.cpp sonic-visualiser/trunk/layer/TextLayer.h sonic-visualiser/trunk/layer/TimeInstantLayer.cpp sonic-visualiser/trunk/layer/TimeInstantLayer.h sonic-visualiser/trunk/layer/TimeValueLayer.cpp sonic-visualiser/trunk/layer/TimeValueLayer.h sonic-visualiser/trunk/rdf/RDFImporter.cpp sonic-visualiser/trunk/sv/main/MainWindow.cpp sonic-visualiser/trunk/sv/main/MainWindow.h sonic-visualiser/trunk/version.h sonic-visualiser/trunk/widgets/ModelDataTableDialog.cpp sonic-visualiser/trunk/widgets/ModelDataTableDialog.h sonic-visualiser/trunk/widgets/PropertyStack.cpp Modified: sonic-visualiser/trunk/data/model/IntervalModel.h =================================================================== --- sonic-visualiser/trunk/data/model/IntervalModel.h 2009-10-20 16:16:37 UTC (rev 1664) +++ sonic-visualiser/trunk/data/model/IntervalModel.h 2009-10-22 15:54:21 UTC (rev 1665) @@ -117,7 +117,9 @@ virtual bool isColumnTimeValue(int column) const { - return (column < 2 || column == 3); + // NB duration is not a "time value" -- that's for columns + // whose sort ordering is exactly that of the frame time + return (column < 2); } }; Modified: sonic-visualiser/trunk/data/model/ModelDataTableModel.cpp =================================================================== --- sonic-visualiser/trunk/data/model/ModelDataTableModel.cpp 2009-10-20 16:16:37 UTC (rev 1664) +++ sonic-visualiser/trunk/data/model/ModelDataTableModel.cpp 2009-10-22 15:54:21 UTC (rev 1665) @@ -169,6 +169,29 @@ return m_model->getFrameForRow(getUnsorted(index.row())); } +QModelIndex +ModelDataTableModel::findText(QString text) const +{ + if (text == "") return QModelIndex(); + int rows = rowCount(); + int cols = columnCount(); + int current = getCurrentRow(); + for (int row = 1; row <= rows; ++row) { + int wrapped = (row + current) % rows; + for (int col = 0; col < cols; ++col) { + if (m_model->getSortType(col) != TabularModel::SortAlphabetical) { + continue; + } + QString cell = m_model->getData(getUnsorted(wrapped), col, + Qt::DisplayRole).toString(); + if (cell.contains(text, Qt::CaseInsensitive)) { + return createIndex(wrapped, col); + } + } + } + return QModelIndex(); +} + void ModelDataTableModel::sort(int column, Qt::SortOrder sortOrder) { @@ -274,6 +297,8 @@ bool numeric = (m_model->getSortType(m_sortColumn) == TabularModel::SortNumeric); +// std::cerr << "resort: numeric == " << numeric << std::endl; + m_sort.clear(); m_rsort.clear(); @@ -313,6 +338,7 @@ } for (MapType::iterator i = rowMap.begin(); i != rowMap.end(); ++i) { +// std::cerr << "resortNumeric: " << i->second << ": " << i->first << std::endl; m_rsort.push_back(i->second); } @@ -336,6 +362,7 @@ } for (MapType::iterator i = rowMap.begin(); i != rowMap.end(); ++i) { +// std::cerr << "resortAlphabetical: " << i->second << ": " << i->first.toStdString() << std::endl; m_rsort.push_back(i->second); } @@ -343,7 +370,7 @@ } int -ModelDataTableModel::getCurrentRow() +ModelDataTableModel::getCurrentRow() const { return getSorted(m_currentRow); } Modified: sonic-visualiser/trunk/data/model/ModelDataTableModel.h =================================================================== --- sonic-visualiser/trunk/data/model/ModelDataTableModel.h 2009-10-20 16:16:37 UTC (rev 1664) +++ sonic-visualiser/trunk/data/model/ModelDataTableModel.h 2009-10-22 15:54:21 UTC (rev 1665) @@ -56,8 +56,10 @@ void sort(int column, Qt::SortOrder order = Qt::AscendingOrder); + QModelIndex findText(QString text) const; + void setCurrentRow(int row); - int getCurrentRow(); + int getCurrentRow() const; signals: void frameSelected(size_t); Modified: sonic-visualiser/trunk/data/model/RegionModel.h =================================================================== --- sonic-visualiser/trunk/data/model/RegionModel.h 2009-10-20 16:16:37 UTC (rev 1664) +++ sonic-visualiser/trunk/data/model/RegionModel.h 2009-10-22 15:54:21 UTC (rev 1665) @@ -142,7 +142,7 @@ virtual int getColumnCount() const { - return 6; + return 5; } virtual QString getHeading(int column) const @@ -197,7 +197,7 @@ virtual SortType getSortType(int column) const { - if (column == 5) return SortAlphabetical; + if (column == 4) return SortAlphabetical; return SortNumeric; } Modified: sonic-visualiser/trunk/framework/MainWindowBase.cpp =================================================================== --- sonic-visualiser/trunk/framework/MainWindowBase.cpp 2009-10-20 16:16:37 UTC (rev 1664) +++ sonic-visualiser/trunk/framework/MainWindowBase.cpp 2009-10-22 15:54:21 UTC (rev 1665) @@ -2625,6 +2625,8 @@ { if (!(m_playSource && m_playSource->isPlaying()) || !getMainModel()) return; + updatePositionStatusDisplays(); + RealTime now = RealTime::frame2RealTime (frame, getMainModel()->getSampleRate()); Modified: sonic-visualiser/trunk/framework/MainWindowBase.h =================================================================== --- sonic-visualiser/trunk/framework/MainWindowBase.h 2009-10-20 16:16:37 UTC (rev 1664) +++ sonic-visualiser/trunk/framework/MainWindowBase.h 2009-10-22 15:54:21 UTC (rev 1665) @@ -396,6 +396,7 @@ virtual void setupMenus() = 0; virtual void updateVisibleRangeDisplay(Pane *p) const = 0; + virtual void updatePositionStatusDisplays() const = 0; virtual bool shouldCreateNewSessionForRDFAudio(bool *) { return true; } Modified: sonic-visualiser/trunk/layer/Layer.h =================================================================== --- sonic-visualiser/trunk/layer/Layer.h 2009-10-20 16:16:37 UTC (rev 1664) +++ sonic-visualiser/trunk/layer/Layer.h 2009-10-22 15:54:21 UTC (rev 1665) @@ -33,6 +33,8 @@ #include <map> #include <set> +#include <iostream> + class ZoomConstraint; class Model; class QPainter; @@ -145,6 +147,10 @@ return ""; } + virtual QString getLabelPreceding(size_t frame) const { + return ""; + } + enum SnapType { SnapLeft, SnapRight, Modified: sonic-visualiser/trunk/layer/RegionLayer.cpp =================================================================== --- sonic-visualiser/trunk/layer/RegionLayer.cpp 2009-10-20 16:16:37 UTC (rev 1664) +++ sonic-visualiser/trunk/layer/RegionLayer.cpp 2009-10-22 15:54:21 UTC (rev 1665) @@ -353,6 +353,18 @@ } QString +RegionLayer::getLabelPreceding(size_t frame) const +{ + if (!m_model) return ""; + RegionModel::PointList points = m_model->getPreviousPoints(frame); + for (RegionModel::PointList::const_iterator i = points.begin(); + i != points.end(); ++i) { + if (i->label != "") return i->label; + } + return ""; +} + +QString RegionLayer::getFeatureDescription(View *v, QPoint &pos) const { int x = pos.x(); @@ -751,7 +763,7 @@ // Profiler profiler("RegionLayer::paint", true); - int x0 = rect.left(), x1 = rect.right(); + int x0 = rect.left() - 40, x1 = rect.right(); long frame0 = v->getFrameForX(x0); long frame1 = v->getFrameForX(x1); @@ -826,8 +838,6 @@ paint.setBrush(brushColour); } - bool illuminated = false; - if (m_plotStyle == PlotSegmentation) { if (ex <= x) continue; @@ -837,12 +847,14 @@ RegionModel::Point::Comparator()(illuminatePoint, p) || RegionModel::Point::Comparator()(p, illuminatePoint)) { -// if (illuminateFrame != p.frame && -// (ex < x + 5 || x >= v->width() - 1)) { + paint.drawLine(x, 0, x, v->height()); paint.setPen(Qt::NoPen); + + } else { + paint.setPen(QPen(getForegroundQColor(v), 2)); } - paint.drawRect(x, -1, ex - x, v->height() + 1); + paint.drawRect(x, 0, ex - x, v->height() + 1); } else { @@ -867,8 +879,6 @@ x, y - h/2 - paint.fontMetrics().descent() - 2, hlabel, View::OutlinedText); - - illuminated = true; } paint.drawLine(x, y-1, x + w, y-1); @@ -876,25 +886,57 @@ paint.drawLine(x, y - h/2, x, y + h/2); paint.drawLine(x+w, y - h/2, x + w, y + h/2); } + } + int nextLabelMinX = -100; + int lastLabelY = 0; + + for (RegionModel::PointList::const_iterator i = points.begin(); + i != points.end(); ++i) { + + const RegionModel::Point &p(*i); + + int x = v->getXForFrame(p.frame); + int y = getYForValue(v, p.value); + + bool illuminated = false; + + if (m_plotStyle != PlotSegmentation) { + + if (shouldIlluminate && + // "illuminatePoint == p" + !RegionModel::Point::Comparator()(illuminatePoint, p) && + !RegionModel::Point::Comparator()(p, illuminatePoint)) { + + illuminated = true; + } + } + if (!illuminated) { QString label = p.label; if (label == "") { label = QString("%1%2").arg(p.value).arg(m_model->getScaleUnits()); } + int labelX, labelY; + if (m_plotStyle != PlotSegmentation) { - v->drawVisibleText(paint, - x - paint.fontMetrics().width(label) - 2, - y + paint.fontMetrics().height()/2 - - paint.fontMetrics().descent(), - label, View::OutlinedText); + labelX = x - paint.fontMetrics().width(label) - 2; + labelY = y + paint.fontMetrics().height()/2 + - paint.fontMetrics().descent(); } else { - v->drawVisibleText(paint, - x + 5, - v->getTextLabelHeight(this, paint), - label, View::OutlinedText); + labelX = x + 5; + labelY = v->getTextLabelHeight(this, paint); + if (labelX < nextLabelMinX) { + if (lastLabelY < v->height()/2) { + labelY = lastLabelY + fontHeight; + } + } + lastLabelY = labelY; + nextLabelMinX = labelX + paint.fontMetrics().width(label); } + + v->drawVisibleText(paint, labelX, labelY, label, View::OutlinedText); } } @@ -1101,16 +1143,10 @@ RegionLayer::editOpen(View *v, QMouseEvent *e) { if (!m_model) return false; -/* - RegionModel::PointList points = getLocalPoints(v, e->x()); - if (points.empty()) return false; -*/ RegionModel::Point region(0); if (!getPointToDrag(v, e->x(), e->y(), region)) return false; -// RegionModel::Point region = *points.begin(); - ItemEditDialog *dialog = new ItemEditDialog (m_model->getSampleRate(), ItemEditDialog::ShowTime | Modified: sonic-visualiser/trunk/layer/RegionLayer.h =================================================================== --- sonic-visualiser/trunk/layer/RegionLayer.h 2009-10-20 16:16:37 UTC (rev 1664) +++ sonic-visualiser/trunk/layer/RegionLayer.h 2009-10-22 15:54:21 UTC (rev 1665) @@ -37,6 +37,7 @@ virtual void paint(View *v, QPainter &paint, QRect rect) const; virtual QString getFeatureDescription(View *v, QPoint &) const; + virtual QString getLabelPreceding(size_t) const; virtual bool snapToFeatureFrame(View *v, int &frame, size_t &resolution, Modified: sonic-visualiser/trunk/layer/TextLayer.cpp =================================================================== --- sonic-visualiser/trunk/layer/TextLayer.cpp 2009-10-20 16:16:37 UTC (rev 1664) +++ sonic-visualiser/trunk/layer/TextLayer.cpp 2009-10-22 15:54:21 UTC (rev 1665) @@ -120,7 +120,7 @@ TextModel::PointList points(m_model->getPoints(frame0, frame1)); TextModel::PointList rv; - QFontMetrics metrics = QPainter().fontMetrics(); + QFontMetrics metrics = QFontMetrics(QFont()); for (TextModel::PointList::iterator i = points.begin(); i != points.end(); ++i) { @@ -153,6 +153,34 @@ return rv; } +bool +TextLayer::getPointToDrag(View *v, int x, int y, TextModel::Point &p) const +{ + if (!m_model) return false; + + long a = v->getFrameForX(x - 120); + long b = v->getFrameForX(x + 10); + TextModel::PointList onPoints = m_model->getPoints(a, b); + if (onPoints.empty()) return false; + + float nearestDistance = -1; + + for (TextModel::PointList::const_iterator i = onPoints.begin(); + i != onPoints.end(); ++i) { + + int yd = getYForHeight(v, (*i).height) - y; + int xd = v->getXForFrame((*i).frame) - x; + float distance = sqrt(yd*yd + xd*xd); + + if (nearestDistance == -1 || distance < nearestDistance) { + nearestDistance = distance; + p = *i; + } + } + + return true; +} + QString TextLayer::getFeatureDescription(View *v, QPoint &pos) const { @@ -307,12 +335,12 @@ // << m_model->getResolution() << " frames" << std::endl; QPoint localPos; - long illuminateFrame = -1; + TextModel::Point illuminatePoint(0); + bool shouldIlluminate; if (v->shouldIlluminateLocalFeatures(this, localPos)) { - TextModel::PointList localPoints = getLocalPoints(v, localPos.x(), - localPos.y()); - if (!localPoints.empty()) illuminateFrame = localPoints.begin()->frame; + shouldIlluminate = getPointToDrag(v, localPos.x(), localPos.y(), + illuminatePoint); } int boxMaxWidth = 150; @@ -329,12 +357,15 @@ int x = v->getXForFrame(p.frame); int y = getYForHeight(v, p.height); - if (illuminateFrame == p.frame) { + if (!shouldIlluminate || + // "illuminatePoint != p" + TextModel::Point::Comparator()(illuminatePoint, p) || + TextModel::Point::Comparator()(p, illuminatePoint)) { + paint.setPen(penColour); + paint.setBrush(brushColour); + } else { paint.setBrush(penColour); paint.setPen(v->getBackground()); - } else { - paint.setPen(penColour); - paint.setBrush(brushColour); } QString label = p.label; @@ -453,11 +484,8 @@ { if (!m_model) return; - TextModel::PointList points = getLocalPoints(v, e->x(), e->y()); - if (points.empty()) return; + if (!getPointToDrag(v, e->x(), e->y(), m_editingPoint)) return; - m_editingPoint = *points.begin(); - if (m_editingCommand) { finish(m_editingCommand); m_editingCommand = 0; @@ -478,10 +506,9 @@ m_editing = false; - TextModel::PointList points = getLocalPoints(v, e->x(), e->y()); - if (points.empty()) return; - if (points.begin()->frame != m_editingPoint.frame || - points.begin()->height != m_editingPoint.height) return; + TextModel::Point p(0); + if (!getPointToDrag(v, e->x(), e->y(), p)) return; + if (p.frame != m_editingPoint.frame || p.height != m_editingPoint.height) return; m_editingCommand = new TextModel::EditCommand (m_model, tr("Erase Point")); @@ -500,11 +527,11 @@ if (!m_model) return; - TextModel::PointList points = getLocalPoints(v, e->x(), e->y()); - if (points.empty()) return; + if (!getPointToDrag(v, e->x(), e->y(), m_editingPoint)) { + return; + } m_editOrigin = e->pos(); - m_editingPoint = *points.begin(); m_originalPoint = m_editingPoint; if (m_editingCommand) { @@ -575,18 +602,18 @@ { if (!m_model) return false; - TextModel::PointList points = getLocalPoints(v, e->x(), e->y()); - if (points.empty()) return false; + TextModel::Point text(0); + if (!getPointToDrag(v, e->x(), e->y(), text)) return false; - QString label = points.begin()->label; + QString label = text.label; bool ok = false; label = QInputDialog::getText(v, tr("Enter label"), tr("Please enter a new label:"), QLineEdit::Normal, label, &ok); - if (ok && label != points.begin()->label) { + if (ok && label != text.label) { TextModel::RelabelCommand *command = - new TextModel::RelabelCommand(m_model, *points.begin(), label); + new TextModel::RelabelCommand(m_model, text, label); CommandHistory::getInstance()->addCommand(command); } Modified: sonic-visualiser/trunk/layer/TextLayer.h =================================================================== --- sonic-visualiser/trunk/layer/TextLayer.h 2009-10-20 16:16:37 UTC (rev 1664) +++ sonic-visualiser/trunk/layer/TextLayer.h 2009-10-22 15:54:21 UTC (rev 1665) @@ -96,6 +96,8 @@ TextModel::PointList getLocalPoints(View *v, int x, int y) const; + bool getPointToDrag(View *v, int x, int y, TextModel::Point &) const; + TextModel *m_model; bool m_editing; QPoint m_editOrigin; Modified: sonic-visualiser/trunk/layer/TimeInstantLayer.cpp =================================================================== --- sonic-visualiser/trunk/layer/TimeInstantLayer.cpp 2009-10-20 16:16:37 UTC (rev 1664) +++ sonic-visualiser/trunk/layer/TimeInstantLayer.cpp 2009-10-22 15:54:21 UTC (rev 1665) @@ -201,6 +201,18 @@ } QString +TimeInstantLayer::getLabelPreceding(size_t frame) const +{ + if (!m_model) return ""; + SparseOneDimensionalModel::PointList points = m_model->getPreviousPoints(frame); + for (SparseOneDimensionalModel::PointList::const_iterator i = points.begin(); + i != points.end(); ++i) { + if (i->label != "") return i->label; + } + return ""; +} + +QString TimeInstantLayer::getFeatureDescription(View *v, QPoint &pos) const { int x = pos.x(); Modified: sonic-visualiser/trunk/layer/TimeInstantLayer.h =================================================================== --- sonic-visualiser/trunk/layer/TimeInstantLayer.h 2009-10-20 16:16:37 UTC (rev 1664) +++ sonic-visualiser/trunk/layer/TimeInstantLayer.h 2009-10-22 15:54:21 UTC (rev 1665) @@ -35,6 +35,7 @@ virtual void paint(View *v, QPainter &paint, QRect rect) const; + virtual QString getLabelPreceding(size_t) const; virtual QString getFeatureDescription(View *v, QPoint &) const; virtual bool snapToFeatureFrame(View *v, int &frame, Modified: sonic-visualiser/trunk/layer/TimeValueLayer.cpp =================================================================== --- sonic-visualiser/trunk/layer/TimeValueLayer.cpp 2009-10-20 16:16:37 UTC (rev 1664) +++ sonic-visualiser/trunk/layer/TimeValueLayer.cpp 2009-10-22 15:54:21 UTC (rev 1665) @@ -505,6 +505,18 @@ } QString +TimeValueLayer::getLabelPreceding(size_t frame) const +{ + if (!m_model) return ""; + SparseTimeValueModel::PointList points = m_model->getPreviousPoints(frame); + for (SparseTimeValueModel::PointList::const_iterator i = points.begin(); + i != points.end(); ++i) { + if (i->label != "") return i->label; + } + return ""; +} + +QString TimeValueLayer::getFeatureDescription(View *v, QPoint &pos) const { int x = pos.x(); Modified: sonic-visualiser/trunk/layer/TimeValueLayer.h =================================================================== --- sonic-visualiser/trunk/layer/TimeValueLayer.h 2009-10-20 16:16:37 UTC (rev 1664) +++ sonic-visualiser/trunk/layer/TimeValueLayer.h 2009-10-22 15:54:21 UTC (rev 1665) @@ -38,6 +38,7 @@ virtual void paintVerticalScale(View *v, QPainter &paint, QRect rect) const; virtual QString getFeatureDescription(View *v, QPoint &) const; + virtual QString getLabelPreceding(size_t) const; virtual bool snapToFeatureFrame(View *v, int &frame, size_t &resolution, Modified: sonic-visualiser/trunk/rdf/RDFImporter.cpp =================================================================== --- sonic-visualiser/trunk/rdf/RDFImporter.cpp 2009-10-20 16:16:37 UTC (rev 1664) +++ sonic-visualiser/trunk/rdf/RDFImporter.cpp 2009-10-22 15:54:21 UTC (rev 1665) @@ -855,7 +855,12 @@ ).arg(m_uristring).arg(type); QString title = SimpleSPARQLQuery::singleResultQuery (s, titleQuery, "title").value; - if (title != "") model->setObjectName(title); + if (title == "") { + // take it from the end of the event type + title = type; + title.replace(QRegExp("^.*[/#]"), ""); + } + model->setObjectName(title); modelMap[timeline][type][dimensions][haveDuration] = model; models.push_back(model); Modified: sonic-visualiser/trunk/sv/main/MainWindow.cpp =================================================================== --- sonic-visualiser/trunk/sv/main/MainWindow.cpp 2009-10-20 16:16:37 UTC (rev 1664) +++ sonic-visualiser/trunk/sv/main/MainWindow.cpp 2009-10-22 15:54:21 UTC (rev 1665) @@ -37,6 +37,7 @@ #include "layer/SliceLayer.h" #include "layer/SliceableLayer.h" #include "layer/ImageLayer.h" +#include "layer/RegionLayer.h" #include "widgets/Fader.h" #include "view/Overview.h" #include "widgets/PropertyBox.h" @@ -277,6 +278,8 @@ setupHelpMenu(); statusBar(); + m_currentLabel = new QLabel; + statusBar()->addPermanentWidget(m_currentLabel); connect(m_viewManager, SIGNAL(activity(QString)), m_activityLog, SLOT(activityHappened(QString))); @@ -3491,9 +3494,36 @@ } statusBar()->showMessage(m_myStatusMessage); + + updatePositionStatusDisplays(); } void +MainWindow::updatePositionStatusDisplays() const +{ + if (!statusBar()->isVisible()) return; + + Pane *pane = 0; + size_t frame = m_viewManager->getPlaybackFrame(); + + if (m_paneStack) pane = m_paneStack->getCurrentPane(); + if (!pane) return; + + int layers = pane->getLayerCount(); + if (layers == 0) m_currentLabel->setText(""); + + for (int i = layers-1; i >= 0; --i) { + Layer *layer = pane->getLayer(i); + if (!layer) continue; + if (!layer->isLayerEditable()) continue; + QString label = layer->getLabelPreceding + (pane->alignFromReference(frame)); + m_currentLabel->setText(label); + break; + } +} + +void MainWindow::outputLevelsChanged(float left, float right) { m_fader->setPeakLeft(left); Modified: sonic-visualiser/trunk/sv/main/MainWindow.h =================================================================== --- sonic-visualiser/trunk/sv/main/MainWindow.h 2009-10-20 16:16:37 UTC (rev 1664) +++ sonic-visualiser/trunk/sv/main/MainWindow.h 2009-10-22 15:54:21 UTC (rev 1665) @@ -213,6 +213,8 @@ QFrame *m_playControlsSpacer; int m_playControlsWidth; + QLabel *m_currentLabel; + QPointer<PreferencesDialog> m_preferencesDialog; QPointer<LayerTreeDialog> m_layerTreeDialog; @@ -268,6 +270,7 @@ virtual bool checkSaveModified(); virtual void updateVisibleRangeDisplay(Pane *p) const; + virtual void updatePositionStatusDisplays() const; virtual bool shouldCreateNewSessionForRDFAudio(bool *cancel); Modified: sonic-visualiser/trunk/version.h =================================================================== --- sonic-visualiser/trunk/version.h 2009-10-20 16:16:37 UTC (rev 1664) +++ sonic-visualiser/trunk/version.h 2009-10-22 15:54:21 UTC (rev 1665) @@ -1 +1 @@ -#define SV_VERSION "1.7" +#define SV_VERSION "1.7.1" Modified: sonic-visualiser/trunk/widgets/ModelDataTableDialog.cpp =================================================================== --- sonic-visualiser/trunk/widgets/ModelDataTableDialog.cpp 2009-10-20 16:16:37 UTC (rev 1664) +++ sonic-visualiser/trunk/widgets/ModelDataTableDialog.cpp 2009-10-22 15:54:21 UTC (rev 1665) @@ -23,7 +23,9 @@ #include "IconLoader.h" #include <QTableView> +#include <QLineEdit> #include <QGridLayout> +#include <QLabel> #include <QGroupBox> #include <QDialogButtonBox> #include <QHeaderView> @@ -102,17 +104,26 @@ subgrid->setSpacing(0); subgrid->setMargin(5); + subgrid->addWidget(new QLabel(tr("Find:")), 1, 0); + subgrid->addWidget(new QLabel(tr(" ")), 1, 1); + m_find = new QLineEdit; + subgrid->addWidget(m_find, 1, 2); + connect(m_find, SIGNAL(textChanged(const QString &)), + this, SLOT(searchTextChanged(const QString &))); + connect(m_find, SIGNAL(returnPressed()), + this, SLOT(searchRepeated())); + m_tableView = new QTableView; - subgrid->addWidget(m_tableView); + subgrid->addWidget(m_tableView, 0, 0, 1, 3); -// m_tableView->verticalHeader()->hide(); -// m_tableView->horizontalHeader()->setResizeMode(QHeaderView::ResizeToContents); m_tableView->setSortingEnabled(true); m_tableView->sortByColumn(0, Qt::AscendingOrder); m_table = new ModelDataTableModel(model); m_tableView->setModel(m_table); + m_tableView->horizontalHeader()->setStretchLastSection(true); + connect(m_tableView, SIGNAL(clicked(const QModelIndex &)), this, SLOT(viewClicked(const QModelIndex &))); connect(m_tableView, SIGNAL(pressed(const QModelIndex &)), @@ -141,8 +152,11 @@ if (height < 370) { if (available.height() > 500) height = 370; } - if (width < 500) { - if (available.width() > 650) width = 500; + if (width < 650) { + if (available.width() > 750) width = 650; + else if (width < 500) { + if (available.width() > 650) width = 500; + } } resize(width, height); @@ -170,6 +184,28 @@ } void +ModelDataTableDialog::searchTextChanged(const QString &text) +{ + QModelIndex mi = m_table->findText(text); + if (mi.isValid()) { + makeCurrent(mi.row()); + m_tableView->selectionModel()->setCurrentIndex + (mi, QItemSelectionModel::ClearAndSelect); + } +} + +void +ModelDataTableDialog::searchRepeated() +{ + QModelIndex mi = m_table->findText(m_find->text()); + if (mi.isValid()) { + makeCurrent(mi.row()); + m_tableView->selectionModel()->setCurrentIndex + (mi, QItemSelectionModel::ClearAndSelect); + } +} + +void ModelDataTableDialog::makeCurrent(int row) { int rh = m_tableView->height() / m_tableView->rowHeight(0); Modified: sonic-visualiser/trunk/widgets/ModelDataTableDialog.h =================================================================== --- sonic-visualiser/trunk/widgets/ModelDataTableDialog.h 2009-10-20 16:16:37 UTC (rev 1664) +++ sonic-visualiser/trunk/widgets/ModelDataTableDialog.h 2009-10-22 15:54:21 UTC (rev 1665) @@ -24,6 +24,7 @@ class QModelIndex; class Command; class QToolBar; +class QLineEdit; class ModelDataTableDialog : public QMainWindow { @@ -49,6 +50,8 @@ void viewPressed(const QModelIndex &); void currentChanged(const QModelIndex &, const QModelIndex &); void currentChangedThroughResort(const QModelIndex &); + void searchTextChanged(const QString &); + void searchRepeated(); void insertRow(); void deleteRows(); @@ -62,6 +65,7 @@ ModelDataTableModel *m_table; QToolBar *m_playToolbar; QTableView *m_tableView; + QLineEdit *m_find; int m_currentRow; bool m_trackPlayback; }; Modified: sonic-visualiser/trunk/widgets/PropertyStack.cpp =================================================================== --- sonic-visualiser/trunk/widgets/PropertyStack.cpp 2009-10-20 16:16:37 UTC (rev 1664) +++ sonic-visualiser/trunk/widgets/PropertyStack.cpp 2009-10-22 15:54:21 UTC (rev 1665) @@ -112,8 +112,12 @@ if (layer) { shortName = LayerFactory::getInstance()->getLayerPresentationName (LayerFactory::getInstance()->getLayerType(layer)); + if (layer->getLayerPresentationName() != "") { + name = layer->getLayerPresentationName(); + } } + bool nameDiffers = (name != shortName); shortName = QString("&%1 %2").arg(i + 1).arg(shortName); QString iconName = container->getPropertyContainerIconName(); @@ -121,6 +125,9 @@ QIcon icon(IconLoader().load(iconName)); if (icon.isNull()) { addTab(box, shortName); + if (nameDiffers) { + setTabToolTip(i, name); + } } else { addTab(box, icon, QString("&%1").arg(i + 1)); setTabToolTip(i, name); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ca...@us...> - 2009-10-20 16:16:47
|
Revision: 1664 http://sv1.svn.sourceforge.net/sv1/?rev=1664&view=rev Author: cannam Date: 2009-10-20 16:16:37 +0000 (Tue, 20 Oct 2009) Log Message: ----------- * base path, etc Modified Paths: -------------- annotation-converter/convert-all.sh annotation-converter/index-all.sh Modified: annotation-converter/convert-all.sh =================================================================== --- annotation-converter/convert-all.sh 2009-10-20 15:11:03 UTC (rev 1663) +++ annotation-converter/convert-all.sh 2009-10-20 16:16:37 UTC (rev 1664) @@ -5,10 +5,26 @@ if [ -d "$y/$x" ] ; then find "$y/$x" -type f -print | \ while read z ; do + args="" + args="-d `date '+%Y-%m-%d'`" case "$z" in + *chord*Beatles*) + echo "Confidence: High" + args="$args -c 0.95 -v 2.0";; + *beat*Beatles*|*chord*Zweieck*|*chord*Queen*|*key*Carole*|*key*Queen*|*key*Zweieck*|*beat*Zweieck*) + echo "Confidence: Moderate" + args="$args -c 0.8 -v 1.0";; + *chord*Carole*|*seglab*|*key*Beatles*) + echo "Confidence: Low" + args="$args -c 0.6 -v 1.0";; + *) + echo "***ERROR*** Confidence unknown!" + ;; + esac + case "$z" in *.lab|*.txt) - echo ; echo $z - ./converter "$z" -o "${z%.*}.ttl" + echo ; echo $z + ./converter $args "$z" -o "${z%.*}.ttl" ;; *) ;; esac @@ -21,8 +37,9 @@ cat /tmp/$$ | grep -v /all/ | grep -v allannotations | \ sed -e 's/^[^\/]*\/[^\/]*\///' -e 's/\.[^.]*$//' | \ sort | uniq | \ - while read stem; do + while read stem; do echo "stem is $stem" + args="-d `date '+%Y-%m-%d'`" mkdir -p "all/`dirname \"$stem\"`" rm -f "all/$stem.total" fgrep "$stem" /tmp/$$ | while read x; do @@ -30,7 +47,7 @@ cat "$x" >> "all/$stem.total" fi done - ./converter "all/$stem.total" -o "all/$stem.ttl" + ./converter $args "all/$stem.total" -o "all/$stem.ttl" rm -f "all/$stem.total" done Modified: annotation-converter/index-all.sh =================================================================== --- annotation-converter/index-all.sh 2009-10-20 15:11:03 UTC (rev 1663) +++ annotation-converter/index-all.sh 2009-10-20 16:16:37 UTC (rev 1664) @@ -11,13 +11,15 @@ esac } +hrefroot="/files/annotations/" + echo "<h2>Available annotations</h2><ul>" > ../index.html for x in *; do ( cd .. ; tar czf "$x Annotations.tar.gz" */"$x" ) ( - echo "<li><a href=\"$x.html\">$x</a><br>" >> ../index.html + echo "<li><a href=\"${hrefroot}$x.html\">$x</a><br>" >> ../index.html echo "<h2>$x</h2>" - echo "<a href=\"$x Annotations.tar.gz\">All $x annotations in a single tar.gz file</a>" + echo "<a href=\"${hrefroot}$x Annotations.tar.gz\">All $x annotations in a single tar.gz file</a>" firsttrack="yes" for y in "$x"/*; do if [ -d "$y" ]; then @@ -45,16 +47,16 @@ label $q echo ":" if [ -f "../$q/$base.txt" ]; then - echo "<a href=\"$q/$base.txt\">csv</a>" - echo "<a href=\"$q/$base.ttl\">rdf</a>" + echo "<a href=\"${hrefroot}$q/$base.txt\">csv</a>" + echo "<a href=\"${hrefroot}$q/$base.ttl\">rdf</a>" else - echo "<a href=\"${q}lab/$base.lab\">csv</a>" - echo "<a href=\"${q}lab/$base.ttl\">rdf</a>" + echo "<a href=\"${hrefroot}${q}lab/$base.lab\">csv</a>" + echo "<a href=\"${hrefroot}${q}lab/$base.ttl\">rdf</a>" fi if [ -f "../$q/$base.svl" ]; then - echo "<a href=\"$q/$base.svl\">svl</a>" + echo "<a href=\"${hrefroot}$q/$base.svl\">svl</a>" elif [ -f "../${q}lab/$base.svl" ]; then - echo "<a href=\"${q}lab/$base.svl\">svl</a>" + echo "<a href=\"${hrefroot}${q}lab/$base.svl\">svl</a>" fi case $q in seg) ;; @@ -63,7 +65,7 @@ fi done if [ -n "$all" ]; then - echo "<li>All of the above: <a href=\"all/$base.ttl\">rdf</a>" + echo "<li>All of the above: <a href=\"${hrefroot}all/$base.ttl\">rdf</a>" fi echo "</ul>" firsttrack="" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |