CLAM-Development
1.1
|
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 /* Note type definition */ 00023 00024 #ifndef _Note_ 00025 #define _Note_ 00026 00027 #include "DynamicType.hxx" 00028 #include "DataTypes.hxx" 00029 #include "OSDefines.hxx" 00030 #include "Err.hxx" 00031 #include "ProcessingData.hxx" 00032 00033 #include "MediaTime.hxx" 00034 #include "PitchNote.hxx" 00035 00036 namespace CLAM { 00037 00042 class Note: public ProcessingData 00043 { 00044 public: 00045 DYNAMIC_TYPE_USING_INTERFACE (Note, 7, ProcessingData); 00046 /* Pitch information (not by default) */ 00047 DYN_ATTRIBUTE (0, public, PitchNote, PitchNote); 00048 /* Note Fundamental frequency (by default) */ 00049 DYN_ATTRIBUTE (1, public, TData, FundFreq); 00050 /* Note energy (by default) */ 00051 DYN_ATTRIBUTE (2, public, TData, Energy); 00052 DYN_ATTRIBUTE (3, public, MediaTime, Time); 00053 /* Intranote duration (not by default) */ 00054 DYN_ATTRIBUTE (4, public, MediaTime, Attack); 00055 DYN_ATTRIBUTE (5, public, MediaTime, Sustain); 00056 DYN_ATTRIBUTE (6, public, MediaTime, Release); 00057 00060 int GetNoteNumber() 00061 { 00062 return Round(69+log(GetFundFreq()/440)*17.31234); 00063 } 00064 int GetVelocity() 00065 { 00066 //this mapping is experimental and should be revisited 00067 TData velocity=65*log10(GetEnergy())+65; 00068 if(velocity<25) velocity=25; 00069 return (int)velocity;//65; 00070 } 00071 private: 00072 void DefaultInit(); 00073 }; 00074 00075 }; // namespace CLAM 00076 00077 00078 #endif // _Note_ 00079