gearmulator

Emulation of classic VA synths of the late 90s/2000s that are based on Motorola 56300 family DSPs
Log | Files | Refs | Submodules | README | LICENSE

weWaveDesc.cpp (2624B)


      1 #include "weWaveDesc.h"
      2 
      3 #include "weWaveTreeItem.h"
      4 #include "xtWaveEditor.h"
      5 
      6 #include "baseLib/filesystem.h"
      7 
      8 #include "synthLib/sysexToMidi.h"
      9 
     10 namespace xtJucePlugin
     11 {
     12 	WaveDesc* WaveDesc::fromDragSource(const juce::DragAndDropTarget::SourceDetails& _sourceDetails)
     13 	{
     14 		auto* desc = dynamic_cast<WaveDesc*>(_sourceDetails.description.getObject());
     15 		return desc;
     16 	}
     17 
     18 	bool WaveDesc::writeToFile(const juce::File& _file) const
     19 	{
     20 		std::vector<xt::SysEx> sysex;
     21 
     22 		sysex.reserve(tableIds.size() + waveIds.size());
     23 
     24 		for (size_t i = 0; i<tableIds.size(); ++i)
     25 			sysex.emplace_back(xt::State::createTableData(tableDatas[i], tableIds[i].rawId(), false));
     26 
     27 		for (size_t i = 0; i < waveIds.size(); ++i)
     28 			sysex.emplace_back(xt::State::createWaveData(waveDatas[i], waveIds[i].rawId(), false));
     29 
     30 		if(sysex.empty())
     31 			return false;
     32 
     33 		if (_file.getFullPathName().endsWithIgnoreCase(".syx"))
     34 		{
     35 			std::vector<uint8_t> data;
     36 			for (const auto& s : sysex)
     37 				data.insert(data.end(), s.begin(), s.end());
     38 			return baseLib::filesystem::writeFile(_file.getFullPathName().toStdString(), data);
     39 		}
     40 		return synthLib::SysexToMidi::write(_file.getFullPathName().toStdString().c_str(), sysex);
     41 	}
     42 
     43 	bool WaveDesc::canDropExternally() const
     44 	{
     45 		return !waveDatas.empty() || !tableDatas.empty();
     46 	}
     47 
     48 	std::string WaveDesc::getExportFileName(const pluginLib::Processor& _processor) const
     49 	{
     50 		std::stringstream name;
     51 		name << _processor.getProperties().name << " - ";
     52 
     53 		if (tableIds.size() > 1)
     54 			name << "Table " << m_editor.getTableName(tableIds.front()) << " - " << m_editor.getTableName(tableIds.back());
     55 		else if (waveIds.size() > 1)
     56 			name << "Wave " << WaveTreeItem::getWaveName(waveIds.front()) << " - " << WaveTreeItem::getWaveName(waveIds.back());
     57 		else if(!tableDatas.empty())
     58 			name << "Table " << m_editor.getTableName(tableIds.front());
     59 		else if(!waveDatas.empty())
     60 			name << "Wave " << WaveTreeItem::getWaveName(waveIds.front());
     61 		else
     62 			return DragAndDropObject::getExportFileName(_processor);
     63 
     64 		if (juce::ModifierKeys::getCurrentModifiers().isShiftDown())
     65 			name << ".syx";
     66 		else
     67 			name << ".mid";
     68 
     69 		return name.str();
     70 	}
     71 
     72 	void WaveDesc::fillData(const WaveEditorData& _data)
     73 	{
     74 		for (int32_t i=0; i<static_cast<int32_t>(waveIds.size()); ++i)
     75 		{
     76 			if (auto wave = _data.getWave(waveIds[i]))
     77 				waveDatas.push_back(*wave);
     78 			else
     79 				waveIds.erase(waveIds.begin() + i);
     80 		}
     81 		for (int32_t i = 0; i < static_cast<int32_t>(tableIds.size()); ++i)
     82 		{
     83 			if (auto table = _data.getTable(tableIds[i]))
     84 				tableDatas.push_back(*table);
     85 			else
     86 				tableIds.erase(tableIds.begin() + i);
     87 		}
     88 	}
     89 }