15 #include "userDataAudioCursor.h"
28 _audio_rate = src->_desired_rate;
29 _audio_channels = src->_desired_channels;
30 _can_seek = !src->_remove_after_read;
31 _can_seek_fast = !src->_remove_after_read;
33 if(!src->_remove_after_read) {
34 assert(src->_aborted &&
"UserData was not closed before by a done() call");
35 _length =
static_cast<double>(src->_data.size() / _audio_channels) / _audio_rate;
45 ~UserDataAudioCursor() {
47 source->_cursor = NULL;
62 if(source->_remove_after_read) {
63 source->read_samples(n, data);
66 int offset = _samples_read * _audio_channels;
67 int avail = source->_data.size() - offset;
68 int desired = n * _audio_channels;
69 if (avail > desired) avail = desired;
71 for (
int i=0; i<avail; i++) {
72 data[i] = source->_data[i+offset];
74 for (
int i=avail; i<desired; i++) {
89 if(_can_seek && 0 <= t && _length <= t) {
90 _samples_read =
static_cast<int>(t * _audio_rate * _audio_channels + 0.5f);
109 if(source->_remove_after_read)
return source->_data.size() / _audio_channels;
110 else return source->_data.size() / _audio_channels - _samples_read;
virtual void seek(double offset)
Set the offset if possible.
virtual void read_samples(int n, PN_int16 *data)
Read audio samples from the stream.
A UserDataAudioCursor is a means to manually supply a sequence of raw audio samples.
A MovieAudio is actually any source that provides a sequence of audio samples.
A UserDataAudio is a way for the user to manually supply raw audio samples.
TypeHandle is the identifier used to differentiate C++ class types.
A MovieAudio is actually any source that provides a sequence of audio samples.
virtual int ready() const
Returns the number of audio samples ready to be read.