+class sound_resource;
+typedef resource_handle<sound_resource> sound_handle;
+
+MOOF_REGISTER_RESOURCE(sound_resource, ogg, sounds);
+
+
+/*] Sound buffer
+ *************************************************************************/
+
+class buffer
+{
+public:
+
+ typedef hash<ALuint,int,hash_function> retcount_lookup;
+
+
+ buffer() :
+ buffer_((ALuint)-1) {}
+
+ buffer(const void* data,
+ ALsizei size,
+ ALenum format,
+ ALsizei freq)
+ {
+ alGenBuffers(1, &buffer_);
+ alBufferData(buffer_, format, data, size, freq);
+
+ retain_counts_[buffer_] = 1;
+ }
+
+ buffer(const buffer& buf)
+ {
+ buffer_ = buf.buffer_;
+ retain();
+ }
+
+ buffer& operator = (const buffer& buf)
+ {
+ buffer_ = buf.buffer_;
+ retain();
+ return *this;
+ }
+
+ ~buffer()
+ {
+ release();
+ }
+
+
+ void queue(ALuint source) const
+ {
+ if (*this)