# HG changeset patch # User Chris Cannam # Date 1147261432 0 # Node ID 534373d65f397b11177fcb2db21d9f13e81c7c7b # Parent 7648e8502822e3445793fa4adebc229be326ccc1 * Use fractional window overlaps in the spectrogram, instead of percentages (90% is kind of meaningless when none of your window sizes are divisible by 10!) * ResizeableBitmap -> ResizeableBitset and the odd other tidy up diff -r 7648e8502822 -r 534373d65f39 base/FFTCache.h --- a/base/FFTCache.h Tue May 09 16:18:59 2006 +0000 +++ b/base/FFTCache.h Wed May 10 11:43:52 2006 +0000 @@ -36,7 +36,7 @@ virtual float getNormalizedMagnitudeAt(size_t x, size_t y) const = 0; virtual float getPhaseAt(size_t x, size_t y) const = 0; - virtual bool haveColumnAt(size_t x) const = 0; + virtual bool haveSetColumnAt(size_t x) const = 0; virtual void setColumnAt(size_t x, float *mags, float *phases, float factor) = 0; bool isLocalPeak(size_t x, size_t y) const { @@ -120,7 +120,7 @@ } } - virtual bool haveColumnAt(size_t x) const { + virtual bool haveSetColumnAt(size_t x) const { return true; } diff -r 7648e8502822 -r 534373d65f39 base/ResizeableBitmap.h --- a/base/ResizeableBitmap.h Tue May 09 16:18:59 2006 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,73 +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 2006 Chris Cannam. - - 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. -*/ - -#ifndef _RESIZEABLE_BITMAP_H_ -#define _RESIZEABLE_BITMAP_H_ - -#include -#include - -class ResizeableBitmap { - -public: - ResizeableBitmap() : m_bits(0) { - } - ResizeableBitmap(size_t size) : m_bits(new std::vector) { - m_bits->assign(size / 8 + 1, 0); - } - ResizeableBitmap(const ResizeableBitmap &b) { - m_bits = new std::vector(*b.m_bits); - } - ResizeableBitmap &operator=(const ResizeableBitmap &b) { - if (&b != this) return *this; - delete m_bits; - m_bits = new std::vector(*b.m_bits); - return *this; - } - ~ResizeableBitmap() { - delete m_bits; - } - - void resize(size_t bits) { // losing all data - if (!m_bits || bits < m_bits->size()) { - delete m_bits; - m_bits = new std::vector; - } - m_bits->assign(bits / 8, 0); - } - - bool get(size_t column) const { - return ((*m_bits)[column / 8]) & (1u << (column % 8)); - } - - void set(size_t column) { - ((*m_bits)[column / 8]) |= (uint8_t(1) << (column % 8)); - } - - void reset(size_t column) { - ((*m_bits)[column / 8]) &= ~(uint8_t(1) << (column % 8)); - } - - void copy(size_t source, size_t dest) { - get(source) ? set(dest) : reset(dest); - } - -private: - std::vector *m_bits; -}; - - -#endif - diff -r 7648e8502822 -r 534373d65f39 base/ResizeableBitset.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/base/ResizeableBitset.h Wed May 10 11:43:52 2006 +0000 @@ -0,0 +1,73 @@ +/* -*- 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 2006 Chris Cannam. + + 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. +*/ + +#ifndef _RESIZEABLE_BITMAP_H_ +#define _RESIZEABLE_BITMAP_H_ + +#include +#include + +class ResizeableBitset { + +public: + ResizeableBitset() : m_bits(0) { + } + ResizeableBitset(size_t size) : m_bits(new std::vector) { + m_bits->assign(size / 8 + 1, 0); + } + ResizeableBitset(const ResizeableBitset &b) { + m_bits = new std::vector(*b.m_bits); + } + ResizeableBitset &operator=(const ResizeableBitset &b) { + if (&b != this) return *this; + delete m_bits; + m_bits = new std::vector(*b.m_bits); + return *this; + } + ~ResizeableBitset() { + delete m_bits; + } + + void resize(size_t bits) { // losing all data + if (!m_bits || bits < m_bits->size()) { + delete m_bits; + m_bits = new std::vector; + } + m_bits->assign(bits / 8, 0); + } + + bool get(size_t column) const { + return ((*m_bits)[column / 8]) & (1u << (column % 8)); + } + + void set(size_t column) { + ((*m_bits)[column / 8]) |= (uint8_t(1) << (column % 8)); + } + + void reset(size_t column) { + ((*m_bits)[column / 8]) &= ~(uint8_t(1) << (column % 8)); + } + + void copy(size_t source, size_t dest) { + get(source) ? set(dest) : reset(dest); + } + +private: + std::vector *m_bits; +}; + + +#endif + diff -r 7648e8502822 -r 534373d65f39 base/Window.h --- a/base/Window.h Tue May 09 16:18:59 2006 +0000 +++ b/base/Window.h Wed May 10 11:43:52 2006 +0000 @@ -108,8 +108,8 @@ case GaussianWindow: for (i = 0; i < n; ++i) { - mult[i] = mult[i] * exp((-1.0 / (n*n)) * ((T(2*i) - n) * - (T(2*i) - n))); + mult[i] = mult[i] * exp(-(pow(i - (n-1)/2.0, 2) / + (2 * pow(0.25 * n, 2)))); // sd = 0.25 } break;