<div dir="ltr">Dear Gary,<br><br>&nbsp; I am using my colleauge code written for real time voice command recording&nbsp; for a project but I could not compile this. I try to debug this but the message was:<br><br><br>/Users/asr/P21/recMain.h:39: error: &#39;RtAudioStreamStatus&#39; has not been declared<br>
/Users/P21/recMain.h:61: error: &#39;StreamParameters&#39; in class &#39;RtAudio&#39; does not name a type<br>/Users/P21/recMain.h:84: error: &#39;DeviceInfo&#39; in class &#39;RtAudio&#39; does not name a type<br>/Users/P21/RtAudioInterface.cpp:17: error: &#39;RtAudioStreamStatus&#39; has not been declared<br>
Process terminated with status 1 (0 minutes, 1 seconds)<br><br>I attached the program if you could please provide your advice and kind help what has been wrong here for using this RtAudio for recording&nbsp; some audio command.<br>
<br>#include &quot;recMain.h&quot;<br>#include &quot;SILTT.h&quot;<br>#include &quot;names_P21.h&quot;<br>using namespace P21;<br>#include &lt;iostream&gt;<br>#include &quot;FEATEXTR.h&quot;<br><br>/*********************************************************************<br>
*********************************************************************<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; global C-style callbackfunction<br>*********************************************************************<br>**********************************************************************/<br>
int RtAudioInterface( void *outputBuffer,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void *inputBuffer,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned int nBufferFrames,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; double streamTime,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RtAudioStreamStatus status,<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void *callbackdata )<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp; recFrame* gui= static_cast&lt;recFrame*&gt;(callbackdata);<br><br><br>#if wxUSE_STATUSBAR<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp; if ( status ){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp; (gui-&gt;statusBar)-&gt;SetStatusText(<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; wxMessageBox(_(&quot;Streamoverflow detected&quot;));//,0);<br>&nbsp;&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp;&nbsp; wxString t; t&lt;&lt;_(&quot;Time: &quot;)&lt;&lt;streamTime&lt;&lt;_(&quot;\t|#: &quot;)&lt;&lt;(gui-&gt;_calls);<br>&nbsp;&nbsp;&nbsp;&nbsp; (gui-&gt;statusBar)-&gt;SetStatusText(t,0);<br>
}<br>#endif<br><br>&nbsp;// sonst speichere &quot;alles&quot; im zwischenspeicher<br><br><br><br>// :::::::::::::::::::_calls&lt;32 &amp;&amp; _fb_counter&lt;_fixed_analyze_size:::::::::::::::::::::::::::::::::::<br>real* buffer=static_cast&lt;real*&gt;(inputBuffer);<br>
<br>if(nBufferFrames!=1024){ wxString t; t&lt;&lt;nBufferFrames; wxMessageBox(t);}<br><br>for(unsigned k=0;k&lt;1024;k+=4,++(gui-&gt;_fb_counter))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; gui-&gt;_fixed_buffer[gui-&gt;_fb_counter]=(buffer[k]+<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; buffer[k+1]*2.0+<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; buffer[k+2]*2.0+<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; buffer[k+3]&nbsp;&nbsp; )/6.0;<br><br>++(gui-&gt;_calls);<br>if( (gui-&gt;_calls&lt;32) ) return 0;//speichere zwischen für calls=1,2,...,32<br>
<br><br><br><br><br>// hier _calls==32 (und größer)<br>// d.h. 32*(1024/4)=8192 reele daten gesammelt bis jetzt<br>// setzte gui-&gt;calls wieder auf null:<br>&nbsp;&nbsp;&nbsp; (gui-&gt;_calls)=0;<br>&nbsp;&nbsp;&nbsp; (gui-&gt;_fb_counter)=0;<br>// hier sollte die analyse dann starten<br>
&nbsp;&nbsp;&nbsp; /////////////////////////////////////////////////////////////////////////////////////////////////<br>&nbsp;&nbsp;&nbsp; /////////////////////////////////////////////////////////////////////////////////////////////////<br>&nbsp;&nbsp;&nbsp; /////////////////////////////////////////////////////////////////////////////////////////////////<br>
&nbsp;&nbsp;&nbsp; /////////////////////////////////////////////////////////////////////////////////////////////////<br>&nbsp;&nbsp;&nbsp; /////////////////////////////////////////////////////////////////////////////////////////////////<br>&nbsp;&nbsp;&nbsp; /////////////////////////////////////////////////////////////////////////////////////////////////<br>
&nbsp;&nbsp;&nbsp; /////////////////////////////////////////////////////////////////////////////////////////////////<br>&nbsp;&nbsp;&nbsp; /////////////////////////////////////////////////////////////////////////////////////////////////<br><br>/* mache folgende überlegung<br>
&nbsp;&nbsp;&nbsp; ---- für US-1641 ------- :<br>&nbsp;&nbsp;&nbsp; Samplingfrequenz: 44100 Hz (entspricht in etwa 4/3* 2^15 Hz)<br>&nbsp;&nbsp;&nbsp; höchste Pufferlänge (bei einem Mikro) 2^10 Samples<br><br>&nbsp;&nbsp;&nbsp; wir nehmen NUR jeden 4-ten Punkt aus dem Puffer (-&gt; Samplingfrequenz geht runter auf<br>
&nbsp;&nbsp;&nbsp; 4/3* 2^13 Hz)<br>&nbsp;&nbsp;&nbsp; und schreiben ergebnis in ein zwischenspeicher: _fixed_buffer[0,...,2^13-1]<br>&nbsp;&nbsp;&nbsp;&nbsp; --- damit der ganze zwischenspeicher (nicht mehr und nicht weniger) ausgenutzt wird,<br>&nbsp;&nbsp;&nbsp;&nbsp; benutzen wir die variable (gui-&gt;calls), die in diesem fall nicht größer als 2^5 sein darf:<br>
&nbsp;&nbsp;&nbsp;&nbsp; nBufferFrames=2^10 ----&gt; 2^8 werden abgespeichert in _fixed_buffer, das alles 2^5 mal, also<br>&nbsp;&nbsp;&nbsp;&nbsp; insgesamt 2^(8+5)<br>*/<br><br><br>&nbsp;&nbsp;&nbsp;&nbsp; //wxString t; t&lt;&lt;_(&quot;calls &quot;)&lt;&lt;(gui-&gt;_calls)&lt;&lt;_(&quot;\n fb_counter: &quot;)&lt;&lt;(gui-&gt;_fb_counter);&nbsp;&nbsp;&nbsp;&nbsp; gui-&gt;statusBar-&gt;SetStatusText(t,1);<br>
<br>//wxMessageBox(_(&quot;do analyze...\n&quot;));<br>//(gui-&gt;_deviceinfo).name<br>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .sampleRates.size() --&gt; .sampleRates[0,...]<br>//<br><br><br><br><br><br><br>&nbsp;&nbsp;&nbsp; Signal* _x=(gui-&gt;_x);<br>&nbsp;&nbsp;&nbsp; // this is already done in the recFrame-constructor:<br>
&nbsp;&nbsp;&nbsp; //&quot;_x-&gt;RtAudioInterface( gui-&gt;_fixed_buffer, gui-&gt;_fixed_analyze_size );&quot;<br>&nbsp;&nbsp;&nbsp; //=&gt; gui-&gt;_fixed_analyze_size == _x-&gt;size()<br><br>&nbsp;&nbsp;&nbsp;&nbsp; SILTT analysis(static_cast&lt;Signal&amp;&gt;(*_x), gui-&gt;_cost, gui-&gt;_costpar, 0.0);<br>
&nbsp;&nbsp;&nbsp;&nbsp; analysis.dct(*_x);<br><br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FEATEXTR&amp; F = *(gui-&gt;_F);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; F.compute(analysis);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; F.frequency().draw(analysis);<br><br><br>&nbsp;&nbsp;&nbsp; wxString shift,bbsize, costval,par;<br>&nbsp;&nbsp;&nbsp; shift&lt;&lt;analysis.shift();&nbsp;&nbsp;&nbsp;&nbsp; bbsize&lt;&lt;analysis.bbsize();&nbsp;&nbsp;&nbsp; costval&lt;&lt;analysis.cost();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; gui-&gt;m_staticTextShiftIndex-&gt;SetLabel(shift);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; gui-&gt;m_staticTextBBSize-&gt;SetLabel(bbsize);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; gui-&gt;m_staticTextCostValue-&gt;SetLabel(costval);<br><br>&nbsp;&nbsp;&nbsp;&nbsp; par&lt;&lt;_(&quot;cost=&quot;)&lt;&lt;(gui-&gt;_costpar)&lt;&lt;_(&quot; Freq:&quot;)&lt;&lt;(gui-&gt;_sampleRate)&lt;&lt;_(&quot; buff= &quot;)&lt;&lt;(gui-&gt;_bufferFrames)&lt;&lt;_(&quot; F=&quot;)&lt;&lt;(gui-&gt;_cost)<br>
&nbsp;&nbsp;&nbsp;&nbsp; ;//&lt;&lt;_(&quot; µ=&quot;)&lt;&lt;meanfreq;<br>&nbsp;&nbsp;&nbsp; (gui-&gt;statusBar)-&gt;SetStatusText(par,1);<br><br><br><br>return 0;<br>/*******************************************************************************<br>********************************************************************************<br>
********************************************************************************<br>*******************************************************************************/<br>//compute a 2D (freq vs time) representation from analysis.dct-coeffs<br>
<br>// _bufferFrames==x.size() , x is a Signal-object<br><br>//analysis.show_dct();<br>// set switch to _dct -- used in SILTT::operator[](index i)<br>real* dct= analysis.get_add_dct();//*(analysis[0]);<br>//analysis.show_bbnodes();<br>
P21::index* node=analysis.get_add_bbnodes();//*(analysis[0]);<br><br><br>unsigned char g; // gray-code index: 0-255<br>//compute max(dct)///////////////////////<br>real maxdct=fabs(dct[0]);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /////<br>&nbsp;for(P21::index i=1;i&lt;_x-&gt;size();++i) /////<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(maxdct&lt;fabs( dct[i]))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /////<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; maxdct=fabs( dct[i]);&nbsp;&nbsp; /////<br>/////////////////////////////////////////<br><br><br>P21::index dt, df;<br>wxString tmp;<br><br>// clear plot-area:<br>gui-&gt;_DCcoeffs.SetBrush(wxColour(0,0,0));(gui-&gt;_DCcoeffs).DrawRectangle( 0,0,<br>
2*gui-&gt;_scale_x,2*gui-&gt;_scale_y);<br><br>P21::index nxbox, nybox, b;<br>depth d;<br><br>if(analysis.bbsize()==1)<br>{//plot a graph<br>&nbsp;&nbsp;&nbsp; for(P21::index x=0;x&lt;_x-&gt;size();++x)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; gui-&gt;_DCcoeffs.DrawPoint(static_cast&lt;wxCoord&gt;(600+10*dct[x]),static_cast&lt;wxCoord&gt;(600 - 20-x/10));<br>
<br><br>&nbsp;&nbsp;&nbsp; dt=gui-&gt;_scale_x;<br>&nbsp;&nbsp;&nbsp; df=1;//gui-&gt;_scale_y;<br><br>&nbsp;&nbsp;&nbsp; for(P21::index i=0, y=gui-&gt;_scale_y;i&lt;512||y&gt;0;--y) // for each frequency-entry in a packet<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g=static_cast&lt;unsigned char&gt;(ceil( 255*dct[++i]/maxdct ));<br>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; gui-&gt;_DCcoeffs.SetBrush(recFrame::GRAYMAP[ g ] );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; gui-&gt;_DCcoeffs.SetPen(recFrame::GRAYMAP[ g ] );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; gui-&gt;_DCcoeffs.DrawRectangle( 10,560-i,gui-&gt;_scale_x,1);<br><br>&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp;&nbsp; return 0; // be carefull!!! every resetting of any variable, like _calls, should have been done before this step<br>}<br><br>for(P21::index t=10, i=0, p=0;p&lt;analysis.bbsize();++p,t+=dt)// for each best-basis packet<br>
{//plot a plane<br><br><br><br>&nbsp;&nbsp;&nbsp; // d=floor(log2(node))<br>&nbsp;&nbsp;&nbsp; d=P21::_log2(node[p]); if(static_cast&lt;P21::index&gt;(1&lt;&lt;d)!= node[p]) --d;<br><br>&nbsp;&nbsp;&nbsp; nxbox=(1&lt;&lt;d); //&nbsp; &lt;=&gt; 2^d<br>&nbsp;&nbsp;&nbsp; // number of boxes in frequency(y)-direction &lt;=&gt; same as packetlength of node(p)<br>
&nbsp;&nbsp;&nbsp; nybox=( (gui-&gt;_fixed_analyze_size)&gt;&gt;d);// &lt;=&gt; N/2^d<br>&nbsp;&nbsp;&nbsp; //b=node[p]-nxbox;<br><br><br>&nbsp;&nbsp;&nbsp; //dt=static_cast&lt;index&gt;(( static_cast&lt;double&gt;(nxbox/(gui-&gt;_bufferFrames))*(gui-&gt;_scale_x) ));<br>
&nbsp;&nbsp;&nbsp; dt=static_cast&lt;P21::index&gt;( (gui-&gt;_scale_x)/nxbox );<br>&nbsp;&nbsp; // if(dt==0) continue;<br><br>&nbsp;&nbsp;&nbsp; //df=static_cast&lt;index&gt;(( static_cast&lt;double&gt;(nybox/(gui-&gt;_bufferFrames))*(gui-&gt;_scale_y) ));<br>
&nbsp;&nbsp;&nbsp; df=static_cast&lt;P21::index&gt;( (gui-&gt;_scale_y)/nybox );<br>&nbsp;&nbsp; // if(df==0) continue;<br><br><br>&nbsp;&nbsp; if(dt==0)// || df==0) // both should be non-zero<br>&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; wxString s;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s&lt;&lt;_(&quot;nxBox=&quot;);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s&lt;&lt;nxbox&lt;&lt;_(&quot; nyBox=&quot;);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s&lt;&lt;nybox&lt;&lt;_(&quot;\n [node,d,b]=&quot;);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s&lt;&lt;node[p]&lt;&lt;_(&quot;, &quot;);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s&lt;&lt;d&lt;&lt;_(&quot;, &quot;);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s&lt;&lt;b;<br>
&nbsp;&nbsp;&nbsp; wxMessageBox(s);<br>&nbsp;&nbsp;&nbsp; continue;<br>&nbsp;&nbsp; }<br><br>P21::index K=1;<br>if( nybox&gt;(gui-&gt;_scale_y) )<br>{<br>&nbsp;df=1;<br>&nbsp;K=nybox/(gui-&gt;_scale_y);<br>&nbsp;//wxString par; par&lt;&lt;_(&quot;K=&quot;)&lt;&lt;K;<br>&nbsp;// (gui-&gt;statusBar)-&gt;SetStatusText(par,1);<br>
&nbsp;continue;<br>}<br>//plote zeitliche partitionierung:<br>gui-&gt;_DCcoeffs.SetBrush(*wxRED_BRUSH);<br>gui-&gt;_DCcoeffs.DrawRectangle( t,0,dt,10);<br><br><br>&nbsp;&nbsp;&nbsp; //for(index f=10+(gui-&gt;_scale_y),y=0;y&lt;nybox+1;++y,f-=df) // for each frequency-entry in a packet<br>
&nbsp;&nbsp;&nbsp; for(P21::index y=0,f=gui-&gt;_scale_y-df+100;y&lt;nybox;++y,f-=df) // for each frequency-entry in a packet<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(K==1){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g=static_cast&lt;unsigned char&gt;(ceil( 255.0*dct[++i]/maxdct) );<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; real s=0;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(P21::index j=0;j&lt;K;++j) s+=dct[++i];<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g=static_cast&lt;unsigned char&gt;(ceil( 255.0/K*s/maxdct ));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; gui-&gt;_DCcoeffs.SetBrush(recFrame::GRAYMAP[ g ] );<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; gui-&gt;_DCcoeffs.SetPen(recFrame::GRAYMAP[ g ] );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; gui-&gt;_DCcoeffs.DrawRectangle( t,f,dt,df);<br><br>&nbsp;&nbsp;&nbsp; }<br><br>}<br><br>return 0;<br>}<br><br><br>The other recMain.h file is also attached for your kind help:<br>
/***************************************************************<br>&nbsp;* Name:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; recMain.h<br>&nbsp;* Purpose:&nbsp;&nbsp; Defines Application Frame<br>&nbsp;* Author:&nbsp;&nbsp;&nbsp; P21-UNI KL ()<br>&nbsp;* Created:&nbsp;&nbsp; 2008-02-21<br>&nbsp;* Copyright: P21-UNI KL ()<br>
&nbsp;* License:<br>&nbsp;**************************************************************/<br><br>#ifndef RECMAIN_H<br>#define RECMAIN_H<br><br>#include &lt;wx/wx.h&gt;<br>#include &quot;recApp.h&quot;<br>#include &quot;GUIFrame.h&quot;<br>
<br>/***********/<br>#include &quot;RtAudio.h&quot;<br>#include&lt;cassert&gt;<br><br>#include &quot;names_P21.h&quot;<br>#include &quot;Signal.h&quot;<br>#include &quot;FEATEXTR.h&quot;<br>/***********/<br><br>#include &lt;fstream&gt;<br>
class recFrame: public GUIFrame<br>{<br>&nbsp;&nbsp;&nbsp; friend class FEATEXTR;<br>&nbsp;&nbsp;&nbsp; public:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; recFrame(wxFrame *frame);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ~recFrame();<br>&nbsp;&nbsp;&nbsp; // declare CallBackFunction as friend<br>&nbsp;&nbsp;&nbsp; // in order to access GUI-handles<br>
&nbsp;&nbsp;&nbsp; friend int RtAudioInterface( void *outputBuffer,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void *inputBuffer,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned int nBufferFrames,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; double streamTime,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RtAudioStreamStatus status,<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void *callbackdata );<br><br><br>&nbsp;&nbsp;&nbsp; //const bool dct2matrix(const SILTT&amp;);<br>&nbsp;&nbsp;&nbsp; private:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; virtual void OnClose(wxCloseEvent&amp; event);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; virtual void OnQuit(wxCommandEvent&amp; event);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; virtual void OnAbout(wxCommandEvent&amp; event);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; virtual void OnRecord(wxCommandEvent&amp; event );//wxEVT_COMMAND_BUTTON_CLICKED&nbsp; &amp;event)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; virtual void OnChangeBufferSize(wxCommandEvent&amp; event);//wxEVT_COMMAND_CHOICE_SELECTED<br>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; virtual void OnChoiceOf_Freq( wxCommandEvent&amp; event); //wxEVT_COMMAND_CHOICE_SELECTED<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; virtual void OnEnter_CostPar( wxCommandEvent&amp; event);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; virtual void OnChoiceOf_CostFunc( wxCommandEvent&amp; event);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //virtual void showCoeffs( wxMouseEvent&amp; event );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; virtual void paint( wxMouseEvent&amp; event);<br><br><br><br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bool _rec_status; // true=now recording, false=awaiting further commands<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RtAudio::StreamParameters _parameters;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; enum CONTROL{START_STREAM=40,STOP_STREAM,OPEN_STREAM,CLOSE_STREAM};<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void _stream(CONTROL);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RtAudio* _adc;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned _sampleRate, _bufferFrames;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; wxClientDC&amp; _DCcoeffs; // show DCT-coeffs<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // some Brushes and Pens ???<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; static const wxColour GRAYMAP[256];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //static const wxCoord PLOTORIGIN;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; P21::index _scale_x, _scale_y;<br>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal* _x; // use empty constructor !!! that&#39;s the interface !!!<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; P21::index _calls; // counter for RtAudio-callbackfunction<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Cost _cost;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; real _costpar;<br><br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; std::ofstream _COUT;<br>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned _fixed_analyze_size, _fb_counter;// _fb_counter=0,...,_fixed_analyze_size-1<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; real* _fixed_buffer;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RtAudio::DeviceInfo _deviceinfo;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FEATEXTR* _F;<br><br>};<br><br>#endif // RECMAIN_H<br>
<br><br>Thank you very much for your valuable time adn advice.<br><br>With sincere thanks,<br>Jui<br><br></div>