Mercurial > hg > qm-dsp
comparison dsp/signalconditioning/Framer.cpp @ 225:49844bc8a895
* Queen Mary C++ DSP library
author | Chris Cannam <c.cannam@qmul.ac.uk> |
---|---|
date | Wed, 05 Apr 2006 17:35:59 +0000 |
parents | |
children | e5907ae6de17 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 225:49844bc8a895 |
---|---|
1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ | |
2 | |
3 /* | |
4 QM DSP Library | |
5 | |
6 Centre for Digital Music, Queen Mary, University of London. | |
7 This file copyright 2005-2006 Christian Landone. | |
8 All rights reserved. | |
9 */ | |
10 | |
11 #include "Framer.h" | |
12 #include <math.h> | |
13 | |
14 ////////////////////////////////////////////////////////////////////// | |
15 // Construction/Destruction | |
16 ////////////////////////////////////////////////////////////////////// | |
17 | |
18 Framer::Framer() | |
19 { | |
20 m_dataFrame = NULL; | |
21 m_strideFrame = NULL; | |
22 } | |
23 | |
24 Framer::~Framer() | |
25 { | |
26 if( m_dataFrame != NULL ) | |
27 delete [] m_dataFrame; | |
28 | |
29 if( m_strideFrame != NULL ) | |
30 delete [] m_strideFrame; | |
31 } | |
32 | |
33 void Framer::configure( unsigned int frameLength, unsigned int hop ) | |
34 { | |
35 m_frameLength = frameLength; | |
36 m_stepSize = hop; | |
37 | |
38 resetCounters(); | |
39 | |
40 if( m_dataFrame != NULL ) | |
41 { | |
42 delete [] m_dataFrame; | |
43 m_dataFrame = NULL; | |
44 } | |
45 m_dataFrame = new double[ m_frameLength ]; | |
46 | |
47 if( m_strideFrame != NULL ) | |
48 { | |
49 delete [] m_strideFrame; | |
50 m_strideFrame = NULL; | |
51 } | |
52 m_strideFrame = new double[ m_stepSize ]; | |
53 } | |
54 | |
55 void Framer::getFrame(double *dst) | |
56 { | |
57 | |
58 if( (m_ulSrcIndex + ( m_frameLength) ) < m_ulSampleLen ) | |
59 { | |
60 for( unsigned int u = 0; u < m_frameLength; u++) | |
61 { | |
62 dst[ u ] = m_srcBuffer[ m_ulSrcIndex++ ]; | |
63 } | |
64 m_ulSrcIndex -= ( m_frameLength - m_stepSize ); | |
65 } | |
66 else | |
67 { | |
68 unsigned int rem = (m_ulSampleLen - m_ulSrcIndex ); | |
69 unsigned int zero = m_frameLength - rem; | |
70 | |
71 for( unsigned int u = 0; u < rem; u++ ) | |
72 { | |
73 dst[ u ] = m_srcBuffer[ m_ulSrcIndex++ ]; | |
74 } | |
75 | |
76 for( unsigned int u = 0; u < zero; u++ ) | |
77 { | |
78 dst[ rem + u ] = 0; | |
79 } | |
80 | |
81 m_ulSrcIndex -= (( rem - m_stepSize ) ); | |
82 } | |
83 | |
84 m_framesRead++; | |
85 } | |
86 | |
87 void Framer::resetCounters() | |
88 { | |
89 m_framesRead = 0; | |
90 m_ulSrcIndex = 0; | |
91 } | |
92 | |
93 unsigned int Framer::getMaxNoFrames() | |
94 { | |
95 return m_maxFrames; | |
96 } | |
97 | |
98 void Framer::setSource(double *src, unsigned int length) | |
99 { | |
100 m_srcBuffer = src; | |
101 m_ulSampleLen = length; | |
102 | |
103 m_maxFrames = (unsigned int)ceil( (double)m_ulSampleLen/(double)m_stepSize ) ; | |
104 } |