The spectral module enabled parameters still not doing so great...
This commit is contained in:
		| @@ -104,23 +104,23 @@ void ProcessedStretch::process_spectrum(REALTYPE *freq) | |||||||
| 	for (auto& e : m_spectrum_processes) | 	for (auto& e : m_spectrum_processes) | ||||||
|     { |     { | ||||||
| 		spectrum_copy(nfreq, freq, m_infreq.data()); | 		spectrum_copy(nfreq, freq, m_infreq.data()); | ||||||
| 		if (e.m_index == 0 && e.m_enabled == true) | 		if (e.m_index == 0 && *e.m_enabled == true) | ||||||
| 			spectrum_do_harmonics(pars, m_tmpfreq1, nfreq, samplerate, m_infreq.data(), freq); | 			spectrum_do_harmonics(pars, m_tmpfreq1, nfreq, samplerate, m_infreq.data(), freq); | ||||||
| 		if (e.m_index == 1 && e.m_enabled == true) | 		if (e.m_index == 1 && *e.m_enabled == true) | ||||||
| 			spectrum_do_tonal_vs_noise(pars,nfreq,samplerate,m_tmpfreq1, m_infreq.data(), freq); | 			spectrum_do_tonal_vs_noise(pars,nfreq,samplerate,m_tmpfreq1, m_infreq.data(), freq); | ||||||
| 		if (e.m_index == 2 && e.m_enabled == true) | 		if (e.m_index == 2 && *e.m_enabled == true) | ||||||
| 			spectrum_do_freq_shift(pars,nfreq,samplerate,m_infreq.data(), freq); | 			spectrum_do_freq_shift(pars,nfreq,samplerate,m_infreq.data(), freq); | ||||||
| 		if (e.m_index == 3 && e.m_enabled == true) | 		if (e.m_index == 3 && *e.m_enabled == true) | ||||||
| 			spectrum_do_pitch_shift(pars,nfreq,m_infreq.data(), freq, pow(2.0f, pars.pitch_shift.cents / 1200.0f)); | 			spectrum_do_pitch_shift(pars,nfreq,m_infreq.data(), freq, pow(2.0f, pars.pitch_shift.cents / 1200.0f)); | ||||||
| 		if (e.m_index == 4 && e.m_enabled == true) | 		if (e.m_index == 4 && *e.m_enabled == true) | ||||||
| 			spectrum_do_octave(pars,nfreq,samplerate, m_sumfreq, m_tmpfreq1, m_infreq.data(), freq); | 			spectrum_do_octave(pars,nfreq,samplerate, m_sumfreq, m_tmpfreq1, m_infreq.data(), freq); | ||||||
| 		if (e.m_index == 5 && e.m_enabled == true) | 		if (e.m_index == 5 && *e.m_enabled == true) | ||||||
| 			spectrum_spread(nfreq,samplerate,m_tmpfreq1,m_infreq.data(), freq, pars.spread.bandwidth); | 			spectrum_spread(nfreq,samplerate,m_tmpfreq1,m_infreq.data(), freq, pars.spread.bandwidth); | ||||||
| 		if (e.m_index == 6 && e.m_enabled == true) | 		if (e.m_index == 6 && *e.m_enabled == true) | ||||||
| 			spectrum_do_filter(pars,nfreq,samplerate,m_infreq.data(), freq); | 			spectrum_do_filter(pars,nfreq,samplerate,m_infreq.data(), freq); | ||||||
| 		if (e.m_index == 7 && e.m_enabled == true) | 		if (e.m_index == 7 && *e.m_enabled == true) | ||||||
| 			spectrum_do_compressor(pars,nfreq, m_infreq.data(), freq); | 			spectrum_do_compressor(pars,nfreq, m_infreq.data(), freq); | ||||||
| 		if (e.m_index == 8 && e.m_enabled == true) | 		if (e.m_index == 8 && *e.m_enabled == true) | ||||||
| 			spectrum_do_free_filter(m_free_filter_envelope, nfreq, samplerate, m_infreq.data(), freq); | 			spectrum_do_free_filter(m_free_filter_envelope, nfreq, samplerate, m_infreq.data(), freq); | ||||||
| 	} | 	} | ||||||
| }; | }; | ||||||
|   | |||||||
| @@ -438,9 +438,9 @@ class SpectrumProcess | |||||||
| { | { | ||||||
| public: | public: | ||||||
| 	SpectrumProcess() {} | 	SpectrumProcess() {} | ||||||
| 	SpectrumProcess(int index, bool enabled) : m_index(index), m_enabled(enabled) {} | 	SpectrumProcess(int index, AudioParameterBool* enabled) : m_index(index), m_enabled(enabled) {} | ||||||
| 	int m_index = -1; | 	int m_index = -1; | ||||||
| 	bool m_enabled = true; | 	AudioParameterBool* m_enabled = nullptr; | ||||||
| }; | }; | ||||||
|  |  | ||||||
| class ProcessedStretch final : public Stretch | class ProcessedStretch final : public Stretch | ||||||
|   | |||||||
| @@ -1,4 +1,5 @@ | |||||||
| #include "StretchSource.h" | #include "StretchSource.h" | ||||||
|  | #include <set> | ||||||
|  |  | ||||||
| #ifdef WIN32 | #ifdef WIN32 | ||||||
| #include <ppl.h> | #include <ppl.h> | ||||||
| @@ -7,12 +8,16 @@ | |||||||
| #undef max | #undef max | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| StretchAudioSource::StretchAudioSource(int initialnumoutchans, AudioFormatManager* afm) : m_afm(afm) | StretchAudioSource::StretchAudioSource(int initialnumoutchans,  | ||||||
|  | 	AudioFormatManager* afm, | ||||||
|  | 	std::array<AudioParameterBool*,9>& enab_pars) : m_afm(afm) | ||||||
| { | { | ||||||
| 	m_resampler = std::make_unique<WDL_Resampler>(); | 	m_resampler = std::make_unique<WDL_Resampler>(); | ||||||
| 	m_resampler_outbuf.resize(1024*1024); | 	m_resampler_outbuf.resize(1024*1024); | ||||||
| 	m_inputfile = std::make_unique<AInputS>(m_afm); | 	m_inputfile = std::make_unique<AInputS>(m_afm); | ||||||
|     m_specproc_order = { {0,false} , { 1, false} ,{2,true},{3,true},{4,true},{5,false},{6,true},{7,true},{8,false} }; | 	for (int i = 0; i < enab_pars.size(); ++i) | ||||||
|  | 		m_specproc_order.emplace_back(i, enab_pars[i]); | ||||||
|  | 	//m_specproc_order = { {0,false} , { 1, false} ,{2,true},{3,true},{4,true},{5,false},{6,true},{7,true},{8,false} }; | ||||||
| 	setNumOutChannels(initialnumoutchans); | 	setNumOutChannels(initialnumoutchans); | ||||||
| 	m_xfadetask.buffer.setSize(8, 65536); | 	m_xfadetask.buffer.setSize(8, 65536); | ||||||
| 	m_xfadetask.buffer.clear(); | 	m_xfadetask.buffer.clear(); | ||||||
| @@ -162,10 +167,14 @@ void StretchAudioSource::setMainVolume(double decibels) | |||||||
| void StretchAudioSource::setSpectralModulesEnabled(const std::array<AudioParameterBool*, 9>& params) | void StretchAudioSource::setSpectralModulesEnabled(const std::array<AudioParameterBool*, 9>& params) | ||||||
| { | { | ||||||
| 	jassert(params.size() == m_specproc_order.size()); | 	jassert(params.size() == m_specproc_order.size()); | ||||||
|  | 	std::set<AudioParameterBool*> foo; | ||||||
|  | 	for (auto& e : params) | ||||||
|  | 		foo.insert(e); | ||||||
|  | 	jassert(foo.size() == params.size()); | ||||||
| 	bool changed = false; | 	bool changed = false; | ||||||
| 	for (int i = 0; i < m_specproc_order.size(); ++i) | 	for (int i = 0; i < m_specproc_order.size(); ++i) | ||||||
| 	{ | 	{ | ||||||
| 		if (*params[i] != m_specproc_order[i].m_enabled) | 		if (*params[i] != *m_specproc_order[i].m_enabled) | ||||||
| 		{ | 		{ | ||||||
| 			changed = true; | 			changed = true; | ||||||
| 			break; | 			break; | ||||||
| @@ -177,7 +186,7 @@ void StretchAudioSource::setSpectralModulesEnabled(const std::array<AudioParamet | |||||||
| 	{ | 	{ | ||||||
| 		for (int i = 0; i < m_specproc_order.size(); ++i) | 		for (int i = 0; i < m_specproc_order.size(); ++i) | ||||||
| 		{ | 		{ | ||||||
| 			m_specproc_order[i].m_enabled = *params[i]; | 			*m_specproc_order[i].m_enabled = (bool)(*params[i]); | ||||||
| 		} | 		} | ||||||
| 		for (int i = 0; i < m_stretchers.size(); ++i) | 		for (int i = 0; i < m_stretchers.size(); ++i) | ||||||
| 		{ | 		{ | ||||||
|   | |||||||
| @@ -31,7 +31,7 @@ class StretchAudioSource final : public PositionableAudioSource | |||||||
| { | { | ||||||
| public: | public: | ||||||
| 	StretchAudioSource() {} | 	StretchAudioSource() {} | ||||||
| 	StretchAudioSource(int initialnumoutchans, AudioFormatManager* afm); | 	StretchAudioSource(int initialnumoutchans, AudioFormatManager* afm, std::array<AudioParameterBool*, 9>& enab_pars); | ||||||
| 	~StretchAudioSource(); | 	~StretchAudioSource(); | ||||||
| 	// Inherited via PositionableAudioSource | 	// Inherited via PositionableAudioSource | ||||||
| 	void prepareToPlay(int samplesPerBlockExpected, double sampleRate) override; | 	void prepareToPlay(int samplesPerBlockExpected, double sampleRate) override; | ||||||
|   | |||||||
| @@ -925,7 +925,7 @@ void SpectralChainEditor::mouseDown(const MouseEvent & ev) | |||||||
| 		juce::Rectangle<int> r(box_w*m_cur_index, 1, 12, 12); | 		juce::Rectangle<int> r(box_w*m_cur_index, 1, 12, 12); | ||||||
| 		if (r.contains(ev.x, ev.y)) | 		if (r.contains(ev.x, ev.y)) | ||||||
| 		{ | 		{ | ||||||
| 			m_order[m_cur_index].m_enabled = !m_order[m_cur_index].m_enabled; | 			toggleBool(m_order[m_cur_index].m_enabled); | ||||||
| 			m_src->setSpectrumProcessOrder(m_order); | 			m_src->setSpectrumProcessOrder(m_order); | ||||||
| 			if (ModuleOrderOrEnabledChangedCallback) | 			if (ModuleOrderOrEnabledChangedCallback) | ||||||
| 				ModuleOrderOrEnabledChangedCallback(); | 				ModuleOrderOrEnabledChangedCallback(); | ||||||
| @@ -993,6 +993,7 @@ void SpectralChainEditor::moveModule(int old_id, int new_id) | |||||||
|  |  | ||||||
| void SpectralChainEditor::drawBox(Graphics & g, int index, int x, int y, int w, int h) | void SpectralChainEditor::drawBox(Graphics & g, int index, int x, int y, int w, int h) | ||||||
| { | { | ||||||
|  | 	jassert(m_order[index].m_enabled != nullptr); | ||||||
| 	String txt; | 	String txt; | ||||||
| 	if (m_order[index].m_index == 0) | 	if (m_order[index].m_index == 0) | ||||||
| 		txt = "Harmonics"; | 		txt = "Harmonics"; | ||||||
| @@ -1021,9 +1022,10 @@ void SpectralChainEditor::drawBox(Graphics & g, int index, int x, int y, int w, | |||||||
| 	g.setColour(Colours::white); | 	g.setColour(Colours::white); | ||||||
| 	g.drawRect(x, y, w, h); | 	g.drawRect(x, y, w, h); | ||||||
| 	g.drawFittedText(txt, x,y,w,h, Justification::centred, 3); | 	g.drawFittedText(txt, x,y,w,h, Justification::centred, 3); | ||||||
|  | 	//g.drawFittedText(m_order[index].m_enabled->name, x, y, w, h, Justification::centred, 3); | ||||||
| 	g.setColour(Colours::gold); | 	g.setColour(Colours::gold); | ||||||
| 	g.drawRect(x + 2, y + 2, 12, 12); | 	g.drawRect(x + 2, y + 2, 12, 12); | ||||||
| 	if (m_order[index].m_enabled == true) | 	if (*m_order[index].m_enabled == true) | ||||||
| 	{ | 	{ | ||||||
| 		g.drawLine(x+2, y+2, x+14, y+14); | 		g.drawLine(x+2, y+2, x+14, y+14); | ||||||
| 		g.drawLine(x+2, y+14, x+14, y+2); | 		g.drawLine(x+2, y+14, x+14, y+2); | ||||||
|   | |||||||
| @@ -93,7 +93,11 @@ PaulstretchpluginAudioProcessor::PaulstretchpluginAudioProcessor() | |||||||
| 	m_thumb = std::make_unique<AudioThumbnail>(512, *m_afm, *m_thumbcache); | 	m_thumb = std::make_unique<AudioThumbnail>(512, *m_afm, *m_thumbcache); | ||||||
| 	// The default priority of 2 is a bit too low in some cases, it seems... | 	// The default priority of 2 is a bit too low in some cases, it seems... | ||||||
| 	m_thumbcache->getTimeSliceThread().setPriority(3); | 	m_thumbcache->getTimeSliceThread().setPriority(3); | ||||||
| 	m_stretch_source = std::make_unique<StretchAudioSource>(2, m_afm); | 	for (int i = 0; i < 9; ++i) // 41-49 | ||||||
|  | 	{ | ||||||
|  | 		m_sm_enab_pars[i] = new AudioParameterBool("enab_specmodule" + String(i), "Enable spectral module " + String(i + 1), false); | ||||||
|  | 	} | ||||||
|  | 	m_stretch_source = std::make_unique<StretchAudioSource>(2, m_afm,m_sm_enab_pars); | ||||||
| 	 | 	 | ||||||
| 	m_stretch_source->setOnsetDetection(0.0); | 	m_stretch_source->setOnsetDetection(0.0); | ||||||
| 	m_stretch_source->setLoopingEnabled(true); | 	m_stretch_source->setLoopingEnabled(true); | ||||||
| @@ -159,7 +163,6 @@ PaulstretchpluginAudioProcessor::PaulstretchpluginAudioProcessor() | |||||||
| 	addParameter(new AudioParameterFloat("freefilter_randomyamount0", "Random amount", 0.0, 1.0, 0.0)); // 40 | 	addParameter(new AudioParameterFloat("freefilter_randomyamount0", "Random amount", 0.0, 1.0, 0.0)); // 40 | ||||||
| 	for (int i = 0; i < 9; ++i) // 41-49 | 	for (int i = 0; i < 9; ++i) // 41-49 | ||||||
| 	{ | 	{ | ||||||
| 		m_sm_enab_pars[i] = new AudioParameterBool("enab_specmodule"+String(i), "Enable spectral module "+String(i+1), false); |  | ||||||
| 		addParameter(m_sm_enab_pars[i]); | 		addParameter(m_sm_enab_pars[i]); | ||||||
| 	} | 	} | ||||||
| 	auto& pars = getParameters(); | 	auto& pars = getParameters(); | ||||||
| @@ -237,7 +240,7 @@ ValueTree PaulstretchpluginAudioProcessor::getStateTree(bool ignoreoptions, bool | |||||||
| 	for (int i = 0; i < specorder.size(); ++i) | 	for (int i = 0; i < specorder.size(); ++i) | ||||||
| 	{ | 	{ | ||||||
| 		paramtree.setProperty("specorder" + String(i), specorder[i].m_index, nullptr); | 		paramtree.setProperty("specorder" + String(i), specorder[i].m_index, nullptr); | ||||||
| 		paramtree.setProperty("specstepenabled" + String(i), specorder[i].m_enabled, nullptr); | 		//paramtree.setProperty("specstepenabled" + String(i), specorder[i].m_enabled, nullptr); | ||||||
| 	} | 	} | ||||||
| 	if (ignoreoptions == false) | 	if (ignoreoptions == false) | ||||||
| 	{ | 	{ | ||||||
| @@ -264,16 +267,18 @@ void PaulstretchpluginAudioProcessor::setStateFromTree(ValueTree tree) | |||||||
|             m_load_file_with_state = tree.getProperty("loadfilewithstate", true); |             m_load_file_with_state = tree.getProperty("loadfilewithstate", true); | ||||||
| 			if (tree.hasProperty("numspectralstages")) | 			if (tree.hasProperty("numspectralstages")) | ||||||
| 			{ | 			{ | ||||||
|  | 				/* | ||||||
| 				std::vector<SpectrumProcess> order; | 				std::vector<SpectrumProcess> order; | ||||||
| 				int ordersize = tree.getProperty("numspectralstages"); | 				int ordersize = tree.getProperty("numspectralstages"); | ||||||
| 				for (int i = 0; i < ordersize; ++i) | 				for (int i = 0; i < ordersize; ++i) | ||||||
| 				{ | 				{ | ||||||
| 					bool step_enabled = tree.getProperty("specstepenabled" + String(i)); | 					bool step_enabled = tree.getProperty("specstepenabled" + String(i)); | ||||||
| 					order.push_back({ (int)tree.getProperty("specorder" + String(i)), step_enabled }); | 					//order.push_back({ (int)tree.getProperty("specorder" + String(i)), step_enabled }); | ||||||
| 				} | 				} | ||||||
|                 if (ordersize<m_stretch_source->getSpectrumProcessOrder().size()) |                 if (ordersize<m_stretch_source->getSpectrumProcessOrder().size()) | ||||||
|                     order.emplace_back(8,false); |                     order.emplace_back(8,m_sm_enab_pars[8]); | ||||||
| 				m_stretch_source->setSpectrumProcessOrder(order); | 				m_stretch_source->setSpectrumProcessOrder(order); | ||||||
|  | 				*/ | ||||||
| 			} | 			} | ||||||
| 			getFromTreeProperties(tree, "waveviewrange", m_wave_view_range); | 			getFromTreeProperties(tree, "waveviewrange", m_wave_view_range); | ||||||
| 			for (int i = 0; i < getNumParameters(); ++i) | 			for (int i = 0; i < getNumParameters(); ++i) | ||||||
| @@ -445,7 +450,7 @@ String PaulstretchpluginAudioProcessor::offlineRender(File outputfile) | |||||||
| { | { | ||||||
| 	File outputfiletouse = outputfile.getNonexistentSibling(); | 	File outputfiletouse = outputfile.getNonexistentSibling(); | ||||||
| 	int numoutchans = *getIntParameter(cpi_num_outchans); | 	int numoutchans = *getIntParameter(cpi_num_outchans); | ||||||
| 	auto ss = std::make_shared<StretchAudioSource>(numoutchans,m_afm); | 	auto ss = std::make_shared<StretchAudioSource>(numoutchans,m_afm,m_sm_enab_pars); | ||||||
| 	int blocksize = 2048; | 	int blocksize = 2048; | ||||||
| 	 | 	 | ||||||
| 	ss->setAudioFile(m_current_file); | 	ss->setAudioFile(m_current_file); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 xenakios
					xenakios