00001 /* 00002 * Copyright (c) 2004 MUSIC TECHNOLOGY GROUP (MTG) 00003 * UNIVERSITAT POMPEU FABRA 00004 * 00005 * 00006 * This program is free software; you can redistribute it and/or modify 00007 * it under the terms of the GNU General Public License as published by 00008 * the Free Software Foundation; either version 2 of the License, or 00009 * (at your option) any later version. 00010 * 00011 * This program is distributed in the hope that it will be useful, 00012 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00014 * GNU General Public License for more details. 00015 * 00016 * You should have received a copy of the GNU General Public License 00017 * along with this program; if not, write to the Free Software 00018 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 00019 * 00020 */ 00021 00022 #include "SMSAnalysisConfig.hxx" 00023 00024 namespace CLAM 00025 { 00026 00027 void SMSAnalysisConfig::DefaultInit() 00028 { 00029 AddAll(); 00030 UpdateData(); 00031 DefaultValues(); 00032 } 00033 00034 void SMSAnalysisConfig::DefaultValues() 00035 { 00036 00037 SetprSamplingRate(44100); 00038 00039 GetSinSpectralAnalysis().SetWindowType(EWindowType::eHamming); 00040 GetResSpectralAnalysis().SetWindowType(EWindowType::eBlackmanHarris92); 00041 00042 GetPeakDetect().SetMagThreshold(-60); 00043 00044 //TODO PA remove these values (aiming to analy-synt streaming) ? 00045 SetSinWindowSize(2049); 00046 SetHopSize(512); 00047 SetSinZeroPadding(0); 00048 SetResWindowSize(1025); 00049 00050 } 00051 00052 00053 void SMSAnalysisConfig::SetSinWindowSize(TSize w) 00054 { 00055 GetSinSpectralAnalysis().SetWindowSize(w); 00056 } 00057 00058 TSize SMSAnalysisConfig::GetSinWindowSize() const 00059 { 00060 return GetSinSpectralAnalysis().GetWindowSize(); 00061 } 00062 00064 void SMSAnalysisConfig::SetSinWindowType(const EWindowType& t) 00065 { 00066 GetSinSpectralAnalysis().SetWindowType(t); 00067 } 00068 00069 const EWindowType& SMSAnalysisConfig::GetSinWindowType() const 00070 { 00071 return GetSinSpectralAnalysis().GetWindowType(); 00072 } 00073 00075 void SMSAnalysisConfig::SetSinZeroPadding(int z) 00076 { 00077 GetSinSpectralAnalysis().SetZeroPadding(z); 00078 } 00079 00080 int SMSAnalysisConfig::GetSinZeroPadding() const 00081 { 00082 return GetSinSpectralAnalysis().GetZeroPadding(); 00083 } 00084 00085 void SMSAnalysisConfig::SetHopSize(TSize h) 00086 { 00087 GetSinSpectralAnalysis().SetHopSize(h); 00088 GetResSpectralAnalysis().SetHopSize(h); 00089 } 00090 00091 TSize SMSAnalysisConfig::GetHopSize() const 00092 { 00093 return GetSinSpectralAnalysis().GetHopSize(); 00094 } 00095 00096 /*****Configuration for residual component analysis*****/ 00097 00098 void SMSAnalysisConfig::SetResWindowSize(TSize w) 00099 { 00100 GetResSpectralAnalysis().SetWindowSize(w); 00101 GetSynthSineSpectrum().SetSpectrumSize(GetResSpectralAnalysis().GetFFT().GetAudioSize()/2+1); 00102 } 00103 00104 TSize SMSAnalysisConfig::GetResWindowSize() const 00105 { 00106 return GetResSpectralAnalysis().GetWindowSize(); 00107 } 00108 00110 void SMSAnalysisConfig::SetResWindowType(const EWindowType& t) 00111 { 00112 GetResSpectralAnalysis().SetWindowType(t); 00113 } 00114 00115 const EWindowType& SMSAnalysisConfig::GetResWindowType() const 00116 { 00117 return GetResSpectralAnalysis().GetWindowType(); 00118 } 00119 00121 void SMSAnalysisConfig::SetResZeroPadding(int z) 00122 { 00123 GetResSpectralAnalysis().SetZeroPadding(z); 00124 } 00125 00126 int SMSAnalysisConfig::GetResZeroPadding() const 00127 { 00128 return GetResSpectralAnalysis().GetZeroPadding(); 00129 } 00130 00132 void SMSAnalysisConfig::SetSamplingRate(TData sr) 00133 { 00134 SetprSamplingRate( int(sr) ); 00135 GetSinSpectralAnalysis().SetSamplingRate(sr); 00136 GetResSpectralAnalysis().SetSamplingRate(sr); 00137 GetSynthSineSpectrum().SetSamplingRate(sr); 00138 } 00139 00140 TData SMSAnalysisConfig::GetSamplingRate() const 00141 { 00142 return TData(GetprSamplingRate()); 00143 } 00144 00145 00146 TInt32 SMSAnalysisConfig::PowerOfTwo(TInt32 size) 00147 { 00148 int tmp = size; 00149 int outputSize = 1; 00150 while (tmp) 00151 { 00152 outputSize=outputSize << 1; 00153 tmp=tmp >> 1; 00154 } 00155 if(outputSize == size << 1) 00156 outputSize = outputSize >> 1; 00157 return outputSize; 00158 } 00159 00160 TSize SMSAnalysisConfig::GetInitialOffset() const 00161 { 00162 TSize largerWindowSize; 00163 if(GetSinWindowSize()>GetResWindowSize()) largerWindowSize=GetSinWindowSize(); 00164 else largerWindowSize=GetResWindowSize(); 00165 00166 return -(largerWindowSize-1)/2+GetHopSize(); 00167 } 00168 00169 TSize SMSAnalysisConfig::GetHopsInBiggerWindow() const 00170 { 00171 if(GetSinWindowSize()>GetResWindowSize()) return (GetSinWindowSize()-1)/GetHopSize(); 00172 else return (GetResWindowSize()-1)/GetHopSize(); 00173 } 00174 00175 00176 } // namespace CLAM 00177