libsidplayfp
1.0.3
|
00001 /* 00002 * This file is part of libsidplayfp, a SID player engine. 00003 * 00004 * Copyright 2011-2013 Leandro Nini <drfiemost@users.sourceforge.net> 00005 * Copyright 2007-2010 Antti Lankila 00006 * Copyright 2004 Dag Lem <resid@nimrod.no> 00007 * 00008 * This program is free software; you can redistribute it and/or modify 00009 * it under the terms of the GNU General Public License as published by 00010 * the Free Software Foundation; either version 2 of the License, or 00011 * (at your option) any later version. 00012 * 00013 * This program is distributed in the hope that it will be useful, 00014 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00015 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00016 * GNU General Public License for more details. 00017 * 00018 * You should have received a copy of the GNU General Public License 00019 * along with this program; if not, write to the Free Software 00020 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 00021 */ 00022 00023 #ifndef WAVEFORMCALCULATOR_h 00024 #define WAVEFORMCALCULATOR_h 00025 00026 #include <map> 00027 00028 #include "siddefs-fp.h" 00029 #include "array.h" 00030 00031 00032 namespace reSIDfp 00033 { 00034 00035 typedef struct 00036 { 00037 float bias; 00038 float pulsestrength; 00039 float topbit; 00040 float distance; 00041 float stmix; 00042 } CombinedWaveformConfig; 00043 00049 class WaveformCalculator 00050 { 00051 private: 00052 std::map<const CombinedWaveformConfig*, array<short> > CACHE; 00053 00054 static const CombinedWaveformConfig config[2][4]; 00055 00063 short calculateCombinedWaveform(CombinedWaveformConfig config, int waveform, int accumulator) const; 00064 00065 WaveformCalculator() {} 00066 00067 public: 00068 static WaveformCalculator* getInstance(); 00069 00076 array<short>* buildTable(ChipModel model); 00077 }; 00078 00079 } // namespace reSIDfp 00080 00081 #endif