152a38012Sejakowatz /* BSound.h */ 252a38012Sejakowatz /* Copyright 1998 Be Incorporated. All rights reserved. */ 352a38012Sejakowatz 452a38012Sejakowatz #if !defined(_SOUND_H) 552a38012Sejakowatz #define _SOUND_H 652a38012Sejakowatz 752a38012Sejakowatz #include <MediaDefs.h> 852a38012Sejakowatz 9*f6e4cbb9SAxel Dörfler class BMediaFile; 1052a38012Sejakowatz class BSoundFile; 11*f6e4cbb9SAxel Dörfler struct entry_ref; 1252a38012Sejakowatz 1352a38012Sejakowatz namespace BPrivate { 1452a38012Sejakowatz class BTrackReader; 1552a38012Sejakowatz } 1652a38012Sejakowatz 1752a38012Sejakowatz class BSound { 1852a38012Sejakowatz public: 1952a38012Sejakowatz BSound( 2052a38012Sejakowatz void * data, 2152a38012Sejakowatz size_t size, 2252a38012Sejakowatz const media_raw_audio_format & format, 2352a38012Sejakowatz bool free_when_done = false); 2452a38012Sejakowatz BSound( 2552a38012Sejakowatz const entry_ref * sound_file, 2652a38012Sejakowatz bool load_into_memory = false); 2752a38012Sejakowatz 2852a38012Sejakowatz status_t InitCheck(); 2952a38012Sejakowatz BSound * AcquireRef(); 3052a38012Sejakowatz bool ReleaseRef(); 3152a38012Sejakowatz int32 RefCount() const; // unreliable! 3252a38012Sejakowatz 3352a38012Sejakowatz virtual bigtime_t Duration() const; 3452a38012Sejakowatz virtual const media_raw_audio_format & Format() const; 3552a38012Sejakowatz virtual const void * Data() const; /* returns NULL for files */ 3652a38012Sejakowatz virtual off_t Size() const; 3752a38012Sejakowatz 3852a38012Sejakowatz virtual bool GetDataAt( 3952a38012Sejakowatz off_t offset, 4052a38012Sejakowatz void * into_buffer, 4152a38012Sejakowatz size_t buffer_size, 4252a38012Sejakowatz size_t * out_used); 4352a38012Sejakowatz 4452a38012Sejakowatz protected: 4552a38012Sejakowatz 4652a38012Sejakowatz BSound( 4752a38012Sejakowatz const media_raw_audio_format & format); 4852a38012Sejakowatz 4952a38012Sejakowatz virtual status_t Perform( 5052a38012Sejakowatz int32 code, 5152a38012Sejakowatz ...); 5252a38012Sejakowatz 5352a38012Sejakowatz private: 5452a38012Sejakowatz 5552a38012Sejakowatz BSound(const BSound &); // unimplemented 5652a38012Sejakowatz BSound & operator=(const BSound &); // unimplemented 5752a38012Sejakowatz 5852a38012Sejakowatz friend class BSoundPlayer; 5952a38012Sejakowatz friend class _HostApp; 6052a38012Sejakowatz 6152a38012Sejakowatz void Reset(); 6252a38012Sejakowatz 6352a38012Sejakowatz virtual ~BSound(); 6452a38012Sejakowatz 6552a38012Sejakowatz void free_data(); 6652a38012Sejakowatz static status_t load_entry(void * arg); 6752a38012Sejakowatz void loader_thread(); 6852a38012Sejakowatz bool check_stop(); 6952a38012Sejakowatz 7052a38012Sejakowatz public: 7152a38012Sejakowatz 7252a38012Sejakowatz virtual status_t BindTo( 7352a38012Sejakowatz BSoundPlayer * player, 7452a38012Sejakowatz const media_raw_audio_format & format); 7552a38012Sejakowatz virtual status_t UnbindFrom( 7652a38012Sejakowatz BSoundPlayer * player); 7752a38012Sejakowatz 7852a38012Sejakowatz private: 7952a38012Sejakowatz status_t _Reserved_Sound_0(void *); // BindTo 8052a38012Sejakowatz status_t _Reserved_Sound_1(void *); // UnbindFrom 8152a38012Sejakowatz virtual status_t _Reserved_Sound_2(void *); 8252a38012Sejakowatz virtual status_t _Reserved_Sound_3(void *); 8352a38012Sejakowatz virtual status_t _Reserved_Sound_4(void *); 8452a38012Sejakowatz virtual status_t _Reserved_Sound_5(void *); 8552a38012Sejakowatz 8652a38012Sejakowatz void * _m_data; 8752a38012Sejakowatz BMediaFile * _m_file; 8852a38012Sejakowatz int32 _m_ref_count; 8952a38012Sejakowatz status_t _m_error; 9052a38012Sejakowatz size_t _m_size; 9152a38012Sejakowatz media_raw_audio_format _m_format; 9252a38012Sejakowatz bool _m_free_when_done; 9352a38012Sejakowatz bool _m_checkStopped; 9452a38012Sejakowatz bool _m_reserved[2]; 9552a38012Sejakowatz area_id _m_area; 9652a38012Sejakowatz sem_id _m_avail_sem; 9752a38012Sejakowatz sem_id _m_free_sem; 9852a38012Sejakowatz thread_id _m_loader_thread; 9952a38012Sejakowatz size_t _m_read_pos; 10052a38012Sejakowatz sem_id _m_check_token; 10152a38012Sejakowatz int32 _m_prev_sem_count; 10252a38012Sejakowatz 10352a38012Sejakowatz BSoundPlayer * _m_bound_player; 10452a38012Sejakowatz int32 _m_bind_flags; 10552a38012Sejakowatz 10652a38012Sejakowatz BPrivate::BTrackReader * _m_trackReader; 10752a38012Sejakowatz char m_tname[32]; 10852a38012Sejakowatz uint32 _reserved_[1]; 10952a38012Sejakowatz 11052a38012Sejakowatz }; 11152a38012Sejakowatz 11252a38012Sejakowatz 11352a38012Sejakowatz #endif /* _SOUND_H */ 114