38 #include <itpp/itexports.h>
73 _encoding(e), _sampling_rate(sr), _num_channels(nc){}
98 std::string _description;
110 namespace audiofile_details{
114 class Audio_Samples_Reader_If
117 virtual bool read_sample(
double& s,
int ch) = 0;
118 virtual vec read_channel(
int n,
int ch) = 0;
119 virtual mat read(
int n) = 0;
120 virtual std::streamoff tell()
const = 0;
121 virtual bool seek(std::streamoff n) = 0;
122 virtual std::streamoff num_samples() = 0;
123 virtual ~Audio_Samples_Reader_If() {}
127 class Audio_Samples_Writer_If
130 virtual bool write_sample(
const double& s,
int ch) = 0;
131 virtual bool write_channel(
const vec& s,
int ch) = 0;
133 virtual bool write(
const mat& s) = 0;
134 virtual std::streamoff tell()
const = 0;
135 virtual bool seek(std::streamoff n) = 0;
136 virtual std::streamoff num_samples() = 0;
137 virtual ~Audio_Samples_Writer_If() {}
186 bool open(
const char* fname);
194 if((pos > _num_samples) || (pos < 0))
198 return _samples_reader->seek(pos);
206 return _samples_reader->tell();
216 return _samples_reader->read_sample(s,ch);
224 return _samples_reader->read_channel(n,ch);
232 return _samples_reader->read(n);
240 std::streamoff _num_samples;
242 audiofile_details::Audio_Samples_Reader_If* _samples_reader;
300 if((pos > _num_samples) || (pos < 0))
304 return _samples_writer->seek(pos);
312 return _samples_writer->tell();
322 bool ret = _samples_writer->write_sample(s,ch);
324 _num_samples =
std::max(_num_samples, _samples_writer->tell());
335 bool ret = _samples_writer->write_channel(v,ch);
337 _num_samples =
std::max(_num_samples, _samples_writer->tell());
348 bool ret = _samples_writer->write(m);
350 _num_samples =
std::max(_num_samples, _samples_writer->tell());
361 std::streamoff _num_samples;
363 audiofile_details::Audio_Samples_Writer_If* _samples_writer;
386 bool open(
const char *fname);
396 if((pos > _num_samples) || (pos < 0))
400 return _samples_reader->seek(pos);
408 return _samples_reader->tell();
415 if((pos > _num_samples) || (pos < 0))
419 return _samples_writer->seek(pos);
427 return _samples_writer->tell();
437 return _samples_reader->read_sample(s,ch);
445 return _samples_reader->read_channel(n,ch);
453 return _samples_reader->read(n);
462 bool ret = _samples_writer->write_sample(s,ch);
464 _num_samples =
std::max(_num_samples, _samples_writer->tell());
475 bool ret = _samples_writer->write_channel(v,ch);
477 _num_samples =
std::max(_num_samples, _samples_writer->tell());
488 bool ret = _samples_writer->write(m);
490 _num_samples =
std::max(_num_samples, _samples_writer->tell());
501 std::streamoff _num_samples;
503 audiofile_details::Audio_Samples_Reader_If* _samples_reader;
505 audiofile_details::Audio_Samples_Writer_If* _samples_writer;
637 inline mat
snd_read(
const char *fname,
int len, std::streamoff beg = 0)
674 #endif // #ifndef AUDIOFILE_H