本文整理汇总了C++中WaveTrack类的典型用法代码示例。如果您正苦于以下问题:C++ WaveTrack类的具体用法?C++ WaveTrack怎么用?C++ WaveTrack使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了WaveTrack类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: DisableSecondPass
bool EffectCompressor::InitPass1()
{
mMax=0.0;
if (!mNormalize)
DisableSecondPass();
// Find the maximum block length required for any track
size_t maxlen = 0;
SelectedTrackListOfKindIterator iter(Track::Wave, mTracks);
WaveTrack *track = (WaveTrack *) iter.First();
while (track) {
maxlen = std::max(maxlen, track->GetMaxBlockSize());
//Iterate to the next track
track = (WaveTrack *) iter.Next();
}
if(mFollow1!=NULL) {
delete[] mFollow1;
mFollow1 = NULL;
}
if(mFollow2!=NULL) {
delete[] mFollow2;
mFollow2 = NULL;
}
// Allocate buffers for the envelope
if(maxlen > 0) {
mFollow1 = new float[maxlen];
mFollow2 = new float[maxlen];
}
mFollowLen = maxlen;
return true;
}
开发者ID:henricj,项目名称:audacity,代码行数:32,代码来源:Compressor.cpp
示例2: TimeToSamplesClip
bool WaveTrack::Cut(double t0, double t1, Track **dest)
{
bool success;
sampleCount s0, s1;
WaveTrack *newTrack;
if (t1 < t0)
return false;
TimeToSamplesClip(t0, &s0);
TimeToSamplesClip(t1, &s1);
newTrack = new WaveTrack(mDirManager);
delete newTrack->mSequence;
newTrack->mSequence = NULL;
success = mSequence->Copy(s0, s1, &newTrack->mSequence);
if (success)
success = mSequence->Delete(s0, s1-s0);
if (!success) {
*dest = NULL;
delete newTrack;
return false;
}
newTrack->GetEnvelope()->CopyFrom(GetEnvelope(), t0, t1);
mEnvelope->CollapseRegion(t0, t1);
*dest = newTrack;
MarkChanged();
return true;
}
开发者ID:Kirushanr,项目名称:audacity,代码行数:32,代码来源:WaveTrack.cpp
示例3: TestEnergy
//This might continue over a number of blocks.
double VoiceKey::TestEnergy (WaveTrack & t, sampleCount start, sampleCount len)
{
double sum = 1;
auto s = start; //Keep track of start
auto originalLen = len; //Keep track of the length of block to process (its not the length of t)
const auto blockSize = limitSampleBufferSize(
t.GetMaxBlockSize(), len); //Determine size of sampling buffer
float *buffer = new float[blockSize]; //Get a sampling buffer
while(len > 0)
{
//Figure out how much to grab
auto block = limitSampleBufferSize ( t.GetBestBlockSize(s), len );
t.Get((samplePtr)buffer,floatSample, s,block); //grab the block;
//Now, go through the block and calculate energy
for(decltype(block) i = 0; i< block; i++)
{
sum += buffer[i]*buffer[i];
}
len -= block;
s += block;
}
delete [] buffer;
return sum / originalLen.as_double();
}
开发者ID:henricj,项目名称:audacity,代码行数:31,代码来源:VoiceKey.cpp
示例4: iter
bool EffectClickRemoval::Process()
{
this->CopyInputTracks(); // Set up mOutputTracks.
bool bGoodResult = true;
SelectedTrackListOfKindIterator iter(Track::Wave, mOutputTracks);
WaveTrack *track = (WaveTrack *) iter.First();
int count = 0;
while (track) {
double trackStart = track->GetStartTime();
double trackEnd = track->GetEndTime();
double t0 = mT0 < trackStart? trackStart: mT0;
double t1 = mT1 > trackEnd? trackEnd: mT1;
if (t1 > t0) {
sampleCount start = track->TimeToLongSamples(t0);
sampleCount end = track->TimeToLongSamples(t1);
sampleCount len = (sampleCount)(end - start);
if (!ProcessOne(count, track, start, len))
{
bGoodResult = false;
break;
}
}
track = (WaveTrack *) iter.Next();
count++;
}
this->ReplaceProcessedTracks(bGoodResult);
return bGoodResult;
}
开发者ID:Kirushanr,项目名称:audacity,代码行数:32,代码来源:ClickRemoval.cpp
示例5: CopyInputTracks
bool EffectPaulstretch::Process()
{
CopyInputTracks();
SelectedTrackListOfKindIterator iter(Track::Wave, mOutputTracks.get());
WaveTrack *track = (WaveTrack *) iter.First();
m_t1=mT1;
int count=0;
while (track) {
double trackStart = track->GetStartTime();
double trackEnd = track->GetEndTime();
double t0 = mT0 < trackStart? trackStart: mT0;
double t1 = mT1 > trackEnd? trackEnd: mT1;
if (t1 > t0) {
if (!ProcessOne(track, t0,t1,count))
return false;
}
track = (WaveTrack *) iter.Next();
count++;
}
mT1=m_t1;
ReplaceProcessedTracks(true);
return true;
}
开发者ID:finefin,项目名称:audacity,代码行数:27,代码来源:Paulstretch.cpp
示例6: printf
void AudioPrefetch::prefetch(bool doSeek)
{
if (writePos == ~0U) {
printf("AudioPrefetch::prefetch: invalid write position\n");
return;
}
if (MusEGlobal::song->loop() && !MusEGlobal::audio->bounce() && !MusEGlobal::extSyncFlag.value()) {
const Pos& loop = MusEGlobal::song->rPos();
unsigned n = loop.frame() - writePos;
if (n < MusEGlobal::segmentSize) {
unsigned lpos = MusEGlobal::song->lPos().frame();
// adjust loop start so we get exact loop len
if (n > lpos)
n = 0;
writePos = lpos - n;
}
}
WaveTrackList* tl = MusEGlobal::song->waves();
for (iWaveTrack it = tl->begin(); it != tl->end(); ++it) {
WaveTrack* track = *it;
// Save time. Don't bother if track is off. Track On/Off not designed for rapid repeated response (but mute is). (p3.3.29)
if(track->off())
continue;
int ch = track->channels();
float* bp[ch];
if (track->prefetchFifo()->getWriteBuffer(ch, MusEGlobal::segmentSize, bp, writePos))
continue;
track->fetchData(writePos, MusEGlobal::segmentSize, bp, doSeek);
}
writePos += MusEGlobal::segmentSize;
}
开发者ID:AndreeeCZ,项目名称:muse,代码行数:34,代码来源:audioprefetch.cpp
示例7: iter
bool EffectScienFilter::Init()
{
int selcount = 0;
double rate = 0.0;
TrackListOfKindIterator iter(Track::Wave, inputTracks());
WaveTrack *t = (WaveTrack *) iter.First();
mNyquist = (t ? t->GetRate() : GetActiveProject()->GetRate()) / 2.0;
while (t)
{
if (t->GetSelected())
{
if (selcount == 0)
{
rate = t->GetRate();
}
else
{
if (t->GetRate() != rate)
{
Effect::MessageBox(_("To apply a filter, all selected tracks must have the same sample rate."));
return false;
}
}
selcount++;
}
t = (WaveTrack *) iter.Next();
}
return true;
}
开发者ID:finefin,项目名称:audacity,代码行数:33,代码来源:ScienFilter.cpp
示例8: DisableSecondPass
bool EffectCompressor::InitPass1()
{
mMax=0.0;
if (!mNormalize)
DisableSecondPass();
// Find the maximum block length required for any track
size_t maxlen = 0;
SelectedTrackListOfKindIterator iter(Track::Wave, inputTracks());
WaveTrack *track = (WaveTrack *) iter.First();
while (track) {
maxlen = std::max(maxlen, track->GetMaxBlockSize());
//Iterate to the next track
track = (WaveTrack *) iter.Next();
}
mFollow1.reset();
mFollow2.reset();
// Allocate buffers for the envelope
if(maxlen > 0) {
mFollow1.reinit(maxlen);
mFollow2.reinit(maxlen);
}
mFollowLen = maxlen;
return true;
}
开发者ID:rbuj,项目名称:audacity,代码行数:26,代码来源:Compressor.cpp
示例9: iter
bool EffectEqualization::Process()
{
TrackListIterator iter(mWaveTracks);
WaveTrack *track = (WaveTrack *) iter.First();
int count = 0;
while (track) {
double trackStart = track->GetStartTime();
double trackEnd = track->GetEndTime();
double t0 = mT0 < trackStart? trackStart: mT0;
double t1 = mT1 > trackEnd? trackEnd: mT1;
if (t1 > t0) {
longSampleCount start = track->TimeToLongSamples(t0);
longSampleCount end = track->TimeToLongSamples(t1);
sampleCount len = (sampleCount)(end - start);
if (!ProcessOne(count, track, start, len))
return false;
}
track = (WaveTrack *) iter.Next();
count++;
}
return true;
}
开发者ID:ruthmagnus,项目名称:audacity,代码行数:26,代码来源:Equalization.cpp
示例10: iter
// Deduce m_FromFrequency from the samples at the beginning of
// the selection. Then set some other params accordingly.
void EffectChangePitch::DeduceFrequencies()
{
// As a neat trick, attempt to get the frequency of the note at the
// beginning of the selection.
SelectedTrackListOfKindIterator iter(Track::Wave, inputTracks());
WaveTrack *track = (WaveTrack *) iter.First();
if (track) {
double rate = track->GetRate();
// Auto-size window -- high sample rates require larger windowSize.
// Aim for around 2048 samples at 44.1 kHz (good down to about 100 Hz).
// To detect single notes, analysis period should be about 0.2 seconds.
// windowSize must be a power of 2.
const size_t windowSize =
// windowSize < 256 too inaccurate
std::max(256, wxRound(pow(2.0, floor((log(rate / 20.0)/log(2.0)) + 0.5))));
// we want about 0.2 seconds to catch the first note.
// number of windows rounded to nearest integer >= 1.
const unsigned numWindows =
std::max(1, wxRound((double)(rate / (5.0f * windowSize))));
double trackStart = track->GetStartTime();
double t0 = mT0 < trackStart? trackStart: mT0;
auto start = track->TimeToLongSamples(t0);
auto analyzeSize = windowSize * numWindows;
Floats buffer{ analyzeSize };
Floats freq{ windowSize / 2 };
Floats freqa{ windowSize / 2, true };
track->Get((samplePtr) buffer.get(), floatSample, start, analyzeSize);
for(unsigned i = 0; i < numWindows; i++) {
ComputeSpectrum(buffer.get() + i * windowSize, windowSize,
windowSize, rate, freq.get(), true);
for(size_t j = 0; j < windowSize / 2; j++)
freqa[j] += freq[j];
}
size_t argmax = 0;
for(size_t j = 1; j < windowSize / 2; j++)
if (freqa[j] > freqa[argmax])
argmax = j;
auto lag = (windowSize / 2 - 1) - argmax;
m_dStartFrequency = rate / lag;
}
double dFromMIDInote = FreqToMIDInote(m_dStartFrequency);
double dToMIDInote = dFromMIDInote + m_dSemitonesChange;
m_nFromPitch = PitchIndex(dFromMIDInote);
m_nFromOctave = PitchOctave(dFromMIDInote);
m_nToPitch = PitchIndex(dToMIDInote);
m_nToOctave = PitchOctave(dToMIDInote);
m_FromFrequency = m_dStartFrequency;
Calc_PercentChange();
Calc_ToFrequency();
}
开发者ID:MindFy,项目名称:audacity,代码行数:61,代码来源:ChangePitch.cpp
示例11: iter
// get the sum of the sizes of all blocks this track list
// references. However, if a block is referred to multiple
// times it is only counted once. Return value is in bytes.
wxLongLong UndoManager::CalculateSpaceUsage(int index)
{
TrackListOfKindIterator iter(Track::Wave);
WaveTrack *wt;
WaveClipList::compatibility_iterator it;
BlockArray *blocks;
unsigned int i;
// get a map of all blocks referenced in this TrackList
std::map<BlockFile*, wxLongLong> cur;
wt = (WaveTrack *) iter.First(stack[index]->tracks);
while (wt) {
for (it = wt->GetClipIterator(); it; it = it->GetNext()) {
blocks = it->GetData()->GetSequenceBlockArray();
for (i = 0; i < blocks->GetCount(); i++)
{
BlockFile* pBlockFile = blocks->Item(i)->f;
if (pBlockFile->GetFileName().FileExists())
cur[pBlockFile] = pBlockFile->GetSpaceUsage();
}
}
wt = (WaveTrack *) iter.Next();
}
if (index > 0) {
// get a set of all blocks referenced in all prev TrackList
std::set<BlockFile*> prev;
while (--index) {
wt = (WaveTrack *) iter.First(stack[index]->tracks);
while (wt) {
for (it = wt->GetClipIterator(); it; it = it->GetNext()) {
blocks = it->GetData()->GetSequenceBlockArray();
for (i = 0; i < blocks->GetCount(); i++) {
prev.insert(blocks->Item(i)->f);
}
}
wt = (WaveTrack *) iter.Next();
}
}
// remove all blocks in prevBlockFiles from curBlockFiles
std::set<BlockFile*>::const_iterator prevIter;
for (prevIter = prev.begin(); prevIter != prev.end(); prevIter++) {
cur.erase(*prevIter);
}
}
// sum the sizes of the blocks remaining in curBlockFiles;
wxLongLong bytes = 0;
std::map<BlockFile*, wxLongLong>::const_iterator curIter;
for (curIter = cur.begin(); curIter != cur.end(); curIter++) {
bytes += curIter->second;
}
return bytes;
}
开发者ID:tuanmasterit,项目名称:audacity,代码行数:60,代码来源:UndoManager.cpp
示例12: iter
void UndoManager::Debug()
{
for (unsigned int i = 0; i < stack.Count(); i++) {
TrackListIterator iter(stack[i]->tracks);
WaveTrack *t = (WaveTrack *) (iter.First());
printf("*%d* %s %f\n", i, (i == (unsigned int)current) ? "-->" : " ",
t ? t->GetEndTime()-t->GetStartTime() : 0);
}
}
开发者ID:ruthmagnus,项目名称:audacity,代码行数:10,代码来源:UndoManager.cpp
示例13: CleanSpeechMayReadNoisegate
bool EffectNoiseRemoval::Process()
{
if (!mDoProfile && !mHasProfile)
CleanSpeechMayReadNoisegate();
// If we still don't have a profile we have a problem.
// This should only happen in CleanSpeech.
if(!mDoProfile && !mHasProfile) {
wxMessageBox(
_("Attempt to run Noise Removal without a noise profile.\n"));
return false;
}
Initialize();
// This same code will both remove noise and profile it,
// depending on 'mDoProfile'
this->CopyInputWaveTracks(); // Set up mOutputWaveTracks.
bool bGoodResult = true;
TrackListIterator iter(mOutputWaveTracks);
WaveTrack *track = (WaveTrack *) iter.First();
int count = 0;
while (track) {
double trackStart = track->GetStartTime();
double trackEnd = track->GetEndTime();
double t0 = mT0 < trackStart? trackStart: mT0;
double t1 = mT1 > trackEnd? trackEnd: mT1;
if (t1 > t0) {
sampleCount start = track->TimeToLongSamples(t0);
sampleCount end = track->TimeToLongSamples(t1);
sampleCount len = (sampleCount)(end - start);
if (!ProcessOne(count, track, start, len)) {
Cleanup();
bGoodResult = false;
break;
}
}
track = (WaveTrack *) iter.Next();
count++;
}
if (bGoodResult && mDoProfile) {
CleanSpeechMayWriteNoiseGate();
mHasProfile = true;
mDoProfile = false;
}
if (bGoodResult)
Cleanup();
this->ReplaceProcessedWaveTracks(bGoodResult);
return bGoodResult;
}
开发者ID:tuanmasterit,项目名称:audacity,代码行数:55,代码来源:NoiseRemoval.cpp
示例14: iter
bool EffectFindClipping::Process()
{
LabelTrack *l = NULL;
Track *original = NULL;
TrackListOfKindIterator iter(Track::Label, mTracks);
for (Track *t = iter.First(); t; t = iter.Next()) {
if (t->GetName() == wxT("Clipping")) {
l = (LabelTrack *) t;
// copy LabelTrack here, so it can be undone on cancel
l->Copy(l->GetStartTime(), l->GetEndTime(), &original);
original->SetOffset(l->GetStartTime());
original->SetName(wxT("Clipping"));
break;
}
}
if (!l) {
l = mFactory->NewLabelTrack();
l->SetName(_("Clipping"));
mTracks->Add((Track *) l);
}
int count = 0;
// JC: Only process selected tracks.
SelectedTrackListOfKindIterator waves(Track::Wave, mTracks);
WaveTrack *t = (WaveTrack *) waves.First();
while (t) {
double trackStart = t->GetStartTime();
double trackEnd = t->GetEndTime();
double t0 = mT0 < trackStart ? trackStart : mT0;
double t1 = mT1 > trackEnd ? trackEnd : mT1;
if (t1 > t0) {
sampleCount start = t->TimeToLongSamples(t0);
sampleCount end = t->TimeToLongSamples(t1);
sampleCount len = (sampleCount)(end - start);
if (!ProcessOne(l, count, t, start, len)) {
//put it back how it was
mTracks->Remove((Track *) l);
if(original) {
mTracks->Add((Track *) original);
}
return false;
}
}
count++;
t = (WaveTrack *) waves.Next();
}
return true;
}
开发者ID:PhilSee,项目名称:audacity,代码行数:55,代码来源:FindClipping.cpp
示例15: printf
void AudioPrefetch::seek(unsigned seekTo)
{
// printf("seek %d\n", seekTo);
#ifdef AUDIOPREFETCH_DEBUG
printf("AudioPrefetch::seek to:%u seekCount:%d\n", seekTo, seekCount);
#endif
// Speedup: More than one seek message pending?
// Eat up seek messages until we get to the very LATEST one,
// because all the rest which came before it are irrelevant now,
// and processing them all was taking extreme time, especially with
// resampling enabled.
// In particular, when the user 'slides' the play cursor back and forth
// there are MANY seek messages in the pipe, and with resampling enabled
// it was taking minutes to finish seeking. If the user hit play during that time,
// things were messed up (FIFO underruns, choppy intermittent sound etc).
// Added by Tim. p3.3.20
if (seekCount > 1)
{
--seekCount;
return;
}
writePos = seekTo;
WaveTrackList* tl = song->waves();
for (iWaveTrack it = tl->begin(); it != tl->end(); ++it)
{
WaveTrack* track = *it;
track->clearPrefetchFifo();
}
bool isFirstPrefetch = true;
for (unsigned int i = 0; i < (fifoLength) - 1; ++i)//prevent compiler warning: comparison of signed/unsigned
{
// Indicate do a seek command before read, but only on the first pass.
// Changed by Tim. p3.3.17
//prefetch();
prefetch(isFirstPrefetch);
isFirstPrefetch = false;
// To help speed things up even more, check the count again. Return if more seek messages are pending.
// Added by Tim. p3.3.20
if (seekCount > 1)
{
--seekCount;
return;
}
}
seekPos = seekTo;
//seekDone = true;
--seekCount;
}
开发者ID:87maxi,项目名称:oom,代码行数:54,代码来源:audioprefetch.cpp
示例16: iter
void AudacityProject::OnPlotSpectrum(wxCommandEvent & event)
{
int selcount = 0;
WaveTrack *selt = NULL;
TrackListIterator iter(mTracks);
VTrack *t = iter.First();
while (t) {
if (t->GetSelected())
selcount++;
if (t->GetKind() == VTrack::Wave)
selt = (WaveTrack *) t;
t = iter.Next();
}
if (selcount != 1) {
wxMessageBox(_("Please select a single track first.\n"));
return;
}
/* This shouldn't be possible, since the menu is grayed out.
* But we'll check just in case it does happen, to prevent
* the crash that would result. */
if (!selt) {
wxMessageBox(_("Please select a track first.\n"));
return;
}
sampleCount s0 = (sampleCount) ((mViewInfo.sel0 - selt->GetOffset())
* selt->GetRate());
sampleCount s1 = (sampleCount) ((mViewInfo.sel1 - selt->GetOffset())
* selt->GetRate());
sampleCount slen = s1 - s0;
if (slen > 1048576)
slen = 1048576;
float *data = new float[slen];
sampleType *data_sample = new sampleType[slen];
if (s0 >= selt->GetNumSamples() || s0 + slen > selt->GetNumSamples()) {
wxMessageBox(_("Not enough samples selected.\n"));
delete[]data;
delete[]data_sample;
return;
}
selt->Get(data_sample, s0, slen);
for (sampleCount i = 0; i < slen; i++)
data[i] = data_sample[i] / 32767.;
gFreqWindow->Plot(slen, data, selt->GetRate());
gFreqWindow->Show(true);
gFreqWindow->Raise();
delete[]data;
delete[]data_sample;
}
开发者ID:andreipaga,项目名称:audacity,代码行数:59,代码来源:Menus.cpp
示例17: TIMER_START
void UndoManager::CalculateSpaceUsage()
{
TIMER_START( "CalculateSpaceUsage", space_calc );
TrackListOfKindIterator iter(Track::Wave);
space.Clear();
space.Add(0, stack.GetCount());
Set s1, s2;
Set *prev = &s1;
Set *cur = &s2;
for (size_t i = 0, cnt = stack.GetCount(); i < cnt; i++)
{
// Swap map pointers
std::swap(cur, prev);
// And clean out the NEW current map
cur->clear();
// Scan all tracks at current level
WaveTrack *wt = (WaveTrack *) iter.First(stack[i]->tracks);
while (wt)
{
// Scan all clips within current track
WaveClipList::compatibility_iterator it = wt->GetClipIterator();
while (it)
{
// Scan all blockfiles within current clip
BlockArray *blocks = it->GetData()->GetSequenceBlockArray();
for (size_t b = 0, cnt = blocks->size(); b < cnt; b++)
{
BlockFile *file = (*blocks)[b].f;
// Accumulate space used by the file if the file didn't exist
// in the previous level
if (prev->count(file) == 0 && cur->count(file) == 0)
{
space[i] += file->GetSpaceUsage().GetValue();
}
// Add file to current set
cur->insert(file);
}
it = it->GetNext();
}
wt = (WaveTrack *) iter.Next();
}
}
TIMER_STOP( space_calc );
}
开发者ID:ShanghaiTimes,项目名称:audacity-1,代码行数:54,代码来源:UndoManager.cpp
示例18: Clear
sampleCount Mixer::Process(int maxToProcess)
{
if (mT >= mT1)
return 0;
int i, j;
sampleCount out;
sampleCount maxOut = 0;
int *channelFlags = new int[mNumChannels];
mMaxOut = maxToProcess;
Clear();
for(i=0; i<mNumInputTracks; i++) {
WaveTrack *track = mInputTrack[i];
for(j=0; j<mNumChannels; j++)
channelFlags[j] = 0;
switch(track->GetChannel()) {
case Track::MonoChannel:
default:
for(j=0; j<mNumChannels; j++)
channelFlags[j] = 1;
break;
case Track::LeftChannel:
channelFlags[0] = 1;
break;
case Track::RightChannel:
if (mNumChannels >= 2)
channelFlags[1] = 1;
else
channelFlags[0] = 1;
break;
}
if (mTimeTrack ||
track->GetRate() != mRate)
out = MixVariableRates(channelFlags, track,
&mSamplePos[i], mSampleQueue[i],
&mQueueStart[i], &mQueueLen[i], mSRC[i]);
else
out = MixSameRate(channelFlags, track, &mSamplePos[i]);
if (out > maxOut)
maxOut = out;
}
mT += (maxOut / mRate);
delete [] channelFlags;
return maxOut;
}
开发者ID:Kirushanr,项目名称:audacity,代码行数:53,代码来源:Mix.cpp
示例19: GetAdditionalSpaceUsage
// Find out how much additional space was used to execute
// this operation.
//
// Computed by getting a list of all blocks referenced by
// *this* TrackList and removing all blocks referenced by
// any previous TrackList.
wxLongLong TrackList::GetAdditionalSpaceUsage(UndoStack *stack)
{
TrackListNode *p;
// get a map of all blocks referenced in this TrackList
std::map<BlockFile*,wxLongLong> curBlockFiles;
for (p = head; p; p = p->next) {
if (p->t->GetKind() == Track::Wave) {
WaveTrack* track = ((WaveTrack*)p->t);
for (WaveClipList::Node* it=track->GetClipIterator(); it; it=it->GetNext())
{
WaveClip* clip = it->GetData();
BlockArray *blocks = clip->GetSequenceBlockArray();
for (unsigned int i = 0; i < blocks->GetCount(); i++)
curBlockFiles[blocks->Item(i)->f] = blocks->Item(i)->f->GetSpaceUsage();
}
}
}
// get a set of all blocks referenced in all prev TrackList
std::set<BlockFile*> prevBlockFiles;
unsigned int undoStackIdx = 0;
for (; undoStackIdx < stack->GetCount(); undoStackIdx++) {
UndoStackElem *stackElem = stack->Item(undoStackIdx);
if (stackElem->tracks == this)
break;
for (p = stackElem->tracks->head; p; p = p->next) {
if (p->t->GetKind() == Track::Wave) {
WaveTrack* track = ((WaveTrack*)p->t);
for (WaveClipList::Node* it=track->GetClipIterator(); it; it=it->GetNext())
{
WaveClip* clip = it->GetData();
BlockArray *blocks = clip->GetSequenceBlockArray();
for (unsigned int i = 0; i < blocks->GetCount(); i++)
prevBlockFiles.insert(blocks->Item(i)->f);
}
}
}
}
// remove all blocks in prevBlockFiles from curBlockFiles
std::set<BlockFile*>::const_iterator prevIter = prevBlockFiles.begin();
for (; prevIter != prevBlockFiles.end(); prevIter++)
curBlockFiles.erase(*prevIter);
// sum the sizes of the blocks remaining in curBlockFiles;
std::map<BlockFile*,wxLongLong>::const_iterator curBfIter =
curBlockFiles.begin();
wxLongLong bytes = 0;
for (;curBfIter != curBlockFiles.end(); curBfIter++)
bytes += curBfIter->second;
return bytes;
}
开发者ID:ruthmagnus,项目名称:audacity,代码行数:59,代码来源:Track.cpp
示例20: iter
//TODO: There are a lot of places where a track is being checked
// to see if it is stereo. Consolidate these
bool EffectStereoToMono::CheckWhetherSkipEffect()
{
TrackListIterator iter(mWaveTracks);
WaveTrack *t = (WaveTrack*)iter.First();
while (t) {
if (t->GetLinked()) {
return false;
}
t = (WaveTrack *)iter.Next();
}
return true;
}
开发者ID:andreipaga,项目名称:audacity,代码行数:15,代码来源:StereoToMono.cpp
注:本文中的WaveTrack类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论