Convert std::shared_ptr<Sample> to Sample
This conversion does not apply to Patman as there seems to be issues with it causing heap-use-after-free issues, such as with PatmanInstrument::unloadCurrentPatch
This commit is contained in:
@@ -77,7 +77,6 @@ Plugin::Descriptor PLUGIN_EXPORT audiofileprocessor_plugin_descriptor =
|
||||
|
||||
AudioFileProcessor::AudioFileProcessor( InstrumentTrack * _instrument_track ) :
|
||||
Instrument( _instrument_track, &audiofileprocessor_plugin_descriptor ),
|
||||
m_sample(std::make_shared<Sample>()),
|
||||
m_ampModel( 100, 0, 500, 1, this, tr( "Amplify" ) ),
|
||||
m_startPointModel( 0, 0, 1, 0.0000001f, this, tr( "Start of sample" ) ),
|
||||
m_endPointModel( 1, 0, 1, 0.0000001f, this, tr( "End of sample" ) ),
|
||||
@@ -125,18 +124,18 @@ void AudioFileProcessor::playNote( NotePlayHandle * _n,
|
||||
// played.
|
||||
if( m_stutterModel.value() == true && _n->frequency() < 20.0 )
|
||||
{
|
||||
m_nextPlayStartPoint = m_sample->startFrame();
|
||||
m_nextPlayStartPoint = m_sample.startFrame();
|
||||
m_nextPlayBackwards = false;
|
||||
return;
|
||||
}
|
||||
|
||||
if( !_n->m_pluginData )
|
||||
{
|
||||
if (m_stutterModel.value() == true && m_nextPlayStartPoint >= m_sample->endFrame())
|
||||
if (m_stutterModel.value() == true && m_nextPlayStartPoint >= m_sample.endFrame())
|
||||
{
|
||||
// Restart playing the note if in stutter mode, not in loop mode,
|
||||
// and we're at the end of the sample.
|
||||
m_nextPlayStartPoint = m_sample->startFrame();
|
||||
m_nextPlayStartPoint = m_sample.startFrame();
|
||||
m_nextPlayBackwards = false;
|
||||
}
|
||||
// set interpolation mode for libsamplerate
|
||||
@@ -165,7 +164,7 @@ void AudioFileProcessor::playNote( NotePlayHandle * _n,
|
||||
|
||||
if( ! _n->isFinished() )
|
||||
{
|
||||
if (m_sample->play(_working_buffer + offset,
|
||||
if (m_sample.play(_working_buffer + offset,
|
||||
static_cast<Sample::PlaybackState*>(_n->m_pluginData),
|
||||
frames, _n->frequency(),
|
||||
static_cast<Sample::Loop>(m_loopModel.value())))
|
||||
@@ -203,10 +202,10 @@ void AudioFileProcessor::deleteNotePluginData( NotePlayHandle * _n )
|
||||
|
||||
void AudioFileProcessor::saveSettings(QDomDocument& doc, QDomElement& elem)
|
||||
{
|
||||
elem.setAttribute("src", m_sample->sampleFile());
|
||||
if (m_sample->sampleFile().isEmpty())
|
||||
elem.setAttribute("src", m_sample.sampleFile());
|
||||
if (m_sample.sampleFile().isEmpty())
|
||||
{
|
||||
elem.setAttribute("sampledata", m_sample->toBase64());
|
||||
elem.setAttribute("sampledata", m_sample.toBase64());
|
||||
}
|
||||
m_reverseModel.saveSettings(doc, elem, "reversed");
|
||||
m_loopModel.saveSettings(doc, elem, "looped");
|
||||
@@ -227,16 +226,16 @@ void AudioFileProcessor::loadSettings(const QDomElement& elem)
|
||||
{
|
||||
setAudioFile(elem.attribute("src"), false);
|
||||
|
||||
QString absolutePath = PathUtil::toAbsolute(m_sample->sampleFile());
|
||||
QString absolutePath = PathUtil::toAbsolute(m_sample.sampleFile());
|
||||
if (!QFileInfo(absolutePath).exists())
|
||||
{
|
||||
QString message = tr("Sample not found: %1").arg(m_sample->sampleFile());
|
||||
QString message = tr("Sample not found: %1").arg(m_sample.sampleFile());
|
||||
Engine::getSong()->collectError(message);
|
||||
}
|
||||
}
|
||||
else if (!elem.attribute("sampledata").isEmpty())
|
||||
{
|
||||
m_sample = std::make_shared<Sample>(gui::SampleLoader::createBufferFromBase64(elem.attribute("srcdata")));
|
||||
m_sample = Sample(gui::SampleLoader::createBufferFromBase64(elem.attribute("srcdata")));
|
||||
}
|
||||
|
||||
m_loopModel.loadSettings(elem, "looped");
|
||||
@@ -295,7 +294,7 @@ int AudioFileProcessor::getBeatLen( NotePlayHandle * _n ) const
|
||||
const float freq_factor = baseFreq / _n->frequency() *
|
||||
Engine::audioEngine()->processingSampleRate() / Engine::audioEngine()->baseSampleRate();
|
||||
|
||||
return static_cast<int>(floorf((m_sample->endFrame() - m_sample->startFrame()) * freq_factor));
|
||||
return static_cast<int>(floorf((m_sample.endFrame() - m_sample.startFrame()) * freq_factor));
|
||||
}
|
||||
|
||||
|
||||
@@ -316,15 +315,15 @@ void AudioFileProcessor::setAudioFile( const QString & _audio_file,
|
||||
// is current channel-name equal to previous-filename??
|
||||
if( _rename &&
|
||||
( instrumentTrack()->name() ==
|
||||
QFileInfo(m_sample->sampleFile()).fileName() ||
|
||||
m_sample->sampleFile().isEmpty()))
|
||||
QFileInfo(m_sample.sampleFile()).fileName() ||
|
||||
m_sample.sampleFile().isEmpty()))
|
||||
{
|
||||
// then set it to new one
|
||||
instrumentTrack()->setName( PathUtil::cleanName( _audio_file ) );
|
||||
}
|
||||
// else we don't touch the track-name, because the user named it self
|
||||
|
||||
m_sample = std::make_shared<Sample>(gui::SampleLoader::createBufferFromFile(_audio_file));
|
||||
m_sample = Sample(gui::SampleLoader::createBufferFromFile(_audio_file));
|
||||
loopPointChanged();
|
||||
emit sampleUpdated();
|
||||
}
|
||||
@@ -334,8 +333,8 @@ void AudioFileProcessor::setAudioFile( const QString & _audio_file,
|
||||
|
||||
void AudioFileProcessor::reverseModelChanged()
|
||||
{
|
||||
m_sample->setReversed(m_reverseModel.value());
|
||||
m_nextPlayStartPoint = m_sample->startFrame();
|
||||
m_sample.setReversed(m_reverseModel.value());
|
||||
m_nextPlayStartPoint = m_sample.startFrame();
|
||||
m_nextPlayBackwards = false;
|
||||
emit sampleUpdated();
|
||||
}
|
||||
@@ -345,14 +344,14 @@ void AudioFileProcessor::reverseModelChanged()
|
||||
|
||||
void AudioFileProcessor::ampModelChanged()
|
||||
{
|
||||
m_sample->setAmplification(m_ampModel.value() / 100.0f);
|
||||
m_sample.setAmplification(m_ampModel.value() / 100.0f);
|
||||
emit sampleUpdated();
|
||||
}
|
||||
|
||||
|
||||
void AudioFileProcessor::stutterModelChanged()
|
||||
{
|
||||
m_nextPlayStartPoint = m_sample->startFrame();
|
||||
m_nextPlayStartPoint = m_sample.startFrame();
|
||||
m_nextPlayBackwards = false;
|
||||
}
|
||||
|
||||
@@ -421,14 +420,14 @@ void AudioFileProcessor::loopPointChanged()
|
||||
|
||||
void AudioFileProcessor::pointChanged()
|
||||
{
|
||||
const auto f_start = static_cast<f_cnt_t>(m_startPointModel.value() * m_sample->sampleSize());
|
||||
const auto f_end = static_cast<f_cnt_t>(m_endPointModel.value() * m_sample->sampleSize());
|
||||
const auto f_loop = static_cast<f_cnt_t>(m_loopPointModel.value() * m_sample->sampleSize());
|
||||
const auto f_start = static_cast<f_cnt_t>(m_startPointModel.value() * m_sample.sampleSize());
|
||||
const auto f_end = static_cast<f_cnt_t>(m_endPointModel.value() * m_sample.sampleSize());
|
||||
const auto f_loop = static_cast<f_cnt_t>(m_loopPointModel.value() * m_sample.sampleSize());
|
||||
|
||||
m_nextPlayStartPoint = f_start;
|
||||
m_nextPlayBackwards = false;
|
||||
|
||||
m_sample->setAllPointFrames(f_start, f_end, f_loop, f_end);
|
||||
m_sample.setAllPointFrames(f_start, f_end, f_loop, f_end);
|
||||
emit dataChanged();
|
||||
}
|
||||
|
||||
@@ -596,7 +595,7 @@ void AudioFileProcessorView::newWaveView()
|
||||
delete m_waveView;
|
||||
m_waveView = 0;
|
||||
}
|
||||
m_waveView = new AudioFileProcessorWaveView(this, 245, 75, castModel<AudioFileProcessor>()->m_sample.get());
|
||||
m_waveView = new AudioFileProcessorWaveView(this, 245, 75, &castModel<AudioFileProcessor>()->m_sample);
|
||||
m_waveView->move( 2, 172 );
|
||||
m_waveView->setKnobs(
|
||||
dynamic_cast<AudioFileProcessorWaveView::knob *>( m_startKnob ),
|
||||
@@ -643,7 +642,7 @@ void AudioFileProcessorView::paintEvent( QPaintEvent * )
|
||||
|
||||
QString file_name = "";
|
||||
|
||||
int idx = a->m_sample->sampleFile().length();
|
||||
int idx = a->m_sample.sampleFile().length();
|
||||
|
||||
p.setFont( pointSize<8>( font() ) );
|
||||
|
||||
@@ -654,7 +653,7 @@ void AudioFileProcessorView::paintEvent( QPaintEvent * )
|
||||
while( idx > 0 &&
|
||||
fm.size( Qt::TextSingleLine, file_name + "..." ).width() < 210 )
|
||||
{
|
||||
file_name = a->m_sample->sampleFile()[--idx] + file_name;
|
||||
file_name = a->m_sample.sampleFile()[--idx] + file_name;
|
||||
}
|
||||
|
||||
if( idx > 0 )
|
||||
@@ -671,7 +670,6 @@ void AudioFileProcessorView::paintEvent( QPaintEvent * )
|
||||
|
||||
void AudioFileProcessorView::sampleUpdated()
|
||||
{
|
||||
m_waveView->m_sample = castModel<AudioFileProcessor>()->m_sample.get();
|
||||
m_waveView->updateSampleRange();
|
||||
m_waveView->update();
|
||||
update();
|
||||
|
||||
@@ -97,7 +97,7 @@ signals:
|
||||
void sampleUpdated();
|
||||
|
||||
private:
|
||||
std::shared_ptr<Sample> m_sample;
|
||||
Sample m_sample;
|
||||
|
||||
FloatModel m_ampModel;
|
||||
FloatModel m_startPointModel;
|
||||
|
||||
Reference in New Issue
Block a user