AmAudio device for playing/sinking silence, optionally a certain length

git-svn-id: http://svn.berlios.de/svnroot/repos/sems/trunk@1464 8eb893ce-cfd4-0310-b710-fb5ebe64c474
sayer/1.4-spce2.6
Stefan Sayer 17 years ago
parent d651b6a7b0
commit d3dd422446

@ -279,3 +279,54 @@ int AmAudioFrontlist::get(unsigned int user_ts, unsigned char* buffer, unsigned
ba_mut.unlock();
return res;
}
int AmNullAudio::write(unsigned int user_ts, unsigned int size) {
// need to stop at some point?
if (write_msec < 0)
return size;
if (!write_end_ts_i) {
write_end_ts_i = true;
write_end_ts = user_ts + write_msec*fmt->rate/1000;
}
if (!ts_less()(user_ts, write_end_ts)) {
DBG("%dms of silence ended (write)\n", write_msec);
return -1;
}
return size;
}
int AmNullAudio::read(unsigned int user_ts, unsigned int size) {
// need to stop at some point?
if (read_msec < 0) {
memset((unsigned char*) samples, 0, size);
return size;
}
if (!read_end_ts_i) {
read_end_ts_i = true;
read_end_ts = user_ts + read_msec*fmt->rate/1000;
}
if (!ts_less()(user_ts, read_end_ts)) {
DBG("%dms of silence ended (read)\n", read_msec);
return -1;
}
memset((unsigned char*) samples, 0, size);
return size;
}
void AmNullAudio::setReadLength(int n_msec) {
read_msec = n_msec;
read_end_ts_i = false;
}
void AmNullAudio::setWriteLength(int n_msec) {
write_msec = n_msec;
write_end_ts_i = false;
}

@ -143,5 +143,39 @@ class AmAudioDelay : public AmAudio {
int read(unsigned int user_ts, unsigned int size);
};
/**
* AmNullAudio plays silence, and recording goes to void.
* it can be parametrized with a maximum length (in milliseconds),
* after which it is ended.
* Read and write length can also be set after creation (and possibly even
* when in use).
*/
class AmNullAudio
: public AmAudio {
int read_msec;
int write_msec;
bool read_end_ts_i;
unsigned int read_end_ts;
bool write_end_ts_i;
unsigned int write_end_ts;
public:
AmNullAudio(int read_msec = -1, int write_msec = -1)
: read_msec(read_msec), write_msec(write_msec),
read_end_ts_i(false), write_end_ts_i(false) { }
~AmNullAudio() { }
/** (re) set maximum read length*/
void setReadLength(int n_msec);
/** (re) set maximum write length*/
void setWriteLength(int n_msec);
protected:
int write(unsigned int user_ts, unsigned int size);
int read(unsigned int user_ts, unsigned int size);
};
#endif // _AmAdvancedAudio_h_

Loading…
Cancel
Save