46 #include "CAAudioValueRange.h"
55 Float64 CAAudioValueRange::PickCommonSampleRate(
const AudioValueRange& inRange)
60 Float64 theAnswer = inRange.mMaximum;
62 if(ContainsValue(inRange, 44100.0))
66 else if(ContainsValue(inRange, 48000.0))
70 else if(ContainsValue(inRange, 96000.0))
74 else if(ContainsValue(inRange, 88200.0))
78 else if(ContainsValue(inRange, 64000.0))
82 else if(ContainsValue(inRange, 32000.0))
86 else if(ContainsValue(inRange, 24000.0))
90 else if(ContainsValue(inRange, 22050.0))
94 else if(ContainsValue(inRange, 16000.0))
98 else if(ContainsValue(inRange, 12000.0))
102 else if(ContainsValue(inRange, 11025.0))
106 else if(ContainsValue(inRange, 8000.0))
114 bool CAAudioValueRange::Intersection(
const AudioValueRange& x,
const AudioValueRange& y, AudioValueRange& outRange)
117 if(!IsStrictlyLessThan(x, y) && !IsStrictlyGreaterThan(x, y))
119 outRange.mMinimum = std::max(x.mMinimum, y.mMinimum);
120 outRange.mMaximum = std::min(x.mMaximum, y.mMaximum);
125 outRange.mMinimum = 0;
126 outRange.mMaximum = 0;
132 bool CAAudioValueRange::Union(
const AudioValueRange& x,
const AudioValueRange& y, AudioValueRange& outRange)
135 if(!IsStrictlyLessThan(x, y) && !IsStrictlyGreaterThan(x, y))
137 outRange.mMinimum = std::min(x.mMinimum, y.mMinimum);
138 outRange.mMaximum = std::max(x.mMaximum, y.mMaximum);
143 outRange.mMinimum = 0;
144 outRange.mMaximum = 0;
150 void CAAudioValueRange_ComputeUnion(
const AudioValueRange& inRange,
const CAAudioValueRangeList& inRangeList, CAAudioValueRangeList& outUnion)
156 CAAudioValueRangeList::const_iterator theIterator = inRangeList.begin();
159 while((theIterator != inRangeList.end()) && CAAudioValueRange::IsStrictlyLessThan(*theIterator, inRange))
162 outUnion.push_back(*theIterator);
165 std::advance(theIterator, 1);
168 if(theIterator != inRangeList.end())
170 if(!CAAudioValueRange::IsStrictlyGreaterThan(*theIterator, inRange))
175 CAAudioValueRangeList::const_iterator theGreaterIterator = theIterator;
176 std::advance(theGreaterIterator, 1);
179 while((theGreaterIterator != inRangeList.end()) && !CAAudioValueRange::IsStrictlyGreaterThan(*theGreaterIterator, inRange))
182 std::advance(theGreaterIterator, 1);
187 std::advance(theGreaterIterator, -1);
191 AudioValueRange theCoagulation;
192 theCoagulation.mMinimum = std::min(theIterator->mMinimum, inRange.mMinimum);
193 theCoagulation.mMaximum = std::max(theGreaterIterator->mMaximum, inRange.mMaximum);
196 outUnion.push_back(theCoagulation);
199 theIterator = theGreaterIterator;
200 std::advance(theIterator, 1);
205 outUnion.push_back(inRange);
209 while(theIterator != inRangeList.end())
212 outUnion.push_back(*theIterator);
215 std::advance(theIterator, 1);
222 outUnion.push_back(inRange);
226 void CAAudioValueRange_ComputeIntersection(
const AudioValueRange& inRange,
const CAAudioValueRangeList& inRangeList, CAAudioValueRangeList& outIntersections)
228 outIntersections.clear();
230 CAAudioValueRangeList::const_iterator theIterator = inRangeList.begin();
231 while(theIterator != inRangeList.end())
234 AudioValueRange theIntersection;
235 if(CAAudioValueRange::Intersection(inRange, *theIterator, theIntersection))
238 outIntersections.push_back(theIntersection);
242 std::advance(theIterator, 1);