# HG changeset patch # User Chris Cannam # Date 1154710897 0 # Node ID c03ec31005e16c9d3f06bf9abac49eb3ee468f74 # Parent 059b0322009cb23b1c12028081c790924f323e4b * Add zoom thumbwheels to Pane. Implement horizontal thumbwheel, and vertical depending on layer type (supported for waveform and spectrogram, though wrong for log-scale spectrogram at the moment). * Add bare bones of a spectrum layer. * Add window icon * Add shortcut for "insert time instant" on laptops without keypad enter (";") * Delete FFT processing thread when it exits (at least, next time we're asked for something interesting) * Get audio file extensions from the file readers, and thus from libsndfile for the wave file reader -- leads to rather a wide combo box in file dialog though * Better refresh order for spectrogram (redraw centre section first) diff -r 059b0322009c -r c03ec31005e1 data/fft/FFTDataServer.cpp --- a/data/fft/FFTDataServer.cpp Thu Aug 03 16:04:00 2006 +0000 +++ b/data/fft/FFTDataServer.cpp Fri Aug 04 17:01:37 2006 +0000 @@ -359,8 +359,6 @@ } m_fillThread = new FillThread(*this, fillFromColumn); - - //!!! respond appropriately when thread exits (deleteProcessingData etc) } FFTDataServer::~FFTDataServer() @@ -427,7 +425,15 @@ std::cerr << "FFTDataServer(" << this << "): resume" << std::endl; #endif m_suspended = false; - m_condition.wakeAll(); + if (m_fillThread) { + if (m_fillThread->isFinished()) { + delete m_fillThread; + m_fillThread = 0; + deleteProcessingData(); + } else { + m_condition.wakeAll(); + } + } } FFTCache * diff -r 059b0322009c -r c03ec31005e1 data/fileio/AudioFileReaderFactory.cpp --- a/data/fileio/AudioFileReaderFactory.cpp Thu Aug 03 16:04:00 2006 +0000 +++ b/data/fileio/AudioFileReaderFactory.cpp Fri Aug 04 17:01:37 2006 +0000 @@ -24,17 +24,26 @@ QString AudioFileReaderFactory::getKnownExtensions() { - return - "*.wav *.aiff *.aif" + std::set extensions; + + WavFileReader::getSupportedExtensions(extensions); #ifdef HAVE_MAD - " *.mp3" + MP3FileReader::getSupportedExtensions(extensions); #endif #ifdef HAVE_OGGZ #ifdef HAVE_FISHSOUND - " *.ogg" + OggVorbisFileReader::getSupportedExtensions(extensions); #endif #endif - ; + + QString rv; + for (std::set::const_iterator i = extensions.begin(); + i != extensions.end(); ++i) { + if (i != extensions.begin()) rv += " "; + rv += "*." + *i; + } + + return rv; } AudioFileReader * diff -r 059b0322009c -r c03ec31005e1 data/fileio/MP3FileReader.cpp --- a/data/fileio/MP3FileReader.cpp Thu Aug 03 16:04:00 2006 +0000 +++ b/data/fileio/MP3FileReader.cpp Fri Aug 04 17:01:37 2006 +0000 @@ -224,4 +224,10 @@ return MAD_FLOW_CONTINUE; } +void +MP3FileReader::getSupportedExtensions(std::set &extensions) +{ + extensions.insert("mp3"); +} + #endif diff -r 059b0322009c -r c03ec31005e1 data/fileio/MP3FileReader.h --- a/data/fileio/MP3FileReader.h Thu Aug 03 16:04:00 2006 +0000 +++ b/data/fileio/MP3FileReader.h Fri Aug 04 17:01:37 2006 +0000 @@ -22,6 +22,8 @@ #include +#include + class QProgressDialog; class MP3FileReader : public CodedAudioFileReader @@ -31,6 +33,8 @@ virtual ~MP3FileReader(); virtual QString getError() const { return m_error; } + + static void getSupportedExtensions(std::set &extensions); protected: QString m_path; diff -r 059b0322009c -r c03ec31005e1 data/fileio/OggVorbisFileReader.cpp --- a/data/fileio/OggVorbisFileReader.cpp Thu Aug 03 16:04:00 2006 +0000 +++ b/data/fileio/OggVorbisFileReader.cpp Fri Aug 04 17:01:37 2006 +0000 @@ -155,5 +155,11 @@ return 0; } +void +OggVorbisFileReader::getSupportedExtensions(std::set &extensions) +{ + extensions.insert("ogg"); +} + #endif #endif diff -r 059b0322009c -r c03ec31005e1 data/fileio/OggVorbisFileReader.h --- a/data/fileio/OggVorbisFileReader.h Thu Aug 03 16:04:00 2006 +0000 +++ b/data/fileio/OggVorbisFileReader.h Fri Aug 04 17:01:37 2006 +0000 @@ -24,6 +24,8 @@ #include #include +#include + class QProgressDialog; class OggVorbisFileReader : public CodedAudioFileReader @@ -34,6 +36,8 @@ virtual QString getError() const { return m_error; } + static void getSupportedExtensions(std::set &extensions); + protected: QString m_path; QString m_error; diff -r 059b0322009c -r c03ec31005e1 data/fileio/WavFileReader.cpp --- a/data/fileio/WavFileReader.cpp Thu Aug 03 16:04:00 2006 +0000 +++ b/data/fileio/WavFileReader.cpp Fri Aug 04 17:01:37 2006 +0000 @@ -110,3 +110,23 @@ return; } +void +WavFileReader::getSupportedExtensions(std::set &extensions) +{ + int count; + + if (sf_command(0, SFC_GET_FORMAT_MAJOR_COUNT, &count, sizeof(count))) { + extensions.insert("wav"); + extensions.insert("aiff"); + extensions.insert("aif"); + return; + } + + SF_FORMAT_INFO info; + for (int i = 0; i < count; ++i) { + info.format = i; + if (!sf_command(0, SFC_GET_FORMAT_MAJOR, &info, sizeof(info))) { + extensions.insert(info.extension); + } + } +} diff -r 059b0322009c -r c03ec31005e1 data/fileio/WavFileReader.h --- a/data/fileio/WavFileReader.h Thu Aug 03 16:04:00 2006 +0000 +++ b/data/fileio/WavFileReader.h Fri Aug 04 17:01:37 2006 +0000 @@ -21,6 +21,8 @@ #include #include +#include + class WavFileReader : public AudioFileReader { public: @@ -36,6 +38,8 @@ virtual void getInterleavedFrames(size_t start, size_t count, SampleBlock &frames) const; + static void getSupportedExtensions(std::set &extensions); + protected: SF_INFO m_fileInfo; SNDFILE *m_file;