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:
		@@ -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());
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user