Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Namespace Members | Class Members | File Members | Related Pages

SrcAudioResample< input_t, output_t > Class Template Reference

#include <frame.h>

Inheritance diagram for SrcAudioResample< input_t, output_t >:

Inheritance graph
[legend]
Collaboration diagram for SrcAudioResample< input_t, output_t >:

Collaboration graph
[legend]
List of all members.

Public Member Functions

 SrcAudioResample (int converter)
 SrcAudioResample (int converter, double output_rate, bool isStreaming)
virtual ~SrcAudioResample ()
void Resample (input_t *input, double input_rate, int channels, int samples)

Private Attributes

SRC_STATE * state
SRC_DATA data
float input_buffer [BUFFER_LEN]
float output_buffer [BUFFER_LEN]

template<class input_t, class output_t>
class SrcAudioResample< input_t, output_t >


Constructor & Destructor Documentation

template<class input_t, class output_t>
SrcAudioResample< input_t, output_t >::SrcAudioResample int  converter  )  [inline]
 

Definition at line 307 of file frame.h.

00307                                       : AudioResample<input_t,output_t>( 0 )
00308     {
00309         SrcAudioResample( converter, 0 );
00310     }

template<class input_t, class output_t>
SrcAudioResample< input_t, output_t >::SrcAudioResample int  converter,
double  output_rate,
bool  isStreaming
[inline]
 

Definition at line 311 of file frame.h.

References SrcAudioResample< input_t, output_t >::data, SrcAudioResample< input_t, output_t >::input_buffer, SrcAudioResample< input_t, output_t >::output_buffer, and SrcAudioResample< input_t, output_t >::state.

00311                                                                             :
00312         AudioResample<input_t,output_t>( output_rate )
00313     {
00314         int srcError = 0;
00315 
00316         state = src_new( converter, 2, &srcError );
00317         if ( srcError != 0 )
00318         {
00319             cerr << "SRC: " << src_strerror( srcError ) << endl;
00320         }
00321         else
00322         {
00323             data.data_in = input_buffer;
00324             data.data_out = output_buffer;
00325             data.end_of_input = isStreaming ? 0 : 1;
00326         }
00327     }
    virtual ~SrcAudioResample()

template<class input_t, class output_t>
virtual SrcAudioResample< input_t, output_t >::~SrcAudioResample  )  [inline, virtual]
 

Definition at line 328 of file frame.h.

References SrcAudioResample< input_t, output_t >::state.

00329     {
00330         src_delete( state );
00331     }


Member Function Documentation

template<class input_t, class output_t>
void SrcAudioResample< input_t, output_t >::Resample input_t *  input,
double  input_rate,
int  channels,
int  samples
[inline, virtual]
 

Reimplemented from AudioResample< input_t, output_t >.

Definition at line 332 of file frame.h.

References BUFFER_LEN, SrcAudioResample< input_t, output_t >::data, SrcAudioResample< input_t, output_t >::input_buffer, AudioResample< input_t, output_t >::output, SrcAudioResample< input_t, output_t >::output_buffer, AudioResample< input_t, output_t >::output_rate, AudioResample< input_t, output_t >::size, and SrcAudioResample< input_t, output_t >::state.

00333     {
00334         for ( int i = 0; i < samples * channels; ++i )
00335             input_buffer[ i ] = ( float ) input[ i ] / 32768.0;
00336 
00337         // Setup resampler
00338         data.input_frames = samples;
00339         data.output_frames = BUFFER_LEN / channels;
00340         data.src_ratio = this->output_rate / input_rate;
00341 
00342         // Resample
00343         int result = src_process ( state, &data );
00344         if ( result != 0 )
00345             cerr << "SRC: " << src_strerror( result ) << endl;
00346         this->size = data.output_frames_gen * channels * sizeof(output_t);
00347 
00348 // cerr << "Resample in samples " << samples << " out rate " << this->output_rate << " in rate " << input_rate << " src_ratio " << data.src_ratio << "out samples " << this->size/4 << endl;
00349 
00350         for ( int i = 0; i < data.output_frames_gen * channels; ++i )
00351         {
00352             float sample = output_buffer[ i ];
00353             if ( sample > 1.0 )
00354                 sample = 1.0;
00355             if ( sample < -1.0 )
00356                 sample = -1.0;
00357             if ( sample >= 0 )
00358                 this->output[ i ] = ( long int )( 32767.0 * sample );
00359             else
00360                 this->output[ i ] = ( long int )( 32768.0 * sample );
00361         }
00362     }


Member Data Documentation

template<class input_t, class output_t>
SRC_DATA SrcAudioResample< input_t, output_t >::data [private]
 

Definition at line 366 of file frame.h.

Referenced by SrcAudioResample< input_t, output_t >::Resample(), and SrcAudioResample< input_t, output_t >::SrcAudioResample().

template<class input_t, class output_t>
float SrcAudioResample< input_t, output_t >::input_buffer[BUFFER_LEN] [private]
 

Definition at line 367 of file frame.h.

Referenced by SrcAudioResample< input_t, output_t >::Resample(), and SrcAudioResample< input_t, output_t >::SrcAudioResample().

template<class input_t, class output_t>
float SrcAudioResample< input_t, output_t >::output_buffer[BUFFER_LEN] [private]
 

Definition at line 368 of file frame.h.

Referenced by SrcAudioResample< input_t, output_t >::Resample(), and SrcAudioResample< input_t, output_t >::SrcAudioResample().

template<class input_t, class output_t>
SRC_STATE* SrcAudioResample< input_t, output_t >::state [private]
 

Definition at line 365 of file frame.h.

Referenced by SrcAudioResample< input_t, output_t >::Resample(), SrcAudioResample< input_t, output_t >::SrcAudioResample(), and SrcAudioResample< input_t, output_t >::~SrcAudioResample().


The documentation for this class was generated from the following file:
Generated on Sun Mar 11 22:13:25 2007 for Kino by  doxygen 1.4.2