haiku/headers/os/media/SoundFile.h

100 lines
2.4 KiB
C++

/*
* Copyright 2009, Haiku, Inc. All rights reserved.
* Distributed under the terms of the MIT License.
*/
#ifndef _SOUND_FILE_H
#define _SOUND_FILE_H
#include <Entry.h>
#include <File.h>
#include <MediaDefs.h>
// file formats
enum {
B_UNKNOWN_FILE,
B_AIFF_FILE,
B_WAVE_FILE,
B_UNIX_FILE
};
class BSoundFile {
public:
BSoundFile();
BSoundFile(const entry_ref* ref,
uint32 openMode);
virtual ~BSoundFile();
status_t InitCheck() const;
status_t SetTo(const entry_ref* ref, uint32 openMode);
int32 FileFormat() const;
int32 SamplingRate() const;
int32 CountChannels() const;
int32 SampleSize() const;
int32 ByteOrder() const;
int32 SampleFormat() const;
int32 FrameSize() const;
off_t CountFrames() const;
bool IsCompressed() const;
int32 CompressionType() const;
char* CompressionName() const;
virtual int32 SetFileFormat(int32 format);
virtual int32 SetSamplingRate(int32 fps);
virtual int32 SetChannelCount(int32 samplesPerFrame);
virtual int32 SetSampleSize(int32 bytesPerSample);
virtual int32 SetByteOrder(int32 byteOrder);
virtual int32 SetSampleFormat(int32 format);
virtual int32 SetCompressionType(int32 type);
virtual char* SetCompressionName(char* name);
virtual bool SetIsCompressed(bool compressed);
virtual off_t SetDataLocation(off_t offset);
virtual off_t SetFrameCount(off_t count);
size_t ReadFrames(char* buffer, size_t count);
size_t WriteFrames(char* buffer, size_t count);
virtual off_t SeekToFrame(off_t index);
off_t FrameIndex() const;
off_t FramesRemaining() const;
BFile* fSoundFile;
private:
virtual void _ReservedSoundFile1();
virtual void _ReservedSoundFile2();
virtual void _ReservedSoundFile3();
void _init_raw_stats();
status_t _ref_to_file(const entry_ref* ref);
int32 fFileFormat;
int32 fSamplingRate;
int32 fChannelCount;
int32 fSampleSize;
int32 fByteOrder;
int32 fSampleFormat;
off_t fByteOffset;
// offset to first sample
off_t fFrameCount;
off_t fFrameIndex;
bool fIsCompressed;
int32 fCompressionType;
char* fCompressionName;
status_t fCStatus;
BMediaFile* fMediaFile;
BMediaTrack* fMediaTrack;
uint32 _reserved[2];
};
#endif // _SOUND_FILE_H