From 1c72b919e7e870d058e4ecc660631d2107d465b5 Mon Sep 17 00:00:00 2001 From: trass3r Date: Sat, 13 Mar 2010 01:56:39 +0000 Subject: [PATCH] first commit in a series to change property functions into D style git-svn-id: https://sfml.svn.sourceforge.net/svnroot/sfml/branches/sfml2@1454 4e206d99-4929-0410-ac5d-dfc041789085 --- DSFML/import/dsfml/audio/sound.d | 187 ++++++----- DSFML/import/dsfml/audio/soundbuffer.d | 249 +++++++------- DSFML/import/dsfml/audio/soundsource.d | 444 ++++++++++++------------- DSFML/import/dsfml/audio/soundstream.d | 2 +- DSFML/import/dsfml/system/common.d | 21 +- 5 files changed, 443 insertions(+), 460 deletions(-) diff --git a/DSFML/import/dsfml/audio/sound.d b/DSFML/import/dsfml/audio/sound.d index 36894092..c2af0aa6 100644 --- a/DSFML/import/dsfml/audio/sound.d +++ b/DSFML/import/dsfml/audio/sound.d @@ -1,28 +1,28 @@ /* -* DSFML - SFML Library wrapper for the D programming language. -* Copyright (C) 2008 Julien Dagorn (sirjulio13@gmail.com) -* Copyright (C) 2010 Andreas Hollandt -* -* This software is provided 'as-is', without any express or -* implied warranty. In no event will the authors be held -* liable for any damages arising from the use of this software. -* -* Permission is granted to anyone to use this software for any purpose, -* including commercial applications, and to alter it and redistribute -* it freely, subject to the following restrictions: -* -* 1. The origin of this software must not be misrepresented; -* you must not claim that you wrote the original software. -* If you use this software in a product, an acknowledgment -* in the product documentation would be appreciated but -* is not required. -* -* 2. Altered source versions must be plainly marked as such, -* and must not be misrepresented as being the original software. -* -* 3. This notice may not be removed or altered from any -* source distribution. -*/ + * DSFML - SFML Library wrapper for the D programming language. + * Copyright (C) 2008 Julien Dagorn (sirjulio13@gmail.com) + * Copyright (C) 2010 Andreas Hollandt + * + * This software is provided 'as-is', without any express or + * implied warranty. In no event will the authors be held + * liable for any damages arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute + * it freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; + * you must not claim that you wrote the original software. + * If you use this software in a product, an acknowledgment + * in the product documentation would be appreciated but + * is not required. + * + * 2. Altered source versions must be plainly marked as such, + * and must not be misrepresented as being the original software. + * + * 3. This notice may not be removed or altered from any + * source distribution. + */ module dsfml.audio.sound; @@ -34,79 +34,81 @@ import dsfml.system.exception; import dsfml.system.vector3; /** -* Sound defines the properties of the sound such as position, -* volume, pitch, etc. -*/ + * Sound defines the properties of the sound such as position, + * volume, pitch, etc. + */ class Sound : SoundSource!("sfSound") { /** - * Default constructor - */ + * Default constructor + */ this() { super(); } /** - * Construct the sound from its parameters - * - * Params: - * buffer = Sound buffer to play - * loop = Loop flag (false by default) - * pitch = Value of the pitch (1 by default) - * volume = Volume (100 by default) - * x = X position (0 by default) - * y = Y position (0 by default) - * z = Z position (0 by default) - * - * Throws: - * NullParameterException if buffer is null - */ - this(SoundBuffer buffer, bool loop = false, float pitch = 1.f, float volume = 100.f, float x = 0.f, float y = 0.f, float z = 0.f) + * Construct the sound from its parameters + * + * Params: + * soundbuffer = Sound buffer to play + * loop = Loop flag (false by default) + * pitch = Value of the pitch (1 by default) + * volume = Volume (100 by default) + * x = X position (0 by default) + * y = Y position (0 by default) + * z = Z position (0 by default) + * + * Throws: + * NullParameterException if buffer is null + */ + this(SoundBuffer soundbuffer, bool loop = false, float pitch = 1.f, float volume = 100.f, float x = 0.f, float y = 0.f, float z = 0.f) { - if (buffer is null) + if (soundbuffer is null) throw new NullParameterException("NullParameterException : SoundBuffer is null."); super(); - setBuffer(buffer); - setLoop(loop); - setPitch(pitch); - setVolume(volume); + buffer = soundbuffer; + loop = loop; + pitch = pitch; + volume = volume; setPosition(x, y, z); } /** - * Play the sound - */ + * Play the sound + */ void play() { sfSound_Play(m_ptr); } /** - * Pause the sound - */ + * Pause the sound + */ void pause() { sfSound_Pause(m_ptr); } /** - * Stop the sound - */ + * Stop the sound + */ void stop() { sfSound_Stop(m_ptr); } +@property +{ /** - * Set the source buffer - * - * Params: - * buffer = New sound buffer to bind to the sound - */ - void setBuffer(SoundBuffer buffer) + * Set the source buffer + * + * Params: + * buffer = New sound buffer to bind to the sound + */ + void buffer(SoundBuffer buffer) { if (buffer is null) throw new NullParameterException("NullParameterException : SoundBuffer is null."); @@ -116,62 +118,63 @@ class Sound : SoundSource!("sfSound") } /** - * Set the sound loop state. - * This parameter is disabled by default - * - * Params: - * loop = True to play in loop, false to play once - */ - void setLoop(bool loop) + * Set the sound loop state. + * This parameter is disabled by default + * + * Params: + * loop = True to play in loop, false to play once + */ + void loop(bool loop) { sfSound_SetLoop(m_ptr, loop); } /** - * Set the current playing offset of a sound - * - * Params: - * offset = new playing position, expressed in seconds - */ - void setPlayingOffset(float offset) + * Set the current playing offset of a sound + * + * Params: + * offset = new playing position, expressed in seconds + */ + void playingOffset(float offset) { sfSound_SetPlayingOffset(m_ptr, offset); } /** - * Get the source buffer - * - * Returns: - * Sound buffer bound to the sound (can be NULL) - */ - SoundBuffer getBuffer() + * Get the source buffer + * + * Returns: + * Sound buffer bound to the sound (can be NULL) + */ + SoundBuffer buffer() { return m_buffer; } /** - * Tell whether or not the sound is looping - * - * Returns: - * True if the sound is looping, false otherwise - */ - bool getLoop() + * Tell whether or not the sound is looping + * + * Returns: + * True if the sound is looping, false otherwise + */ + bool loop() { return cast(bool)(sfSound_GetLoop(m_ptr)); } /** - * Get the current playing position of the sound - * - * Returns: - * Current playing position, expressed in seconds - */ - float getPlayingOffset() + * Get the current playing position of the sound + * + * Returns: + * Current playing position, expressed in seconds + */ + float playingOffset() { return sfSound_GetPlayingOffset(m_ptr); } +} private: SoundBuffer m_buffer; diff --git a/DSFML/import/dsfml/audio/soundbuffer.d b/DSFML/import/dsfml/audio/soundbuffer.d index e703a86d..465efa1e 100644 --- a/DSFML/import/dsfml/audio/soundbuffer.d +++ b/DSFML/import/dsfml/audio/soundbuffer.d @@ -1,28 +1,28 @@ /* -* DSFML - SFML Library wrapper for the D programming language. -* Copyright (C) 2008 Julien Dagorn (sirjulio13@gmail.com) -* Copyright (C) 2010 Andreas Hollandt -* -* This software is provided 'as-is', without any express or -* implied warranty. In no event will the authors be held -* liable for any damages arising from the use of this software. -* -* Permission is granted to anyone to use this software for any purpose, -* including commercial applications, and to alter it and redistribute -* it freely, subject to the following restrictions: -* -* 1. The origin of this software must not be misrepresented; -* you must not claim that you wrote the original software. -* If you use this software in a product, an acknowledgment -* in the product documentation would be appreciated but -* is not required. -* -* 2. Altered source versions must be plainly marked as such, -* and must not be misrepresented as being the original software. -* -* 3. This notice may not be removed or altered from any -* source distribution. -*/ + * DSFML - SFML Library wrapper for the D programming language. + * Copyright (C) 2008 Julien Dagorn (sirjulio13@gmail.com) + * Copyright (C) 2010 Andreas Hollandt + * + * This software is provided 'as-is', without any express or + * implied warranty. In no event will the authors be held + * liable for any damages arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute + * it freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; + * you must not claim that you wrote the original software. + * If you use this software in a product, an acknowledgment + * in the product documentation would be appreciated but + * is not required. + * + * 2. Altered source versions must be plainly marked as such, + * and must not be misrepresented as being the original software. + * + * 3. This notice may not be removed or altered from any + * source distribution. + */ module dsfml.audio.soundbuffer; @@ -32,20 +32,20 @@ import dsfml.system.stringutil; /** -* SoundBuffer is the low-level for loading and manipulating -* sound buffers -*/ + * SoundBuffer is the low-level for loading and manipulating + * sound buffers + */ class SoundBuffer : DSFMLObject { /** - * Load the sound buffer from a file - * - * Params: - * filename = Path of the sound file to load - * - * Throws: - * LoadingException on failure - */ + * Load the sound buffer from a file + * + * Params: + * filename = Path of the sound file to load + * + * Throws: + * LoadingException on failure + */ this(string filename) { if (filename is null || filename.length == 0) @@ -55,14 +55,14 @@ class SoundBuffer : DSFMLObject } /** - * Load the sound buffer from a file in memory - * - * Params: - * data = Array of file data in memory - * - * Throws: - * LoadingException on failure - */ + * Load the sound buffer from a file in memory + * + * Params: + * data = Array of file data in memory + * + * Throws: + * LoadingException on failure + */ this(byte[] data) { if (data is null || data.length == 0) @@ -72,18 +72,18 @@ class SoundBuffer : DSFMLObject } /** - * Load the sound buffer from an array of samples - assumed format for - * samples is 16 bits signed integer - * - * Params: - * samples = Array of samples in memory - * channelsCount = Number of channels (1 = mono, 2 = stereo, ...) - * sampleRate = Frequency (number of samples to play per second) - * - * Throws: - * LoadingException on failure - */ - this(short[] samples, uint channelsCount, uint sampleRate) + * Load the sound buffer from an array of samples - assumed format for + * samples is 16 bits signed integer + * + * Params: + * samples = Array of samples in memory + * channelsCount = Number of channels (1 = mono, 2 = stereo, ...) + * sampleRate = Frequency (number of samples to play per second) + * + * Throws: + * LoadingException on failure + */ + this(const(short)[] samples, uint channelsCount, uint sampleRate) { if (samples is null || samples.length == 0) throw new Exception("LoadingException : Samples array is invalid."); @@ -99,14 +99,14 @@ class SoundBuffer : DSFMLObject /** - * Save the sound buffer to a file - * - * Params: - * filename = Path of the sound file to write - * - * Returns: - * True if saving has been successful - */ + * Save the sound buffer to a file + * + * Params: + * filename = Path of the sound file to write + * + * Returns: + * True if saving has been successful + */ bool saveToFile(string filename) { if (filename !is null && filename.length > 0 ) @@ -116,63 +116,66 @@ class SoundBuffer : DSFMLObject return false; } +@property +{ /** - * Return the sound samples - * - * Returns: - * Array of sound samples, in 16 bits signed integer format - */ - short[] getSamples() + * Return the sound samples + * + * Returns: + * Array of sound samples, in 16 bits signed integer format + */ + short[] samples() { short* temp = null; temp = sfSoundBuffer_GetSamples(m_ptr); - return temp is null ? null : temp[0..getSamplesCount]; + return temp is null ? null : temp[0..samplesCount()]; } /** - * Return the samples count - * - * Returns: - * Number of samples - */ - size_t getSamplesCount() + * Return the samples count + * + * Returns: + * Number of samples + */ + size_t samplesCount() { return sfSoundBuffer_GetSamplesCount(m_ptr); } /** - * Get the sample rate - * - * Returns: - * Sound frequency (number of samples per second) - */ - uint getSampleRate() + * Get the sample rate + * + * Returns: + * Sound frequency (number of samples per second) + */ + uint sampleRate() { return sfSoundBuffer_GetSampleRate(m_ptr); } /** - * Return the number of channels (1 = mono, 2 = stereo, ...) - * - * Returns: - * Number of channels - */ - uint getChannelsCount() + * Return the number of channels (1 = mono, 2 = stereo, ...) + * + * Returns: + * Number of channels + */ + uint channelsCount() { return sfSoundBuffer_GetChannelsCount(m_ptr); } /** - * Get the sound duration - * - * Returns: - * Sound duration, in seconds - */ - float getDuration() + * Get the sound duration + * + * Returns: + * Sound duration, in seconds + */ + float duration() { return sfSoundBuffer_GetDuration(m_ptr); } +} package: this(void* ptr) @@ -181,50 +184,22 @@ package: } private: -// External ==================================================================== - extern (C) + static extern(C) { - typedef void* function(cchar*) pf_sfSoundBuffer_CreateFromFile; - typedef void* function(byte*, size_t) pf_sfSoundBuffer_CreateFromMemory; - typedef void* function(short*, size_t, uint, uint) pf_sfSoundBuffer_CreateFromSamples; - typedef void function(void*) pf_sfSoundBuffer_Destroy; - typedef int function(void*, cchar*) pf_sfSoundBuffer_SaveToFile; - typedef short* function(void*) pf_sfSoundBuffer_GetSamples; - typedef size_t function(void*) pf_sfSoundBuffer_GetSamplesCount; - typedef uint function(void*) pf_sfSoundBuffer_GetSampleRate; - typedef uint function(void*) pf_sfSoundBuffer_GetChannelsCount; - typedef float function(void*) pf_sfSoundBuffer_GetDuration; - - static pf_sfSoundBuffer_CreateFromFile sfSoundBuffer_CreateFromFile; - static pf_sfSoundBuffer_CreateFromMemory sfSoundBuffer_CreateFromMemory; - static pf_sfSoundBuffer_CreateFromSamples sfSoundBuffer_CreateFromSamples; - static pf_sfSoundBuffer_Destroy sfSoundBuffer_Destroy; - static pf_sfSoundBuffer_SaveToFile sfSoundBuffer_SaveToFile; - static pf_sfSoundBuffer_GetSamples sfSoundBuffer_GetSamples; - static pf_sfSoundBuffer_GetSamplesCount sfSoundBuffer_GetSamplesCount; - static pf_sfSoundBuffer_GetSampleRate sfSoundBuffer_GetSampleRate; - static pf_sfSoundBuffer_GetChannelsCount sfSoundBuffer_GetChannelsCount; - static pf_sfSoundBuffer_GetDuration sfSoundBuffer_GetDuration; + void* function(cchar*) sfSoundBuffer_CreateFromFile; + void* function(const(byte)*, size_t) sfSoundBuffer_CreateFromMemory; + void* function(const(short)*, size_t, uint, uint) sfSoundBuffer_CreateFromSamples; + void function(void*) sfSoundBuffer_Destroy; + int function(void*, cchar*) sfSoundBuffer_SaveToFile; + short* function(void*) sfSoundBuffer_GetSamples; + size_t function(void*) sfSoundBuffer_GetSamplesCount; + uint function(void*) sfSoundBuffer_GetSampleRate; + uint function(void*) sfSoundBuffer_GetChannelsCount; + float function(void*) sfSoundBuffer_GetDuration; } - static this() - { - debug - DllLoader dll = DllLoader.load("csfml-audio-d"); - else - DllLoader dll = DllLoader.load("csfml-audio"); - - sfSoundBuffer_CreateFromFile = cast(pf_sfSoundBuffer_CreateFromFile)dll.getSymbol("sfSoundBuffer_CreateFromFile"); - sfSoundBuffer_CreateFromMemory = cast(pf_sfSoundBuffer_CreateFromMemory)dll.getSymbol("sfSoundBuffer_CreateFromMemory"); - sfSoundBuffer_CreateFromSamples = cast(pf_sfSoundBuffer_CreateFromSamples)dll.getSymbol("sfSoundBuffer_CreateFromSamples"); - sfSoundBuffer_Destroy = cast(pf_sfSoundBuffer_Destroy)dll.getSymbol("sfSoundBuffer_Destroy"); - sfSoundBuffer_SaveToFile = cast(pf_sfSoundBuffer_SaveToFile)dll.getSymbol("sfSoundBuffer_SaveToFile"); - sfSoundBuffer_GetSamples = cast(pf_sfSoundBuffer_GetSamples)dll.getSymbol("sfSoundBuffer_GetSamples"); - sfSoundBuffer_GetSamplesCount = cast(pf_sfSoundBuffer_GetSamplesCount)dll.getSymbol("sfSoundBuffer_GetSamplesCount"); - sfSoundBuffer_GetSampleRate = cast(pf_sfSoundBuffer_GetSampleRate)dll.getSymbol("sfSoundBuffer_GetSampleRate"); - sfSoundBuffer_GetChannelsCount = cast(pf_sfSoundBuffer_GetChannelsCount)dll.getSymbol("sfSoundBuffer_GetChannelsCount"); - sfSoundBuffer_GetDuration = cast(pf_sfSoundBuffer_GetDuration)dll.getSymbol("sfSoundBuffer_GetDuration"); - } -} - + mixin(loadFromSharedLib2("csfml-audio", "sfSoundBuffer", + "CreateFromFile", "CreateFromMemory", "CreateFromSamples", "Destroy", "SaveToFile", "GetSamples", "GetSamplesCount", + "GetSampleRate", "GetChannelsCount", "GetDuration")); +} \ No newline at end of file diff --git a/DSFML/import/dsfml/audio/soundsource.d b/DSFML/import/dsfml/audio/soundsource.d index ce71b917..0082eb8c 100644 --- a/DSFML/import/dsfml/audio/soundsource.d +++ b/DSFML/import/dsfml/audio/soundsource.d @@ -1,11 +1,35 @@ -/** - * +/* + * DSFML - SFML Library wrapper for the D programming language. + * Copyright (C) 2010 Andreas Hollandt + * + * This software is provided 'as-is', without any express or + * implied warranty. In no event will the authors be held + * liable for any damages arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute + * it freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; + * you must not claim that you wrote the original software. + * If you use this software in a product, an acknowledgment + * in the product documentation would be appreciated but + * is not required. + * + * 2. Altered source versions must be plainly marked as such, + * and must not be misrepresented as being the original software. + * + * 3. This notice may not be removed or altered from any + * source distribution. */ + module dsfml.audio.soundsource; import dsfml.system.vector3; import dsfml.system.common; + +/// the sound's current status enum SoundStatus { Stopped, /// Sound is not playing @@ -14,17 +38,16 @@ enum SoundStatus } /// base class -package class SoundSource(alias symbol) : DSFMLObject +package class SoundSource(alias derivedClassName) : DSFMLObject { -private: -protected : +protected: - //////////////////////////////////////////////////////////// - /// \brief Default constructor - /// - /// This constructor is meant ot be called by derived classes only. - /// - //////////////////////////////////////////////////////////// + /** + * Default constructor + * + * This constructor is meant ot be called by derived classes only. + * + */ this() { super(sfSoundSource_Create()); @@ -35,49 +58,80 @@ protected : super(ptr); } - //////////////////////////////////////////////////////////// - /// \brief Get the current status of the sound (stopped, paused, playing) - /// - /// \return Current status of the sound - /// - //////////////////////////////////////////////////////////// - SoundStatus getStatus() + override void dispose() + { + sfSoundSource_Destroy(m_ptr); + } + +public: + + /** + * Set the 3D position of the sound in the audio scene + * + * Only sounds with one channel (mono sounds) can be spatialized. + * The default position of a sound is (0, 0, 0). + * + * Params: + * x = X coordinate of the position of the sound in the scene + * y = Y coordinate of the position of the sound in the scene + * z = Z coordinate of the position of the sound in the scene + */ + void setPosition(float x, float y, float z) + { + sfSoundSource_SetPosition(m_ptr, x, y, z); + } + +@property +{ + /** + * Get the current status of the sound (stopped, paused, playing) + * + * Returns: + * current status of the sound + */ + SoundStatus status() { return sfSoundSource_GetStatus(m_ptr); } -public: - //////////////////////////////////////////////////////////// - /// \brief Set the pitch of the sound - /// - /// The pitch represents the perceived fundamental frequency - /// of a sound; thus you can make a sound more acute or grave - /// by changing its pitch. A side effect of changing the pitch - /// is to modify the playing speed of the sound as well. - /// The default value for the pitch is 1. - /// - /// \param pitch New pitch to apply to the sound - /// - /// \see GetPitch - /// - //////////////////////////////////////////////////////////// - void setPitch(float pitch) + /** + * Set the pitch of the sound + * + * The pitch represents the perceived fundamental frequency + * of a sound; thus you can make a sound more acute or grave + * by changing its pitch. A side effect of changing the pitch + * is to modify the playing speed of the sound as well. + * The default value for the pitch is 1. + * + * Params: + * pitch = New pitch to apply to the sound + */ + void pitch(float pitch) { sfSoundSource_SetPitch(m_ptr, pitch); } - //////////////////////////////////////////////////////////// - /// \brief Set the volume of the sound - /// - /// The volume is a value between 0 (mute) and 100 (full volume). - /// The default value for the volume is 100. - /// - /// \param volume Volume of the sound - /// - /// \see GetVolume - /// - //////////////////////////////////////////////////////////// - void setVolume(float volume) + /** + * Get the pitch of the sound + * + * Returns: + * pitch of the sound + */ + float pitch() + { + return sfSoundSource_GetPitch(m_ptr); + } + + /** + * Set the volume of the sound + * + * The volume is a value between 0 (mute) and 100 (full volume). + * The default value for the volume is 100. + * + * Params: + * volume = volume of the sound + */ + void volume(float volume) in { assert(volume >= 0 && volume <= 100); @@ -87,188 +141,146 @@ public: sfSoundSource_SetVolume(m_ptr, volume); } - //////////////////////////////////////////////////////////// - /// \brief Set the 3D position of the sound in the audio scene - /// - /// Only sounds with one channel (mono sounds) can be - /// spatialized. - /// The default position of a sound is (0, 0, 0). - /// - /// \param x X coordinate of the position of the sound in the scene - /// \param y Y coordinate of the position of the sound in the scene - /// \param z Z coordinate of the position of the sound in the scene - /// - /// \see GetPosition - /// - //////////////////////////////////////////////////////////// - void setPosition(float x, float y, float z) + /** + * Get the volume of the sound + * + * Returns: + * Volume of the sound, in the range [0, 100] + */ + float volume() { - sfSoundSource_SetPosition(m_ptr, x, y, z); + return sfSoundSource_GetVolume(m_ptr); } - - //////////////////////////////////////////////////////////// - /// \brief Set the 3D position of the sound in the audio scene - /// - /// Only sounds with one channel (mono sounds) can be - /// spatialized. - /// The default position of a sound is (0, 0, 0). - /// - /// \param position Position of the sound in the scene - /// - /// \see GetPosition - /// - //////////////////////////////////////////////////////////// - void setPosition(Vector3f position) + + /** + * Set the 3D position of the sound in the audio scene + * + * Only sounds with one channel (mono sounds) can be + * spatialized. + * The default position of a sound is (0, 0, 0). + * + * Params: + * position = Position of the sound in the scene + */ + void position(Vector3f position) { sfSoundSource_SetPosition(m_ptr, position.x, position.y, position.z); } - //////////////////////////////////////////////////////////// - /// \brief Make the sound's position relative to the listener or absolute - /// - /// Making a sound relative to the listener will ensure that it will always - /// be played the same way regardless the position of the listener. - /// This can be useful for non-spatialized sounds, sounds that are - /// produced by the listener, or sounds attached to it. - /// The default value is false (position is absolute). - /// - /// \param relative True to set the position relative, false to set it absolute - /// - /// \see IsRelativeToListener - /// - //////////////////////////////////////////////////////////// - void setRelativeToListener(bool relative) - { - sfSoundSource_SetRelativeToListener(m_ptr, relative); - } - - //////////////////////////////////////////////////////////// - /// \brief Set the minimum distance of the sound - /// - /// The "minimum distance" of a sound is the maximum - /// distance at which it is heard at its maximum volume. Further - /// than the minimum distance, it will start to fade out according - /// to its attenuation factor. A value of 0 ("inside the head - /// of the listener") is an invalid value and is forbidden. - /// The default value of the minimum distance is 1. - /// - /// \param distance New minimum distance of the sound - /// - /// \see GetMinDistance, SetAttenuation - /// - //////////////////////////////////////////////////////////// - void setMinDistance(float distance) - { - sfSoundSource_SetMinDistance(m_ptr, distance); - } - - //////////////////////////////////////////////////////////// - /// \brief Set the attenuation factor of the sound - /// - /// The attenuation is a multiplicative factor which makes - /// the sound more or less loud according to its distance - /// from the listener. An attenuation of 0 will produce a - /// non-attenuated sound, i.e. its volume will always be the same - /// whether it is heard from near or from far. On the other hand, - /// an attenuation value such as 100 will make the sound fade out - /// very quickly as it gets further from the listener. - /// The default value of the attenuation is 1. - /// - /// \param attenuation New attenuation factor of the sound - /// - /// \see GetAttenuation, SetMinDistance - /// - //////////////////////////////////////////////////////////// - void setAttenuation(float attenuation) - { - sfSoundSource_SetAttenuation(m_ptr, attenuation); - } - - //////////////////////////////////////////////////////////// - /// \brief Get the pitch of the sound - /// - /// \return Pitch of the sound - /// - /// \see SetPitch - /// - //////////////////////////////////////////////////////////// - float GetPitch() - { - return sfSoundSource_GetPitch(m_ptr); - } - - //////////////////////////////////////////////////////////// - /// \brief Get the volume of the sound - /// - /// \return Volume of the sound, in the range [0, 100] - /// - /// \see SetVolume - /// - //////////////////////////////////////////////////////////// - float GetVolume() - { - return sfSoundSource_GetVolume(m_ptr); - } - - //////////////////////////////////////////////////////////// - /// \brief Get the 3D position of the sound in the audio scene - /// - /// \return Position of the sound - /// - /// \see SetPosition - /// - //////////////////////////////////////////////////////////// + /** + * Get the 3D position of the sound in the audio scene + * + * Returns: + * Position of the sound + */ Vector3f getPosition() { Vector3f ret; sfSoundSource_GetPosition(m_ptr, &ret.x, &ret.y, &ret.z); return ret; } + + /** + * Make the sound's position relative to the listener or absolute + * + * Making a sound relative to the listener will ensure that it will always + * be played the same way regardless the position of the listener. + * This can be useful for non-spatialized sounds, sounds that are + * produced by the listener, or sounds attached to it. + * The default value is false (position is absolute). + * + * Params: + * relative = True to set the position relative, false to set it absolute + */ + void relativeToListener(bool relative) + { + sfSoundSource_SetRelativeToListener(m_ptr, relative); + } - //////////////////////////////////////////////////////////// - /// \brief Tell whether the sound's position is relative to the - /// listener or is absolute - /// - /// \return True if the position is relative, false if it's absolute - /// - /// \see SetRelativeToListener - /// - //////////////////////////////////////////////////////////// - bool isRelativeToListener() + /** + * Tell whether the sound's position is relative to the listener or is absolute + * + * Returns: + * True if the position is relative, false if it's absolute + */ + bool relativeToListener() { return sfSoundSource_IsRelativeToListener(m_ptr); } + + /** + * Set the minimum distance of the sound + * + * The "minimum distance" of a sound is the maximum + * distance at which it is heard at its maximum volume. Further + * than the minimum distance, it will start to fade out according + * to its attenuation factor. A value of 0 ("inside the head + * of the listener") is an invalid value and is forbidden. + * The default value of the minimum distance is 1. + * + * Params: + * distance = New minimum distance of the sound + * + * \see GetMinDistance, SetAttenuation + * + */ + void minDistance(float distance) + { + sfSoundSource_SetMinDistance(m_ptr, distance); + } - //////////////////////////////////////////////////////////// - /// \brief Get the minimum distance of the sound - /// - /// \return Minimum distance of the sound - /// - /// \see SetMinDistance, GetAttenuation - /// - //////////////////////////////////////////////////////////// - float getMinDistance() + /** + * Get the minimum distance of the sound + * + * Returns: + * Minimum distance of the sound + * + * \see SetMinDistance, GetAttenuation + * + */ + float minDistance() { return sfSoundSource_GetMinDistance(m_ptr); } + + /** + * Set the attenuation factor of the sound + * + * The attenuation is a multiplicative factor which makes + * the sound more or less loud according to its distance + * from the listener. An attenuation of 0 will produce a + * non-attenuated sound, i.e. its volume will always be the same + * whether it is heard from near or from far. On the other hand, + * an attenuation value such as 100 will make the sound fade out + * very quickly as it gets further from the listener. + * The default value of the attenuation is 1. + * + * Params: + * attenuation = New attenuation factor of the sound + * + * \see GetAttenuation, SetMinDistance + * + */ + void attenuation(float attenuation) + { + sfSoundSource_SetAttenuation(m_ptr, attenuation); + } - //////////////////////////////////////////////////////////// - /// \brief Get the attenuation factor of the sound - /// - /// \return Attenuation factor of the sound - /// - /// \see SetAttenuation, GetMinDistance - /// - //////////////////////////////////////////////////////////// - float getAttenuation() + /** + * Get the attenuation factor of the sound + * + * Returns: + * Attenuation factor of the sound + * + * \see SetAttenuation, GetMinDistance + * + */ + float attenuation() { return sfSoundSource_GetAttenuation(m_ptr); } +} - override void dispose() - { - sfSoundSource_Destroy(m_ptr); - } private: @@ -293,27 +305,7 @@ private: bool function(void*) sfSoundSource_IsRelativeToListener; } - static this() - { - debug - DllLoader dll = DllLoader.load("csfml-audio-d"); - else - DllLoader dll = DllLoader.load("csfml-audio"); - - mixin(loadDerivedFromSharedLib("sfSoundSource", "Create", symbol)); - mixin(loadDerivedFromSharedLib("sfSoundSource", "Destroy", symbol)); - mixin(loadDerivedFromSharedLib("sfSoundSource", "GetStatus", symbol)); - mixin(loadDerivedFromSharedLib("sfSoundSource", "GetPitch", symbol)); - mixin(loadDerivedFromSharedLib("sfSoundSource", "SetPitch", symbol)); - mixin(loadDerivedFromSharedLib("sfSoundSource", "GetVolume", symbol)); - mixin(loadDerivedFromSharedLib("sfSoundSource", "SetVolume", symbol)); - mixin(loadDerivedFromSharedLib("sfSoundSource", "GetPosition", symbol)); - mixin(loadDerivedFromSharedLib("sfSoundSource", "SetPosition", symbol)); - mixin(loadDerivedFromSharedLib("sfSoundSource", "GetMinDistance", symbol)); - mixin(loadDerivedFromSharedLib("sfSoundSource", "SetMinDistance", symbol)); - mixin(loadDerivedFromSharedLib("sfSoundSource", "GetAttenuation", symbol)); - mixin(loadDerivedFromSharedLib("sfSoundSource", "SetAttenuation", symbol)); - mixin(loadDerivedFromSharedLib("sfSoundSource", "SetRelativeToListener", symbol)); - mixin(loadDerivedFromSharedLib("sfSoundSource", "IsRelativeToListener", symbol)); - } + mixin(loadDerivedFromSharedLib("csfml-audio", "sfSoundSource", derivedClassName, + "Create", "Destroy", "GetStatus", "GetPitch", "SetPitch", "GetVolume", "SetVolume", "GetPosition", "SetPosition", + "GetMinDistance", "SetMinDistance", "GetAttenuation", "SetAttenuation", "SetRelativeToListener", "IsRelativeToListener")); } \ No newline at end of file diff --git a/DSFML/import/dsfml/audio/soundstream.d b/DSFML/import/dsfml/audio/soundstream.d index f7c7dd54..e2b1fbab 100644 --- a/DSFML/import/dsfml/audio/soundstream.d +++ b/DSFML/import/dsfml/audio/soundstream.d @@ -85,7 +85,7 @@ abstract class SoundStream : SoundSource!("sfSoundStream") m_flag = true; sfSoundStream_Play(m_ptr); - if (getStatus() != SoundStatus.Paused) + if (status != SoundStatus.Paused) { m_t = new Thread(&threadPoll); m_t.start(); diff --git a/DSFML/import/dsfml/system/common.d b/DSFML/import/dsfml/system/common.d index 7e77fb23..caf80fe4 100644 --- a/DSFML/import/dsfml/system/common.d +++ b/DSFML/import/dsfml/system/common.d @@ -47,7 +47,7 @@ string loadFromSharedLib(string fname) } //used to mixin code function -string loadFromSharedLib2(S...)(string lib, string object, S fnames) +string loadFromSharedLib2(S...)(string lib, string className, S fnames) { string res = `static this() { @@ -60,14 +60,27 @@ string loadFromSharedLib2(S...)(string lib, string object, S fnames) foreach(fname; fnames) { - res ~= "\t" ~ object ~ "_" ~ fname ~ " = " ~ "cast(typeof(" ~ object ~ "_" ~ fname ~ ")) dll.getSymbol(\"" ~ object ~ "_" ~ fname ~ "\");\n"; + res ~= "\t" ~ className ~ "_" ~ fname ~ " = " ~ "cast(typeof(" ~ className ~ "_" ~ fname ~ ")) dll.getSymbol(\"" ~ className ~ "_" ~ fname ~ "\");\n"; } return res ~ "}\n"; } -string loadDerivedFromSharedLib(string base, string fname, string derived) +string loadDerivedFromSharedLib(S...)(string lib, string baseClass, string derivedClass, S fnames) { - return base ~ "_" ~ fname ~ " = " ~ "cast(typeof(" ~ base ~ "_" ~ fname ~ ")) dll.getSymbol(\"" ~ derived ~ "_" ~ fname ~ "\");"; + string res = `static this() +{ + debug + DllLoader dll = DllLoader.load("` ~ lib ~ `-d"); + else + DllLoader dll = DllLoader.load("` ~ lib ~ `"); + +`; + + foreach(fname; fnames) + { + res ~= "\t" ~ baseClass ~ "_" ~ fname ~ " = " ~ "cast(typeof(" ~ baseClass ~ "_" ~ fname ~ ")) dll.getSymbol(\"" ~ derivedClass ~ "_" ~ fname ~ "\");"; + } + return res ~ "}\n"; } /**