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

dac.cpp (3348B)


      1 #include "dac.h"
      2 
      3 #include "dsp56kEmu/logging.h"
      4 
      5 namespace synthLib
      6 {
      7 	Dac::Dac() : m_processFunc(&DacProcessor<24, 0>::processSample)
      8 	{
      9 	}
     10 
     11 	bool Dac::configure(const uint32_t _outputBits, const uint32_t _noiseBits)
     12 	{
     13 		auto processFunc = findProcessFunc(_outputBits, _noiseBits);
     14 
     15 		if(processFunc == nullptr)
     16 		{
     17 			LOG("DAC configuration failed, unable to find process function for outputBits << " << _outputBits << " and noise bits " << _noiseBits);
     18 			return false;
     19 		}
     20 
     21 		m_processFunc = processFunc;
     22 		m_outputBits = _outputBits;
     23 		m_noiseBits = _noiseBits;
     24 
     25 		return true;
     26 	}
     27 
     28 	Dac::ProcessFunc Dac::findProcessFunc(const uint32_t _outputBits, const uint32_t _noiseBits)
     29 	{
     30 		switch (_outputBits)
     31 		{
     32 		case 8:
     33 			switch (_noiseBits)
     34 			{
     35 				case 0: return &DacProcessor<8, 0>::processSample;
     36 				case 1: return &DacProcessor<8, 1>::processSample;
     37 				case 2: return &DacProcessor<8, 2>::processSample;
     38 				case 3: return &DacProcessor<8, 3>::processSample;
     39 				case 4: return &DacProcessor<8, 4>::processSample;
     40 				case 5: return &DacProcessor<8, 5>::processSample;
     41 				case 6: return &DacProcessor<8, 6>::processSample;
     42 				case 7: return &DacProcessor<8, 7>::processSample;
     43 				default: return nullptr;
     44 			}
     45 		case 12:
     46 			switch (_noiseBits)
     47 			{
     48 				case 0: return &DacProcessor<12, 0>::processSample;
     49 				case 1: return &DacProcessor<12, 1>::processSample;
     50 				case 2: return &DacProcessor<12, 2>::processSample;
     51 				case 3: return &DacProcessor<12, 3>::processSample;
     52 				case 4: return &DacProcessor<12, 4>::processSample;
     53 				case 5: return &DacProcessor<12, 5>::processSample;
     54 				case 6: return &DacProcessor<12, 6>::processSample;
     55 				case 7: return &DacProcessor<12, 7>::processSample;
     56 				default: return nullptr;
     57 			}
     58 		case 16:
     59 			switch (_noiseBits)
     60 			{
     61 				case 0: return &DacProcessor<16, 0>::processSample;
     62 				case 1: return &DacProcessor<16, 1>::processSample;
     63 				case 2: return &DacProcessor<16, 2>::processSample;
     64 				case 3: return &DacProcessor<16, 3>::processSample;
     65 				case 4: return &DacProcessor<16, 4>::processSample;
     66 				case 5: return &DacProcessor<16, 5>::processSample;
     67 				case 6: return &DacProcessor<16, 6>::processSample;
     68 				case 7: return &DacProcessor<16, 7>::processSample;
     69 				default: return nullptr;
     70 			}
     71 		case 18:
     72 			switch (_noiseBits)
     73 			{
     74 				case 0: return &DacProcessor<18, 0>::processSample;
     75 				case 1: return &DacProcessor<18, 1>::processSample;
     76 				case 2: return &DacProcessor<18, 2>::processSample;
     77 				case 3: return &DacProcessor<18, 3>::processSample;
     78 				case 4: return &DacProcessor<18, 4>::processSample;
     79 				case 5: return &DacProcessor<18, 5>::processSample;
     80 				case 6: return &DacProcessor<18, 6>::processSample;
     81 				case 7: return &DacProcessor<18, 7>::processSample;
     82 				default: return nullptr;
     83 			}
     84 		case 24:
     85 			switch (_noiseBits)
     86 			{
     87 				case 0: return &DacProcessor<24, 0>::processSample;
     88 				case 1: return &DacProcessor<24, 1>::processSample;
     89 				case 2: return &DacProcessor<24, 2>::processSample;
     90 				case 3: return &DacProcessor<24, 3>::processSample;
     91 				case 4: return &DacProcessor<24, 4>::processSample;
     92 				case 5: return &DacProcessor<24, 5>::processSample;
     93 				case 6: return &DacProcessor<24, 6>::processSample;
     94 				case 7: return &DacProcessor<24, 7>::processSample;
     95 				default: return nullptr;
     96 			}
     97 		default:
     98 			return nullptr;
     99 		}
    100 	}
    101 }