1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-04-30 15:49:41 +02:00

Change almost all uses of WaveTrack::Get() to GetFloats() ...

... A call graph browser easily shows that the extra generality of fetching
samples in some other format is only used in Benchmark -- where the format is
always the same as what the track is constructed with.

This makes re-verification of the claims in comments two commits ago easier.
This commit is contained in:
Paul Licameli 2021-05-23 17:43:38 -04:00
parent 0aa8625cff
commit f369b5109b
30 changed files with 97 additions and 67 deletions

View File

@ -602,7 +602,7 @@ void FrequencyPlotDialog::GetAudio()
mDataLen = dataLen.as_size_t(); mDataLen = dataLen.as_size_t();
mData = Floats{ mDataLen }; mData = Floats{ mDataLen };
// Don't allow throw for bad reads // Don't allow throw for bad reads
track->Get((samplePtr)mData.get(), floatSample, start, mDataLen, track->GetFloats(mData.get(), start, mDataLen,
fillZero, false); fillZero, false);
} }
else { else {
@ -617,7 +617,7 @@ void FrequencyPlotDialog::GetAudio()
auto start = track->TimeToLongSamples(selectedRegion.t0()); auto start = track->TimeToLongSamples(selectedRegion.t0());
Floats buffer2{ mDataLen }; Floats buffer2{ mDataLen };
// Again, stop exceptions // Again, stop exceptions
track->Get((samplePtr)buffer2.get(), floatSample, start, mDataLen, track->GetFloats(buffer2.get(), start, mDataLen,
fillZero, false); fillZero, false);
for (size_t i = 0; i < mDataLen; i++) for (size_t i = 0; i < mDataLen; i++)
mData[i] += buffer2[i]; mData[i] += buffer2[i];

View File

@ -610,8 +610,8 @@ void MixerTrackCluster::UpdateMeter(const double t0, const double t1)
Floats tempFloatsArray{ nFrames }; Floats tempFloatsArray{ nFrames };
decltype(tempFloatsArray) meterFloatsArray; decltype(tempFloatsArray) meterFloatsArray;
// Don't throw on read error in this drawing update routine // Don't throw on read error in this drawing update routine
bool bSuccess = pTrack->Get((samplePtr)tempFloatsArray.get(), bool bSuccess = pTrack->GetFloats(tempFloatsArray.get(),
floatSample, startSample, nFrames, fillZero, false); startSample, nFrames, fillZero, false);
if (bSuccess) if (bSuccess)
{ {
// We always pass a stereo sample array to the meter, as it shows 2 channels. // We always pass a stereo sample array to the meter, as it shows 2 channels.
@ -625,8 +625,8 @@ void MixerTrackCluster::UpdateMeter(const double t0, const double t1)
if (GetRight()) if (GetRight())
// Again, don't throw // Again, don't throw
bSuccess = GetRight()->Get((samplePtr)tempFloatsArray.get(), bSuccess = GetRight()->GetFloats(tempFloatsArray.get(),
floatSample, startSample, nFrames, fillZero, false); startSample, nFrames, fillZero, false);
if (bSuccess) if (bSuccess)
// Interleave right channel, or duplicate same signal for "right" channel in mono case. // Interleave right channel, or duplicate same signal for "right" channel in mono case.

View File

@ -149,7 +149,7 @@ sampleCount VoiceKey::OnForward (
//To speed things up, create a local buffer to store things in, to avoid the costly t.Get(); //To speed things up, create a local buffer to store things in, to avoid the costly t.Get();
//Only go through the first SignalWindowSizeInt samples, and choose the first that trips the key. //Only go through the first SignalWindowSizeInt samples, and choose the first that trips the key.
Floats buffer{ remaining }; Floats buffer{ remaining };
t.Get((samplePtr)buffer.get(), floatSample, t.GetFloats(buffer.get(),
lastsubthresholdsample, remaining); lastsubthresholdsample, remaining);
@ -299,7 +299,7 @@ sampleCount VoiceKey::OnBackward (
//To speed things up, create a local buffer to store things in, to avoid the costly t.Get(); //To speed things up, create a local buffer to store things in, to avoid the costly t.Get();
//Only go through the first mSilentWindowSizeInt samples, and choose the first that trips the key. //Only go through the first mSilentWindowSizeInt samples, and choose the first that trips the key.
Floats buffer{ remaining }; Floats buffer{ remaining };
t.Get((samplePtr)buffer.get(), floatSample, t.GetFloats(buffer.get(),
lastsubthresholdsample - remaining, remaining); lastsubthresholdsample - remaining, remaining);
//Initialize these trend markers atrend and ztrend. They keep track of the //Initialize these trend markers atrend and ztrend. They keep track of the
@ -442,7 +442,7 @@ sampleCount VoiceKey::OffForward (
//To speed things up, create a local buffer to store things in, to avoid the costly t.Get(); //To speed things up, create a local buffer to store things in, to avoid the costly t.Get();
//Only go through the first SilentWindowSizeInt samples, and choose the first that trips the key. //Only go through the first SilentWindowSizeInt samples, and choose the first that trips the key.
Floats buffer{ remaining }; Floats buffer{ remaining };
t.Get((samplePtr)buffer.get(), floatSample, t.GetFloats(buffer.get(),
lastsubthresholdsample, remaining); lastsubthresholdsample, remaining);
//Initialize these trend markers atrend and ztrend. They keep track of the //Initialize these trend markers atrend and ztrend. They keep track of the
@ -579,7 +579,7 @@ sampleCount VoiceKey::OffBackward (
//To speed things up, create a local buffer to store things in, to avoid the costly t.Get(); //To speed things up, create a local buffer to store things in, to avoid the costly t.Get();
//Only go through the first SilentWindowSizeInt samples, and choose the first that trips the key. //Only go through the first SilentWindowSizeInt samples, and choose the first that trips the key.
Floats buffer{ remaining }; Floats buffer{ remaining };
t.Get((samplePtr)buffer.get(), floatSample, t.GetFloats(buffer.get(),
lastsubthresholdsample - remaining, remaining); lastsubthresholdsample - remaining, remaining);
//Initialize these trend markers atrend and ztrend. They keep track of the //Initialize these trend markers atrend and ztrend. They keep track of the
@ -870,7 +870,7 @@ double VoiceKey::TestEnergy (
//Figure out how much to grab //Figure out how much to grab
auto block = limitSampleBufferSize ( t.GetBestBlockSize(s), len ); auto block = limitSampleBufferSize ( t.GetBestBlockSize(s), len );
t.Get((samplePtr)buffer.get(), floatSample, s,block); //grab the block; t.GetFloats(buffer.get(), s,block); //grab the block;
//Now, go through the block and calculate energy //Now, go through the block and calculate energy
for(decltype(block) i = 0; i< block; i++) for(decltype(block) i = 0; i< block; i++)
@ -913,7 +913,7 @@ double VoiceKey::TestSignChanges(
//Figure out how much to grab //Figure out how much to grab
auto block = limitSampleBufferSize ( t.GetBestBlockSize(s), len ); auto block = limitSampleBufferSize ( t.GetBestBlockSize(s), len );
t.Get((samplePtr)buffer.get(), floatSample, s, block); //grab the block; t.GetFloats(buffer.get(), s, block); //grab the block;
if (len == originalLen) if (len == originalLen)
{ {
@ -970,7 +970,7 @@ double VoiceKey::TestDirectionChanges(
//Figure out how much to grab //Figure out how much to grab
auto block = limitSampleBufferSize ( t.GetBestBlockSize(s), len ); auto block = limitSampleBufferSize ( t.GetBestBlockSize(s), len );
t.Get((samplePtr)buffer.get(), floatSample, s, block); //grab the block; t.GetFloats(buffer.get(), s, block); //grab the block;
if (len == originalLen) { if (len == originalLen) {
//The first time through, set stuff up special. //The first time through, set stuff up special.

View File

@ -2594,8 +2594,8 @@ const float *WaveTrackCache::GetFloats(
if (start0 >= 0) { if (start0 >= 0) {
const auto len0 = mPTrack->GetBestBlockSize(start0); const auto len0 = mPTrack->GetBestBlockSize(start0);
wxASSERT(len0 <= mBufferSize); wxASSERT(len0 <= mBufferSize);
if (!mPTrack->Get( if (!mPTrack->GetFloats(
samplePtr(mBuffers[0].data.get()), floatSample, start0, len0, mBuffers[0].data.get(), start0, len0,
fillZero, mayThrow)) fillZero, mayThrow))
return nullptr; return nullptr;
mBuffers[0].start = start0; mBuffers[0].start = start0;
@ -2622,7 +2622,7 @@ const float *WaveTrackCache::GetFloats(
if (start1 == end0) { if (start1 == end0) {
const auto len1 = mPTrack->GetBestBlockSize(start1); const auto len1 = mPTrack->GetBestBlockSize(start1);
wxASSERT(len1 <= mBufferSize); wxASSERT(len1 <= mBufferSize);
if (!mPTrack->Get(samplePtr(mBuffers[1].data.get()), floatSample, start1, len1, fillZero, mayThrow)) if (!mPTrack->GetFloats(mBuffers[1].data.get(), start1, len1, fillZero, mayThrow))
return nullptr; return nullptr;
mBuffers[1].start = start1; mBuffers[1].start = start1;
mBuffers[1].len = len1; mBuffers[1].len = len1;
@ -2632,7 +2632,7 @@ const float *WaveTrackCache::GetFloats(
} }
wxASSERT(mNValidBuffers < 2 || mBuffers[0].end() == mBuffers[1].start); wxASSERT(mNValidBuffers < 2 || mBuffers[0].end() == mBuffers[1].start);
samplePtr buffer = 0; samplePtr buffer = nullptr; // will point into mOverlapBuffer
auto remaining = len; auto remaining = len;
// Possibly get an initial portion that is uncached // Possibly get an initial portion that is uncached
@ -2647,8 +2647,10 @@ const float *WaveTrackCache::GetFloats(
mOverlapBuffer.Resize(len, format); mOverlapBuffer.Resize(len, format);
// initLen is not more than len: // initLen is not more than len:
auto sinitLen = initLen.as_size_t(); auto sinitLen = initLen.as_size_t();
if (!mPTrack->Get(mOverlapBuffer.ptr(), format, start, sinitLen, if (!mPTrack->GetFloats(
fillZero, mayThrow)) // See comment below about casting
reinterpret_cast<float *>(mOverlapBuffer.ptr()),
start, sinitLen, fillZero, mayThrow))
return nullptr; return nullptr;
wxASSERT( sinitLen <= remaining ); wxASSERT( sinitLen <= remaining );
remaining -= sinitLen; remaining -= sinitLen;
@ -2675,7 +2677,7 @@ const float *WaveTrackCache::GetFloats(
else if (leni > 0) { else if (leni > 0) {
// leni is nonnegative, therefore start falls within mBuffers[ii] // leni is nonnegative, therefore start falls within mBuffers[ii]
// But we can't satisfy all from one buffer, so copy // But we can't satisfy all from one buffer, so copy
if (buffer == 0) { if (!buffer) {
mOverlapBuffer.Resize(len, format); mOverlapBuffer.Resize(len, format);
buffer = mOverlapBuffer.ptr(); buffer = mOverlapBuffer.ptr();
} }
@ -2693,11 +2695,13 @@ const float *WaveTrackCache::GetFloats(
if (remaining > 0) { if (remaining > 0) {
// Very big request! // Very big request!
// Fall back to direct fetch // Fall back to direct fetch
if (buffer == 0) { if (!buffer) {
mOverlapBuffer.Resize(len, format); mOverlapBuffer.Resize(len, format);
buffer = mOverlapBuffer.ptr(); buffer = mOverlapBuffer.ptr();
} }
if (!mPTrack->Get(buffer, format, start, remaining, fillZero, mayThrow)) // See comment below about casting
if (!mPTrack->GetFloats( reinterpret_cast<float*>(buffer),
start, remaining, fillZero, mayThrow))
return 0; return 0;
} }

View File

@ -246,6 +246,31 @@ private:
/// same value for "start" in both calls to "Set" and "Get" it is /// same value for "start" in both calls to "Set" and "Get" it is
/// guaranteed that the same samples are affected. /// guaranteed that the same samples are affected.
/// ///
//! Retrieve samples from a track in floating-point format, regardless of the storage format
/*!
@param buffer receives the samples
@param start starting sample, relative to absolute time zero (not to the track's offset value)
@param len how many samples to get. buffer is assumed sufficiently large
@param fill how to assign values for sample positions between clips
@param mayThrow if false, fill buffer with zeros when there is failure to retrieve samples; else throw
@param[out] pNumWithinClips Report how many samples were copied from within clips, rather
than filled according to fillFormat; but these were not necessarily one contiguous range.
*/
bool GetFloats(float *buffer, sampleCount start, size_t len,
fillFormat fill = fillZero, bool mayThrow = true,
sampleCount * pNumWithinClips = nullptr) const
{
//! Cast the pointer to pass it to Get() which handles multiple destination formats
return Get(reinterpret_cast<samplePtr>(buffer),
floatSample, start, len, fill, mayThrow, pNumWithinClips);
}
//! Retrieve samples from a track in a specified format
/*!
@copydetails WaveTrack::GetFloats()
@param format sample format of the destination buffer
*/
bool Get(samplePtr buffer, sampleFormat format, bool Get(samplePtr buffer, sampleFormat format,
sampleCount start, size_t len, sampleCount start, size_t len,
fillFormat fill = fillZero, fillFormat fill = fillZero,
@ -254,6 +279,7 @@ private:
// filled according to fillFormat; but these were not necessarily one // filled according to fillFormat; but these were not necessarily one
// contiguous range. // contiguous range.
sampleCount * pNumWithinClips = nullptr) const; sampleCount * pNumWithinClips = nullptr) const;
void Set(constSamplePtr buffer, sampleFormat format, void Set(constSamplePtr buffer, sampleFormat format,
sampleCount start, size_t len); sampleCount start, size_t len);

View File

@ -138,8 +138,8 @@ bool CompareAudioCommand::Apply(const CommandContext & context)
auto block = limitSampleBufferSize( auto block = limitSampleBufferSize(
mTrack0->GetBestBlockSize(position), s1 - position mTrack0->GetBestBlockSize(position), s1 - position
); );
mTrack0->Get((samplePtr)buff0.get(), floatSample, position, block); mTrack0->GetFloats(buff0.get(), position, block);
mTrack1->Get((samplePtr)buff1.get(), floatSample, position, block); mTrack1->GetFloats(buff1.get(), position, block);
for (decltype(block) buffPos = 0; buffPos < block; ++buffPos) for (decltype(block) buffPos = 0; buffPos < block; ++buffPos)
{ {

View File

@ -321,7 +321,7 @@ bool EffectAutoDuck::Process()
{ {
const auto len = limitSampleBufferSize( kBufSize, end - pos ); const auto len = limitSampleBufferSize( kBufSize, end - pos );
mControlTrack->Get((samplePtr)buf.get(), floatSample, pos, len); mControlTrack->GetFloats(buf.get(), pos, len);
for (auto i = pos; i < pos + len; i++) for (auto i = pos; i < pos + len; i++)
{ {
@ -559,7 +559,7 @@ bool EffectAutoDuck::ApplyDuckFade(int trackNum, WaveTrack* t,
{ {
const auto len = limitSampleBufferSize( kBufSize, end - pos ); const auto len = limitSampleBufferSize( kBufSize, end - pos );
t->Get((samplePtr)buf.get(), floatSample, pos, len); t->GetFloats(buf.get(), pos, len);
for (auto i = pos; i < pos + len; i++) for (auto i = pos; i < pos + len; i++)
{ {

View File

@ -477,7 +477,7 @@ void EffectChangePitch::DeduceFrequencies()
Floats freq{ windowSize / 2 }; Floats freq{ windowSize / 2 };
Floats freqa{ windowSize / 2, true }; Floats freqa{ windowSize / 2, true };
track->Get((samplePtr) buffer.get(), floatSample, start, analyzeSize); track->GetFloats(buffer.get(), start, analyzeSize);
for(unsigned i = 0; i < numWindows; i++) { for(unsigned i = 0; i < numWindows; i++) {
ComputeSpectrum(buffer.get() + i * windowSize, windowSize, ComputeSpectrum(buffer.get() + i * windowSize, windowSize,
windowSize, rate, freq.get(), true); windowSize, rate, freq.get(), true);

View File

@ -520,7 +520,7 @@ bool EffectChangeSpeed::ProcessOne(WaveTrack * track,
); );
//Get the samples from the track and put them in the buffer //Get the samples from the track and put them in the buffer
track->Get((samplePtr) inBuffer.get(), floatSample, samplePos, blockSize); track->GetFloats(inBuffer.get(), samplePos, blockSize);
const auto results = resample.Process(mFactor, const auto results = resample.Process(mFactor,
inBuffer.get(), inBuffer.get(),

View File

@ -233,7 +233,7 @@ bool EffectClickRemoval::ProcessOne(int count, WaveTrack * track, sampleCount st
{ {
auto block = limitSampleBufferSize( idealBlockLen, len - s ); auto block = limitSampleBufferSize( idealBlockLen, len - s );
track->Get((samplePtr) buffer.get(), floatSample, start + s, block); track->GetFloats(buffer.get(), start + s, block);
for (decltype(block) i = 0; i + windowSize / 2 < block; i += windowSize / 2) for (decltype(block) i = 0; i + windowSize / 2 < block; i += windowSize / 2)
{ {

View File

@ -1637,10 +1637,10 @@ bool Effect::ProcessTrack(int count,
limitSampleBufferSize( mBufferSize, inputRemaining ); limitSampleBufferSize( mBufferSize, inputRemaining );
// Fill the input buffers // Fill the input buffers
left->Get((samplePtr) inBuffer[0].get(), floatSample, inPos, inputBufferCnt); left->GetFloats(inBuffer[0].get(), inPos, inputBufferCnt);
if (right) if (right)
{ {
right->Get((samplePtr) inBuffer[1].get(), floatSample, inPos, inputBufferCnt); right->GetFloats(inBuffer[1].get(), inPos, inputBufferCnt);
} }
// Reset the input buffer positions // Reset the input buffer positions

View File

@ -1330,7 +1330,7 @@ bool EffectEqualization::ProcessOne(int count, WaveTrack * t,
{ {
auto block = limitSampleBufferSize( idealBlockLen, len ); auto block = limitSampleBufferSize( idealBlockLen, len );
t->Get((samplePtr)buffer.get(), floatSample, s, block); t->GetFloats(buffer.get(), s, block);
for(size_t i = 0; i < block; i += L) //go through block in lumps of length L for(size_t i = 0; i < block; i += L) //go through block in lumps of length L
{ {

View File

@ -198,7 +198,7 @@ bool EffectFindClipping::ProcessOne(LabelTrack * lt,
block = limitSampleBufferSize( blockSize, len - s ); block = limitSampleBufferSize( blockSize, len - s );
wt->Get((samplePtr)buffer.get(), floatSample, start + s, block); wt->GetFloats(buffer.get(), start + s, block);
ptr = buffer.get(); ptr = buffer.get();
} }

View File

@ -515,7 +515,7 @@ void EffectLoudness::LoadBufferBlock(TrackIterRange<WaveTrack> range,
int idx = 0; int idx = 0;
for(auto channel : range) for(auto channel : range)
{ {
channel->Get((samplePtr) mTrackBuffer[idx].get(), floatSample, pos, len ); channel->GetFloats(mTrackBuffer[idx].get(), pos, len );
++idx; ++idx;
} }
mTrackBufferLen = len; mTrackBufferLen = len;

View File

@ -1330,7 +1330,7 @@ bool EffectNoiseReduction::Worker::ProcessOne
); );
//Get the samples from the track and put them in the buffer //Get the samples from the track and put them in the buffer
track->Get((samplePtr)&buffer[0], floatSample, samplePos, blockSize); track->GetFloats(&buffer[0], samplePos, blockSize);
samplePos += blockSize; samplePos += blockSize;
mInSampleCount += blockSize; mInSampleCount += blockSize;

View File

@ -435,7 +435,7 @@ bool EffectNormalize::AnalyseTrackData(const WaveTrack * track, const Translatab
); );
//Get the samples from the track and put them in the buffer //Get the samples from the track and put them in the buffer
track->Get((samplePtr) buffer.get(), floatSample, s, block, fillZero, true, &blockSamples); track->GetFloats(buffer.get(), s, block, fillZero, true, &blockSamples);
totalSamples += blockSamples; totalSamples += blockSamples;
//Process the buffer. //Process the buffer.
@ -495,7 +495,7 @@ bool EffectNormalize::ProcessOne(
); );
//Get the samples from the track and put them in the buffer //Get the samples from the track and put them in the buffer
track->Get((samplePtr) buffer.get(), floatSample, s, block); track->GetFloats(buffer.get(), s, block);
//Process the buffer. //Process the buffer.
ProcessData(buffer.get(), block, offset); ProcessData(buffer.get(), block, offset);

View File

@ -359,7 +359,7 @@ bool EffectPaulstretch::ProcessOne(WaveTrack *track,double t0,double t1,int coun
decltype(len) s=0; decltype(len) s=0;
while (s < len) { while (s < len) {
track->Get((samplePtr)bufferptr0, floatSample, start + s, nget); track->GetFloats(bufferptr0, start + s, nget);
stretch.process(buffer0.get(), nget); stretch.process(buffer0.get(), nget);
if (first_time) { if (first_time) {
@ -369,7 +369,7 @@ bool EffectPaulstretch::ProcessOne(WaveTrack *track,double t0,double t1,int coun
s += nget; s += nget;
if (first_time){//blend the start of the selection if (first_time){//blend the start of the selection
track->Get((samplePtr)fade_track_smps.get(), floatSample, start, fade_len); track->GetFloats(fade_track_smps.get(), start, fade_len);
first_time = false; first_time = false;
for (size_t i = 0; i < fade_len; i++){ for (size_t i = 0; i < fade_len; i++){
float fi = (float)i / (float)fade_len; float fi = (float)i / (float)fade_len;
@ -378,7 +378,7 @@ bool EffectPaulstretch::ProcessOne(WaveTrack *track,double t0,double t1,int coun
} }
} }
if (s >= len){//blend the end of the selection if (s >= len){//blend the end of the selection
track->Get((samplePtr)fade_track_smps.get(), floatSample, end - fade_len, fade_len); track->GetFloats(fade_track_smps.get(), end - fade_len, fade_len);
for (size_t i = 0; i < fade_len; i++){ for (size_t i = 0; i < fade_len; i++){
float fi = (float)i / (float)fade_len; float fi = (float)i / (float)fade_len;
auto i2 = bufsize / 2 - 1 - i; auto i2 = bufsize / 2 - 1 - i;

View File

@ -146,7 +146,7 @@ bool EffectRepair::ProcessOne(int count, WaveTrack * track,
size_t repairStart, size_t repairLen) size_t repairStart, size_t repairLen)
{ {
Floats buffer{ len }; Floats buffer{ len };
track->Get((samplePtr) buffer.get(), floatSample, start, len); track->GetFloats(buffer.get(), start, len);
InterpolateAudio(buffer.get(), len, repairStart, repairLen); InterpolateAudio(buffer.get(), len, repairStart, repairLen);
track->Set((samplePtr)&buffer[repairStart], floatSample, track->Set((samplePtr)&buffer[repairStart], floatSample,
start + repairStart, repairLen); start + repairStart, repairLen);

View File

@ -232,8 +232,8 @@ bool EffectReverse::ProcessOneClip(int count, WaveTrack *track,
limitSampleBufferSize( track->GetBestBlockSize(first), len / 2 ); limitSampleBufferSize( track->GetBestBlockSize(first), len / 2 );
auto second = first + (len - block); auto second = first + (len - block);
track->Get((samplePtr)buffer1.get(), floatSample, first, block); track->GetFloats(buffer1.get(), first, block);
track->Get((samplePtr)buffer2.get(), floatSample, second, block); track->GetFloats(buffer2.get(), second, block);
for (decltype(block) i = 0; i < block; i++) { for (decltype(block) i = 0; i < block; i++) {
tmp = buffer1[i]; tmp = buffer1[i];
buffer1[i] = buffer2[block-i-1]; buffer1[i] = buffer2[block-i-1];

View File

@ -99,10 +99,10 @@ long resampleCB(void *cb_data, SBSMSFrame *data)
// does not seem to let us report error codes, so use this roundabout to // does not seem to let us report error codes, so use this roundabout to
// stop the effect early. // stop the effect early.
try { try {
r->leftTrack->Get( r->leftTrack->GetFloats(
(samplePtr)(r->leftBuffer.get()), floatSample, r->offset, blockSize); (r->leftBuffer.get()), r->offset, blockSize);
r->rightTrack->Get( r->rightTrack->GetFloats(
(samplePtr)(r->rightBuffer.get()), floatSample, r->offset, blockSize); (r->rightBuffer.get()), r->offset, blockSize);
} }
catch ( ... ) { catch ( ... ) {
// Save the exception object for re-throw when out of the library // Save the exception object for re-throw when out of the library

View File

@ -96,7 +96,7 @@ bool EffectSimpleMono::ProcessOne(WaveTrack * track,
limitSampleBufferSize( track->GetBestBlockSize(s), end - s ); limitSampleBufferSize( track->GetBestBlockSize(s), end - s );
//Get the samples from the track and put them in the buffer //Get the samples from the track and put them in the buffer
track->Get((samplePtr) buffer.get(), floatSample, s, block); track->GetFloats(buffer.get(), s, block);
//Process the buffer. If it fails, clean up and exit. //Process the buffer. If it fails, clean up and exit.
if (!ProcessSimpleMono(buffer.get(), block)) if (!ProcessSimpleMono(buffer.get(), block))

View File

@ -217,7 +217,7 @@ bool EffectSoundTouch::ProcessOne(WaveTrack *track,
limitSampleBufferSize( track->GetBestBlockSize(s), end - s )); limitSampleBufferSize( track->GetBestBlockSize(s), end - s ));
//Get the samples from the track and put them in the buffer //Get the samples from the track and put them in the buffer
track->Get((samplePtr)buffer.get(), floatSample, s, block); track->GetFloats(buffer.get(), s, block);
//Add samples to SoundTouch //Add samples to SoundTouch
mSoundTouch->putSamples(buffer.get(), block); mSoundTouch->putSamples(buffer.get(), block);
@ -298,8 +298,8 @@ bool EffectSoundTouch::ProcessStereo(
); );
// Get the samples from the tracks and put them in the buffers. // Get the samples from the tracks and put them in the buffers.
leftTrack->Get((samplePtr)(leftBuffer.get()), floatSample, sourceSampleCount, blockSize); leftTrack->GetFloats((leftBuffer.get()), sourceSampleCount, blockSize);
rightTrack->Get((samplePtr)(rightBuffer.get()), floatSample, sourceSampleCount, blockSize); rightTrack->GetFloats((rightBuffer.get()), sourceSampleCount, blockSize);
// Interleave into soundTouchBuffer. // Interleave into soundTouchBuffer.
for (decltype(blockSize) index = 0; index < blockSize; index++) { for (decltype(blockSize) index = 0; index < blockSize; index++) {

View File

@ -568,8 +568,8 @@ bool EffectTruncSilence::DoRemoval
auto t1 = wt->TimeToLongSamples(cutStart) - blendFrames / 2; auto t1 = wt->TimeToLongSamples(cutStart) - blendFrames / 2;
auto t2 = wt->TimeToLongSamples(cutEnd) - blendFrames / 2; auto t2 = wt->TimeToLongSamples(cutEnd) - blendFrames / 2;
wt->Get((samplePtr)buf1.get(), floatSample, t1, blendFrames); wt->GetFloats(buf1.get(), t1, blendFrames);
wt->Get((samplePtr)buf2.get(), floatSample, t2, blendFrames); wt->GetFloats(buf2.get(), t2, blendFrames);
for (decltype(blendFrames) i = 0; i < blendFrames; ++i) for (decltype(blendFrames) i = 0; i < blendFrames; ++i)
{ {
@ -689,7 +689,7 @@ bool EffectTruncSilence::Analyze(RegionList& silenceList,
auto count = limitSampleBufferSize( blockLen, end - *index ); auto count = limitSampleBufferSize( blockLen, end - *index );
// Fill buffer // Fill buffer
wt->Get((samplePtr)(buffer.get()), floatSample, *index, count); wt->GetFloats((buffer.get()), *index, count);
// Look for silenceList in current block // Look for silenceList in current block
for (decltype(count) i = 0; i < count; ++i) { for (decltype(count) i = 0; i < count; ++i) {

View File

@ -130,7 +130,7 @@ bool EffectTwoPassSimpleMono::ProcessOne(WaveTrack * track, WaveTrack * outTrack
std::min( maxblock, track->GetBestBlockSize(start) ), end - start ); std::min( maxblock, track->GetBestBlockSize(start) ), end - start );
//Get the samples from the track and put them in the buffer //Get the samples from the track and put them in the buffer
track->Get((samplePtr) buffer1.get(), floatSample, start, samples1); track->GetFloats(buffer1.get(), start, samples1);
// Process the first buffer with a NULL previous buffer // Process the first buffer with a NULL previous buffer
if (mPass == 0) if (mPass == 0)
@ -152,7 +152,7 @@ bool EffectTwoPassSimpleMono::ProcessOne(WaveTrack * track, WaveTrack * outTrack
); );
//Get the samples from the track and put them in the buffer //Get the samples from the track and put them in the buffer
track->Get((samplePtr)buffer2.get(), floatSample, s, samples2); track->GetFloats(buffer2.get(), s, samples2);
//Process the buffer. If it fails, clean up and exit. //Process the buffer. If it fails, clean up and exit.
if (mPass == 0) if (mPass == 0)

View File

@ -2449,8 +2449,8 @@ int NyquistEffect::GetCallback(float *buffer, int ch,
mCurBuffer[ch].Allocate(mCurBufferLen[ch], floatSample); mCurBuffer[ch].Allocate(mCurBufferLen[ch], floatSample);
try { try {
mCurTrack[ch]->Get( mCurTrack[ch]->GetFloats(
mCurBuffer[ch].ptr(), floatSample, reinterpret_cast<float*>(mCurBuffer[ch].ptr()),
mCurBufferStart[ch], mCurBufferLen[ch]); mCurBufferStart[ch], mCurBufferLen[ch]);
} }
catch ( ... ) { catch ( ... ) {

View File

@ -453,12 +453,12 @@ bool VampEffect::Process()
if (left) if (left)
{ {
left->Get((samplePtr)data[0].get(), floatSample, pos, request); left->GetFloats(data[0].get(), pos, request);
} }
if (right) if (right)
{ {
right->Get((samplePtr)data[1].get(), floatSample, pos, request); right->GetFloats(data[1].get(), pos, request);
} }
if (request < block) if (request < block)

View File

@ -70,7 +70,7 @@ double NearestZeroCrossing
auto s = one->TimeToLongSamples(t0); auto s = one->TimeToLongSamples(t0);
// fillTwo to ensure that missing values are treated as 2, and hence do // fillTwo to ensure that missing values are treated as 2, and hence do
// not get used as zero crossings. // not get used as zero crossings.
one->Get((samplePtr)oneDist.get(), floatSample, one->GetFloats(oneDist.get(),
s - (int)oneWindowSize/2, oneWindowSize, fillTwo); s - (int)oneWindowSize/2, oneWindowSize, fillTwo);

View File

@ -593,7 +593,7 @@ void OnPunchAndRoll(const CommandContext &context)
if (getLen > 0) { if (getLen > 0) {
float *const samples = data.data(); float *const samples = data.data();
const sampleCount pos = wt->TimeToLongSamples(t1); const sampleCount pos = wt->TimeToLongSamples(t1);
wt->Get((samplePtr)samples, floatSample, pos, getLen); wt->GetFloats(samples, pos, getLen);
} }
crossfadeData.push_back(std::move(data)); crossfadeData.push_back(std::move(data));
} }

View File

@ -127,7 +127,7 @@ UIHandlePtr SampleHandle::HitTest
float oneSample; float oneSample;
const double rate = wavetrack->GetRate(); const double rate = wavetrack->GetRate();
const auto s0 = (sampleCount)(tt * rate + 0.5); const auto s0 = (sampleCount)(tt * rate + 0.5);
if (! wavetrack->Get((samplePtr)&oneSample, floatSample, s0, 1, fillZero, if (! wavetrack->GetFloats(&oneSample, s0, 1, fillZero,
// Do not propagate exception but return a failure value // Do not propagate exception but return a failure value
false) ) false) )
return {}; return {};
@ -238,7 +238,7 @@ UIHandle::Result SampleHandle::Click
Floats newSampleRegion{ 1 + 2 * (size_t)SMOOTHING_BRUSH_RADIUS }; Floats newSampleRegion{ 1 + 2 * (size_t)SMOOTHING_BRUSH_RADIUS };
//Get a sample from the track to do some tricks on. //Get a sample from the track to do some tricks on.
mClickedTrack->Get((samplePtr)sampleRegion.get(), floatSample, mClickedTrack->GetFloats(sampleRegion.get(),
mClickedStartSample - SMOOTHING_KERNEL_RADIUS - SMOOTHING_BRUSH_RADIUS, mClickedStartSample - SMOOTHING_KERNEL_RADIUS - SMOOTHING_BRUSH_RADIUS,
sampleRegionSize); sampleRegionSize);

View File

@ -1364,9 +1364,9 @@ void SelectHandle::StartSnappingFreqSelection
end - start)); end - start));
const auto effectiveLength = std::max(minLength, length); const auto effectiveLength = std::max(minLength, length);
frequencySnappingData.resize(effectiveLength, 0.0f); frequencySnappingData.resize(effectiveLength, 0.0f);
pTrack->Get( pTrack->GetFloats(
reinterpret_cast<samplePtr>(&frequencySnappingData[0]), &frequencySnappingData[0],
floatSample, start, length, fillZero, start, length, fillZero,
// Don't try to cope with exceptions, just read zeroes instead. // Don't try to cope with exceptions, just read zeroes instead.
false); false);