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 }