xref: /haiku/headers/os/media/SoundFile.h (revision cb3f273dd2ec921b8134f9378a91adb0b2af165b)
1 /*
2  * Copyright 2009, Haiku, Inc. All rights reserved.
3  * Distributed under the terms of the MIT License.
4  */
5 #ifndef _SOUND_FILE_H
6 #define _SOUND_FILE_H
7 
8 
9 #include <Entry.h>
10 #include <File.h>
11 #include <MediaDefs.h>
12 
13 
14 // file formats
15 enum {
16 	B_UNKNOWN_FILE,
17 	B_AIFF_FILE,
18 	B_WAVE_FILE,
19 	B_UNIX_FILE
20 };
21 
22 
23 class BSoundFile  {
24 public:
25 								BSoundFile();
26 								BSoundFile(const entry_ref* ref,
27 									uint32 openMode);
28 	virtual						~BSoundFile();
29 
30 			status_t			InitCheck() const;
31 
32 			status_t			SetTo(const entry_ref* ref, uint32 openMode);
33 
34 			int32				FileFormat() const;
35 			int32				SamplingRate() const;
36 			int32				CountChannels() const;
37 			int32				SampleSize() const;
38 			int32				ByteOrder() const;
39 			int32				SampleFormat() const;
40 			int32				FrameSize() const;
41 			off_t				CountFrames() const;
42 
43 			bool				IsCompressed() const;
44 			int32				CompressionType() const;
45 			char*				CompressionName() const;
46 
47 	virtual	int32				SetFileFormat(int32 format);
48 	virtual	int32				SetSamplingRate(int32 fps);
49 	virtual	int32				SetChannelCount(int32 samplesPerFrame);
50 	virtual	int32				SetSampleSize(int32 bytesPerSample);
51 	virtual	int32				SetByteOrder(int32 byteOrder);
52 	virtual	int32				SetSampleFormat(int32 format);
53 	virtual	int32				SetCompressionType(int32 type);
54 	virtual	char*				SetCompressionName(char* name);
55 	virtual	bool				SetIsCompressed(bool compressed);
56 	virtual	off_t				SetDataLocation(off_t offset);
57 	virtual	off_t				SetFrameCount(off_t count);
58 
59 			size_t				ReadFrames(char* buffer, size_t count);
60 			size_t				WriteFrames(char* buffer, size_t count);
61 	virtual	off_t				SeekToFrame(off_t index);
62 			off_t 				FrameIndex() const;
63 			off_t				FramesRemaining() const;
64 
65 			BFile*				fSoundFile;
66 
67 private:
68 
69 	virtual	void				_ReservedSoundFile1();
70 	virtual	void				_ReservedSoundFile2();
71 	virtual	void				_ReservedSoundFile3();
72 
73 			void				_init_raw_stats();
74 			status_t			_ref_to_file(const entry_ref* ref);
75 
76 			int32				fFileFormat;
77 			int32				fSamplingRate;
78 			int32 				fChannelCount;
79 			int32				fSampleSize;
80 			int32				fByteOrder;
81 			int32				fSampleFormat;
82 
83 			off_t				fByteOffset;
84 									// offset to first sample
85 
86 			off_t				fFrameCount;
87 			off_t				fFrameIndex;
88 
89 			bool				fIsCompressed;
90 			int32				fCompressionType;
91 			char*				fCompressionName;
92 			status_t			fCStatus;
93 			BMediaFile*			fMediaFile;
94 			BMediaTrack*		fMediaTrack;
95 
96 			uint32			_reserved[2];
97 };
98 
99 #endif	// _SOUND_FILE_H
100