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 Audio_Stream_Description & set_sampling_rate(int sr)
Set sampling rate (samples per second)
Audio_Stream_Description(Audio_Encoding e, int sr, int nc=1)
Construct with stream parameters: encoding e, sampling rate sr and number of audio channels nc...
bool snd_write(const char *fname, const Audio_Stream_Description &descr, const mat &s)
Write audio data.
mat read(int n)
Read n samples from all channels starting at current position.
Class to read audio data from au file.
bool is_valid(const Audio_Stream_Description &d)
validity check for stream description d
int get_sampling_rate() const
Get sampling rate (samples per second)
bool seek_read(std::streamoff pos)
Go to sample number pos.
std::streamoff tell_write()
Get current position in samples.
int get_num_channels() const
Get number of audio channels.
mat snd_read(const char *fname)
Read audio data.
Audio_Stream_Description get_description() const
Get stream description.
A class to write SND-files (the .au format)
Audio_Stream_Description & set_description(const std::string &d)
Set stream annotation.
bool write(const mat &m)
Write audio channels from columns of the matrix m starting at current position.
Audio_Encoding get_encoding() const
Get encoding of audio samples.
Binary in/out-file Class.
bool write(const mat &m)
Write audio channels from columns of the matrix m starting at current position.
std::streamoff tell_write()
Get current position to write in samples.
T min(const Vec< T > &in)
Minimum value of vector.
std::streamoff num_samples() const
Get number of samples in stream.
vec read_channel(int n, int ch=0)
Read n samples from channel ch starting at current position.
Matrix Class Definitions.
std::streamoff num_samples() const
Get number of samples in stream.
T max(const Vec< T > &v)
Maximum value of vector.
Audio_Stream_Description get_description() const
Get stream description.
Encoding and decoding of audio samples.
std::streamoff tell_read()
Get current position in samples.
std::size_t encoded_sample_size(Audio_Encoding e)
Size of encoded sample based on the encoding type e.
Audio_Stream_Description & set_encoding(Audio_Encoding e)
Set encoding of audio samples.
bool read_sample(double &s, int ch=0)
Read single sample s at current position to channel ch.
Audio_Stream_Description()
Default ctor - creates uninitialized description.
const std::string & get_description() const
Get stream annotation.
bool read_sample(double &s, int ch=0)
Read single sample s at current position to channel ch.
Audio_Encoding
Supported encoding types for audio samples.
vec read_channel(int n, int ch=0)
Read n samples from channel ch starting at current position.
vec snd_read_channel(const char *fname, int ch=0)
Read audio channel.
bool write_channel(const vec &v, int ch=0)
Write the vector v to channel ch starting at current position.
bool seek_read(std::streamoff pos)
Set current position to read from pos (samples).
Description of audio stream.
Audio_Stream_Description & set_num_channels(int nc)
Set number of audio channels.
bool write_sample(const double &s, int ch=0)
Write single sample s at current position to channel ch.
std::streamoff num_samples() const
Get number of samples in stream.
Audio_Stream_Description get_description() const
Get stream description.
bool write_channel(const vec &v, int ch=0)
Write the vector v to channel ch starting at current position.
bool seek_write(std::streamoff pos)
Set current position to write to pos (samples).
Binary file formats definitions.
bool write_sample(const double &s, int ch=0)
Write single sample s at current position to channel ch.
mat read(int n)
Read n samples from all channels starting at current position into matrix.
A class for doing both input and output of audio samples.
bool snd_write_channel(const char *fname, const Audio_Stream_Description &descr, const vec &s, int ch=0)
Write audio channel from vector s using stream description descr.
bool seek_write(std::streamoff pos)
Set current position to write to pos (samples).
std::streamoff tell_read()
Get current position to read from in samples.
Templated Vector Class Definitions.