/* * Copyright 2009, Haiku, Inc. All rights reserved. * Distributed under the terms of the MIT License. */ #ifndef _SOUND_H #define _SOUND_H #include class BFile; class BSoundPlayer; struct entry_ref; namespace BPrivate { class BTrackReader; }; class BSound { public: BSound(void* data, size_t size, const media_raw_audio_format& format, bool freeWhenDone = false); BSound(const entry_ref* soundFile, bool loadIntoMemory = false); status_t InitCheck(); BSound* AcquireRef(); bool ReleaseRef(); int32 RefCount() const; // unreliable! virtual bigtime_t Duration() const; virtual const media_raw_audio_format &Format() const; virtual const void* Data() const; // returns NULL for files virtual off_t Size() const; virtual bool GetDataAt(off_t offset, void* intoBuffer, size_t bufferSize, size_t* outUsed); protected: BSound(const media_raw_audio_format& format); virtual status_t Perform(int32 code, ...); private: friend class DummyFriend; virtual ~BSound(); public: virtual status_t BindTo(BSoundPlayer* player, const media_raw_audio_format& format); virtual status_t UnbindFrom(BSoundPlayer* player); private: status_t _Reserved_Sound_0(void*); // BindTo status_t _Reserved_Sound_1(void*); // UnbindFrom virtual status_t _Reserved_Sound_2(void*); virtual status_t _Reserved_Sound_3(void*); virtual status_t _Reserved_Sound_4(void*); virtual status_t _Reserved_Sound_5(void*); private: void* fData; size_t fDataSize; BFile* fFile; int32 fRefCount; status_t fStatus; media_raw_audio_format fFormat; bool fFreeWhenDone; bool fReserved[3]; BPrivate::BTrackReader* fTrackReader; uint32 fReserved2[18]; }; #endif // _SOUND_H