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