DOSBox-X
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator
src/mt32/freeverb/comb.cpp
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 }