24 UserDataAudio(
int rate,
int channels,
bool remove_after_read) :
27 _desired_channels(channels),
30 _remove_after_read(remove_after_read)
48 nassert_raise(
"A UserDataAudio can only be opened by one consumer at a time.");
61 read_samples(
int n, int16_t *data) {
62 int ready = (_data.size() / _desired_channels);
63 int desired = n * _desired_channels;
64 int avail = ready * _desired_channels;
65 if (avail > desired) avail = desired;
66 for (
int i=0; i<avail; i++) {
69 for (
int i=avail; i<desired; i++) {
72 for (
int i=0; i<avail; i++) {
81 append(int16_t *data,
int n) {
83 int words = n * _desired_channels;
84 for (
int i=0; i<words; i++) {
85 _data.push_back(data[i]);
97 if (n > maxlen) n = maxlen;
98 int words = n * _desired_channels;
99 for (
int i=0; i<words; i++) {
110 append(
const std::string &str) {
112 int samples = str.size() / (2 * _desired_channels);
113 int words = samples * _desired_channels;
114 for (
int i=0; i<words; i++) {
115 int c1 = ((
unsigned char)str[i*2+0]);
116 int c2 = ((
unsigned char)str[i*2+1]);
117 int16_t n = (c1 | (c2 << 8));