diff --git a/include/audacity/Types.h b/include/audacity/Types.h index be6694fb2..3a814f6ab 100644 --- a/include/audacity/Types.h +++ b/include/audacity/Types.h @@ -58,135 +58,6 @@ // until proper public headers are created for the stuff in here. // ---------------------------------------------------------------------------- -// ---------------------------------------------------------------------------- -// A native 64-bit integer...used when referring to any number of samples -// ---------------------------------------------------------------------------- - -class sampleCount -{ -public: - using type = long long; - static_assert(sizeof(type) == 8, "Wrong width of sampleCount"); - - sampleCount () : value { 0 } {} - - // Allow implicit conversion from integral types - sampleCount ( type v ) : value { v } {} - sampleCount ( unsigned long long v ) : value ( v ) {} - sampleCount ( int v ) : value { v } {} - sampleCount ( unsigned v ) : value { v } {} - sampleCount ( long v ) : value { v } {} - - // unsigned long is 64 bit on some platforms. Let it narrow. - sampleCount ( unsigned long v ) : value ( v ) {} - - // Beware implicit conversions from floating point values! - // Otherwise the meaning of binary operators with sampleCount change - // their meaning when sampleCount is not an alias! - explicit sampleCount ( float f ) : value ( f ) {} - explicit sampleCount ( double d ) : value ( d ) {} - - sampleCount ( const sampleCount& ) = default; - sampleCount &operator= ( const sampleCount& ) = default; - - float as_float() const { return value; } - double as_double() const { return value; } - - long long as_long_long() const { return value; } - - size_t as_size_t() const { - wxASSERT(value >= 0); - wxASSERT(static_cast::type>(value) <= std::numeric_limits::max()); - return value; - } - - sampleCount &operator += (sampleCount b) { value += b.value; return *this; } - sampleCount &operator -= (sampleCount b) { value -= b.value; return *this; } - sampleCount &operator *= (sampleCount b) { value *= b.value; return *this; } - sampleCount &operator /= (sampleCount b) { value /= b.value; return *this; } - sampleCount &operator %= (sampleCount b) { value %= b.value; return *this; } - - sampleCount operator - () const { return -value; } - - sampleCount &operator ++ () { ++value; return *this; } - sampleCount operator ++ (int) - { sampleCount result{ *this }; ++value; return result; } - - sampleCount &operator -- () { --value; return *this; } - sampleCount operator -- (int) - { sampleCount result{ *this }; --value; return result; } - -private: - type value; -}; - -inline bool operator == (sampleCount a, sampleCount b) -{ - return a.as_long_long() == b.as_long_long(); -} - -inline bool operator != (sampleCount a, sampleCount b) -{ - return !(a == b); -} - -inline bool operator < (sampleCount a, sampleCount b) -{ - return a.as_long_long() < b.as_long_long(); -} - -inline bool operator >= (sampleCount a, sampleCount b) -{ - return !(a < b); -} - -inline bool operator > (sampleCount a, sampleCount b) -{ - return b < a; -} - -inline bool operator <= (sampleCount a, sampleCount b) -{ - return !(b < a); -} - -inline sampleCount operator + (sampleCount a, sampleCount b) -{ - return sampleCount{ a } += b; -} - -inline sampleCount operator - (sampleCount a, sampleCount b) -{ - return sampleCount{ a } -= b; -} - -inline sampleCount operator * (sampleCount a, sampleCount b) -{ - return sampleCount{ a } *= b; -} - -inline sampleCount operator / (sampleCount a, sampleCount b) -{ - return sampleCount{ a } /= b; -} - -inline sampleCount operator % (sampleCount a, sampleCount b) -{ - return sampleCount{ a } %= b; -} - -// ---------------------------------------------------------------------------- -// Function returning the minimum of a sampleCount and a size_t, -// hiding the casts -// ---------------------------------------------------------------------------- - -inline size_t limitSampleBufferSize( size_t bufferSize, sampleCount limit ) -{ - return - std::min( sampleCount( bufferSize ), std::max( sampleCount(0), limit ) ) - .as_size_t(); -} - // ---------------------------------------------------------------------------- // Supported sample formats // ---------------------------------------------------------------------------- diff --git a/src/AudioIO.h b/src/AudioIO.h index a2108b31c..5f6d52c9a 100644 --- a/src/AudioIO.h +++ b/src/AudioIO.h @@ -40,6 +40,7 @@ using NoteTrackConstArray = std::vector < std::shared_ptr< const NoteTrack > >; #include // to declare custom event types +#include "SampleCount.h" #include "SampleFormat.h" class wxArrayString; diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 9877f076f..f43d2dfb9 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -246,6 +246,8 @@ list( APPEND SOURCES RingBuffer.h SampleBlock.cpp SampleBlock.h + SampleCount.cpp + SampleCount.h SampleFormat.cpp SampleFormat.h Screenshot.cpp diff --git a/src/Mix.h b/src/Mix.h index 2d678da8e..0cc58a115 100644 --- a/src/Mix.h +++ b/src/Mix.h @@ -23,6 +23,7 @@ #include "SampleFormat.h" #include +class sampleCount; class Resample; class BoundedEnvelope; class WaveTrackFactory; diff --git a/src/SampleCount.cpp b/src/SampleCount.cpp new file mode 100644 index 000000000..f0258ba91 --- /dev/null +++ b/src/SampleCount.cpp @@ -0,0 +1,26 @@ +/********************************************************************** + + Audacity: A Digital Audio Editor + + @file SampleCount.cpp + + Paul Licameli split from audacity/Types.h + +**********************************************************************/ +#include "SampleCount.h" + +#include +#include + +size_t sampleCount::as_size_t() const { + wxASSERT(value >= 0); + wxASSERT(static_cast::type>(value) <= std::numeric_limits::max()); + return value; +} + +size_t limitSampleBufferSize( size_t bufferSize, sampleCount limit ) +{ + return + std::min( sampleCount( bufferSize ), std::max( sampleCount(0), limit ) ) + .as_size_t(); +} diff --git a/src/SampleCount.h b/src/SampleCount.h index be6694fb2..8b8cebfbf 100644 --- a/src/SampleCount.h +++ b/src/SampleCount.h @@ -1,68 +1,20 @@ /********************************************************************** - Audacity: A Digital Audio Editor + Audacity: A Digital Audio Editor - Types.h + @file SampleCount.h - Leland Lucius + Paul Licameli split from audacity/Types.h - Copyright (c) 2014, Audacity Team - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - 3. Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. - **********************************************************************/ +#ifndef __AUDACITY_SAMPLE_COUNT__ +#define __AUDACITY_SAMPLE_COUNT__ -#ifndef __AUDACITY_TYPES_H__ -#define __AUDACITY_TYPES_H__ +#include -#include -#include -#include -#include -#include -#include // for wxASSERT -#include // type used in inline function and member variable - -#include "Internat.h" - -// ---------------------------------------------------------------------------- -// TODO: I'd imagine this header may be replaced by other public headers. But, -// to try and minimize more changes to the base code, we can use this -// until proper public headers are created for the stuff in here. -// ---------------------------------------------------------------------------- - -// ---------------------------------------------------------------------------- -// A native 64-bit integer...used when referring to any number of samples -// ---------------------------------------------------------------------------- - -class sampleCount +//! Positions or offsets within audio files need a wide type +/*! This type disallows implicit interconversions with narrower types */ +class AUDACITY_DLL_API sampleCount { public: using type = long long; @@ -94,11 +46,7 @@ public: long long as_long_long() const { return value; } - size_t as_size_t() const { - wxASSERT(value >= 0); - wxASSERT(static_cast::type>(value) <= std::numeric_limits::max()); - return value; - } + size_t as_size_t() const; sampleCount &operator += (sampleCount b) { value += b.value; return *this; } sampleCount &operator -= (sampleCount b) { value -= b.value; return *this; } @@ -180,43 +128,7 @@ inline sampleCount operator % (sampleCount a, sampleCount b) // hiding the casts // ---------------------------------------------------------------------------- -inline size_t limitSampleBufferSize( size_t bufferSize, sampleCount limit ) -{ - return - std::min( sampleCount( bufferSize ), std::max( sampleCount(0), limit ) ) - .as_size_t(); -} +AUDACITY_DLL_API +size_t limitSampleBufferSize( size_t bufferSize, sampleCount limit ); -// ---------------------------------------------------------------------------- -// Supported sample formats -// ---------------------------------------------------------------------------- -enum sampleFormat : unsigned -{ - //! The increasing sequence of these enum values must correspond to the increasing data type width - //! These values persist in saved project files, so must not be changed in later program versions - int16Sample = 0x00020001, - int24Sample = 0x00040001, - floatSample = 0x0004000F, - - //! Two synonyms for previous values that might change if more values were added - narrowestSampleFormat = int16Sample, - widestSampleFormat = floatSample, -}; - -// ---------------------------------------------------------------------------- -// Provide the number of bytes a specific sample will take -// ---------------------------------------------------------------------------- -#define SAMPLE_SIZE(SampleFormat) (SampleFormat >> 16) - -// ---------------------------------------------------------------------------- -// Generic pointer to sample data -// ---------------------------------------------------------------------------- -typedef char *samplePtr; -typedef const char *constSamplePtr; - -// ---------------------------------------------------------------------------- -// The type for plugin IDs -// ---------------------------------------------------------------------------- -typedef wxString PluginID; - -#endif // __AUDACITY_TYPES_H__ +#endif diff --git a/src/Sequence.h b/src/Sequence.h index 4b5c791f4..e5f2ba56d 100644 --- a/src/Sequence.h +++ b/src/Sequence.h @@ -18,7 +18,7 @@ #include "SampleFormat.h" #include "xml/XMLTagHandler.h" -#include "Identifier.h" +#include "SampleCount.h" class SampleBlock; class SampleBlockFactory; diff --git a/src/VoiceKey.h b/src/VoiceKey.h index 52e7f41c2..409e8266a 100644 --- a/src/VoiceKey.h +++ b/src/VoiceKey.h @@ -16,7 +16,7 @@ #define M_PI 3.14159265358979323846 /* pi */ #endif -#include "audacity/Types.h" +#include "SampleCount.h" class WaveTrack; diff --git a/src/WaveClip.h b/src/WaveClip.h index ca109aa62..fe5407374 100644 --- a/src/WaveClip.h +++ b/src/WaveClip.h @@ -25,6 +25,7 @@ class BlockArray; class Envelope; class ProgressDialog; +class sampleCount; class SampleBlock; class SampleBlockFactory; using SampleBlockFactoryPtr = std::shared_ptr; diff --git a/src/WaveTrack.h b/src/WaveTrack.h index a8324453d..67eb7ef15 100644 --- a/src/WaveTrack.h +++ b/src/WaveTrack.h @@ -12,6 +12,7 @@ #define __AUDACITY_WAVETRACK__ #include "Track.h" +#include "SampleCount.h" #include #include diff --git a/src/effects/EBUR128.cpp b/src/effects/EBUR128.cpp index 7978380c8..dd7e94b12 100644 --- a/src/effects/EBUR128.cpp +++ b/src/effects/EBUR128.cpp @@ -9,6 +9,7 @@ Max Maisel ***********************************************************************/ #include "EBUR128.h" +#include EBUR128::EBUR128(double rate, size_t channels) : mChannelCount(channels) diff --git a/src/effects/Effect.h b/src/effects/Effect.h index f368f7330..10777b656 100644 --- a/src/effects/Effect.h +++ b/src/effects/Effect.h @@ -28,6 +28,7 @@ class wxWindow; #include "ConfigInterface.h" #include "EffectInterface.h" +#include "../SampleCount.h" #include "../SelectedRegion.h" #include "../Track.h" diff --git a/src/effects/VST/VSTEffect.cpp b/src/effects/VST/VSTEffect.cpp index 1f90145a8..e427def28 100644 --- a/src/effects/VST/VSTEffect.cpp +++ b/src/effects/VST/VSTEffect.cpp @@ -27,6 +27,7 @@ #include "VSTEffect.h" #include "../../ModuleManager.h" +#include "../../SampleCount.h" #include "../../widgets/ProgressDialog.h" diff --git a/src/effects/audiounits/AudioUnitEffect.cpp b/src/effects/audiounits/AudioUnitEffect.cpp index e3053239c..5c1f30c51 100644 --- a/src/effects/audiounits/AudioUnitEffect.cpp +++ b/src/effects/audiounits/AudioUnitEffect.cpp @@ -19,6 +19,7 @@ #if USE_AUDIO_UNITS #include "AudioUnitEffect.h" #include "../../ModuleManager.h" +#include "../../SampleCount.h" #include #include diff --git a/src/effects/ladspa/LadspaEffect.cpp b/src/effects/ladspa/LadspaEffect.cpp index 363aa1a39..f7c5798f3 100644 --- a/src/effects/ladspa/LadspaEffect.cpp +++ b/src/effects/ladspa/LadspaEffect.cpp @@ -24,6 +24,7 @@ effects from this one class. #include "LadspaEffect.h" // This class's header file +#include "SampleCount.h" #include diff --git a/src/effects/lv2/LV2Effect.cpp b/src/effects/lv2/LV2Effect.cpp index da2909bc4..424223f47 100755 --- a/src/effects/lv2/LV2Effect.cpp +++ b/src/effects/lv2/LV2Effect.cpp @@ -22,6 +22,7 @@ #endif #include "LV2Effect.h" +#include "SampleCount.h" #include diff --git a/src/toolbars/TranscriptionToolBar.h b/src/toolbars/TranscriptionToolBar.h index 6d10226df..ef0779fb0 100644 --- a/src/toolbars/TranscriptionToolBar.h +++ b/src/toolbars/TranscriptionToolBar.h @@ -17,8 +17,6 @@ #include // member variable -#include "audacity/Types.h" - class wxChoice; class wxCommandEvent; class wxImage; @@ -28,6 +26,7 @@ class AButton; class ASlider; class AudacityProject; class BoundedEnvelope; +class sampleCount; class WaveTrack; #ifdef EXPERIMENTAL_VOICE_DETECTION diff --git a/src/tracks/playabletrack/wavetrack/ui/SampleHandle.h b/src/tracks/playabletrack/wavetrack/ui/SampleHandle.h index 875082883..004e0f272 100644 --- a/src/tracks/playabletrack/wavetrack/ui/SampleHandle.h +++ b/src/tracks/playabletrack/wavetrack/ui/SampleHandle.h @@ -12,7 +12,7 @@ Paul Licameli #define __AUDACITY_SAMPLE_HANDLE__ #include "../../../../UIHandle.h" -#include "audacity/Types.h" +#include "../../../../SampleCount.h" class wxMouseEvent; class wxMouseState; diff --git a/src/tracks/playabletrack/wavetrack/ui/WaveTrackView.h b/src/tracks/playabletrack/wavetrack/ui/WaveTrackView.h index b880e85e3..144e1de23 100644 --- a/src/tracks/playabletrack/wavetrack/ui/WaveTrackView.h +++ b/src/tracks/playabletrack/wavetrack/ui/WaveTrackView.h @@ -13,8 +13,8 @@ Paul Licameli split from class WaveTrack #include "../../../ui/CommonTrackView.h" #include "../../../../ClientData.h" +#include "../../../../SampleCount.h" namespace WaveTrackViewConstants{ enum Display : int; } -#include "audacity/Types.h" struct WaveTrackSubViewType; class CutlineHandle; diff --git a/src/widgets/NumericTextCtrl.cpp b/src/widgets/NumericTextCtrl.cpp index 4c8937a0b..edbe85d3b 100644 --- a/src/widgets/NumericTextCtrl.cpp +++ b/src/widgets/NumericTextCtrl.cpp @@ -168,7 +168,7 @@ different formats. #include "NumericTextCtrl.h" -#include "audacity/Types.h" +#include "../SampleCount.h" #include "../AllThemeResources.h" #include "../AColor.h" #include "../KeyboardCapture.h"