AudioStreamer.cpp

#include "AudioStreamer.h"
#include <stdio.h>
#include <fcntl.h>
#include <io.h>
//==================================================================================
AudioStreamer::AudioStreamer(const char* filename):
increment_ms(300),
audio_buffer_size(0),
audio_buffer(NULL)
{
     int audio_handle = _open(filename, _O_BINARY | _O_RDONLY);
     if (audio_handle <= 0)
     {
          printf("could not open audio file %s\n",filename);
          exit(-1);
     }
     audio_buffer_size = _lseek(audio_handle,0L,SEEK_END);
     _close(audio_handle);
     audio_handle = _open(filename, _O_BINARY | _O_RDONLY);
     audio_buffer = new char[audio_buffer_size];
     _read(audio_handle, audio_buffer, audio_buffer_size);
     _close(audio_handle);
}
//==================================================================================
AudioStreamer::~AudioStreamer()
{
     ThreadStop();
     delete[] audio_buffer;
}
//==================================================================================
void AudioStreamer::StartStream(AudioStreamCB CB, void* UserData)
{
     cb = CB;
     user_data = UserData;
     ThreadActivate();
     ThreadStart();
     printf("audio stream started\n");
}
//==================================================================================
void AudioStreamer::StopStream()
{
     ThreadStop();
     printf("audio stream stopped\n");
}
//==================================================================================
void AudioStreamer::ThreadAction()
{
     printf("audio thread working\n");
     int chunk_size;
     int end_chunk_size;
     char* current_pos = audio_buffer;
     bool feed_more = true;
     chunk_size = 8000*1*increment_ms/1000;
     end_chunk_size=chunk_size;
     end_buffer = new char[end_chunk_size];
     memset(end_buffer,0,end_chunk_size);

     while(current_pos != audio_buffer + audio_buffer_size &&
           feed_more &&
           !IsThreadShuttingDown())
     {
          if(current_pos + chunk_size > audio_buffer + audio_buffer_size)
          {
               chunk_size = (audio_buffer+audio_buffer_size) - current_pos;
          }
          feed_more = cb(current_pos,chunk_size,user_data);
          current_pos += chunk_size;
          printf("sending audio\n");
          Sleep(increment_ms);
     }
     while(feed_more && !IsThreadShuttingDown())
     {
          feed_more = cb(end_buffer,end_chunk_size,user_data);
          Sleep(increment_ms);
          printf("sending dead air\n");
     }
     printf("audio thread told to shut down\n");
     delete[] end_buffer;
}
//==================================================================================

Complete Help Topic List | Speech Engine Product Information