-
#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);
-
_lseek(audio_handle, 0L, SEEK_SET);
-
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;
-
}
-
//=============================================================================