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 }