DOSBox-X
|
00001 // Comb filter implementation 00002 // 00003 // Written by Jezar at Dreampoint, June 2000 00004 // http://www.dreampoint.co.uk 00005 // This code is public domain 00006 00007 #include "comb.h" 00008 00009 comb::comb() 00010 { 00011 filterstore = 0; 00012 bufidx = 0; 00013 } 00014 00015 void comb::setbuffer(float *buf, int size) 00016 { 00017 buffer = buf; 00018 bufsize = size; 00019 } 00020 00021 void comb::mute() 00022 { 00023 for (int i=0; i<bufsize; i++) 00024 buffer[i]=0; 00025 } 00026 00027 void comb::setdamp(float val) 00028 { 00029 damp1 = val; 00030 damp2 = 1-val; 00031 } 00032 00033 float comb::getdamp() 00034 { 00035 return damp1; 00036 } 00037 00038 void comb::setfeedback(float val) 00039 { 00040 feedback = val; 00041 } 00042 00043 float comb::getfeedback() 00044 { 00045 return feedback; 00046 } 00047 00048 void comb::deletebuffer() 00049 { 00050 delete[] buffer; 00051 buffer = 0; 00052 } 00053 00054 00055 void comb::saveState( std::ostream &stream) 00056 { 00057 stream.write(reinterpret_cast<const char*>(&feedback), sizeof(feedback) ); 00058 stream.write(reinterpret_cast<const char*>(&filterstore), sizeof(filterstore) ); 00059 stream.write(reinterpret_cast<const char*>(&damp1), sizeof(damp1) ); 00060 stream.write(reinterpret_cast<const char*>(&damp2), sizeof(damp2) ); 00061 stream.write(reinterpret_cast<const char*>(buffer), (std::streamsize)((size_t)bufsize * sizeof(float)) ); 00062 stream.write(reinterpret_cast<const char*>(&bufsize), sizeof(bufsize) ); 00063 stream.write(reinterpret_cast<const char*>(&bufidx), sizeof(bufidx) ); 00064 } 00065 00066 00067 void comb::loadState( std::istream &stream) 00068 { 00069 stream.read(reinterpret_cast<char*>(&feedback), sizeof(feedback) ); 00070 stream.read(reinterpret_cast<char*>(&filterstore), sizeof(filterstore) ); 00071 stream.read(reinterpret_cast<char*>(&damp1), sizeof(damp1) ); 00072 stream.read(reinterpret_cast<char*>(&damp2), sizeof(damp2) ); 00073 stream.read(reinterpret_cast<char*>(buffer), (std::streamsize)((size_t)bufsize * sizeof(float)) ); 00074 stream.read(reinterpret_cast<char*>(&bufsize), sizeof(bufsize) ); 00075 stream.read(reinterpret_cast<char*>(&bufidx), sizeof(bufidx) ); 00076 }