sintonia/library/ecasound-2.7.2/libecasound/audioio-cdr.h

76 lines
1.9 KiB
C++

#ifndef INCLUDED_AUDIOIO_CDR_H
#define INCLUDED_AUDIOIO_CDR_H
#include <string>
#include <cstdio>
#include <iostream>
#include <sys/types.h> /* off_t */
#include "sample-specs.h"
#include "audioio-buffered.h"
typedef struct {
public:
int16_t sample[2]; // signed short int
} SAMPLE;
/**
* Class for handling CDR-files
*
* CDR -format is used on audio-CDs:
*
* - 16bit samples, 44100kHz, stereo
*
* - sample frame layout: (MSB-left, LSB-left, MSB-right, LSB-right)
*
* - files are padded sector size (2352 bytes)
*
* @author Kai Vehmanen
*/
class CDRFILE : public AUDIO_IO_BUFFERED {
static const int sectorsize = 2352;
long int samples_read;
FILE* fobject;
void pad_to_sectorsize(void);
void set_length_in_bytes(void);
CDRFILE(const CDRFILE& x) { }
CDRFILE& operator=(const CDRFILE& x) { return *this; }
void seek_position_in_samples(long pos);
unsigned short swapw(unsigned short us) { return ((us >> 8) | (us << 8)) & 0xffff; }
void swap_bytes(SAMPLE* t) {
t->sample[SAMPLE_SPECS::ch_left] = swapw(t->sample[SAMPLE_SPECS::ch_left]);
t->sample[SAMPLE_SPECS::ch_right] = swapw(t->sample[SAMPLE_SPECS::ch_right]);
}
public:
std::string name(void) const { return("CD-R audio file"); }
std::string description(void) const { return("CD-R/CDDA audio files. This format is used when mastering audio-CDs."); }
virtual bool locked_audio_format(void) const { return(true); }
virtual void open(void) throw(AUDIO_IO::SETUP_ERROR &);
virtual void close(void);
virtual long int read_samples(void* target_buffer, long int samples);
virtual void write_samples(void* target_buffer, long int samples);
virtual bool finished(void) const;
virtual SAMPLE_SPECS::sample_pos_t seek_position(SAMPLE_SPECS::sample_pos_t pos);
CDRFILE (const std::string& name = "");
virtual ~CDRFILE(void);
CDRFILE* clone(void) const;
CDRFILE* new_expr(void) const { return new CDRFILE(); }
};
#endif