xref: /haiku/headers/os/media/Sound.h (revision 52a380120846174213ccce9c4aab0dda17c72083)
1*52a38012Sejakowatz /*	BSound.h	*/
2*52a38012Sejakowatz /*	Copyright 1998 Be Incorporated. All rights reserved.	*/
3*52a38012Sejakowatz 
4*52a38012Sejakowatz #if !defined(_SOUND_H)
5*52a38012Sejakowatz #define _SOUND_H
6*52a38012Sejakowatz 
7*52a38012Sejakowatz #include <MediaDefs.h>
8*52a38012Sejakowatz 
9*52a38012Sejakowatz class BSoundFile;
10*52a38012Sejakowatz 
11*52a38012Sejakowatz namespace BPrivate {
12*52a38012Sejakowatz 	class BTrackReader;
13*52a38012Sejakowatz }
14*52a38012Sejakowatz 
15*52a38012Sejakowatz class BSound {
16*52a38012Sejakowatz public:
17*52a38012Sejakowatz 		BSound(
18*52a38012Sejakowatz 				void * data,
19*52a38012Sejakowatz 				size_t size,
20*52a38012Sejakowatz 				const media_raw_audio_format & format,
21*52a38012Sejakowatz 				bool free_when_done = false);
22*52a38012Sejakowatz 		BSound(
23*52a38012Sejakowatz 				const entry_ref * sound_file,
24*52a38012Sejakowatz 				bool load_into_memory = false);
25*52a38012Sejakowatz 
26*52a38012Sejakowatz 		status_t InitCheck();
27*52a38012Sejakowatz 		BSound * AcquireRef();
28*52a38012Sejakowatz 		bool ReleaseRef();
29*52a38012Sejakowatz 		int32 RefCount() const;	// unreliable!
30*52a38012Sejakowatz 
31*52a38012Sejakowatz virtual	bigtime_t Duration() const;
32*52a38012Sejakowatz virtual	const media_raw_audio_format & Format() const;
33*52a38012Sejakowatz virtual	const void * Data() const;	/* returns NULL for files */
34*52a38012Sejakowatz virtual	off_t Size() const;
35*52a38012Sejakowatz 
36*52a38012Sejakowatz virtual	bool GetDataAt(
37*52a38012Sejakowatz 				off_t offset,
38*52a38012Sejakowatz 				void * into_buffer,
39*52a38012Sejakowatz 				size_t buffer_size,
40*52a38012Sejakowatz 				size_t * out_used);
41*52a38012Sejakowatz 
42*52a38012Sejakowatz protected:
43*52a38012Sejakowatz 
44*52a38012Sejakowatz 		BSound(
45*52a38012Sejakowatz 				const media_raw_audio_format & format);
46*52a38012Sejakowatz 
47*52a38012Sejakowatz virtual	status_t Perform(
48*52a38012Sejakowatz 				int32 code,
49*52a38012Sejakowatz 				...);
50*52a38012Sejakowatz 
51*52a38012Sejakowatz private:
52*52a38012Sejakowatz 
53*52a38012Sejakowatz 		BSound(const BSound &);	//	unimplemented
54*52a38012Sejakowatz 		BSound & operator=(const BSound &);	//	unimplemented
55*52a38012Sejakowatz 
56*52a38012Sejakowatz 		friend class BSoundPlayer;
57*52a38012Sejakowatz 		friend class _HostApp;
58*52a38012Sejakowatz 
59*52a38012Sejakowatz 		void Reset();
60*52a38012Sejakowatz 
61*52a38012Sejakowatz virtual	~BSound();
62*52a38012Sejakowatz 
63*52a38012Sejakowatz 		void free_data();
64*52a38012Sejakowatz static	status_t load_entry(void * arg);
65*52a38012Sejakowatz 		void loader_thread();
66*52a38012Sejakowatz 		bool check_stop();
67*52a38012Sejakowatz 
68*52a38012Sejakowatz public:
69*52a38012Sejakowatz 
70*52a38012Sejakowatz virtual	status_t BindTo(
71*52a38012Sejakowatz 				BSoundPlayer * player,
72*52a38012Sejakowatz 				const media_raw_audio_format & format);
73*52a38012Sejakowatz virtual	status_t UnbindFrom(
74*52a38012Sejakowatz 				BSoundPlayer * player);
75*52a38012Sejakowatz 
76*52a38012Sejakowatz private:
77*52a38012Sejakowatz 		status_t _Reserved_Sound_0(void *);	//	BindTo
78*52a38012Sejakowatz 		status_t _Reserved_Sound_1(void *);	//	UnbindFrom
79*52a38012Sejakowatz virtual	status_t _Reserved_Sound_2(void *);
80*52a38012Sejakowatz virtual	status_t _Reserved_Sound_3(void *);
81*52a38012Sejakowatz virtual	status_t _Reserved_Sound_4(void *);
82*52a38012Sejakowatz virtual	status_t _Reserved_Sound_5(void *);
83*52a38012Sejakowatz 
84*52a38012Sejakowatz 		void * _m_data;
85*52a38012Sejakowatz 		BMediaFile * _m_file;
86*52a38012Sejakowatz 		int32 _m_ref_count;
87*52a38012Sejakowatz 		status_t _m_error;
88*52a38012Sejakowatz 		size_t _m_size;
89*52a38012Sejakowatz 		media_raw_audio_format _m_format;
90*52a38012Sejakowatz 		bool _m_free_when_done;
91*52a38012Sejakowatz 		bool _m_checkStopped;
92*52a38012Sejakowatz 		bool _m_reserved[2];
93*52a38012Sejakowatz 		area_id _m_area;
94*52a38012Sejakowatz 		sem_id _m_avail_sem;
95*52a38012Sejakowatz 		sem_id _m_free_sem;
96*52a38012Sejakowatz 		thread_id _m_loader_thread;
97*52a38012Sejakowatz 		size_t _m_read_pos;
98*52a38012Sejakowatz 		sem_id _m_check_token;
99*52a38012Sejakowatz 		int32 _m_prev_sem_count;
100*52a38012Sejakowatz 
101*52a38012Sejakowatz 		BSoundPlayer * _m_bound_player;
102*52a38012Sejakowatz 		int32 _m_bind_flags;
103*52a38012Sejakowatz 
104*52a38012Sejakowatz 		BPrivate::BTrackReader * _m_trackReader;
105*52a38012Sejakowatz 		char m_tname[32];
106*52a38012Sejakowatz 		uint32 _reserved_[1];
107*52a38012Sejakowatz 
108*52a38012Sejakowatz };
109*52a38012Sejakowatz 
110*52a38012Sejakowatz 
111*52a38012Sejakowatz #endif	/* _SOUND_H */
112