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

esaiListenerToFile.cpp (1503B)


      1 #include "esaiListenerToFile.h"
      2 
      3 #include "dsp56kEmu/logging.h"
      4 
      5 EsaiListenerToFile::EsaiListenerToFile(dsp56k::Esai& _esai, uint8_t _outChannels, uint8_t _inChannels, TCallback _callback,	uint32_t _samplerate, std::string _audioFilename)
      6 	: EsaiListener(_esai, _outChannels, _inChannels, std::move(_callback))
      7 	, m_samplerate(_samplerate)
      8 	, m_audioFilename(std::move(_audioFilename))
      9 {
     10 	for(size_t i=0; i<m_audioFilenames.size(); ++i)
     11 	{
     12 		m_audioFilenames[i] = m_audioFilename;
     13 		if(i)
     14 			m_audioFilenames[i] = static_cast<char>('0' + i) + m_audioFilenames[i];
     15 
     16 		m_audioDatas[i].reserve(65536);
     17 	}
     18 }
     19 
     20 bool EsaiListenerToFile::onDeliverAudioData(const std::vector<dsp56k::TWord>& _audioData)
     21 {
     22 	if (m_audioFilename.empty())
     23 		return true;
     24 
     25 	if(getChannelCount() == 1)
     26 	{
     27 		for(size_t s=0; s<_audioData.size(); ++s)
     28 			writeWord(0, _audioData[s]);
     29 	}
     30 	else
     31 	{
     32 		for(size_t s=0; s<_audioData.size();)
     33 		{
     34 			for(uint8_t c=0; c<getChannelCount(); ++c)
     35 			{
     36 				for(size_t i=0; i<2; ++i, ++s)
     37 				{
     38 					writeWord(c, _audioData[s]);
     39 				}
     40 			}
     41 		}
     42 	}
     43 
     44 	for(size_t i=0; i<getChannelCount(); ++i)
     45 	{
     46 		if(m_writers[i].write(m_audioFilenames[i], 24, false, 2, m_samplerate, m_audioDatas[i]))
     47 			m_audioDatas[i].clear();
     48 	}
     49 	return true;
     50 }
     51 
     52 void EsaiListenerToFile::onBeginDeliverAudioData()
     53 {
     54 	LOG("Begin writing audio to file " << m_audioFilename);
     55 }
     56 
     57 void EsaiListenerToFile::writeWord(const uint8_t _channel, const dsp56k::TWord _word)
     58 {
     59 	synthLib::WavWriter::writeWord(m_audioDatas[_channel], _word);
     60 }