Chris@181: /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ Chris@181: Chris@181: /* Chris@181: Vamp feature extraction plugin using the MATCH audio alignment Chris@181: algorithm. Chris@181: Chris@181: Centre for Digital Music, Queen Mary, University of London. Chris@236: Copyright (c) 2007-2020 Simon Dixon, Chris Cannam, and Queen Mary Chris@230: University of London, Copyright (c) 2014-2015 Tido GmbH. Chris@230: Chris@181: This program is free software; you can redistribute it and/or Chris@181: modify it under the terms of the GNU General Public License as Chris@181: published by the Free Software Foundation; either version 2 of the Chris@181: License, or (at your option) any later version. See the file Chris@181: COPYING included with this distribution for more information. Chris@181: */ Chris@181: Chris@181: #ifndef MATCH_TYPES_H Chris@181: #define MATCH_TYPES_H Chris@181: Chris@181: #include Chris@183: #include Chris@189: #include Chris@181: Chris@188: #ifdef USE_COMPACT_TYPES Chris@188: Chris@181: /// A single value in a feature vector Chris@183: typedef float featurebin_t; Chris@181: Chris@181: /// The distance between two feature vectors Chris@183: typedef uint8_t distance_t; Chris@183: Chris@191: /// What to cast a distance_t to when printing it (to avoid printing as char) Chris@191: typedef int distance_print_t; Chris@191: Chris@212: const distance_t DISTANCE_MAX = 0xfe; Chris@212: const distance_t INVALID_DISTANCE = 0xff; Chris@181: Chris@181: /// The integrated distance (path cost) from the origin to a given point Chris@183: typedef uint32_t pathcost_t; Chris@183: Chris@212: const pathcost_t PATHCOST_MAX = 0xfffffffe; Chris@212: const pathcost_t INVALID_PATHCOST = 0xffffffff; Chris@181: Chris@181: /// A direction advance instruction or state Chris@183: enum advance_t : uint8_t { Chris@181: AdvanceNone, Chris@181: AdvanceBoth, Chris@181: AdvanceThis, Chris@181: AdvanceOther Chris@181: }; Chris@181: Chris@188: #else Chris@188: Chris@188: #ifndef USE_PRECISE_TYPES Chris@188: #error You must define either USE_COMPACT_TYPES or USE_PRECISE_TYPES Chris@188: #endif Chris@188: Chris@188: /// A single value in a feature vector Chris@188: typedef double featurebin_t; Chris@188: Chris@188: /// The distance between two feature vectors Chris@188: typedef float distance_t; Chris@188: Chris@191: /// What to cast a distance_t to when printing it Chris@191: typedef distance_t distance_print_t; Chris@191: Chris@212: const float DISTANCE_MAX = FLT_MAX; Chris@212: const float INVALID_DISTANCE = -1.f; Chris@188: Chris@188: /// The integrated distance (path cost) from the origin to a given point Chris@188: typedef double pathcost_t; Chris@188: Chris@212: const double PATHCOST_MAX = DBL_MAX; Chris@212: const double INVALID_PATHCOST = -1.; Chris@188: Chris@188: /// A direction advance instruction or state Chris@188: enum advance_t { Chris@188: AdvanceNone, Chris@188: AdvanceBoth, Chris@188: AdvanceThis, Chris@188: AdvanceOther Chris@188: }; Chris@188: Chris@188: #endif Chris@188: Chris@188: Chris@188: /// A feature vector Chris@188: typedef std::vector feature_t; Chris@188: Chris@188: /// A sequence of feature vectors Chris@188: typedef std::vector featureseq_t; Chris@188: Chris@188: /// A distance vector Chris@188: typedef std::vector distancevec_t; Chris@188: Chris@188: /// A distance matrix Chris@188: typedef std::vector distancemat_t; Chris@188: Chris@188: /// A vector of path costs Chris@188: typedef std::vector pathcostvec_t; Chris@188: Chris@188: /// A matrix of path costs Chris@188: typedef std::vector pathcostmat_t; Chris@188: Chris@181: /// A vector of advance directions Chris@181: typedef std::vector advancevec_t; Chris@181: Chris@181: /// A matrix of advance directions Chris@181: typedef std::vector advancemat_t; Chris@181: Chris@191: /// A normalised path cost, i.e. a pathcost_t divided by some scale factor Chris@191: typedef double normpathcost_t; Chris@191: Chris@181: Chris@181: #endif