From 03ec83ecca47d0858c3d45cde04f8bdea5c9cbb0 Mon Sep 17 00:00:00 2001 From: Tsuda Kageyu Date: Sat, 1 Aug 2015 02:23:18 +0900 Subject: [PATCH] Add AudioProperties::lengthInSeconds() and lengthInMilliseconds() functions to emulate virtual abstract functions. --- taglib/audioproperties.cpp | 115 ++++++++++++++++++++++++++++++++++++- taglib/audioproperties.h | 17 ++++++ 2 files changed, 131 insertions(+), 1 deletion(-) diff --git a/taglib/audioproperties.cpp b/taglib/audioproperties.cpp index 298b97da..4598164c 100644 --- a/taglib/audioproperties.cpp +++ b/taglib/audioproperties.cpp @@ -23,6 +23,22 @@ * http://www.mozilla.org/MPL/ * ***************************************************************************/ +#include + +#include "aiffproperties.h" +#include "apeproperties.h" +#include "asfproperties.h" +#include "flacproperties.h" +#include "mp4properties.h" +#include "mpcproperties.h" +#include "mpegproperties.h" +#include "opusproperties.h" +#include "speexproperties.h" +#include "trueaudioproperties.h" +#include "vorbisproperties.h" +#include "wavproperties.h" +#include "wavpackproperties.h" + #include "audioproperties.h" using namespace TagLib; @@ -41,11 +57,108 @@ AudioProperties::~AudioProperties() } +int TagLib::AudioProperties::lengthInSeconds() const +{ + // This is an ugly workaround but we can't add a virtual function. + // Should be virtual in taglib2. + + if(dynamic_cast(this)) + return dynamic_cast(this)->lengthInSeconds(); + + else if(dynamic_cast(this)) + return dynamic_cast(this)->lengthInSeconds(); + + else if(dynamic_cast(this)) + return dynamic_cast(this)->lengthInSeconds(); + + else if(dynamic_cast(this)) + return dynamic_cast(this)->lengthInSeconds(); + + else if(dynamic_cast(this)) + return dynamic_cast(this)->lengthInSeconds(); + + else if(dynamic_cast(this)) + return dynamic_cast(this)->lengthInSeconds(); + + else if(dynamic_cast(this)) + return dynamic_cast(this)->lengthInSeconds(); + + else if(dynamic_cast(this)) + return dynamic_cast(this)->lengthInSeconds(); + + else if(dynamic_cast(this)) + return dynamic_cast(this)->lengthInSeconds(); + + else if (dynamic_cast(this)) + return dynamic_cast(this)->lengthInSeconds(); + + else if(dynamic_cast(this)) + return dynamic_cast(this)->lengthInSeconds(); + + else if(dynamic_cast(this)) + return dynamic_cast(this)->lengthInSeconds(); + + else if(dynamic_cast(this)) + return dynamic_cast(this)->lengthInSeconds(); + + else + return 0; +} + +int TagLib::AudioProperties::lengthInMilliseconds() const +{ + // This is an ugly workaround but we can't add a virtual function. + // Should be virtual in taglib2. + + if(dynamic_cast(this)) + return dynamic_cast(this)->lengthInMilliseconds(); + + else if(dynamic_cast(this)) + return dynamic_cast(this)->lengthInMilliseconds(); + + else if(dynamic_cast(this)) + return dynamic_cast(this)->lengthInMilliseconds(); + + else if(dynamic_cast(this)) + return dynamic_cast(this)->lengthInMilliseconds(); + + else if(dynamic_cast(this)) + return dynamic_cast(this)->lengthInMilliseconds(); + + else if(dynamic_cast(this)) + return dynamic_cast(this)->lengthInMilliseconds(); + + else if(dynamic_cast(this)) + return dynamic_cast(this)->lengthInMilliseconds(); + + else if(dynamic_cast(this)) + return dynamic_cast(this)->lengthInMilliseconds(); + + else if(dynamic_cast(this)) + return dynamic_cast(this)->lengthInMilliseconds(); + + else if(dynamic_cast(this)) + return dynamic_cast(this)->lengthInMilliseconds(); + + else if(dynamic_cast(this)) + return dynamic_cast(this)->lengthInMilliseconds(); + + else if(dynamic_cast(this)) + return dynamic_cast(this)->lengthInMilliseconds(); + + else if(dynamic_cast(this)) + return dynamic_cast(this)->lengthInMilliseconds(); + + else + return 0; +} + //////////////////////////////////////////////////////////////////////////////// // protected methods //////////////////////////////////////////////////////////////////////////////// -AudioProperties::AudioProperties(ReadStyle) +AudioProperties::AudioProperties(ReadStyle) : + d(0) { } diff --git a/taglib/audioproperties.h b/taglib/audioproperties.h index 4648dcc2..f27aefca 100644 --- a/taglib/audioproperties.h +++ b/taglib/audioproperties.h @@ -69,6 +69,23 @@ namespace TagLib { */ virtual int length() const = 0; + /*! + * Returns the length of the file in seconds. The length is rounded down to + * the nearest whole second. + * + * \see lengthInMilliseconds() + */ + // BIC: make virtual + int lengthInSeconds() const; + + /*! + * Returns the length of the file in milliseconds. + * + * \see lengthInSeconds() + */ + // BIC: make virtual + int lengthInMilliseconds() const; + /*! * Returns the most appropriate bit rate for the file in kb/s. For constant * bitrate formats this is simply the bitrate of the file. For variable