#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