update to support juce 6.1. added mute audio while processing capture option. added a mac specific priority fix. use async popup menus and browsers where needed.

This commit is contained in:
essej
2022-04-02 12:45:02 -04:00
parent 86f1a8c594
commit 8c4a20ecd6
10 changed files with 188 additions and 81 deletions

View File

@ -58,7 +58,8 @@ inline AudioParameterFloat* make_floatpar(String id, String name, float minv, fl
//==============================================================================
PaulstretchpluginAudioProcessor::PaulstretchpluginAudioProcessor(bool is_stand_alone_offline)
: m_is_stand_alone_offline(is_stand_alone_offline), m_bufferingthread("pspluginprebufferthread")
: AudioProcessor(PaulstretchpluginAudioProcessor::BusesProperties().withInput("Main In", AudioChannelSet::stereo(), true).withOutput ("Main Out", AudioChannelSet::stereo(), true)),
m_is_stand_alone_offline(is_stand_alone_offline), m_bufferingthread("pspluginprebufferthread")
{
m_filechoose_callback = [this](const FileChooser& chooser)
{
@ -214,6 +215,8 @@ PaulstretchpluginAudioProcessor::PaulstretchpluginAudioProcessor(bool is_stand_a
PaulstretchpluginAudioProcessor::~PaulstretchpluginAudioProcessor()
{
stopTimer(1);
//Logger::writeToLog("PaulX AudioProcessor destroyed");
if (m_thumb)
m_thumb->removeAllChangeListeners();
@ -281,7 +284,7 @@ ValueTree PaulstretchpluginAudioProcessor::getStateTree(bool ignoreoptions, bool
paramtree.setProperty("loadfilewithstate", m_load_file_with_state, nullptr);
storeToTreeProperties(paramtree, nullptr, "playwhenhostrunning", m_play_when_host_plays,
"capturewhenhostrunning", m_capture_when_host_plays,"savecapturedaudio",m_save_captured_audio,
"mutewhilecapturing",m_mute_while_capturing);
"mutewhilecapturing",m_mute_while_capturing, "muteprocwhilecapturing",m_mute_processed_while_capturing);
}
storeToTreeProperties(paramtree, nullptr, "tabaindex", m_cur_tab_index);
storeToTreeProperties(paramtree, nullptr, "waveviewrange", m_wave_view_range);
@ -301,7 +304,7 @@ void PaulstretchpluginAudioProcessor::setStateFromTree(ValueTree tree)
m_load_file_with_state = tree.getProperty("loadfilewithstate", true);
getFromTreeProperties(tree, "playwhenhostrunning", m_play_when_host_plays,
"capturewhenhostrunning", m_capture_when_host_plays,"mutewhilecapturing",m_mute_while_capturing,
"savecapturedaudio",m_save_captured_audio);
"savecapturedaudio",m_save_captured_audio, "muteprocwhilecapturing",m_mute_processed_while_capturing);
getFromTreeProperties(tree, "tabaindex", m_cur_tab_index);
if (tree.hasProperty("numspectralstagesb"))
{
@ -526,6 +529,8 @@ void PaulstretchpluginAudioProcessor::saveCaptureBuffer()
inchans, 32, {}, 0));
if (writer != nullptr)
{
outstream.release(); // the writer takes ownership
auto sourcebuffer = getStretchSource()->getSourceAudioBuffer();
jassert(sourcebuffer->getNumChannels() == inchans);
jassert(sourcebuffer->getNumSamples() > 0);
@ -596,28 +601,34 @@ String PaulstretchpluginAudioProcessor::offlineRender(OfflineRenderParams render
{
//delete outstream;
jassert(false);
}
AudioBuffer<float> renderbuffer{ numoutchans, blocksize };
MidiBuffer dummymidi;
double outlensecs = sc->getOutputDurationSecondsForRange(sc->getPlayRange(),sc->getFFTSize());
int64_t outlenframes = outlensecs * outsr;
int64_t outcounter{ 0 };
m_offline_render_state = 0;
m_offline_render_cancel_requested = false;
while (outcounter < outlenframes)
{
if (m_offline_render_cancel_requested == true)
break;
processor->processBlock(renderbuffer, dummymidi);
int64 framesToWrite = std::min<int64>(blocksize, outlenframes - outcounter);
writer->writeFromAudioSampleBuffer(renderbuffer, 0, framesToWrite);
outcounter += blocksize;
m_offline_render_state = 100.0 / outlenframes * outcounter;
}
m_offline_render_state = 200;
Logger::writeToLog("Rendered ok!");
m_offline_render_state = 200;
Logger::writeToLog("Render failed, could not open file!");
return;
} else {
outstream.release(); // the writer takes ownership
AudioBuffer<float> renderbuffer{ numoutchans, blocksize };
MidiBuffer dummymidi;
double outlensecs = sc->getOutputDurationSecondsForRange(sc->getPlayRange(),sc->getFFTSize());
int64_t outlenframes = outlensecs * outsr;
int64_t outcounter{ 0 };
m_offline_render_state = 0;
m_offline_render_cancel_requested = false;
while (outcounter < outlenframes)
{
if (m_offline_render_cancel_requested == true)
break;
processor->processBlock(renderbuffer, dummymidi);
int64 framesToWrite = std::min<int64>(blocksize, outlenframes - outcounter);
writer->writeFromAudioSampleBuffer(renderbuffer, 0, framesToWrite);
outcounter += blocksize;
m_offline_render_state = 100.0 / outlenframes * outcounter;
}
m_offline_render_state = 200;
Logger::writeToLog("Rendered ok!");
}
};
std::thread th(rendertask);
th.detach();
@ -768,7 +779,9 @@ void PaulstretchpluginAudioProcessor::processBlock (AudioSampleBuffer& buffer, M
m_recorded_range = { 0, m_rec_count };
if (m_mute_while_capturing == true)
buffer.clear();
return;
if (m_mute_processed_while_capturing == true)
return;
}
jassert(m_buffering_source != nullptr);
jassert(m_bufferingthread.isThreadRunning());