1 /* 2 * Copyright 2009, Haiku, Inc. All rights reserved. 3 * Distributed under the terms of the MIT License. 4 */ 5 #ifndef _SOUND_H 6 #define _SOUND_H 7 8 9 #include <MediaDefs.h> 10 11 class BFile; 12 class BSoundPlayer; 13 struct entry_ref; 14 15 namespace BPrivate { 16 class BTrackReader; 17 }; 18 19 20 class BSound { 21 public: 22 BSound(void* data, size_t size, 23 const media_raw_audio_format& format, 24 bool freeWhenDone = false); 25 BSound(const entry_ref* soundFile, 26 bool loadIntoMemory = false); 27 28 status_t InitCheck(); 29 BSound* AcquireRef(); 30 bool ReleaseRef(); 31 int32 RefCount() const; // unreliable! 32 33 virtual bigtime_t Duration() const; 34 virtual const media_raw_audio_format &Format() const; 35 virtual const void* Data() const; // returns NULL for files 36 virtual off_t Size() const; 37 38 virtual bool GetDataAt(off_t offset, 39 void* intoBuffer, size_t bufferSize, 40 size_t* outUsed); 41 42 protected: 43 BSound(const media_raw_audio_format& format); 44 virtual status_t Perform(int32 code, ...); 45 46 private: 47 friend class DummyFriend; 48 virtual ~BSound(); 49 50 public: 51 virtual status_t BindTo(BSoundPlayer* player, 52 const media_raw_audio_format& format); 53 virtual status_t UnbindFrom(BSoundPlayer* player); 54 55 private: 56 status_t _Reserved_Sound_0(void*); // BindTo 57 status_t _Reserved_Sound_1(void*); // UnbindFrom 58 virtual status_t _Reserved_Sound_2(void*); 59 virtual status_t _Reserved_Sound_3(void*); 60 virtual status_t _Reserved_Sound_4(void*); 61 virtual status_t _Reserved_Sound_5(void*); 62 63 private: 64 void* fData; 65 size_t fDataSize; 66 BFile* fFile; 67 int32 fRefCount; 68 status_t fStatus; 69 media_raw_audio_format fFormat; 70 71 bool fFreeWhenDone; 72 bool fReserved[3]; 73 74 BPrivate::BTrackReader* fTrackReader; 75 uint32 fReserved2[18]; 76 }; 77 78 #endif // _SOUND_H 79