Changeset 8817

Show
Ignore:
Timestamp:
02/27/09 15:35:28 (4 years ago)
Author:
jgaeddert
Message:

configuring buffers, callbacks

Location:
ossiedev/branches/0.7.x/platform/AudioDevice/src
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • ossiedev/branches/0.7.x/platform/AudioDevice/src/AudioDevice.cpp

    r8808 r8817  
    3030 
    3131#define AUDIODEVICE_NUMCHANNELS     (2) 
    32 #define AUDIODEVICE_SAMPLEFORMAT    (paInt16) 
     32#define AUDIODEVICE_SAMPLEFORMAT    (paFloat32) // paInt16 
    3333 
    3434// Initializing constructor 
     
    4141 
    4242    // set configured flags to false 
     43    // All properties must be configured before the stream is opened, 
     44    // after which any change in properties will be ignored 
    4345    configured = false; 
    4446    configured_prop_samplerate_record   = false; 
     
    4749    configured_prop_buffersize_playback = false; 
    4850 
     51    buffer_playback = NULL; 
     52    buffer_record   = NULL; 
     53 
    4954    // Create Port for output sound 
    5055    dataOut = new standardInterfaces_i::complexShort_u("complexShortOut"); 
     56    dataIn  = new standardInterfaces_i::complexShort_p("complexShortIn"); 
    5157    // TODO: create port for input sound 
    5258 
     
    7076AudioDevice_i::~AudioDevice_i() 
    7177{ 
     78    if (buffer_playback) 
     79        delete [] buffer_playback; 
     80    if (buffer_record) 
     81        delete [] buffer_record; 
     82 
    7283    PaError err = Pa_Terminate(); 
    7384    if (err != paNoError) { 
     
    144155              << props.length()   
    145156             ) 
     157 
     158    if (configured) { 
     159        std::cout << "warning: AudioDevice_i::configure(), " 
     160                  << "cannot reconfigure once all properties are set" 
     161                  << std::endl; 
     162        return; 
     163    } 
    146164 
    147165    // read properties from .prf 
     
    201219        return; 
    202220 
    203     if (isRunning) { 
    204         stop(); 
    205         // ... 
    206         start(); 
    207     } else { 
    208         // ... 
    209     } 
    210  
     221    // configure streams 
     222    ConfigureStreams(); 
     223 
     224    // initialize buffers 
     225    buffer_playback = new float[2*buffersize_playback]; 
     226    buffer_record   = new float[2*buffersize_record]; 
    211227} 
    212228 
     
    370386} 
    371387 
     388void AudioDevice_i::SetRecordData(float * _data) 
     389{ 
     390    // copy data to buffer 
     391    for (unsigned int i=0; i<buffersize_record; i++) { 
     392        record_data_L[i] = buffer_record[2*i+0]; 
     393        record_data_R[i] = buffer_record[2*i+1]; 
     394    } 
     395 
     396    // push data 
     397    dataOut->pushPacket(record_data_L, record_data_R); 
     398} 
     399 
     400void AudioDevice_i::GetPlaybackData(float ** _data) 
     401{ 
     402    // wait for data 
     403    dataIn->getData(playback_data_L, playback_data_R); 
     404 
     405    // copy to buffer 
     406    for (unsigned int i=0; i<buffersize_playback; i++) { 
     407        buffer_playback[2*i+0] = (*playback_data_L)[i]; 
     408        buffer_playback[2*i+1] = (*playback_data_R)[i]; 
     409    } 
     410 
     411    // release input buffer 
     412    dataIn->bufferEmptied(); 
     413 
     414    // return pointer to playback buffer 
     415    _data = &buffer_playback; 
     416} 
     417 
    372418int portaudio_callback_record( 
    373419    const void *inputBuffer, 
     
    378424    void *userData ) 
    379425{ 
    380     AudioDevice_i * device = (AudioDevice_i*)userData; 
    381     short int * in = (short int*)inputBuffer; 
     426    //short int * in = (short int*)inputBuffer; 
    382427 
    383428    // prevent unused variable warnings 
     
    403448{ 
    404449    AudioDevice_i * device = (AudioDevice_i*)userData; 
    405     short int * out = (short int*)outputBuffer; 
     450    //short int * out = (short int*)outputBuffer; 
     451    // wait for data 
     452    float *data; 
     453    device->GetPlaybackData(&data); 
    406454 
    407455    // prevent unused variable warnings 
  • ossiedev/branches/0.7.x/platform/AudioDevice/src/AudioDevice.h

    r8807 r8817  
    3434#include "standardinterfaces/complexShort.h" 
    3535#include "standardinterfaces/complexShort_u.h" 
     36#include "standardinterfaces/complexShort_p.h" 
    3637 
    3738#include "portaudio.h" 
     
    5253    PaStreamCallbackFlags statusFlags, 
    5354    void *userData ); 
     55 
    5456 
    5557/// Main sound card device (capture) definition 
     
    7274    /// static function for omni thread: playback_sound() 
    7375    static void run_playback( void * data ); 
    74  
    75     /// Sets isRunning to False (pause) 
     76        /// Sets isRunning to False (pause) 
     77     
     78    // 
     79    void SetRecordData(float * _data); 
     80    void GetPlaybackData(float ** _data); 
     81     
    7682    void stop()  
    7783        throw (CF::Resource::StopError, CORBA::SystemException); 
     
    127133    /// Port: output sound samples 
    128134    standardInterfaces_i::complexShort_u *dataOut; 
     135    standardInterfaces_i::complexShort_p *dataIn; 
    129136 
    130137    // properties configured flags 
     
    156163    unsigned int buffersize_playback; 
    157164 
    158     PortTypes::ShortSequence playback_data_L; 
    159     PortTypes::ShortSequence playback_data_R; 
     165    PortTypes::ShortSequence *playback_data_L; 
     166    PortTypes::ShortSequence *playback_data_R; 
    160167 
    161168    PortTypes::ShortSequence record_data_L; 
    162169    PortTypes::ShortSequence record_data_R; 
     170 
     171    float * buffer_playback; 
     172    float * buffer_record; 
    163173 
    164174};