Ajouts de musique et irrKlang.
This commit is contained in:
		
							
								
								
									
										78
									
								
								SQCSim2021/external/irrKlang-1.6.0/include/ik_ESoundEngineOptions.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										78
									
								
								SQCSim2021/external/irrKlang-1.6.0/include/ik_ESoundEngineOptions.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,78 @@
 | 
			
		||||
// Copyright (C) 2002-2018 Nikolaus Gebhardt
 | 
			
		||||
// This file is part of the "irrKlang" library.
 | 
			
		||||
// For conditions of distribution and use, see copyright notice in irrKlang.h
 | 
			
		||||
 | 
			
		||||
#ifndef __E_IRRKLANG_SOUND_ENGINE_OPTIONS_H_INCLUDED__
 | 
			
		||||
#define __E_IRRKLANG_SOUND_ENGINE_OPTIONS_H_INCLUDED__
 | 
			
		||||
 | 
			
		||||
namespace irrklang  
 | 
			
		||||
{
 | 
			
		||||
	//! An enumeration for all options for starting up the sound engine
 | 
			
		||||
	/** When using createIrrKlangDevice, use a combination of this these
 | 
			
		||||
	as 'options' parameter to start up the engine. By default, irrKlang
 | 
			
		||||
	uses ESEO_DEFAULT_OPTIONS, which is set to the combination 
 | 
			
		||||
	ESEO_MULTI_THREADED | ESEO_LOAD_PLUGINS | ESEO_USE_3D_BUFFERS | ESEO_PRINT_DEBUG_INFO_TO_DEBUGGER | ESEO_PRINT_DEBUG_INFO_TO_STDOUT. */
 | 
			
		||||
	enum E_SOUND_ENGINE_OPTIONS
 | 
			
		||||
	{
 | 
			
		||||
		//! If specified (default), it will make irrKlang run in a separate thread.
 | 
			
		||||
		/** Using this flag, irrKlang will update
 | 
			
		||||
		all streams, sounds, 3d positions and whatever automaticly. You also don't need to call ISoundEngine::update()
 | 
			
		||||
		if irrKlang is running multithreaded. However, if you want to run irrKlang in the same thread
 | 
			
		||||
		as your application (for easier debugging for example), don't set this. But you need to call ISoundEngine::update()
 | 
			
		||||
		as often as you can (at least about 2-3 times per second) to make irrKlang update everything correctly then. */
 | 
			
		||||
		ESEO_MULTI_THREADED = 0x01,
 | 
			
		||||
 | 
			
		||||
		//! If the window of the application doesn't have the focus, irrKlang will be silent if this has been set. 
 | 
			
		||||
		/** This will only work when irrKlang is using the DirectSound output driver. */
 | 
			
		||||
		ESEO_MUTE_IF_NOT_FOCUSED = 0x02,
 | 
			
		||||
 | 
			
		||||
		//! Automaticly loads external plugins when starting up.
 | 
			
		||||
		/** Plugins usually are .dll, .so or .dylib
 | 
			
		||||
		files named for example ikpMP3.dll (= short for irrKlangPluginMP3) which are executed
 | 
			
		||||
		after the startup of the sound engine and modify it for example to make it possible
 | 
			
		||||
		to play back mp3 files. Plugins are being loaded from the current working directory 
 | 
			
		||||
		as well as from the position where the .exe using the irrKlang library resides. 
 | 
			
		||||
		It is also possible to load the plugins after the engine has started up using 
 | 
			
		||||
		ISoundEngine::loadPlugins(). */
 | 
			
		||||
		ESEO_LOAD_PLUGINS = 0x04,
 | 
			
		||||
 | 
			
		||||
		//! Uses 3D sound buffers instead of emulating them when playing 3d sounds (default).
 | 
			
		||||
		/** If this flag is not specified, all buffers will by created
 | 
			
		||||
		in 2D only and 3D positioning will be emulated in software, making the engine run
 | 
			
		||||
		faster if hardware 3d audio is slow on the system.  */
 | 
			
		||||
		ESEO_USE_3D_BUFFERS = 0x08,
 | 
			
		||||
 | 
			
		||||
		//! Prints debug messages to the debugger window.
 | 
			
		||||
		/** irrKlang will print debug info and status messages to any windows debugger supporting 
 | 
			
		||||
		OutputDebugString() (like VisualStudio).
 | 
			
		||||
		This is useful if your application does not capture any console output (see ESEO_PRINT_DEBUG_INFO_TO_STDOUT). */
 | 
			
		||||
		ESEO_PRINT_DEBUG_INFO_TO_DEBUGGER = 0x10,
 | 
			
		||||
 | 
			
		||||
		//! Prints debug messages to stdout (the ConsoleWindow).
 | 
			
		||||
		/** irrKlang will print debug info and status messages stdout, the console window in Windows. */
 | 
			
		||||
		ESEO_PRINT_DEBUG_INFO_TO_STDOUT = 0x20,
 | 
			
		||||
 | 
			
		||||
		//! Uses linear rolloff for 3D sound.
 | 
			
		||||
		/** If specified, instead of the default logarithmic one, irrKlang will 
 | 
			
		||||
		 use a linear rolloff model which influences the attenuation 
 | 
			
		||||
		 of the sounds over distance. The volume is interpolated linearly between the MinDistance
 | 
			
		||||
		 and MaxDistance, making it possible to adjust sounds more easily although this is not
 | 
			
		||||
		 physically correct.
 | 
			
		||||
		 Note that this option may not work when used together with the ESEO_USE_3D_BUFFERS
 | 
			
		||||
		 option when using Direct3D for example, irrKlang will then turn off ESEO_USE_3D_BUFFERS
 | 
			
		||||
		 automaticly to be able to use this option and write out a warning. */
 | 
			
		||||
		ESEO_LINEAR_ROLLOFF = 0x40,
 | 
			
		||||
 | 
			
		||||
		//! Default parameters when starting up the engine.
 | 
			
		||||
		ESEO_DEFAULT_OPTIONS = ESEO_MULTI_THREADED | ESEO_LOAD_PLUGINS | ESEO_USE_3D_BUFFERS | ESEO_PRINT_DEBUG_INFO_TO_DEBUGGER | ESEO_PRINT_DEBUG_INFO_TO_STDOUT,
 | 
			
		||||
 | 
			
		||||
		//! Never used, it only forces the compiler to compile these enumeration values to 32 bit.
 | 
			
		||||
		/** Don't use this. */
 | 
			
		||||
		ESEO_FORCE_32_BIT = 0x7fffffff
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
} // end namespace irrklang
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										59
									
								
								SQCSim2021/external/irrKlang-1.6.0/include/ik_ESoundOutputDrivers.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								SQCSim2021/external/irrKlang-1.6.0/include/ik_ESoundOutputDrivers.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,59 @@
 | 
			
		||||
// Copyright (C) 2002-2018 Nikolaus Gebhardt
 | 
			
		||||
// This file is part of the "irrKlang" library.
 | 
			
		||||
// For conditions of distribution and use, see copyright notice in irrKlang.h
 | 
			
		||||
 | 
			
		||||
#ifndef __E_IRRKLANG_SOUND_OUTPUT_DRIVERS_H_INCLUDED__
 | 
			
		||||
#define __E_IRRKLANG_SOUND_OUTPUT_DRIVERS_H_INCLUDED__
 | 
			
		||||
 | 
			
		||||
namespace irrklang
 | 
			
		||||
{
 | 
			
		||||
	//! An enumeration for all types of supported sound drivers
 | 
			
		||||
	/** Values of this enumeration can be used as parameter when calling createIrrKlangDevice(). */
 | 
			
		||||
	enum E_SOUND_OUTPUT_DRIVER
 | 
			
		||||
	{
 | 
			
		||||
		//! Autodetects the best sound driver for the system
 | 
			
		||||
		ESOD_AUTO_DETECT = 0,
 | 
			
		||||
 | 
			
		||||
		//! DirectSound8 sound output driver, windows only. 
 | 
			
		||||
		/** In contrast to ESOD_DIRECT_SOUND, this supports sophisticated sound effects
 | 
			
		||||
		but may not be available on old windows versions. It behaves very similar 
 | 
			
		||||
		to ESOD_DIRECT_SOUND but also supports DX8 sound effects.*/
 | 
			
		||||
		ESOD_DIRECT_SOUND_8,
 | 
			
		||||
 | 
			
		||||
		//! DirectSound sound output driver, windows only.
 | 
			
		||||
		/** This uses DirectSound 3 or above, if available. If DX8 sound effects
 | 
			
		||||
		are needed, use ESOD_DIRECT_SOUND_8 instead. The 
 | 
			
		||||
		ESOD_DIRECT_SOUND driver may be available on more and older windows 
 | 
			
		||||
		versions than ESOD_DIRECT_SOUND_8.*/
 | 
			
		||||
		ESOD_DIRECT_SOUND,
 | 
			
		||||
 | 
			
		||||
		//! WinMM sound output driver, windows only.
 | 
			
		||||
		/** Supports the ISoundMixedOutputReceiver interface using setMixedDataOutputReceiver. */
 | 
			
		||||
		ESOD_WIN_MM,
 | 
			
		||||
 | 
			
		||||
		//! ALSA sound output driver, linux only.
 | 
			
		||||
		/** When using ESOD_ALSA in createIrrKlangDevice(), it is possible to set the third parameter,
 | 
			
		||||
		'deviceID' to the name of specific ALSA pcm device, to the irrKlang force to use this one.
 | 
			
		||||
		Set it to 'default', or 'plug:hw' or whatever you need it to be. 
 | 
			
		||||
		Supports the ISoundMixedOutputReceiver interface using setMixedDataOutputReceiver. */
 | 
			
		||||
		ESOD_ALSA,
 | 
			
		||||
		
 | 
			
		||||
		//! Core Audio sound output driver, mac os only.
 | 
			
		||||
		/** Supports the ISoundMixedOutputReceiver interface using setMixedDataOutputReceiver. */
 | 
			
		||||
		ESOD_CORE_AUDIO,
 | 
			
		||||
 | 
			
		||||
		//! Null driver, creating no sound output
 | 
			
		||||
		ESOD_NULL,
 | 
			
		||||
 | 
			
		||||
		//! Amount of built-in sound output drivers
 | 
			
		||||
		ESOD_COUNT,
 | 
			
		||||
 | 
			
		||||
		//! This enumeration literal is never used, it only forces the compiler to
 | 
			
		||||
		//! compile these enumeration values to 32 bit.
 | 
			
		||||
		ESOD_FORCE_32_BIT = 0x7fffffff
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
} // end namespace irrklang
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										31
									
								
								SQCSim2021/external/irrKlang-1.6.0/include/ik_EStreamModes.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								SQCSim2021/external/irrKlang-1.6.0/include/ik_EStreamModes.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,31 @@
 | 
			
		||||
// Copyright (C) 2002-2018 Nikolaus Gebhardt
 | 
			
		||||
// This file is part of the "irrKlang" library.
 | 
			
		||||
// For conditions of distribution and use, see copyright notice in irrKlang.h
 | 
			
		||||
 | 
			
		||||
#ifndef __E_IRRKLANG_STREAM_MODES_H_INCLUDED__
 | 
			
		||||
#define __E_IRRKLANG_STREAM_MODES_H_INCLUDED__
 | 
			
		||||
 | 
			
		||||
namespace irrklang  
 | 
			
		||||
{
 | 
			
		||||
	//! An enumeration for all types of supported stream modes
 | 
			
		||||
	enum E_STREAM_MODE
 | 
			
		||||
	{
 | 
			
		||||
		//! Autodetects the best stream mode for a specified audio data.
 | 
			
		||||
		ESM_AUTO_DETECT = 0,
 | 
			
		||||
 | 
			
		||||
		//! Streams the audio data when needed.
 | 
			
		||||
		ESM_STREAMING,
 | 
			
		||||
 | 
			
		||||
		//! Loads the whole audio data into the memory.
 | 
			
		||||
		ESM_NO_STREAMING,
 | 
			
		||||
 | 
			
		||||
		//! This enumeration literal is never used, it only forces the compiler to 
 | 
			
		||||
		//! compile these enumeration values to 32 bit.
 | 
			
		||||
		ESM_FORCE_32_BIT = 0x7fffffff
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
} // end namespace irrklang
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										110
									
								
								SQCSim2021/external/irrKlang-1.6.0/include/ik_IAudioRecorder.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										110
									
								
								SQCSim2021/external/irrKlang-1.6.0/include/ik_IAudioRecorder.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,110 @@
 | 
			
		||||
// Copyright (C) 2002-2018 Nikolaus Gebhardt
 | 
			
		||||
// This file is part of the "irrKlang" library.
 | 
			
		||||
// For conditions of distribution and use, see copyright notice in irrKlang.h
 | 
			
		||||
 | 
			
		||||
#ifndef __I_IRRKLANG_AUDIO_RECORDER_H_INCLUDED__
 | 
			
		||||
#define __I_IRRKLANG_AUDIO_RECORDER_H_INCLUDED__
 | 
			
		||||
 | 
			
		||||
#include "ik_IRefCounted.h"
 | 
			
		||||
#include "ik_ISoundSource.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace irrklang
 | 
			
		||||
{
 | 
			
		||||
	class ICapturedAudioDataReceiver;
 | 
			
		||||
 | 
			
		||||
	//! Interface to an audio recorder. Create it using the createIrrKlangAudioRecorder() function.
 | 
			
		||||
	/** It creates sound sources into an ISoundEngine which then can be played there. 
 | 
			
		||||
	See @ref recordingAudio for an example on how to use this. */
 | 
			
		||||
	class IAudioRecorder : public virtual IRefCounted
 | 
			
		||||
	{
 | 
			
		||||
	public:
 | 
			
		||||
 | 
			
		||||
		//! Starts recording audio. 
 | 
			
		||||
		/** Clears all possibly previously recorded buffered audio data and starts to record. 
 | 
			
		||||
		When finished recording audio data, call stopRecordingAudio(). 
 | 
			
		||||
		All recorded audio data gets stored into an internal audio buffer, which
 | 
			
		||||
		can then be accessed for example using addSoundSourceFromRecordedAudio() or
 | 
			
		||||
		getRecordedAudioData(). For recording audio data not into an internal audio
 | 
			
		||||
		buffer, use startRecordingCustomHandledAudio().
 | 
			
		||||
		\param sampleRate: Sample rate of the recorded audio.
 | 
			
		||||
		\param sampleFormat: Sample format of the recorded audio.
 | 
			
		||||
		\param channelCount: Amount of audio channels.
 | 
			
		||||
		\return Returns true if successfully started recording and false if not.*/
 | 
			
		||||
		virtual bool startRecordingBufferedAudio(ik_s32 sampleRate=22000, 
 | 
			
		||||
		                                         ESampleFormat sampleFormat=ESF_S16,
 | 
			
		||||
												 ik_s32 channelCount=1) = 0;
 | 
			
		||||
 | 
			
		||||
		//! Starts recording audio. 
 | 
			
		||||
		/** Clears all possibly previously recorded buffered audio data and starts to record 
 | 
			
		||||
		audio data, which is delivered to a custom user callback interface. 
 | 
			
		||||
		When finished recording audio data, call stopRecordingAudio(). If instead of 
 | 
			
		||||
		recording the data to the receiver interface recording into a managed buffer
 | 
			
		||||
		is wished, use startRecordingBufferedAudio() instead.
 | 
			
		||||
		\param receiver: Interface to be implemented by the user, gets called once for each
 | 
			
		||||
		captured audio data chunk. 
 | 
			
		||||
		\param sampleRate: Sample rate of the recorded audio.
 | 
			
		||||
		\param sampleFormat: Sample format of the recorded audio.
 | 
			
		||||
		\param channelCount: Amount of audio channels.
 | 
			
		||||
		\return Returns true if successfully started recording and false if not. */
 | 
			
		||||
		virtual bool startRecordingCustomHandledAudio(ICapturedAudioDataReceiver* receiver,
 | 
			
		||||
			                                          ik_s32 sampleRate=22000,
 | 
			
		||||
													  ESampleFormat sampleFormat=ESF_S16,
 | 
			
		||||
													  ik_s32 channelCount=1) = 0;
 | 
			
		||||
 | 
			
		||||
		//! Stops recording audio.
 | 
			
		||||
		virtual void stopRecordingAudio() = 0;
 | 
			
		||||
 | 
			
		||||
		//! Creates a sound source for the recorded audio data.
 | 
			
		||||
		/** The returned sound source pointer then can be used to play back the recorded audio data
 | 
			
		||||
		using ISoundEngine::play2D(). This method only will succeed if the audio was recorded using
 | 
			
		||||
		startRecordingBufferedAudio() and audio recording is currently stopped.
 | 
			
		||||
		\param soundName Name of the virtual sound file (e.g. "someRecordedAudio"). You can also use this
 | 
			
		||||
		name when calling play3D() or play2D().  */
 | 
			
		||||
		virtual ISoundSource* addSoundSourceFromRecordedAudio(const char* soundName) = 0;
 | 
			
		||||
 | 
			
		||||
		//! Clears recorded audio data buffer, freeing memory.
 | 
			
		||||
		/** This method will only succeed if audio recording is currently stopped. */
 | 
			
		||||
		virtual void clearRecordedAudioDataBuffer() = 0;
 | 
			
		||||
 | 
			
		||||
		//! Returns if the recorder is currently recording audio.
 | 
			
		||||
		virtual bool isRecording() = 0;
 | 
			
		||||
 | 
			
		||||
		//! Returns the audio format of the recorded audio data. 
 | 
			
		||||
		/** Also contains informations about the length of the recorded audio stream. */
 | 
			
		||||
		virtual SAudioStreamFormat getAudioFormat() = 0;
 | 
			
		||||
 | 
			
		||||
		//! Returns a pointer to the recorded audio data.
 | 
			
		||||
		/** This method will only succeed if audio recording is currently stopped and
 | 
			
		||||
		something was recorded previously using startRecordingBufferedAudio(). 
 | 
			
		||||
		The lenght of the buffer can be retrieved using 
 | 
			
		||||
		getAudioFormat().getSampleDataSize(). Note that the pointer is only valid
 | 
			
		||||
		as long as not clearRecordedAudioDataBuffer() is called or another sample is
 | 
			
		||||
		recorded.*/
 | 
			
		||||
		virtual void* getRecordedAudioData() = 0;
 | 
			
		||||
 | 
			
		||||
		//! returns the name of the sound driver, like 'ALSA' for the alsa device.
 | 
			
		||||
		/** Possible returned strings are "NULL", "ALSA", "CoreAudio", "winMM", 
 | 
			
		||||
		"DirectSound" and "DirectSound8". */
 | 
			
		||||
		virtual const char* getDriverName() = 0;
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	//! Interface to be implemented by the user if access to the recorded audio data is needed.
 | 
			
		||||
	/** Is used as parameter in IAudioRecorder::startRecordingCustomHandledAudio. */
 | 
			
		||||
	class ICapturedAudioDataReceiver : public IRefCounted
 | 
			
		||||
	{
 | 
			
		||||
	public:
 | 
			
		||||
 | 
			
		||||
		//! Gets called once for each captured audio data chunk.
 | 
			
		||||
		/** See IAudioRecorder::startRecordingCustomHandledAudio for details.
 | 
			
		||||
		\param audioData: Pointer to a part of the recorded audio data
 | 
			
		||||
		\param lengthInBytes: Amount of bytes in the audioData buffer.*/
 | 
			
		||||
		virtual void OnReceiveAudioDataStreamChunk(unsigned char* audioData, unsigned long lengthInBytes) = 0;
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} // end namespace irrklang
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										49
									
								
								SQCSim2021/external/irrKlang-1.6.0/include/ik_IAudioStream.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								SQCSim2021/external/irrKlang-1.6.0/include/ik_IAudioStream.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,49 @@
 | 
			
		||||
// Copyright (C) 2002-2018 Nikolaus Gebhardt
 | 
			
		||||
// This file is part of the "irrKlang" library.
 | 
			
		||||
// For conditions of distribution and use, see copyright notice in irrKlang.h
 | 
			
		||||
 | 
			
		||||
#ifndef __I_IRRKLANG_AUDIO_STREAM_H_INCLUDED__
 | 
			
		||||
#define __I_IRRKLANG_AUDIO_STREAM_H_INCLUDED__
 | 
			
		||||
 | 
			
		||||
#include "ik_IRefCounted.h"
 | 
			
		||||
#include "ik_SAudioStreamFormat.h"
 | 
			
		||||
 | 
			
		||||
namespace irrklang
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//!	Reads and decodes audio data into an usable audio stream for the ISoundEngine
 | 
			
		||||
class IAudioStream : public IRefCounted
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
 | 
			
		||||
	//! destructor
 | 
			
		||||
	virtual ~IAudioStream() {};
 | 
			
		||||
 | 
			
		||||
	//! returns format of the audio stream
 | 
			
		||||
	virtual SAudioStreamFormat getFormat() = 0;
 | 
			
		||||
 | 
			
		||||
	//! sets the position of the audio stream.
 | 
			
		||||
	/** For example to let the stream be read from the beginning of the file again, 
 | 
			
		||||
	setPosition(0) would be called. This is usually done be the sound engine to
 | 
			
		||||
	loop a stream after if has reached the end. Return true if sucessful and 0 if not. 
 | 
			
		||||
	\param pos: Position in frames.*/
 | 
			
		||||
	virtual bool setPosition(ik_s32 pos) = 0;
 | 
			
		||||
 | 
			
		||||
	//! returns true if the audio stream is seekable
 | 
			
		||||
	/* Some file formats like (MODs) don't support seeking */
 | 
			
		||||
	virtual bool getIsSeekingSupported() { return true; }
 | 
			
		||||
 | 
			
		||||
    //! tells the audio stream to read frameCountToRead audio frames into the specified buffer
 | 
			
		||||
	/** \param target: Target data buffer to the method will write the read frames into. The
 | 
			
		||||
	specified buffer will be at least getFormat().getFrameSize()*frameCountToRead bytes big.
 | 
			
		||||
	\param frameCountToRead: amount of frames to be read.
 | 
			
		||||
	\returns Returns amount of frames really read. Should be frameCountToRead in most cases. */
 | 
			
		||||
	virtual ik_s32 readFrames(void* target, ik_s32 frameCountToRead) = 0;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} // end namespace irrklang
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										40
									
								
								SQCSim2021/external/irrKlang-1.6.0/include/ik_IAudioStreamLoader.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								SQCSim2021/external/irrKlang-1.6.0/include/ik_IAudioStreamLoader.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,40 @@
 | 
			
		||||
// Copyright (C) 2002-2018 Nikolaus Gebhardt
 | 
			
		||||
// This file is part of the "irrKlang" library.
 | 
			
		||||
// For conditions of distribution and use, see copyright notice in irrKlang.h
 | 
			
		||||
 | 
			
		||||
#ifndef __I_IRRKLANG_AUDIO_STREAM_LOADER_H_INCLUDED__
 | 
			
		||||
#define __I_IRRKLANG_AUDIO_STREAM_LOADER_H_INCLUDED__
 | 
			
		||||
 | 
			
		||||
#include "ik_IRefCounted.h"
 | 
			
		||||
#include "ik_IFileReader.h"
 | 
			
		||||
 | 
			
		||||
namespace irrklang
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
class IAudioStream;
 | 
			
		||||
 | 
			
		||||
//!	Class which is able to create an audio file stream from a file.
 | 
			
		||||
class IAudioStreamLoader : public IRefCounted
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
 | 
			
		||||
	//! destructor
 | 
			
		||||
	virtual ~IAudioStreamLoader() {};
 | 
			
		||||
 | 
			
		||||
	//! Returns true if the file maybe is able to be loaded by this class.
 | 
			
		||||
	/** This decision should be based only on the file extension (e.g. ".wav"). The given
 | 
			
		||||
	filename string is guaranteed to be lower case. */
 | 
			
		||||
	virtual bool isALoadableFileExtension(const ik_c8* fileName) = 0;
 | 
			
		||||
 | 
			
		||||
	//! Creates an audio file input stream from a file
 | 
			
		||||
	/** \return Pointer to the created audio stream. Returns 0 if loading failed.
 | 
			
		||||
	If you no longer need the stream, you should call IAudioFileStream::drop().
 | 
			
		||||
	See IRefCounted::drop() for more information. */
 | 
			
		||||
	virtual IAudioStream* createAudioStream(IFileReader* file) = 0;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} // end namespace irrklang
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										41
									
								
								SQCSim2021/external/irrKlang-1.6.0/include/ik_IFileFactory.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								SQCSim2021/external/irrKlang-1.6.0/include/ik_IFileFactory.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,41 @@
 | 
			
		||||
// Copyright (C) 2002-2018 Nikolaus Gebhardt
 | 
			
		||||
// This file is part of the "irrKlang" library.
 | 
			
		||||
// For conditions of distribution and use, see copyright notice in irrKlang.h
 | 
			
		||||
 | 
			
		||||
#ifndef __I_IRRKLANG_FILE_FACTORY_H_INCLUDED__
 | 
			
		||||
#define __I_IRRKLANG_FILE_FACTORY_H_INCLUDED__
 | 
			
		||||
 | 
			
		||||
#include "ik_IRefCounted.h"
 | 
			
		||||
 | 
			
		||||
namespace irrklang
 | 
			
		||||
{
 | 
			
		||||
	class IFileReader;
 | 
			
		||||
 | 
			
		||||
	//! Interface to overwrite file access in irrKlang.
 | 
			
		||||
	/** Derive your own class from IFileFactory, overwrite the createFileReader()
 | 
			
		||||
		method and return your own implemented IFileReader to overwrite file access of irrKlang.
 | 
			
		||||
		Use ISoundEngine::addFileFactory() to let irrKlang know about your class.
 | 
			
		||||
		Example code can be found in the tutorial 04.OverrideFileAccess.
 | 
			
		||||
	 */
 | 
			
		||||
	class IFileFactory : public virtual IRefCounted
 | 
			
		||||
	{
 | 
			
		||||
	public:
 | 
			
		||||
 | 
			
		||||
		virtual ~IFileFactory() {};
 | 
			
		||||
 | 
			
		||||
		//! Opens a file for read access.
 | 
			
		||||
		/** Derive your own class from IFileFactory, overwrite this
 | 
			
		||||
		method and return your own implemented IFileReader to overwrite file access of irrKlang.
 | 
			
		||||
		Use ISoundEngine::addFileFactory() to let irrKlang know about your class.
 | 
			
		||||
		Example code can be found in the tutorial 04.OverrideFileAccess.
 | 
			
		||||
		\param filename Name of file to open.
 | 
			
		||||
		\return Returns a pointer to the created file interface.
 | 
			
		||||
		The returned pointer should be dropped when no longer needed.
 | 
			
		||||
		See IRefCounted::drop() for more information. Returns 0 if file cannot be opened. */
 | 
			
		||||
		virtual IFileReader* createFileReader(const ik_c8* filename) = 0;		
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
} // end namespace irrklang
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										50
									
								
								SQCSim2021/external/irrKlang-1.6.0/include/ik_IFileReader.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								SQCSim2021/external/irrKlang-1.6.0/include/ik_IFileReader.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,50 @@
 | 
			
		||||
// Copyright (C) 2002-2018 Nikolaus Gebhardt
 | 
			
		||||
// This file is part of the "irrKlang" library.
 | 
			
		||||
// For conditions of distribution and use, see copyright notice in irrKlang.h
 | 
			
		||||
 | 
			
		||||
#ifndef __I_IRRKLANG_READ_FILE_H_INCLUDED__
 | 
			
		||||
#define __I_IRRKLANG_READ_FILE_H_INCLUDED__
 | 
			
		||||
 | 
			
		||||
#include "ik_IRefCounted.h"
 | 
			
		||||
 | 
			
		||||
namespace irrklang
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
	//! Interface providing read acess to a file.
 | 
			
		||||
	class IFileReader : public virtual IRefCounted
 | 
			
		||||
	{
 | 
			
		||||
	public:
 | 
			
		||||
 | 
			
		||||
		virtual ~IFileReader() {};
 | 
			
		||||
 | 
			
		||||
		//! Reads an amount of bytes from the file.
 | 
			
		||||
		//! \param buffer: Pointer to buffer where to read bytes will be written to.
 | 
			
		||||
		//! \param sizeToRead: Amount of bytes to read from the file.
 | 
			
		||||
		//! \return Returns how much bytes were read.
 | 
			
		||||
		virtual ik_s32 read(void* buffer, ik_u32 sizeToRead) = 0;
 | 
			
		||||
 | 
			
		||||
		//! Changes position in file, returns true if successful.
 | 
			
		||||
		//! \param finalPos: Destination position in the file.
 | 
			
		||||
		//! \param relativeMovement: If set to true, the position in the file is
 | 
			
		||||
		//! changed relative to current position. Otherwise the position is changed 
 | 
			
		||||
		//! from beginning of file.
 | 
			
		||||
		//! \return Returns true if successful, otherwise false.
 | 
			
		||||
		virtual bool seek(ik_s32 finalPos, bool relativeMovement = false) = 0;
 | 
			
		||||
 | 
			
		||||
		//! Returns size of file.
 | 
			
		||||
		//! \return Returns the size of the file in bytes.
 | 
			
		||||
		virtual ik_s32 getSize() = 0;
 | 
			
		||||
 | 
			
		||||
		//! Returns the current position in the file.
 | 
			
		||||
		//! \return Returns the current position in the file in bytes.
 | 
			
		||||
		virtual ik_s32 getPos() = 0;
 | 
			
		||||
 | 
			
		||||
		//! Returns name of file.
 | 
			
		||||
		//! \return Returns the file name as zero terminated character string.
 | 
			
		||||
		virtual const ik_c8* getFileName() = 0;
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
} // end namespace irrklang
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										119
									
								
								SQCSim2021/external/irrKlang-1.6.0/include/ik_IRefCounted.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										119
									
								
								SQCSim2021/external/irrKlang-1.6.0/include/ik_IRefCounted.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,119 @@
 | 
			
		||||
// Copyright (C) 2002-2018 Nikolaus Gebhardt
 | 
			
		||||
// This file is part of the "irrKlang" library.
 | 
			
		||||
// For conditions of distribution and use, see copyright notice in irrKlang.h
 | 
			
		||||
 | 
			
		||||
#ifndef __I_IRRKLANG_IREFERENCE_COUNTED_H_INCLUDED__
 | 
			
		||||
#define __I_IRRKLANG_IREFERENCE_COUNTED_H_INCLUDED__
 | 
			
		||||
 | 
			
		||||
#include "ik_irrKlangTypes.h"
 | 
			
		||||
 | 
			
		||||
namespace irrklang
 | 
			
		||||
{
 | 
			
		||||
	//! Base class of most objects of the irrKlang.
 | 
			
		||||
	/** This class provides reference counting through the methods grab() and drop().
 | 
			
		||||
	It also is able to store a debug string for every instance of an object.
 | 
			
		||||
	Most objects of irrKlang are derived from IRefCounted, and so they are reference counted.
 | 
			
		||||
 | 
			
		||||
	When you receive an object in irrKlang (for example an ISound using play2D() or
 | 
			
		||||
	play3D()), and you no longer need the object, you have 
 | 
			
		||||
	to call drop(). This will destroy the object, if grab() was not called
 | 
			
		||||
	in another part of you program, because this part still needs the object.
 | 
			
		||||
	Note, that you only don't need to call drop() for all objects you receive, it
 | 
			
		||||
	will be explicitely noted in the documentation.
 | 
			
		||||
 | 
			
		||||
	A simple example:
 | 
			
		||||
 | 
			
		||||
	If you want to play a sound, you may want to call the method
 | 
			
		||||
	ISoundEngine::play2D. You call
 | 
			
		||||
	ISound* mysound = engine->play2D("foobar.mp3", false, false true);
 | 
			
		||||
	If you no longer need the sound interface, call mysound->drop(). The 
 | 
			
		||||
	sound may still play on after this because the engine still has a reference
 | 
			
		||||
	to that sound, but you can be sure that it's memory will be released as soon
 | 
			
		||||
	the sound is no longer used.
 | 
			
		||||
 | 
			
		||||
	If you want to add a sound source, you may want to call a method
 | 
			
		||||
	ISoundEngine::addSoundSourceFromFile. You do this like
 | 
			
		||||
	ISoundSource* mysource = engine->addSoundSourceFromFile("example.jpg");
 | 
			
		||||
	You will not have to drop the pointer to the source, because
 | 
			
		||||
	sound sources are managed by the engine (it will live as long as the sound engine) and
 | 
			
		||||
	the documentation says so. 
 | 
			
		||||
	*/
 | 
			
		||||
	class IRefCounted
 | 
			
		||||
	{
 | 
			
		||||
	public:
 | 
			
		||||
 | 
			
		||||
		//! Constructor.
 | 
			
		||||
		IRefCounted()
 | 
			
		||||
			: ReferenceCounter(1)
 | 
			
		||||
		{
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		//! Destructor.
 | 
			
		||||
		virtual ~IRefCounted()
 | 
			
		||||
		{
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		//! Grabs the object. Increments the reference counter by one.
 | 
			
		||||
		//! Someone who calls grab() to an object, should later also call
 | 
			
		||||
		//! drop() to it. If an object never gets as much drop() as grab()
 | 
			
		||||
		//! calls, it will never be destroyed.
 | 
			
		||||
		//! The IRefCounted class provides a basic reference counting mechanism
 | 
			
		||||
		//! with its methods grab() and drop(). Most objects of irrklang
 | 
			
		||||
		//! are derived from IRefCounted, and so they are reference counted.
 | 
			
		||||
		//!
 | 
			
		||||
		//! When you receive an object in irrKlang (for example an ISound using play2D() or
 | 
			
		||||
		//! play3D()), and you no longer need the object, you have 
 | 
			
		||||
		//! to call drop(). This will destroy the object, if grab() was not called
 | 
			
		||||
		//! in another part of you program, because this part still needs the object.
 | 
			
		||||
		//! Note, that you only don't need to call drop() for all objects you receive, it
 | 
			
		||||
		//! will be explicitely noted in the documentation.
 | 
			
		||||
		//! 
 | 
			
		||||
		//! A simple example:
 | 
			
		||||
		//! 
 | 
			
		||||
		//! If you want to play a sound, you may want to call the method
 | 
			
		||||
		//! ISoundEngine::play2D. You call
 | 
			
		||||
		//! ISound* mysound = engine->play2D("foobar.mp3", false, false true);
 | 
			
		||||
		//! If you no longer need the sound interface, call mysound->drop(). The 
 | 
			
		||||
		//! sound may still play on after this because the engine still has a reference
 | 
			
		||||
		//! to that sound, but you can be sure that it's memory will be released as soon
 | 
			
		||||
		//! the sound is no longer used.
 | 
			
		||||
		void grab() { ++ReferenceCounter; }
 | 
			
		||||
 | 
			
		||||
		//! When you receive an object in irrKlang (for example an ISound using play2D() or
 | 
			
		||||
		//! play3D()), and you no longer need the object, you have 
 | 
			
		||||
		//! to call drop(). This will destroy the object, if grab() was not called
 | 
			
		||||
		//! in another part of you program, because this part still needs the object.
 | 
			
		||||
		//! Note, that you only don't need to call drop() for all objects you receive, it
 | 
			
		||||
		//! will be explicitely noted in the documentation.
 | 
			
		||||
		//! 
 | 
			
		||||
		//! A simple example:
 | 
			
		||||
		//! 
 | 
			
		||||
		//! If you want to play a sound, you may want to call the method
 | 
			
		||||
		//! ISoundEngine::play2D. You call
 | 
			
		||||
		//! ISound* mysound = engine->play2D("foobar.mp3", false, false true);
 | 
			
		||||
		//! If you no longer need the sound interface, call mysound->drop(). The 
 | 
			
		||||
		//! sound may still play on after this because the engine still has a reference
 | 
			
		||||
		//! to that sound, but you can be sure that it's memory will be released as soon
 | 
			
		||||
		//! the sound is no longer used.
 | 
			
		||||
		bool drop()
 | 
			
		||||
		{
 | 
			
		||||
			--ReferenceCounter;
 | 
			
		||||
 | 
			
		||||
			if (!ReferenceCounter)
 | 
			
		||||
			{
 | 
			
		||||
				delete this;
 | 
			
		||||
				return true;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	private:
 | 
			
		||||
 | 
			
		||||
		ik_s32	ReferenceCounter;
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
} // end namespace irr
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										194
									
								
								SQCSim2021/external/irrKlang-1.6.0/include/ik_ISound.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										194
									
								
								SQCSim2021/external/irrKlang-1.6.0/include/ik_ISound.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,194 @@
 | 
			
		||||
// Copyright (C) 2002-2018 Nikolaus Gebhardt
 | 
			
		||||
// This file is part of the "irrKlang" library.
 | 
			
		||||
// For conditions of distribution and use, see copyright notice in irrKlang.h
 | 
			
		||||
 | 
			
		||||
#ifndef __I_IRRKLANG_SOUND_H_INCLUDED__
 | 
			
		||||
#define __I_IRRKLANG_SOUND_H_INCLUDED__
 | 
			
		||||
 | 
			
		||||
#include "ik_IVirtualRefCounted.h"
 | 
			
		||||
#include "ik_ISoundEffectControl.h"
 | 
			
		||||
#include "ik_vec3d.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace irrklang
 | 
			
		||||
{
 | 
			
		||||
	class ISoundSource;
 | 
			
		||||
	class ISoundStopEventReceiver;
 | 
			
		||||
 | 
			
		||||
	//! Represents a sound which is currently played.
 | 
			
		||||
	/** The sound can be stopped, its volume or pan changed, effects added/removed
 | 
			
		||||
	and similar using this interface.
 | 
			
		||||
	Creating sounds is done using ISoundEngine::play2D() or ISoundEngine::play3D(). 
 | 
			
		||||
	More informations about the source of a sound can be obtained from the ISoundSource
 | 
			
		||||
	interface. */
 | 
			
		||||
	class ISound : public IVirtualRefCounted
 | 
			
		||||
	{
 | 
			
		||||
	public:
 | 
			
		||||
 | 
			
		||||
		//! returns source of the sound which stores the filename and other informations about that sound
 | 
			
		||||
		/** \return Returns the sound source poitner of this sound. May return 0 if the sound source
 | 
			
		||||
		has been removed.*/
 | 
			
		||||
		virtual ISoundSource* getSoundSource() = 0;
 | 
			
		||||
 | 
			
		||||
		//! returns if the sound is paused
 | 
			
		||||
		virtual void setIsPaused( bool paused = true) = 0;
 | 
			
		||||
 | 
			
		||||
		//! returns if the sound is paused
 | 
			
		||||
		virtual bool getIsPaused() = 0;
 | 
			
		||||
 | 
			
		||||
		//! Will stop the sound and free its resources.
 | 
			
		||||
		/** If you just want to pause the sound, use setIsPaused().
 | 
			
		||||
		After calling stop(), isFinished() will usually return true. 
 | 
			
		||||
		Be sure to also call ->drop() once you are done.*/
 | 
			
		||||
		virtual void stop() = 0;
 | 
			
		||||
 | 
			
		||||
		//! returns volume of the sound, a value between 0 (mute) and 1 (full volume).
 | 
			
		||||
		/** (this volume gets multiplied with the master volume of the sound engine
 | 
			
		||||
		and other parameters like distance to listener when played as 3d sound)  */
 | 
			
		||||
		virtual ik_f32 getVolume() = 0;
 | 
			
		||||
 | 
			
		||||
		//! sets the volume of the sound, a value between 0 (mute) and 1 (full volume).
 | 
			
		||||
		/** This volume gets multiplied with the master volume of the sound engine
 | 
			
		||||
		and other parameters like distance to listener when played as 3d sound.  */
 | 
			
		||||
		virtual void setVolume(ik_f32 volume) = 0;
 | 
			
		||||
 | 
			
		||||
		//! sets the pan of the sound. Takes a value between -1 and 1, 0 is center.
 | 
			
		||||
		virtual void setPan(ik_f32 pan) = 0;
 | 
			
		||||
 | 
			
		||||
		//! returns the pan of the sound. Takes a value between -1 and 1, 0 is center.
 | 
			
		||||
		virtual ik_f32 getPan() = 0;
 | 
			
		||||
 | 
			
		||||
		//! returns if the sound has been started to play looped
 | 
			
		||||
		virtual bool isLooped() = 0;
 | 
			
		||||
 | 
			
		||||
		//! changes the loop mode of the sound. 
 | 
			
		||||
		/** If the sound is playing looped and it is changed to not-looped, then it 
 | 
			
		||||
		will stop playing after the loop has finished. 
 | 
			
		||||
		If it is not looped and changed to looped, the sound will start repeating to be 
 | 
			
		||||
		played when it reaches its end. 
 | 
			
		||||
		Invoking this method will not have an effect when the sound already has stopped. */
 | 
			
		||||
		virtual void setIsLooped(bool looped) = 0;
 | 
			
		||||
 | 
			
		||||
		//! returns if the sound has finished playing.
 | 
			
		||||
		/** Don't mix this up with isPaused(). isFinished() returns if the sound has been
 | 
			
		||||
		finished playing. If it has, is maybe already have been removed from the playing list of the
 | 
			
		||||
		sound engine and calls to any other of the methods of ISound will not have any result.
 | 
			
		||||
		If you call stop() to a playing sound will result that this function will return true
 | 
			
		||||
		when invoked. */
 | 
			
		||||
		virtual bool isFinished() = 0;
 | 
			
		||||
 | 
			
		||||
		//! Sets the minimal distance if this is a 3D sound.
 | 
			
		||||
		/** Changes the distance at which the 3D sound stops getting louder. This works
 | 
			
		||||
		like this: As a listener approaches a 3D sound source, the sound gets louder.
 | 
			
		||||
		Past a certain point, it is not reasonable for the volume to continue to increase.
 | 
			
		||||
		Either the maximum (zero) has been reached, or the nature of the sound source
 | 
			
		||||
		imposes a logical limit. This is the minimum distance for the sound source.
 | 
			
		||||
		Similarly, the maximum distance for a sound source is the distance beyond
 | 
			
		||||
		which the sound does not get any quieter.
 | 
			
		||||
		The default minimum distance is 1, the default max distance is a huge number like 1000000000.0f. */
 | 
			
		||||
		virtual void setMinDistance(ik_f32 min) = 0;
 | 
			
		||||
 | 
			
		||||
		//! Returns the minimal distance if this is a 3D sound.
 | 
			
		||||
		/** See setMinDistance() for details. */
 | 
			
		||||
		virtual ik_f32 getMinDistance() = 0;
 | 
			
		||||
 | 
			
		||||
		//! Sets the maximal distance if this is a 3D sound.
 | 
			
		||||
		/** Changing this value is usually not necessary. Use setMinDistance() instead.
 | 
			
		||||
		Don't change this value if you don't know what you are doing: This value causes the sound
 | 
			
		||||
		to stop attenuating after it reaches the max distance. Most people think that this sets the
 | 
			
		||||
		volume of the sound to 0 after this distance, but this is not true. Only change the
 | 
			
		||||
		minimal distance (using for example setMinDistance()) to influence this.
 | 
			
		||||
		The maximum distance for a sound source is the distance beyond which the sound does not get any quieter.
 | 
			
		||||
		The default minimum distance is 1, the default max distance is a huge number like 1000000000.0f. */
 | 
			
		||||
		virtual void setMaxDistance(ik_f32 max) = 0;
 | 
			
		||||
 | 
			
		||||
		//! Returns the maximal distance if this is a 3D sound.
 | 
			
		||||
		/** See setMaxDistance() for details. */
 | 
			
		||||
		virtual ik_f32 getMaxDistance() = 0;
 | 
			
		||||
 | 
			
		||||
		//! sets the position of the sound in 3d space
 | 
			
		||||
		virtual void setPosition(vec3df position) = 0;
 | 
			
		||||
 | 
			
		||||
		//! returns the position of the sound in 3d space
 | 
			
		||||
		virtual vec3df getPosition() = 0;
 | 
			
		||||
 | 
			
		||||
		//! sets the position of the sound in 3d space, needed for Doppler effects.
 | 
			
		||||
		/** To use doppler effects use ISound::setVelocity to set a sounds velocity, 
 | 
			
		||||
		ISoundEngine::setListenerPosition() to set the listeners velocity and 
 | 
			
		||||
		ISoundEngine::setDopplerEffectParameters() to adjust two parameters influencing 
 | 
			
		||||
		the doppler effects intensity. */
 | 
			
		||||
		virtual void setVelocity(vec3df vel) = 0;
 | 
			
		||||
 | 
			
		||||
		//! returns the velocity of the sound in 3d space, needed for Doppler effects.
 | 
			
		||||
		/** To use doppler effects use ISound::setVelocity to set a sounds velocity, 
 | 
			
		||||
		ISoundEngine::setListenerPosition() to set the listeners velocity and 
 | 
			
		||||
		ISoundEngine::setDopplerEffectParameters() to adjust two parameters influencing 
 | 
			
		||||
		the doppler effects intensity. */
 | 
			
		||||
		virtual vec3df getVelocity() = 0;
 | 
			
		||||
 | 
			
		||||
		//! returns the current play position of the sound in milliseconds.
 | 
			
		||||
		/** \return Returns -1 if not implemented or possible for this sound for example
 | 
			
		||||
		because it already has been stopped and freed internally or similar. */
 | 
			
		||||
		virtual ik_u32 getPlayPosition() = 0;
 | 
			
		||||
 | 
			
		||||
		//! sets the current play position of the sound in milliseconds.
 | 
			
		||||
        /** \param pos Position in milliseconds. Must be between 0 and the value returned
 | 
			
		||||
		by getPlayPosition().
 | 
			
		||||
		\return Returns true successful. False is returned for example if the sound already finished
 | 
			
		||||
		playing and is stopped or the audio source is not seekable, for example if it 
 | 
			
		||||
		is an internet stream or a a file format not supporting seeking (a .MOD file for example).
 | 
			
		||||
		A file can be tested if it can bee seeking using ISoundSource::getIsSeekingSupported(). */
 | 
			
		||||
		virtual bool setPlayPosition(ik_u32 pos) = 0;
 | 
			
		||||
 | 
			
		||||
		//! Sets the playback speed (frequency) of the sound.
 | 
			
		||||
		/** Plays the sound at a higher or lower speed, increasing or decreasing its
 | 
			
		||||
		frequency which makes it sound lower or higher.
 | 
			
		||||
		Note that this feature is not available on all sound output drivers (it is on the
 | 
			
		||||
		DirectSound drivers at least), and it does not work together with the 
 | 
			
		||||
		'enableSoundEffects' parameter of ISoundEngine::play2D and ISoundEngine::play3D when
 | 
			
		||||
		using DirectSound.
 | 
			
		||||
		\param speed Factor of the speed increase or decrease. 2 is twice as fast, 
 | 
			
		||||
		0.5 is only half as fast. The default is 1.0.
 | 
			
		||||
		\return Returns true if sucessful, false if not. The current sound driver might not
 | 
			
		||||
		support changing the playBack speed, or the sound was started with the 
 | 
			
		||||
		'enableSoundEffects' parameter. */
 | 
			
		||||
		virtual bool setPlaybackSpeed(ik_f32 speed = 1.0f) = 0;
 | 
			
		||||
 | 
			
		||||
		//! Returns the playback speed set by setPlaybackSpeed(). Default: 1.0f.
 | 
			
		||||
		/** See setPlaybackSpeed() for details */
 | 
			
		||||
		virtual ik_f32 getPlaybackSpeed() = 0;
 | 
			
		||||
 | 
			
		||||
		//! returns the play length of the sound in milliseconds.
 | 
			
		||||
		/** Returns -1 if not known for this sound for example because its decoder
 | 
			
		||||
		does not support length reporting or it is a file stream of unknown size.
 | 
			
		||||
		Note: You can also use ISoundSource::getPlayLength() to get the length of 
 | 
			
		||||
		a sound without actually needing to play it. */
 | 
			
		||||
		virtual ik_u32 getPlayLength() = 0;
 | 
			
		||||
 | 
			
		||||
		//! Returns the sound effect control interface for this sound.
 | 
			
		||||
		/** Sound effects such as Chorus, Distorsions, Echo, Reverb and similar can
 | 
			
		||||
		be controlled using this. The interface pointer is only valid as long as the ISound pointer is valid.
 | 
			
		||||
		If the ISound pointer gets dropped (IVirtualRefCounted::drop()), the ISoundEffects
 | 
			
		||||
		may not be used any more. 
 | 
			
		||||
		\return Returns a pointer to the sound effects interface if available. The sound
 | 
			
		||||
		has to be started via ISoundEngine::play2D() or ISoundEngine::play3D(),
 | 
			
		||||
		with the flag enableSoundEffects=true, otherwise 0 will be returned. Note that
 | 
			
		||||
		if the output driver does not support sound effects, 0 will be returned as well.*/
 | 
			
		||||
		virtual ISoundEffectControl* getSoundEffectControl() = 0;
 | 
			
		||||
 | 
			
		||||
		//! Sets the sound stop event receiver, an interface which gets called if a sound has finished playing.
 | 
			
		||||
		/** This event is guaranteed to be called when the sound or sound stream is finished,
 | 
			
		||||
		either because the sound reached its playback end, its sound source was removed,
 | 
			
		||||
		ISoundEngine::stopAllSounds() has been called or the whole engine was deleted.
 | 
			
		||||
		There is an example on how to use events in irrklang at @ref events .
 | 
			
		||||
		\param receiver Interface to a user implementation of the sound receiver. This interface
 | 
			
		||||
		should be as long valid as the sound exists or another stop event receiver is set.
 | 
			
		||||
		Set this to null to set no sound stop event receiver.
 | 
			
		||||
		\param userData: A iser data pointer, can be null. */
 | 
			
		||||
		virtual void setSoundStopEventReceiver(ISoundStopEventReceiver* reciever, void* userData=0) = 0;
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
} // end namespace irrklang
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										41
									
								
								SQCSim2021/external/irrKlang-1.6.0/include/ik_ISoundDeviceList.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								SQCSim2021/external/irrKlang-1.6.0/include/ik_ISoundDeviceList.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,41 @@
 | 
			
		||||
// Copyright (C) 2002-2018 Nikolaus Gebhardt
 | 
			
		||||
// This file is part of the "irrKlang" library.
 | 
			
		||||
// For conditions of distribution and use, see copyright notice in irrKlang.h
 | 
			
		||||
 | 
			
		||||
#ifndef __I_IRRKLANG_SOUND_DEVICE_LIST_H_INCLUDED__
 | 
			
		||||
#define __I_IRRKLANG_SOUND_DEVICE_LIST_H_INCLUDED__
 | 
			
		||||
 | 
			
		||||
#include "ik_IRefCounted.h"
 | 
			
		||||
 | 
			
		||||
namespace irrklang
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
//!	A list of sound devices for a sound driver. Use irrklang::createSoundDeviceList() to create this list.
 | 
			
		||||
/** The function createIrrKlangDevice() has a parameter 'deviceID' which takes the value returned by
 | 
			
		||||
ISoundDeviceList::getDeviceID() and uses that device then. 
 | 
			
		||||
The list of devices in ISoundDeviceList usually also includes the default device which is the first
 | 
			
		||||
entry and has an empty deviceID string ("") and the description "default device". 
 | 
			
		||||
There is some example code on how to use the ISoundDeviceList in @ref enumeratingDevices.*/
 | 
			
		||||
class ISoundDeviceList : public IRefCounted
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
 | 
			
		||||
	//! Returns amount of enumerated devices in the list.
 | 
			
		||||
	virtual ik_s32 getDeviceCount() = 0;
 | 
			
		||||
 | 
			
		||||
	//! Returns the ID of the device. Use this string to identify this device in createIrrKlangDevice().
 | 
			
		||||
	/** \param index Index of the device, a value between 0 and ISoundDeviceList::getDeviceCount()-1. 
 | 
			
		||||
	\return Returns a pointer to a string identifying the device. The string will only as long valid 
 | 
			
		||||
	as long as the ISoundDeviceList exists. */
 | 
			
		||||
	virtual const char* getDeviceID(ik_s32 index) = 0;
 | 
			
		||||
 | 
			
		||||
	//! Returns description of the device.
 | 
			
		||||
	/** \param index Index of the device, a value between 0 and ISoundDeviceList::getDeviceCount()-1. */
 | 
			
		||||
	virtual const char* getDeviceDescription(ik_s32 index) = 0;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} // end namespace irrklang
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										243
									
								
								SQCSim2021/external/irrKlang-1.6.0/include/ik_ISoundEffectControl.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										243
									
								
								SQCSim2021/external/irrKlang-1.6.0/include/ik_ISoundEffectControl.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,243 @@
 | 
			
		||||
// Copyright (C) 2002-2018 Nikolaus Gebhardt
 | 
			
		||||
// This file is part of the "irrKlang" library.
 | 
			
		||||
// For conditions of distribution and use, see copyright notice in irrKlang.h
 | 
			
		||||
 | 
			
		||||
#ifndef __I_IRRKLANG_SOUND_EFFECT_CONTROL_H_INCLUDED__
 | 
			
		||||
#define __I_IRRKLANG_SOUND_EFFECT_CONTROL_H_INCLUDED__
 | 
			
		||||
 | 
			
		||||
#include "ik_IVirtualRefCounted.h"
 | 
			
		||||
#include "ik_vec3d.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace irrklang
 | 
			
		||||
{
 | 
			
		||||
	//! Interface to control the active sound effects (echo, reverb,...) of an ISound object, a playing sound.
 | 
			
		||||
	/** Sound effects such as chorus, distorsions, echo, reverb and similar can
 | 
			
		||||
	be controlled using this. An instance of this interface can be obtained via
 | 
			
		||||
	ISound::getSoundEffectControl(). The sound containing this interface has to be started via 
 | 
			
		||||
	ISoundEngine::play2D() or ISoundEngine::play3D() with the flag enableSoundEffects=true, 
 | 
			
		||||
	otherwise no acccess to this interface will be available.
 | 
			
		||||
	For the DirectSound driver, these are effects available since DirectSound8. For most 
 | 
			
		||||
	effects, sounds should have a sample rate of 44 khz and should be at least
 | 
			
		||||
	150 milli seconds long for optimal quality when using the DirectSound driver.
 | 
			
		||||
	Note that the interface pointer is only valid as long as
 | 
			
		||||
	the ISound pointer is valid. If the ISound pointer gets dropped (IVirtualRefCounted::drop()),
 | 
			
		||||
	the ISoundEffects may not be used any more. */
 | 
			
		||||
	class ISoundEffectControl
 | 
			
		||||
	{
 | 
			
		||||
	public:
 | 
			
		||||
 | 
			
		||||
		//! Disables all active sound effects
 | 
			
		||||
		virtual void disableAllEffects() = 0;
 | 
			
		||||
 | 
			
		||||
		//! Enables the chorus sound effect or adjusts its values.
 | 
			
		||||
		/** Chorus is a voice-doubling effect created by echoing the
 | 
			
		||||
		original sound with a slight delay and slightly modulating the delay of the echo. 
 | 
			
		||||
		If this sound effect is already enabled, calling this only modifies the parameters of the active effect.
 | 
			
		||||
		\param fWetDryMix Ratio of wet (processed) signal to dry (unprocessed) signal. Minimal Value:0, Maximal Value:100.0f;
 | 
			
		||||
		\param fDepth Percentage by which the delay time is modulated by the low-frequency oscillator, in hundredths of a percentage point. Minimal Value:0, Maximal Value:100.0f;
 | 
			
		||||
		\param fFeedback Percentage of output signal to feed back into the effect's input. Minimal Value:-99, Maximal Value:99.0f;
 | 
			
		||||
		\param fFrequency Frequency of the LFO. Minimal Value:0, Maximal Value:10.0f;
 | 
			
		||||
		\param sinusWaveForm True for sinus wave form, false for triangle.
 | 
			
		||||
		\param fDelay Number of milliseconds the input is delayed before it is played back. Minimal Value:0, Maximal Value:20.0f;
 | 
			
		||||
		\param lPhase Phase differential between left and right LFOs. Possible values:
 | 
			
		||||
			-180, -90, 0, 90, 180
 | 
			
		||||
		\return Returns true if successful. */
 | 
			
		||||
		virtual bool enableChorusSoundEffect(ik_f32 fWetDryMix = 50,
 | 
			
		||||
											ik_f32 fDepth = 10,
 | 
			
		||||
											ik_f32 fFeedback = 25,
 | 
			
		||||
											ik_f32 fFrequency = 1.1,
 | 
			
		||||
											bool sinusWaveForm = true,
 | 
			
		||||
											ik_f32 fDelay = 16,
 | 
			
		||||
											ik_s32 lPhase = 90) = 0;
 | 
			
		||||
 | 
			
		||||
		//! removes the sound effect from the sound
 | 
			
		||||
		virtual void disableChorusSoundEffect() = 0;
 | 
			
		||||
 | 
			
		||||
		//! returns if the sound effect is active on the sound
 | 
			
		||||
		virtual bool isChorusSoundEffectEnabled() = 0;
 | 
			
		||||
 | 
			
		||||
		//! Enables the Compressor sound effect or adjusts its values.
 | 
			
		||||
		/** Compressor is a reduction in the fluctuation of a signal above a certain amplitude. 
 | 
			
		||||
		If this sound effect is already enabled, calling this only modifies the parameters of the active effect.
 | 
			
		||||
		\param fGain Output gain of signal after Compressor. Minimal Value:-60, Maximal Value:60.0f;
 | 
			
		||||
		\param fAttack Time before Compressor reaches its full value. Minimal Value:0.01, Maximal Value:500.0f;
 | 
			
		||||
		\param fRelease Speed at which Compressor is stopped after input drops below fThreshold. Minimal Value:50, Maximal Value:3000.0f;
 | 
			
		||||
		\param fThreshold Point at which Compressor begins, in decibels. Minimal Value:-60, Maximal Value:0.0f;
 | 
			
		||||
		\param fRatio Compressor ratio. Minimal Value:1, Maximal Value:100.0f;
 | 
			
		||||
		\param fPredelay Time after lThreshold is reached before attack phase is started, in milliseconds. Minimal Value:0, Maximal Value:4.0f;
 | 
			
		||||
		\return Returns true if successful. */
 | 
			
		||||
		virtual bool enableCompressorSoundEffect( ik_f32 fGain = 0,
 | 
			
		||||
												ik_f32 fAttack = 10,
 | 
			
		||||
												ik_f32 fRelease = 200,
 | 
			
		||||
												ik_f32 fThreshold = -20,
 | 
			
		||||
												ik_f32 fRatio = 3,
 | 
			
		||||
												ik_f32 fPredelay = 4) = 0;
 | 
			
		||||
 | 
			
		||||
		//! removes the sound effect from the sound
 | 
			
		||||
		virtual void disableCompressorSoundEffect() = 0;
 | 
			
		||||
 | 
			
		||||
		//! returns if the sound effect is active on the sound
 | 
			
		||||
		virtual bool isCompressorSoundEffectEnabled() = 0;
 | 
			
		||||
 | 
			
		||||
		//! Enables the Distortion sound effect or adjusts its values.
 | 
			
		||||
		/** Distortion is achieved by adding harmonics to the signal in such a way that,
 | 
			
		||||
		If this sound effect is already enabled, calling this only modifies the parameters of the active effect.
 | 
			
		||||
		as the level increases, the top of the waveform becomes squared off or clipped.
 | 
			
		||||
		\param fGain Amount of signal change after distortion. Minimal Value:-60, Maximal Value:0;
 | 
			
		||||
		\param fEdge Percentage of distortion intensity. Minimal Value:0, Maximal Value:100;
 | 
			
		||||
		\param fPostEQCenterFrequency Center frequency of harmonic content addition. Minimal Value:100, Maximal Value:8000;
 | 
			
		||||
		\param fPostEQBandwidth Width of frequency band that determines range of harmonic content addition. Minimal Value:100, Maximal Value:8000;
 | 
			
		||||
		\param fPreLowpassCutoff Filter cutoff for high-frequency harmonics attenuation. Minimal Value:100, Maximal Value:8000;
 | 
			
		||||
		\return Returns true if successful. */
 | 
			
		||||
		virtual bool enableDistortionSoundEffect(ik_f32 fGain = -18,
 | 
			
		||||
												ik_f32 fEdge = 15,
 | 
			
		||||
												ik_f32 fPostEQCenterFrequency = 2400,
 | 
			
		||||
												ik_f32 fPostEQBandwidth = 2400,
 | 
			
		||||
												ik_f32 fPreLowpassCutoff = 8000) = 0;
 | 
			
		||||
 | 
			
		||||
		//! removes the sound effect from the sound
 | 
			
		||||
		virtual void disableDistortionSoundEffect() = 0;
 | 
			
		||||
 | 
			
		||||
		//! returns if the sound effect is active on the sound
 | 
			
		||||
		virtual bool isDistortionSoundEffectEnabled() = 0;
 | 
			
		||||
 | 
			
		||||
		//! Enables the Echo sound effect or adjusts its values.
 | 
			
		||||
		/** An echo effect causes an entire sound to be repeated after a fixed delay.
 | 
			
		||||
		If this sound effect is already enabled, calling this only modifies the parameters of the active effect.
 | 
			
		||||
		\param fWetDryMix Ratio of wet (processed) signal to dry (unprocessed) signal. Minimal Value:0, Maximal Value:100.0f;
 | 
			
		||||
		\param fFeedback Percentage of output fed back into input. Minimal Value:0, Maximal Value:100.0f;
 | 
			
		||||
		\param fLeftDelay Delay for left channel, in milliseconds. Minimal Value:1, Maximal Value:2000.0f;
 | 
			
		||||
		\param fRightDelay Delay for right channel, in milliseconds. Minimal Value:1, Maximal Value:2000.0f;
 | 
			
		||||
		\param lPanDelay Value that specifies whether to swap left and right delays with each successive echo. Minimal Value:0, Maximal Value:1;
 | 
			
		||||
		\return Returns true if successful. */
 | 
			
		||||
		virtual bool enableEchoSoundEffect(ik_f32 fWetDryMix = 50,
 | 
			
		||||
											ik_f32 fFeedback = 50,
 | 
			
		||||
											ik_f32 fLeftDelay = 500,
 | 
			
		||||
											ik_f32 fRightDelay = 500,
 | 
			
		||||
											ik_s32 lPanDelay = 0) = 0;
 | 
			
		||||
 | 
			
		||||
		//! removes the sound effect from the sound
 | 
			
		||||
		virtual void disableEchoSoundEffect() = 0;
 | 
			
		||||
 | 
			
		||||
		//! returns if the sound effect is active on the sound
 | 
			
		||||
		virtual bool isEchoSoundEffectEnabled() = 0;
 | 
			
		||||
 | 
			
		||||
		//! Enables the Flanger sound effect or adjusts its values.
 | 
			
		||||
		/** Flange is an echo effect in which the delay between the original 
 | 
			
		||||
		signal and its echo is very short and varies over time. The result is 
 | 
			
		||||
		sometimes referred to as a sweeping sound. The term flange originated
 | 
			
		||||
		with the practice of grabbing the flanges of a tape reel to change the speed. 
 | 
			
		||||
		If this sound effect is already enabled, calling this only modifies the parameters of the active effect.
 | 
			
		||||
		\param fWetDryMix Ratio of wet (processed) signal to dry (unprocessed) signal. Minimal Value:0, Maximal Value:100.0f;
 | 
			
		||||
		\param fDepth Percentage by which the delay time is modulated by the low-frequency oscillator, in hundredths of a percentage point. Minimal Value:0, Maximal Value:100.0f;
 | 
			
		||||
		\param fFeedback Percentage of output signal to feed back into the effect's input. Minimal Value:-99, Maximal Value:99.0f;
 | 
			
		||||
		\param fFrequency Frequency of the LFO. Minimal Value:0, Maximal Value:10.0f;
 | 
			
		||||
		\param triangleWaveForm True for triangle wave form, false for square.
 | 
			
		||||
		\param fDelay Number of milliseconds the input is delayed before it is played back. Minimal Value:0, Maximal Value:20.0f;
 | 
			
		||||
		\param lPhase Phase differential between left and right LFOs. Possible values:
 | 
			
		||||
			-180, -90, 0, 90, 180
 | 
			
		||||
		\return Returns true if successful. */
 | 
			
		||||
		virtual bool enableFlangerSoundEffect(ik_f32 fWetDryMix = 50,
 | 
			
		||||
											ik_f32 fDepth = 100,
 | 
			
		||||
											ik_f32 fFeedback = -50,
 | 
			
		||||
											ik_f32 fFrequency = 0.25f,
 | 
			
		||||
											bool triangleWaveForm = true,
 | 
			
		||||
											ik_f32 fDelay = 2,
 | 
			
		||||
											ik_s32 lPhase = 0) = 0;
 | 
			
		||||
 | 
			
		||||
		//! removes the sound effect from the sound
 | 
			
		||||
		virtual void disableFlangerSoundEffect() = 0;
 | 
			
		||||
 | 
			
		||||
		//! returns if the sound effect is active on the sound
 | 
			
		||||
		virtual bool isFlangerSoundEffectEnabled() = 0;
 | 
			
		||||
 | 
			
		||||
		//! Enables the Gargle sound effect or adjusts its values.
 | 
			
		||||
		/** The gargle effect modulates the amplitude of the signal. 
 | 
			
		||||
		If this sound effect is already enabled, calling this only modifies the parameters of the active effect.
 | 
			
		||||
		\param rateHz Rate of modulation, in Hertz. Minimal Value:1, Maximal Value:1000
 | 
			
		||||
		\param sinusWaveForm True for sinus wave form, false for triangle.
 | 
			
		||||
		\return Returns true if successful. */
 | 
			
		||||
		virtual bool enableGargleSoundEffect(ik_s32 rateHz = 20, bool sinusWaveForm = true) = 0;
 | 
			
		||||
 | 
			
		||||
		//! removes the sound effect from the sound
 | 
			
		||||
		virtual void disableGargleSoundEffect() = 0;
 | 
			
		||||
 | 
			
		||||
		//! returns if the sound effect is active on the sound
 | 
			
		||||
		virtual bool isGargleSoundEffectEnabled() = 0;
 | 
			
		||||
 | 
			
		||||
		//! Enables the Interactive 3D Level 2 reverb sound effect or adjusts its values.
 | 
			
		||||
		/** An implementation of the listener properties in the I3DL2 specification. Source properties are not supported.
 | 
			
		||||
		If this sound effect is already enabled, calling this only modifies the parameters of the active effect.
 | 
			
		||||
		\param lRoom Attenuation of the room effect, in millibels (mB). Interval: [-10000, 0] Default: -1000 mB
 | 
			
		||||
		\param lRoomHF Attenuation of the room high-frequency effect. Interval: [-10000, 0]      default: 0 mB
 | 
			
		||||
		\param flRoomRolloffFactor Rolloff factor for the reflected signals. Interval: [0.0, 10.0]      default: 0.0
 | 
			
		||||
		\param flDecayTime Decay time, in seconds. Interval: [0.1, 20.0]      default: 1.49s
 | 
			
		||||
		\param flDecayHFRatio Ratio of the decay time at high frequencies to the decay time at low frequencies. Interval: [0.1, 2.0]       default: 0.83
 | 
			
		||||
		\param lReflections Attenuation of early reflections relative to lRoom. Interval: [-10000, 1000]   default: -2602 mB
 | 
			
		||||
		\param flReflectionsDelay Delay time of the first reflection relative to the direct path in seconds. Interval: [0.0, 0.3]       default: 0.007 s
 | 
			
		||||
		\param lReverb Attenuation of late reverberation relative to lRoom, in mB. Interval: [-10000, 2000]   default: 200 mB
 | 
			
		||||
		\param flReverbDelay Time limit between the early reflections and the late reverberation relative to the time of the first reflection. Interval: [0.0, 0.1]       default: 0.011 s
 | 
			
		||||
		\param flDiffusion Echo density in the late reverberation decay in percent. Interval: [0.0, 100.0]     default: 100.0 %
 | 
			
		||||
		\param flDensity Modal density in the late reverberation decay, in percent. Interval: [0.0, 100.0]     default: 100.0 %
 | 
			
		||||
		\param flHFReference Reference high frequency, in hertz. Interval: [20.0, 20000.0]  default: 5000.0 Hz 
 | 
			
		||||
		\return Returns true if successful. */
 | 
			
		||||
		virtual bool enableI3DL2ReverbSoundEffect(ik_s32 lRoom = -1000,
 | 
			
		||||
												ik_s32 lRoomHF = -100,
 | 
			
		||||
												ik_f32 flRoomRolloffFactor = 0,
 | 
			
		||||
												ik_f32 flDecayTime = 1.49f,
 | 
			
		||||
												ik_f32 flDecayHFRatio = 0.83f,
 | 
			
		||||
												ik_s32 lReflections = -2602,
 | 
			
		||||
												ik_f32 flReflectionsDelay = 0.007f,
 | 
			
		||||
												ik_s32 lReverb = 200,
 | 
			
		||||
												ik_f32 flReverbDelay = 0.011f,
 | 
			
		||||
												ik_f32 flDiffusion = 100.0f,
 | 
			
		||||
												ik_f32 flDensity = 100.0f,
 | 
			
		||||
												ik_f32 flHFReference = 5000.0f ) = 0;
 | 
			
		||||
 | 
			
		||||
		//! removes the sound effect from the sound
 | 
			
		||||
		virtual void disableI3DL2ReverbSoundEffect() = 0;
 | 
			
		||||
 | 
			
		||||
		//! returns if the sound effect is active on the sound
 | 
			
		||||
		virtual bool isI3DL2ReverbSoundEffectEnabled() = 0;
 | 
			
		||||
 | 
			
		||||
		//! Enables the ParamEq sound effect or adjusts its values.
 | 
			
		||||
		/** Parametric equalizer amplifies or attenuates signals of a given frequency. 
 | 
			
		||||
		If this sound effect is already enabled, calling this only modifies the parameters of the active effect.
 | 
			
		||||
		\param fCenter Center frequency, in hertz, The default value is 8000. Minimal Value:80, Maximal Value:16000.0f
 | 
			
		||||
		\param fBandwidth Bandwidth, in semitones, The default value is 12. Minimal Value:1.0f, Maximal Value:36.0f
 | 
			
		||||
		\param fGain Gain, default value is 0. Minimal Value:-15.0f, Maximal Value:15.0f
 | 
			
		||||
		\return Returns true if successful. */
 | 
			
		||||
		virtual bool enableParamEqSoundEffect(ik_f32 fCenter = 8000,
 | 
			
		||||
											ik_f32 fBandwidth = 12,
 | 
			
		||||
											ik_f32 fGain = 0) = 0;
 | 
			
		||||
 | 
			
		||||
		//! removes the sound effect from the sound
 | 
			
		||||
		virtual void disableParamEqSoundEffect() = 0;
 | 
			
		||||
 | 
			
		||||
		//! returns if the sound effect is active on the sound
 | 
			
		||||
		virtual bool isParamEqSoundEffectEnabled() = 0;
 | 
			
		||||
 | 
			
		||||
		//! Enables the Waves Reverb sound effect or adjusts its values.
 | 
			
		||||
		/** \param fInGain Input gain of signal, in decibels (dB). Min/Max: [-96.0,0.0] Default: 0.0 dB.
 | 
			
		||||
		If this sound effect is already enabled, calling this only modifies the parameters of the active effect.
 | 
			
		||||
		\param fReverbMix Reverb mix, in dB. Min/Max: [-96.0,0.0] Default: 0.0 dB
 | 
			
		||||
		\param fReverbTime Reverb time, in milliseconds. Min/Max: [0.001,3000.0] Default: 1000.0 ms
 | 
			
		||||
		\param fHighFreqRTRatio High-frequency reverb time ratio. Min/Max: [0.001,0.999] Default: 0.001 
 | 
			
		||||
		\return Returns true if successful. */
 | 
			
		||||
		virtual bool enableWavesReverbSoundEffect(ik_f32 fInGain = 0,
 | 
			
		||||
											ik_f32 fReverbMix = 0,
 | 
			
		||||
											ik_f32 fReverbTime = 1000,
 | 
			
		||||
											ik_f32 fHighFreqRTRatio = 0.001f) = 0;
 | 
			
		||||
 | 
			
		||||
		//! removes the sound effect from the sound
 | 
			
		||||
		virtual void disableWavesReverbSoundEffect() = 0;
 | 
			
		||||
 | 
			
		||||
		//! returns if the sound effect is active on the sound
 | 
			
		||||
		virtual bool isWavesReverbSoundEffectEnabled() = 0;
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
} // end namespace irrklang
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										436
									
								
								SQCSim2021/external/irrKlang-1.6.0/include/ik_ISoundEngine.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										436
									
								
								SQCSim2021/external/irrKlang-1.6.0/include/ik_ISoundEngine.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,436 @@
 | 
			
		||||
// Copyright (C) 2002-2018 Nikolaus Gebhardt
 | 
			
		||||
// This file is part of the "irrKlang" library.
 | 
			
		||||
// For conditions of distribution and use, see copyright notice in irrKlang.h
 | 
			
		||||
 | 
			
		||||
#ifndef __I_IRRKLANG_SOUND_ENGINE_H_INCLUDED__
 | 
			
		||||
#define __I_IRRKLANG_SOUND_ENGINE_H_INCLUDED__
 | 
			
		||||
 | 
			
		||||
#include "ik_IRefCounted.h"
 | 
			
		||||
#include "ik_vec3d.h"
 | 
			
		||||
#include "ik_ISoundSource.h"
 | 
			
		||||
#include "ik_ISound.h"
 | 
			
		||||
#include "ik_EStreamModes.h"
 | 
			
		||||
#include "ik_IFileFactory.h"
 | 
			
		||||
#include "ik_ISoundMixedOutputReceiver.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace irrklang
 | 
			
		||||
{
 | 
			
		||||
	class IAudioStreamLoader;
 | 
			
		||||
	struct SInternalAudioInterface;
 | 
			
		||||
 | 
			
		||||
	//! Interface to the sound engine, for playing 3d and 2d sound and music.
 | 
			
		||||
	/** This is the main interface of irrKlang. You usually would create this using
 | 
			
		||||
	the createIrrKlangDevice() function. 
 | 
			
		||||
	*/
 | 
			
		||||
	class ISoundEngine : public virtual irrklang::IRefCounted
 | 
			
		||||
	{
 | 
			
		||||
	public:
 | 
			
		||||
 | 
			
		||||
		//! returns the name of the sound driver, like 'ALSA' for the alsa device
 | 
			
		||||
		/** Possible returned strings are "NULL", "ALSA", "CoreAudio", "winMM", 
 | 
			
		||||
		"DirectSound" and "DirectSound8". */
 | 
			
		||||
		virtual const char* getDriverName() = 0;
 | 
			
		||||
 | 
			
		||||
		//! loads a sound source (if not loaded already) from a file and plays it.
 | 
			
		||||
		/** \param sourceFileName Filename of sound, like "sounds/test.wav" or "foobar.ogg".
 | 
			
		||||
		 \param playLooped plays the sound in loop mode. If set to 'false', the sound is played once, then stopped and deleted from the internal playing list. Calls to
 | 
			
		||||
		 ISound have no effect after such a non looped sound has been stopped automaticly.
 | 
			
		||||
		 \param startPaused starts the sound paused. This implies that track=true. Use this if you want to modify some of the playing
 | 
			
		||||
		 parameters before the sound actually plays. Usually you would set this parameter to true, then use the ISound interface to
 | 
			
		||||
		 modify some of the sound parameters and then call ISound::setPaused(false);
 | 
			
		||||
		 Note: You need to call ISound::drop() when setting this parameter to true and you don't need the ISound
 | 
			
		||||
		 object anymore. See 'return' for details.
 | 
			
		||||
		 \param track Makes it possible to track the sound. Causes the method to return an ISound interface. See 'return' for details.
 | 
			
		||||
		 \param streamMode Specifies if the file should be streamed or loaded completely into memory for playing.
 | 
			
		||||
		 ESM_AUTO_DETECT sets this to autodetection. Note: if the sound has been loaded or played before into the
 | 
			
		||||
		 engine, this parameter has no effect.
 | 
			
		||||
		 \param enableSoundEffects Makes it possible to use sound effects such as chorus, distorsions, echo, 
 | 
			
		||||
		 reverb and similar for this sound. Sound effects can then be controlled via ISound::getSoundEffectControl().
 | 
			
		||||
		 Only enable if necessary. 
 | 
			
		||||
		 \return Only returns a pointer to an ISound if the parameters 'track', 'startPaused' or 
 | 
			
		||||
		 'enableSoundEffects' have been	 set to true. Note: if this method returns an ISound as result, 
 | 
			
		||||
		 you HAVE to call ISound::drop() after you don't need the ISound interface anymore. Otherwise this 
 | 
			
		||||
		 will cause memory waste. This method also may return 0 altough 'track', 'startPaused' or 
 | 
			
		||||
		 'enableSoundEffects' have been set to true, if the sound could not be played.*/
 | 
			
		||||
		virtual ISound* play2D(const char* soundFileName, 
 | 
			
		||||
							   bool playLooped = false,
 | 
			
		||||
							   bool startPaused = false, 
 | 
			
		||||
							   bool track = false,
 | 
			
		||||
							   E_STREAM_MODE streamMode = ESM_AUTO_DETECT,
 | 
			
		||||
							   bool enableSoundEffects = false) = 0;
 | 
			
		||||
 | 
			
		||||
		//! Plays a sound source as 2D sound with its default settings stored in ISoundSource.
 | 
			
		||||
		/** An ISoundSource object will be created internally when playing a sound the first time,
 | 
			
		||||
		or can be added with getSoundSource().
 | 
			
		||||
		\param source The sound source, specifiying sound file source and default settings for this file.
 | 
			
		||||
		Use the other ISoundEngine::play2D() overloads if you want to specify a filename string instead of this.
 | 
			
		||||
		\param playLooped plays the sound in loop mode. If set to 'false', the sound is played once, then stopped and deleted from the internal playing list. Calls to
 | 
			
		||||
		 ISound have no effect after such a non looped sound has been stopped automaticly.
 | 
			
		||||
		\param startPaused starts the sound paused. This implies that track=true. Use this if you want to modify some of the playing
 | 
			
		||||
		 parameters before the sound actually plays. Usually you would set this parameter to true, then use the ISound interface to
 | 
			
		||||
		 modify some of the sound parameters and then call ISound::setPaused(false);
 | 
			
		||||
		 Note: You need to call ISound::drop() when setting this parameter to true and you don't need the ISound
 | 
			
		||||
		 object anymore. See 'return' for details.
 | 
			
		||||
		 \param track Makes it possible to track the sound. Causes the method to return an ISound interface. See 'return' for details.
 | 
			
		||||
		 \param enableSoundEffects Makes it possible to use sound effects such as chorus, distorsions, echo, 
 | 
			
		||||
		 reverb and similar for this sound. Sound effects can then be controlled via ISound::getSoundEffectControl().
 | 
			
		||||
		 Only enable if necessary. 
 | 
			
		||||
		 \return Only returns a pointer to an ISound if the parameters 'track', 'startPaused' or 
 | 
			
		||||
		 'enableSoundEffects' have been	 set to true. Note: if this method returns an ISound as result, 
 | 
			
		||||
		 you HAVE to call ISound::drop() after you don't need the ISound interface anymore. Otherwise this 
 | 
			
		||||
		 will cause memory waste. This method also may return 0 altough 'track', 'startPaused' or 
 | 
			
		||||
		 'enableSoundEffects' have been set to true, if the sound could not be played.*/
 | 
			
		||||
		virtual ISound* play2D(ISoundSource* source, 
 | 
			
		||||
							   bool playLooped = false,
 | 
			
		||||
							   bool startPaused = false, 
 | 
			
		||||
							   bool track = false,
 | 
			
		||||
							   bool enableSoundEffects = false) = 0;
 | 
			
		||||
 | 
			
		||||
		//! Loads a sound source (if not loaded already) from a file and plays it as 3D sound.
 | 
			
		||||
		/** There is some example code on how to work with 3D sound at @ref sound3d.
 | 
			
		||||
		\param sourceFileName Filename of sound, like "sounds/test.wav" or "foobar.ogg".
 | 
			
		||||
		 \param pos Position of the 3D sound.
 | 
			
		||||
		 \param playLooped plays the sound in loop mode. If set to 'false', the sound is played once, then stopped and deleted from the internal playing list. Calls to
 | 
			
		||||
		 ISound have no effect after such a non looped sound has been stopped automaticly.
 | 
			
		||||
		 \param startPaused starts the sound paused. This implies that track=true. Use this if you want to modify some of the playing
 | 
			
		||||
		 parameters before the sound actually plays. Usually you would set this parameter to true, then use the ISound interface to
 | 
			
		||||
		 modify some of the sound parameters and then call ISound::setPaused(false);
 | 
			
		||||
		 Note: You need to call ISound::drop() when setting this parameter to true and you don't need the ISound
 | 
			
		||||
		 object anymore. See 'return' for details.
 | 
			
		||||
		 \param track Makes it possible to track the sound. Causes the method to return an ISound interface. See 'return' for details.
 | 
			
		||||
 		 \param streamMode Specifies if the file should be streamed or loaded completely into memory for playing.
 | 
			
		||||
		 ESM_AUTO_DETECT sets this to autodetection. Note: if the sound has been loaded or played before into the
 | 
			
		||||
		 engine, this parameter has no effect.
 | 
			
		||||
		 \param enableSoundEffects Makes it possible to use sound effects such as chorus, distorsions, echo, 
 | 
			
		||||
		 reverb and similar for this sound. Sound effects can then be controlled via ISound::getSoundEffectControl().
 | 
			
		||||
		 Only enable if necessary. 
 | 
			
		||||
		 \return Only returns a pointer to an ISound if the parameters 'track', 'startPaused' or 
 | 
			
		||||
		 'enableSoundEffects' have been	 set to true. Note: if this method returns an ISound as result, 
 | 
			
		||||
		 you HAVE to call ISound::drop() after you don't need the ISound interface anymore. Otherwise this 
 | 
			
		||||
		 will cause memory waste. This method also may return 0 altough 'track', 'startPaused' or 
 | 
			
		||||
		 'enableSoundEffects' have been set to true, if the sound could not be played.*/
 | 
			
		||||
		virtual ISound* play3D(const char* soundFileName, vec3df pos,
 | 
			
		||||
							   bool playLooped = false, 
 | 
			
		||||
							   bool startPaused = false,
 | 
			
		||||
							   bool track = false, 
 | 
			
		||||
							   E_STREAM_MODE streamMode = ESM_AUTO_DETECT,
 | 
			
		||||
							   bool enableSoundEffects = false) = 0;
 | 
			
		||||
 | 
			
		||||
		//! Plays a sound source as 3D sound with its default settings stored in ISoundSource.
 | 
			
		||||
		/** An ISoundSource object will be created internally when playing a sound the first time,
 | 
			
		||||
		or can be added with getSoundSource(). There is some example code on how to work with 3D sound @ref sound3d.
 | 
			
		||||
		\param source The sound source, specifiying sound file source and default settings for this file.
 | 
			
		||||
		Use the other ISoundEngine::play2D() overloads if you want to specify a filename string instead of this.
 | 
			
		||||
		\param pos Position of the 3D sound.
 | 
			
		||||
		\param playLooped plays the sound in loop mode. If set to 'false', the sound is played once, then stopped and deleted from the internal playing list. Calls to
 | 
			
		||||
		 ISound have no effect after such a non looped sound has been stopped automaticly.
 | 
			
		||||
		\param startPaused starts the sound paused. This implies that track=true. Use this if you want to modify some of the playing
 | 
			
		||||
		 parameters before the sound actually plays. Usually you would set this parameter to true, then use the ISound interface to
 | 
			
		||||
		 modify some of the sound parameters and then call ISound::setPaused(false);
 | 
			
		||||
		 Note: You need to call ISound::drop() when setting this parameter to true and you don't need the ISound
 | 
			
		||||
		 object anymore. See 'return' for details.
 | 
			
		||||
		 \param track Makes it possible to track the sound. Causes the method to return an ISound interface. See 'return' for details.
 | 
			
		||||
		 \param enableSoundEffects Makes it possible to use sound effects such as chorus, distorsions, echo, 
 | 
			
		||||
		 reverb and similar for this sound. Sound effects can then be controlled via ISound::getSoundEffectControl().
 | 
			
		||||
		 Only enable if necessary. 
 | 
			
		||||
		 \return Only returns a pointer to an ISound if the parameters 'track', 'startPaused' or 
 | 
			
		||||
		 'enableSoundEffects' have been	 set to true. Note: if this method returns an ISound as result, 
 | 
			
		||||
		 you HAVE to call ISound::drop() after you don't need the ISound interface anymore. Otherwise this 
 | 
			
		||||
		 will cause memory waste. This method also may return 0 altough 'track', 'startPaused' or 
 | 
			
		||||
		 'enableSoundEffects' have been set to true, if the sound could not be played.*/
 | 
			
		||||
		virtual ISound* play3D(ISoundSource* source, vec3df pos,
 | 
			
		||||
							   bool playLooped = false, 
 | 
			
		||||
							   bool startPaused = false, 
 | 
			
		||||
							   bool track = false,
 | 
			
		||||
							   bool enableSoundEffects = false) = 0;
 | 
			
		||||
 | 
			
		||||
		//! Stops all currently playing sounds.
 | 
			
		||||
		virtual void stopAllSounds() = 0;
 | 
			
		||||
 | 
			
		||||
        //! Pauses or unpauses all currently playing sounds.
 | 
			
		||||
		virtual void setAllSoundsPaused( bool bPaused = true ) = 0;
 | 
			
		||||
 | 
			
		||||
		//! Gets a sound source by sound name. Adds the sound source as file into the sound engine if not loaded already.
 | 
			
		||||
		/** Please note: For performance reasons most ISoundEngine implementations will
 | 
			
		||||
		not try to load the sound when calling this method, but only when play() is called
 | 
			
		||||
		with this sound source as parameter. 
 | 
			
		||||
		\param addIfNotFound if 'true' adds the sound source to the list and returns the interface to it
 | 
			
		||||
		if it cannot be found in the sound source list. If 'false', returns 0 if the sound
 | 
			
		||||
		source is not in the list and does not modify the list. Default value: true.
 | 
			
		||||
		\return Returns the sound source or 0 if not available.
 | 
			
		||||
		Note: Don't call drop() to this pointer, it will be managed by irrKlang and
 | 
			
		||||
		exist as long as you don't delete irrKlang or call removeSoundSource(). However,
 | 
			
		||||
		you are free to call grab() if you want and drop() it then later of course. */
 | 
			
		||||
		virtual ISoundSource* getSoundSource(const ik_c8* soundName, bool addIfNotFound=true) = 0;
 | 
			
		||||
 | 
			
		||||
		//! Returns a sound source by index.
 | 
			
		||||
		/** \param idx: Index of the loaded sound source, must by smaller than getSoundSourceCount().
 | 
			
		||||
		\return Returns the sound source or 0 if not available.
 | 
			
		||||
		Note: Don't call drop() to this pointer, it will be managed by irrKlang and
 | 
			
		||||
		exist as long as you don't delete irrKlang or call removeSoundSource(). However,
 | 
			
		||||
		you are free to call grab() if you want and drop() it then later of course. */	
 | 
			
		||||
		virtual ISoundSource* getSoundSource(ik_s32 index) = 0;
 | 
			
		||||
 | 
			
		||||
		//! Returns amount of loaded sound sources.
 | 
			
		||||
		virtual ik_s32 getSoundSourceCount() = 0;
 | 
			
		||||
 | 
			
		||||
		//! Adds sound source into the sound engine as file.
 | 
			
		||||
		/** \param fileName Name of the sound file (e.g. "sounds/something.mp3"). You can also use this
 | 
			
		||||
		name when calling play3D() or play2D().
 | 
			
		||||
		\param mode Streaming mode for this sound source
 | 
			
		||||
		\param preload If this flag is set to false (which is default) the sound engine will
 | 
			
		||||
		not try to load the sound file when calling this method, but only when play() is called
 | 
			
		||||
		with this sound source as parameter. Otherwise the sound will be preloaded.
 | 
			
		||||
		\return Returns the pointer to the added sound source or 0 if not sucessful because for
 | 
			
		||||
		example a sound already existed with that name. If not successful, the reason will be printed
 | 
			
		||||
		into the log. Note: Don't call drop() to this pointer, it will be managed by irrKlang and
 | 
			
		||||
		exist as long as you don't delete irrKlang or call removeSoundSource(). However,
 | 
			
		||||
		you are free to call grab() if you want and drop() it then later of course. */	
 | 
			
		||||
		virtual ISoundSource* addSoundSourceFromFile(const ik_c8* fileName, E_STREAM_MODE mode=ESM_AUTO_DETECT,
 | 
			
		||||
			                                         bool preload=false) = 0;
 | 
			
		||||
 | 
			
		||||
		//! Adds a sound source into the sound engine as memory source.
 | 
			
		||||
		/** Note: This method only accepts a file (.wav, .ogg, etc) which is totally loaded into memory.
 | 
			
		||||
		If you want to add a sound source from decoded plain PCM data in memory, use addSoundSourceFromPCMData() instead.
 | 
			
		||||
		\param memory Pointer to the memory to be treated as loaded sound file.
 | 
			
		||||
		\param sizeInBytes Size of the memory chunk, in bytes.
 | 
			
		||||
		\param soundName Name of the virtual sound file (e.g. "sounds/something.mp3"). You can also use this
 | 
			
		||||
		name when calling play3D() or play2D(). Hint: If you include the extension of the original file
 | 
			
		||||
		like .ogg, .mp3 or .wav at the end of the filename, irrKlang will be able to decide better what
 | 
			
		||||
		file format it is and might be able to start playback faster.
 | 
			
		||||
		\param copyMemory If set to true which is default, the memory block is copied 
 | 
			
		||||
		and stored in the engine, after	calling addSoundSourceFromMemory() the memory pointer can be deleted
 | 
			
		||||
		savely. If set to false, the memory is not copied and the user takes the responsibility that 
 | 
			
		||||
		the memory block pointed to remains there as long as the sound engine or at least this sound
 | 
			
		||||
		source exists.
 | 
			
		||||
		\return Returns the pointer to the added sound source or 0 if not sucessful because for example a sound already
 | 
			
		||||
		existed with that name. If not successful, the reason will be printed into the log. 
 | 
			
		||||
		Note: Don't call drop() to this pointer, it will be managed by irrKlang and exist as long as you don't 
 | 
			
		||||
		delete irrKlang or call removeSoundSource(). However, you are free to call grab() if you
 | 
			
		||||
		want and drop() it then later of course. */
 | 
			
		||||
		virtual ISoundSource* addSoundSourceFromMemory(void* memory, ik_s32 sizeInBytes, const ik_c8* soundName,
 | 
			
		||||
											               bool copyMemory=true) = 0;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		//! Adds a sound source into the sound engine from plain PCM data in memory.
 | 
			
		||||
		/** \param memory Pointer to the memory to be treated as loaded sound file.
 | 
			
		||||
		\param sizeInBytes Size of the memory chunk, in bytes. 
 | 
			
		||||
		\param soundName Name of the virtual sound file (e.g. "sounds/something.mp3"). You can also use this
 | 
			
		||||
		name when calling play3D() or play2D(). 
 | 
			
		||||
		\param copyMemory If set to true which is default, the memory block is copied 
 | 
			
		||||
		and stored in the engine, after	calling addSoundSourceFromPCMData() the memory pointer can be deleted
 | 
			
		||||
		savely. If set to true, the memory is not copied and the user takes the responsibility that 
 | 
			
		||||
		the memory block pointed to remains there as long as the sound engine or at least this sound
 | 
			
		||||
		source exists. 
 | 
			
		||||
		\return Returns the pointer to the added sound source or 0 if not sucessful because for
 | 
			
		||||
		example a sound already existed with that name. If not successful, the reason will be printed
 | 
			
		||||
		into the log. */
 | 
			
		||||
		virtual ISoundSource* addSoundSourceFromPCMData(void* memory, ik_s32 sizeInBytes, 
 | 
			
		||||
			                                            const ik_c8* soundName, SAudioStreamFormat format,
 | 
			
		||||
														bool copyMemory=true) = 0;
 | 
			
		||||
 | 
			
		||||
		//! Adds a sound source as alias for an existing sound source, but with a different name or optional different default settings.
 | 
			
		||||
		/** This is useful if you want to play multiple sounds but each sound isn't necessarily one single file.
 | 
			
		||||
		Also useful if you want to or play the same sound using different names, volumes or min and max 3D distances.
 | 
			
		||||
		\param baseSource The sound source where this sound source should be based on. This sound
 | 
			
		||||
		source will use the baseSource as base to access the file and similar, but it will have its
 | 
			
		||||
		own name and its own default settings.
 | 
			
		||||
		\param soundName Name of the new sound source to be added.
 | 
			
		||||
		\return Returns the pointer to the added sound source or 0 if not sucessful because for
 | 
			
		||||
		example a sound already existed with that name. If not successful, the reason will be printed
 | 
			
		||||
		into the log.*/
 | 
			
		||||
		virtual ISoundSource* addSoundSourceAlias(ISoundSource* baseSource, const ik_c8* soundName) = 0;
 | 
			
		||||
 | 
			
		||||
		//! Removes a sound source from the engine, freeing the memory it occupies.
 | 
			
		||||
		/** This will also cause all currently playing sounds of this source to be stopped. 
 | 
			
		||||
		Also note that if the source has been removed successfully, the value returned 
 | 
			
		||||
		by getSoundSourceCount() will have been decreased by one. 
 | 
			
		||||
		Removing sound sources is only necessary if you know you won't use a lot of non-streamed
 | 
			
		||||
		sounds again. Sound sources of streamed sounds do not cost a lot of memory.*/
 | 
			
		||||
		virtual void removeSoundSource(ISoundSource* source) = 0;
 | 
			
		||||
 | 
			
		||||
		//! Removes a sound source from the engine, freeing the memory it occupies.
 | 
			
		||||
		/** This will also cause all currently playing sounds of this source to be stopped. 
 | 
			
		||||
		Also note that if the source has been removed successfully, the value returned 
 | 
			
		||||
		by getSoundSourceCount() will have been decreased by one. 
 | 
			
		||||
		Removing sound sources is only necessary if you know you won't use a lot of non-streamed
 | 
			
		||||
		sounds again. Sound sources of streamed sounds do not cost a lot of memory. */
 | 
			
		||||
		virtual void removeSoundSource(const ik_c8* name) = 0;
 | 
			
		||||
 | 
			
		||||
		//! Removes all sound sources from the engine
 | 
			
		||||
		/** This will also cause all sounds to be stopped. 
 | 
			
		||||
		Removing sound sources is only necessary if you know you won't use a lot of non-streamed
 | 
			
		||||
		sounds again. Sound sources of streamed sounds do not cost a lot of memory. */
 | 
			
		||||
		virtual void removeAllSoundSources() = 0;
 | 
			
		||||
 | 
			
		||||
		//! Sets master sound volume. This value is multiplied with all sounds played.
 | 
			
		||||
		/** \param volume 0 (silent) to 1.0f (full volume) */
 | 
			
		||||
		virtual void setSoundVolume(ik_f32 volume) = 0;
 | 
			
		||||
 | 
			
		||||
		//! Returns master sound volume.
 | 
			
		||||
		/* A value between 0.0 and 1.0. Default is 1.0. Can be changed using setSoundVolume(). */
 | 
			
		||||
		virtual ik_f32 getSoundVolume() = 0;
 | 
			
		||||
 | 
			
		||||
		//! Sets the current listener 3d position.
 | 
			
		||||
		/** When playing sounds in 3D, updating the position of the listener every frame should be
 | 
			
		||||
		done using this function.
 | 
			
		||||
		\param pos Position of the camera or listener.
 | 
			
		||||
		\param lookdir Direction vector where the camera or listener is looking into. If you have a 
 | 
			
		||||
		camera position and a target 3d point where it is looking at, this would be cam->getTarget() - cam->getAbsolutePosition().
 | 
			
		||||
		\param velPerSecond The velocity per second describes the speed of the listener and 
 | 
			
		||||
		is only needed for doppler effects.
 | 
			
		||||
		\param upvector Vector pointing 'up', so the engine can decide where is left and right. 
 | 
			
		||||
		This vector is usually (0,1,0).*/
 | 
			
		||||
		virtual void setListenerPosition(const vec3df& pos,
 | 
			
		||||
			const vec3df& lookdir,
 | 
			
		||||
			const vec3df& velPerSecond = vec3df(0,0,0),
 | 
			
		||||
			const vec3df& upVector = vec3df(0,1,0)) = 0;
 | 
			
		||||
 | 
			
		||||
		//! Updates the audio engine. This should be called several times per frame if irrKlang was started in single thread mode.
 | 
			
		||||
		/** This updates the 3d positions of the sounds as well as their volumes, effects,
 | 
			
		||||
		streams and other stuff. Call this several times per frame (the more the better) if you
 | 
			
		||||
		specified irrKlang to run single threaded. Otherwise it is not necessary to use this method.
 | 
			
		||||
		This method is being called by the scene manager automaticly if you are using one, so
 | 
			
		||||
		you might want to ignore this. */
 | 
			
		||||
		virtual void update() = 0;
 | 
			
		||||
 | 
			
		||||
		//! Returns if a sound with the specified name is currently playing.
 | 
			
		||||
		virtual bool isCurrentlyPlaying(const char* soundName) = 0;
 | 
			
		||||
 | 
			
		||||
		//! Returns if a sound with the specified source is currently playing.
 | 
			
		||||
		virtual bool isCurrentlyPlaying(ISoundSource* source) = 0;
 | 
			
		||||
 | 
			
		||||
		//! Stops all sounds of a specific sound source
 | 
			
		||||
		virtual void stopAllSoundsOfSoundSource(ISoundSource* source) = 0;
 | 
			
		||||
 | 
			
		||||
		//! Registers a new audio stream loader in the sound engine.
 | 
			
		||||
		/** Use this to enhance the audio engine to support other or new file formats.
 | 
			
		||||
		To do this, implement your own IAudioStreamLoader interface and register it
 | 
			
		||||
		with this method */
 | 
			
		||||
		virtual void registerAudioStreamLoader(IAudioStreamLoader* loader) = 0;
 | 
			
		||||
 | 
			
		||||
		//! Returns if irrKlang is running in the same thread as the application or is using multithreading.
 | 
			
		||||
		/** This basicly returns the flag set by the user when creating the sound engine.*/
 | 
			
		||||
		virtual bool isMultiThreaded() const = 0;
 | 
			
		||||
 | 
			
		||||
		//! Adds a file factory to the sound engine, making it possible to override file access of the sound engine.
 | 
			
		||||
		/** Derive your own class from IFileFactory, overwrite the createFileReader()
 | 
			
		||||
		method and return your own implemented IFileReader to overwrite file access of irrKlang. */
 | 
			
		||||
		virtual void addFileFactory(IFileFactory* fileFactory) = 0;
 | 
			
		||||
 | 
			
		||||
		//! Sets the default minimal distance for 3D sounds.
 | 
			
		||||
		/**  This value influences how loud a sound is heard based on its distance.
 | 
			
		||||
		See ISound::setMinDistance() for details about what the min distance is.
 | 
			
		||||
		It is also possible to influence this default value for every sound file 
 | 
			
		||||
		using ISoundSource::setDefaultMinDistance().
 | 
			
		||||
		This method only influences the initial distance value of sounds. For changing the
 | 
			
		||||
		distance after the sound has been started to play, use ISound::setMinDistance() and ISound::setMaxDistance().
 | 
			
		||||
		\param minDistance Default minimal distance for 3d sounds. The default value is 1.0f.*/
 | 
			
		||||
		virtual void setDefault3DSoundMinDistance(ik_f32 minDistance) = 0;
 | 
			
		||||
 | 
			
		||||
		//! Returns the default minimal distance for 3D sounds.
 | 
			
		||||
		/**  This value influences how loud a sound is heard based on its distance.
 | 
			
		||||
		You can change it using setDefault3DSoundMinDistance().
 | 
			
		||||
		See ISound::setMinDistance() for details about what the min distance is.
 | 
			
		||||
		It is also possible to influence this default value for every sound file 
 | 
			
		||||
		using ISoundSource::setDefaultMinDistance().
 | 
			
		||||
		\return Default minimal distance for 3d sounds. The default value is 1.0f. */
 | 
			
		||||
		virtual ik_f32 getDefault3DSoundMinDistance() = 0;
 | 
			
		||||
 | 
			
		||||
		//! Sets the default maximal distance for 3D sounds.
 | 
			
		||||
		/** Changing this value is usually not necessary. Use setDefault3DSoundMinDistance() instead.
 | 
			
		||||
		Don't change this value if you don't know what you are doing: This value causes the sound
 | 
			
		||||
		to stop attenuating after it reaches the max distance. Most people think that this sets the
 | 
			
		||||
		volume of the sound to 0 after this distance, but this is not true. Only change the
 | 
			
		||||
		minimal distance (using for example setDefault3DSoundMinDistance()) to influence this.
 | 
			
		||||
		See ISound::setMaxDistance() for details about what the max distance is.
 | 
			
		||||
		It is also possible to influence this default value for every sound file 
 | 
			
		||||
		using ISoundSource::setDefaultMaxDistance().
 | 
			
		||||
		This method only influences the initial distance value of sounds. For changing the
 | 
			
		||||
		distance after the sound has been started to play, use ISound::setMinDistance() and ISound::setMaxDistance().
 | 
			
		||||
		\param maxDistance Default maximal distance for 3d sounds. The default value is 1000000000.0f. */
 | 
			
		||||
		virtual void setDefault3DSoundMaxDistance(ik_f32 maxDistance) = 0;
 | 
			
		||||
 | 
			
		||||
		//! Returns the default maximal distance for 3D sounds.
 | 
			
		||||
		/**  This value influences how loud a sound is heard based on its distance.
 | 
			
		||||
		You can change it using setDefault3DSoundmaxDistance(), but 
 | 
			
		||||
		changing this value is usually not necessary. This value causes the sound
 | 
			
		||||
		to stop attenuating after it reaches the max distance. Most people think that this sets the
 | 
			
		||||
		volume of the sound to 0 after this distance, but this is not true. Only change the
 | 
			
		||||
		minimal distance (using for example setDefault3DSoundMinDistance()) to influence this.
 | 
			
		||||
		See ISound::setMaxDistance() for details about what the max distance is.
 | 
			
		||||
		It is also possible to influence this default value for every sound file 
 | 
			
		||||
		using ISoundSource::setDefaultMaxDistance().
 | 
			
		||||
		\return Default maximal distance for 3d sounds. The default value is 1000000000.0f. */
 | 
			
		||||
		virtual ik_f32 getDefault3DSoundMaxDistance() = 0;
 | 
			
		||||
 | 
			
		||||
		//! Sets a rolloff factor which influences the amount of attenuation that is applied to 3D sounds.
 | 
			
		||||
		/** The rolloff factor can range from 0.0 to 10.0, where 0 is no rolloff. 1.0 is the default 
 | 
			
		||||
		rolloff factor set, the value which we also experience in the real world. A value of 2 would mean
 | 
			
		||||
		twice the real-world rolloff. */
 | 
			
		||||
		virtual void setRolloffFactor(ik_f32 rolloff) = 0;
 | 
			
		||||
 | 
			
		||||
		//! Sets parameters affecting the doppler effect.
 | 
			
		||||
		/** \param dopplerFactor is a value between 0 and 10 which multiplies the doppler 
 | 
			
		||||
		effect. Default value is 1.0, which is the real world doppler effect, and 10.0f 
 | 
			
		||||
		would be ten times the real world doppler effect.
 | 
			
		||||
		\param distanceFactor is the number of meters in a vector unit. The default value
 | 
			
		||||
		is 1.0. Doppler effects are calculated in meters per second, with this parameter,
 | 
			
		||||
		this can be changed, all velocities and positions are influenced by this. If
 | 
			
		||||
		the measurement should be in foot instead of meters, set this value to 0.3048f
 | 
			
		||||
		for example.*/
 | 
			
		||||
		virtual void setDopplerEffectParameters(ik_f32 dopplerFactor=1.0f, ik_f32 distanceFactor=1.0f) = 0;
 | 
			
		||||
 | 
			
		||||
		//! Loads irrKlang plugins from a custom path.
 | 
			
		||||
		/** Plugins usually are .dll, .so or .dylib
 | 
			
		||||
		files named for example ikpMP3.dll (= short for irrKlangPluginMP3) which
 | 
			
		||||
		make it possible to play back mp3 files. Plugins are being 
 | 
			
		||||
		loaded from the current working directory at startup of the sound engine
 | 
			
		||||
		if the parameter ESEO_LOAD_PLUGINS is set (which it is by default), but
 | 
			
		||||
		using this method, it is possible to load plugins from a custom path in addition. 
 | 
			
		||||
		\param path Path to the plugin directory, like "C:\games\somegamegame\irrklangplugins".
 | 
			
		||||
		\return returns true if sucessful or fals if not, for example because the path could 
 | 
			
		||||
		not be found. */
 | 
			
		||||
		virtual bool loadPlugins(const ik_c8* path) = 0;
 | 
			
		||||
 | 
			
		||||
		//! Returns a pointer to internal sound engine pointers, like the DirectSound interface.
 | 
			
		||||
		/** Use this with caution. This is only exposed to make it possible for other libraries
 | 
			
		||||
		such as Video playback packages to extend or use the sound driver irrklang uses. */
 | 
			
		||||
		virtual const SInternalAudioInterface& getInternalAudioInterface() = 0;		
 | 
			
		||||
 | 
			
		||||
		//! Sets the OutputMixedDataReceiver, so you can receive the pure mixed output audio data while it is being played.
 | 
			
		||||
		/** This can be used to store the sound output as .wav file or for creating a Oscillograph or similar.
 | 
			
		||||
		This works only with software based audio drivers, that is ESOD_WIN_MM, ESOD_ALSA, and ESOD_CORE_AUDIO. 
 | 
			
		||||
		Returns true if sucessful and fals if the current audio driver doesn't support this feature. Set this to null
 | 
			
		||||
		again once you don't need it anymore. */
 | 
			
		||||
		virtual bool setMixedDataOutputReceiver(ISoundMixedOutputReceiver* receiver) = 0;
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	//! structure for returning pointers to the internal audio interface. 
 | 
			
		||||
	/** Use ISoundEngine::getInternalAudioInterface() to get this. */
 | 
			
		||||
	struct SInternalAudioInterface
 | 
			
		||||
	{
 | 
			
		||||
		//! IDirectSound interface, this is not null when using the ESOD_DIRECT_SOUND audio driver
 | 
			
		||||
		void* pIDirectSound;
 | 
			
		||||
 | 
			
		||||
		//! IDirectSound8 interface, this is not null when using the ESOD_DIRECT_SOUND8 audio driver
 | 
			
		||||
		void* pIDirectSound8;
 | 
			
		||||
 | 
			
		||||
		//! HWaveout interface, this is not null when using the ESOD_WIN_MM audio driver
 | 
			
		||||
		void* pWinMM_HWaveOut;
 | 
			
		||||
 | 
			
		||||
		//! ALSA PCM Handle interface, this is not null when using the ESOD_ALSA audio driver
 | 
			
		||||
		void* pALSA_SND_PCM;
 | 
			
		||||
 | 
			
		||||
		//! AudioDeviceID handle, this is not null when using the ESOD_CORE_AUDIO audio driver
 | 
			
		||||
		ik_u32 pCoreAudioDeciceID;
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} // end namespace irrklang
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										46
									
								
								SQCSim2021/external/irrKlang-1.6.0/include/ik_ISoundMixedOutputReceiver.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								SQCSim2021/external/irrKlang-1.6.0/include/ik_ISoundMixedOutputReceiver.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,46 @@
 | 
			
		||||
// Copyright (C) 2002-2018 Nikolaus Gebhardt
 | 
			
		||||
// This file is part of the "irrKlang" library.
 | 
			
		||||
// For conditions of distribution and use, see copyright notice in irrKlang.h
 | 
			
		||||
 | 
			
		||||
#ifndef __I_IRRKLANG_SOUND_MIXED_OUTPUT_RECEIVER_H_INCLUDED__
 | 
			
		||||
#define __I_IRRKLANG_SOUND_MIXED_OUTPUT_RECEIVER_H_INCLUDED__
 | 
			
		||||
 | 
			
		||||
#include "ik_IRefCounted.h"
 | 
			
		||||
#include "ik_SAudioStreamFormat.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace irrklang
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//! Interface to be implemented by the user, which recieves the mixed output when it it played by the sound engine.
 | 
			
		||||
/** This can be used to store the sound output as .wav file or for creating a Oscillograph or similar. 
 | 
			
		||||
 Simply implement your own class derived from ISoundMixedOutputReceiver and use ISoundEngine::setMixedDataOutputReceiver
 | 
			
		||||
 to let the audio driver know about it. */
 | 
			
		||||
class ISoundMixedOutputReceiver
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    
 | 
			
		||||
	//! destructor
 | 
			
		||||
	virtual ~ISoundMixedOutputReceiver() {};
 | 
			
		||||
 | 
			
		||||
	//! Called when a chunk of sound has been mixed and is about to be played. 
 | 
			
		||||
	/** Note: This is called from the playing thread of the sound library, so you need to 
 | 
			
		||||
	make everything you are doing in this method thread safe. Additionally, it would
 | 
			
		||||
	be a good idea to do nothing complicated in your implementation and return as fast as possible,
 | 
			
		||||
	otherwise sound output may be stuttering.
 | 
			
		||||
	\param data representing the sound frames which just have been mixed. Sound data always
 | 
			
		||||
	consists of two interleaved sound channels at 16bit per frame. 
 | 
			
		||||
	 \param byteCount Amount of bytes of the data 
 | 
			
		||||
	 \param playbackrate The playback rate at samples per second (usually something like 44000). 
 | 
			
		||||
	 This value will not change and always be the same for an instance of an ISoundEngine. */
 | 
			
		||||
	virtual void OnAudioDataReady(const void* data, int byteCount, int playbackrate) = 0;
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} // end namespace irrklang
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										167
									
								
								SQCSim2021/external/irrKlang-1.6.0/include/ik_ISoundSource.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										167
									
								
								SQCSim2021/external/irrKlang-1.6.0/include/ik_ISoundSource.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,167 @@
 | 
			
		||||
// Copyright (C) 2002-2018 Nikolaus Gebhardt
 | 
			
		||||
// This file is part of the "irrKlang" library.
 | 
			
		||||
// For conditions of distribution and use, see copyright notice in irrKlang.h
 | 
			
		||||
 | 
			
		||||
#ifndef __I_IRRKLANG_IRR_SOUND_SOURCE_H_INCLUDED__
 | 
			
		||||
#define __I_IRRKLANG_IRR_SOUND_SOURCE_H_INCLUDED__
 | 
			
		||||
 | 
			
		||||
#include "ik_IVirtualRefCounted.h"
 | 
			
		||||
#include "ik_vec3d.h"
 | 
			
		||||
#include "ik_EStreamModes.h"
 | 
			
		||||
#include "ik_SAudioStreamFormat.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace irrklang
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
	//! A sound source describes an input file (.ogg, .mp3, .wav or similar) and its default settings.
 | 
			
		||||
	/** It provides some informations about the sound source like the play lenght and
 | 
			
		||||
	can have default settings for volume, distances for 3d etc. There is some example code on how
 | 
			
		||||
	to use Sound sources at @ref soundSources.*/
 | 
			
		||||
	class ISoundSource : public IVirtualRefCounted
 | 
			
		||||
	{
 | 
			
		||||
	public:
 | 
			
		||||
 | 
			
		||||
		//! Returns the name of the sound source (usually, this is the file name)
 | 
			
		||||
		virtual const ik_c8* getName() = 0;
 | 
			
		||||
 | 
			
		||||
		//! Sets the stream mode which should be used for a sound played from this source.
 | 
			
		||||
		/** Note that if this is set to ESM_NO_STREAMING, the engine still might decide
 | 
			
		||||
		to stream the sound if it is too big. The threashold for this can be 
 | 
			
		||||
		adjusted using ISoundSource::setForcedStreamingThreshold(). */
 | 
			
		||||
		virtual void setStreamMode(E_STREAM_MODE mode) = 0;
 | 
			
		||||
 | 
			
		||||
		//! Returns the detected or set type of the sound with wich the sound will be played.
 | 
			
		||||
		/** Note: If the returned type is ESM_AUTO_DETECT, this mode will change after the
 | 
			
		||||
		sound has been played the first time. */
 | 
			
		||||
		virtual E_STREAM_MODE getStreamMode() = 0;
 | 
			
		||||
 | 
			
		||||
		//! Returns the play length of the sound in milliseconds.
 | 
			
		||||
		/** Returns -1 if not known for this sound for example because its decoder
 | 
			
		||||
		does not support lenght reporting or it is a file stream of unknown size.
 | 
			
		||||
		Note: If the sound never has been played before, the sound engine will have to open
 | 
			
		||||
		the file and try to get the play lenght from there, so this call could take a bit depending
 | 
			
		||||
		on the type of file. */
 | 
			
		||||
		virtual ik_u32 getPlayLength() = 0;
 | 
			
		||||
 | 
			
		||||
		//! Returns informations about the sound source: channel count (mono/stereo), frame count, sample rate, etc.
 | 
			
		||||
		/** \return Returns the structure filled with 0 or negative values if not known for this sound for example because 
 | 
			
		||||
		because the file could not be opened or similar.
 | 
			
		||||
		Note: If the sound never has been played before, the sound engine will have to open
 | 
			
		||||
		the file and try to get the play lenght from there, so this call could take a bit depending
 | 
			
		||||
		on the type of file. */
 | 
			
		||||
		virtual SAudioStreamFormat getAudioFormat() = 0;
 | 
			
		||||
 | 
			
		||||
		//! Returns if sounds played from this source will support seeking via ISound::setPlayPosition().
 | 
			
		||||
		/* If a sound is seekable depends on the file type and the audio format. For example MOD files
 | 
			
		||||
		cannot be seeked currently.
 | 
			
		||||
		\return Returns true of the sound source supports setPlayPosition() and false if not. 
 | 
			
		||||
		Note: If the sound never has been played before, the sound engine will have to open
 | 
			
		||||
		the file and try to get the information from there, so this call could take a bit depending
 | 
			
		||||
		on the type of file. */
 | 
			
		||||
		virtual bool getIsSeekingSupported() = 0;
 | 
			
		||||
 | 
			
		||||
		//! Sets the default volume for a sound played from this source.
 | 
			
		||||
		/** The default value of this is 1.0f. 
 | 
			
		||||
		Note that the default volume is being multiplied with the master volume
 | 
			
		||||
		of ISoundEngine, change this via ISoundEngine::setSoundVolume(). 
 | 
			
		||||
		//! \param volume 0 (silent) to 1.0f (full volume). Default value is 1.0f. */
 | 
			
		||||
		virtual void setDefaultVolume(ik_f32 volume=1.0f) = 0;
 | 
			
		||||
 | 
			
		||||
		//! Returns the default volume for a sound played from this source.
 | 
			
		||||
		/** You can influence this default volume value using setDefaultVolume().
 | 
			
		||||
		Note that the default volume is being multiplied with the master volume
 | 
			
		||||
		of ISoundEngine, change this via ISoundEngine::setSoundVolume(). 
 | 
			
		||||
		//! \return 0 (silent) to 1.0f (full volume). Default value is 1.0f. */
 | 
			
		||||
		virtual ik_f32 getDefaultVolume() = 0;
 | 
			
		||||
 | 
			
		||||
		//! sets the default minimal distance for 3D sounds played from this source.
 | 
			
		||||
		/**  This value influences how loud a sound is heard based on its distance.
 | 
			
		||||
		See ISound::setMinDistance() for details about what the min distance is.
 | 
			
		||||
		This method only influences the initial distance value of sounds. For changing the
 | 
			
		||||
		distance while the sound is playing, use ISound::setMinDistance() and ISound::setMaxDistance().
 | 
			
		||||
		\param minDistance: Default minimal distance for 3D sounds from this source. Set it to a negative
 | 
			
		||||
		value to let sounds of this source use the engine level default min distance, which
 | 
			
		||||
		can be set via ISoundEngine::setDefault3DSoundMinDistance(). Default value is -1, causing
 | 
			
		||||
		the default min distance of the sound engine to take effect. */
 | 
			
		||||
		virtual void setDefaultMinDistance(ik_f32 minDistance) = 0;
 | 
			
		||||
 | 
			
		||||
		//! Returns the default minimal distance for 3D sounds played from this source.
 | 
			
		||||
		/**  This value influences how loud a sound is heard based on its distance.
 | 
			
		||||
		See ISound::setMinDistance() for details about what the minimal distance is.
 | 
			
		||||
		\return Default minimal distance for 3d sounds from this source. If setDefaultMinDistance()
 | 
			
		||||
		was set to a negative value, it will return the default value set in the engine,
 | 
			
		||||
		using ISoundEngine::setDefault3DSoundMinDistance(). Default value is -1, causing
 | 
			
		||||
		the default min distance of the sound engine to take effect. */
 | 
			
		||||
		virtual ik_f32 getDefaultMinDistance() = 0;
 | 
			
		||||
 | 
			
		||||
		//! Sets the default maximal distance for 3D sounds played from this source.
 | 
			
		||||
		/**  Changing this value is usually not necessary. Use setDefaultMinDistance() instead.
 | 
			
		||||
		Don't change this value if you don't know what you are doing: This value causes the sound
 | 
			
		||||
		to stop attenuating after it reaches the max distance. Most people think that this sets the
 | 
			
		||||
		volume of the sound to 0 after this distance, but this is not true. Only change the
 | 
			
		||||
		minimal distance (using for example setDefaultMinDistance()) to influence this.
 | 
			
		||||
		See ISound::setMaxDistance() for details about what the max distance is.
 | 
			
		||||
		This method only influences the initial distance value of sounds. For changing the
 | 
			
		||||
		distance while the sound is played, use ISound::setMinDistance() 
 | 
			
		||||
		and ISound::setMaxDistance().
 | 
			
		||||
		\param maxDistance Default maximal distance for 3D sounds from this source. Set it to a negative
 | 
			
		||||
		value to let sounds of this source use the engine level default max distance, which
 | 
			
		||||
		can be set via ISoundEngine::setDefault3DSoundMaxDistance(). Default value is -1, causing
 | 
			
		||||
		the default max distance of the sound engine to take effect. */
 | 
			
		||||
		virtual void setDefaultMaxDistance(ik_f32 maxDistance) = 0;
 | 
			
		||||
 | 
			
		||||
		//! returns the default maxmial distance for 3D sounds played from this source.
 | 
			
		||||
		/** This value influences how loud a sound is heard based on its distance.
 | 
			
		||||
		Changing this value is usually not necessary. Use setDefaultMinDistance() instead.
 | 
			
		||||
		Don't change this value if you don't know what you are doing: This value causes the sound
 | 
			
		||||
		to stop attenuating after it reaches the max distance. Most people think that this sets the
 | 
			
		||||
		volume of the sound to 0 after this distance, but this is not true. Only change the
 | 
			
		||||
		minimal distance (using for example setDefaultMinDistance()) to influence this.
 | 
			
		||||
		See ISound::setMaxDistance() for details about what the max distance is.
 | 
			
		||||
		\return Default maximal distance for 3D sounds from this source. If setDefaultMaxDistance()
 | 
			
		||||
		was set to a negative value, it will return the default value set in the engine,
 | 
			
		||||
		using ISoundEngine::setDefault3DSoundMaxDistance(). Default value is -1, causing
 | 
			
		||||
		the default max distance of the sound engine to take effect. */
 | 
			
		||||
		virtual ik_f32 getDefaultMaxDistance() = 0;
 | 
			
		||||
 | 
			
		||||
		//! Forces the sound to be reloaded at next replay.
 | 
			
		||||
		/** Sounds which are not played as streams are buffered to make it possible to
 | 
			
		||||
		replay them without much overhead. If the sound file is altered after the sound
 | 
			
		||||
		has been played the first time, the engine won't play the changed file then.
 | 
			
		||||
		Calling this method makes the engine reload the file before the file is played
 | 
			
		||||
		the next time.*/
 | 
			
		||||
		virtual void forceReloadAtNextUse() = 0;
 | 
			
		||||
 | 
			
		||||
		//! Sets the threshold size where irrKlang decides to force streaming a file independent of the user specified setting.
 | 
			
		||||
		/** When specifying ESM_NO_STREAMING for playing back a sound file, irrKlang will
 | 
			
		||||
		ignore this setting if the file is bigger than this threshold and stream the file
 | 
			
		||||
		anyway. Please note that if an audio format loader is not able to return the 
 | 
			
		||||
		size of a sound source and returns -1 as length, this will be ignored as well 
 | 
			
		||||
		and streaming has to be forced.
 | 
			
		||||
		\param threshold: New threshold. The value is specified in uncompressed bytes and its default value is 
 | 
			
		||||
		about one Megabyte. Set to 0 or a negative value to disable stream forcing. */
 | 
			
		||||
		virtual void setForcedStreamingThreshold(ik_s32 thresholdBytes) = 0;
 | 
			
		||||
 | 
			
		||||
		//! Returns the threshold size where irrKlang decides to force streaming a file independent of the user specified setting.
 | 
			
		||||
		/**  The value is specified in uncompressed bytes and its default value is 
 | 
			
		||||
		about one Megabyte. See setForcedStreamingThreshold() for details. */
 | 
			
		||||
		virtual ik_s32 getForcedStreamingThreshold() = 0;
 | 
			
		||||
 | 
			
		||||
		//! Returns a pointer to the loaded and decoded sample data.
 | 
			
		||||
		/** \return Returns a pointer to the sample data. The data is provided in decoded PCM data. The
 | 
			
		||||
		exact format can be retrieved using getAudioFormat(). Use getAudioFormat().getSampleDataSize()
 | 
			
		||||
		for getting the amount of bytes. The returned pointer will only be valid as long as the sound
 | 
			
		||||
		source exists.
 | 
			
		||||
		This function will only return a pointer to the data if the 
 | 
			
		||||
		audio file is not streamed, namely ESM_NO_STREAMING. Otherwise this function will return 0.
 | 
			
		||||
		Note: If the sound never has been played before, the sound engine will have to open
 | 
			
		||||
		the file and decode audio data from there, so this call could take a bit depending
 | 
			
		||||
		on the type of the file.*/
 | 
			
		||||
		virtual void* getSampleData() = 0;
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
} // end namespace irrklang
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										72
									
								
								SQCSim2021/external/irrKlang-1.6.0/include/ik_ISoundStopEventReceiver.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										72
									
								
								SQCSim2021/external/irrKlang-1.6.0/include/ik_ISoundStopEventReceiver.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,72 @@
 | 
			
		||||
// Copyright (C) 2002-2018 Nikolaus Gebhardt
 | 
			
		||||
// This file is part of the "irrKlang" library.
 | 
			
		||||
// For conditions of distribution and use, see copyright notice in irrKlang.h
 | 
			
		||||
 | 
			
		||||
#ifndef __I_IRRKLANG_SOUND_STOP_EVENT_RECEIVER_H_INCLUDED__
 | 
			
		||||
#define __I_IRRKLANG_SOUND_STOP_EVENT_RECEIVER_H_INCLUDED__
 | 
			
		||||
 | 
			
		||||
#include "ik_IRefCounted.h"
 | 
			
		||||
#include "ik_SAudioStreamFormat.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace irrklang
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//! An enumeration listing all reasons for a fired sound stop event
 | 
			
		||||
enum E_STOP_EVENT_CAUSE
 | 
			
		||||
{
 | 
			
		||||
	//! The sound stop event was fired because the sound finished playing
 | 
			
		||||
	ESEC_SOUND_FINISHED_PLAYING = 0,
 | 
			
		||||
 | 
			
		||||
	//! The sound stop event was fired because the sound was stopped by the user, calling ISound::stop().
 | 
			
		||||
	ESEC_SOUND_STOPPED_BY_USER,
 | 
			
		||||
 | 
			
		||||
	//! The sound stop event was fired because the source of the sound was removed, for example
 | 
			
		||||
	//! because irrKlang was shut down or the user called ISoundEngine::removeSoundSource().
 | 
			
		||||
	ESEC_SOUND_STOPPED_BY_SOURCE_REMOVAL,
 | 
			
		||||
 | 
			
		||||
	//! This enumeration literal is never used, it only forces the compiler to 
 | 
			
		||||
	//! compile these enumeration values to 32 bit.
 | 
			
		||||
	ESEC_FORCE_32_BIT = 0x7fffffff
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//! Interface to be implemented by the user, which recieves sound stop events.
 | 
			
		||||
/** The interface has only one method to be implemented by the user: OnSoundStopped().
 | 
			
		||||
Implement this interface and set it via ISound::setSoundStopEventReceiver().
 | 
			
		||||
The sound stop event is guaranteed to be called when a sound or sound stream is finished,
 | 
			
		||||
either because the sound reached its playback end, its sound source was removed,
 | 
			
		||||
ISoundEngine::stopAllSounds() has been called or the whole engine was deleted. */
 | 
			
		||||
class ISoundStopEventReceiver
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    
 | 
			
		||||
	//! destructor
 | 
			
		||||
	virtual ~ISoundStopEventReceiver() {};
 | 
			
		||||
 | 
			
		||||
	//! Called when a sound has stopped playing. 
 | 
			
		||||
	/** This is the only method to be implemented by the user.
 | 
			
		||||
	The sound stop event is guaranteed to be called when a sound or sound stream is finished,
 | 
			
		||||
	either because the sound reached its playback end, its sound source was removed,
 | 
			
		||||
	ISoundEngine::stopAllSounds() has been called or the whole engine was deleted.
 | 
			
		||||
	Please note: Sound events will occur in a different thread when the engine runs in
 | 
			
		||||
	multi threaded mode (default). In single threaded mode, the event will happen while
 | 
			
		||||
	the user thread is calling ISoundEngine::update().
 | 
			
		||||
	\param sound: Sound which has been stopped. 
 | 
			
		||||
	\param reason: The reason why the sound stop event was fired. Usually, this will be ESEC_SOUND_FINISHED_PLAYING.
 | 
			
		||||
	When the sound was aborded by calling ISound::stop() or ISoundEngine::stopAllSounds();, this would be 
 | 
			
		||||
	ESEC_SOUND_STOPPED_BY_USER. If irrKlang was deleted or the sound source was removed, the value is 
 | 
			
		||||
	ESEC_SOUND_STOPPED_BY_SOURCE_REMOVAL.
 | 
			
		||||
	\param userData: userData pointer set by the user when registering the interface
 | 
			
		||||
	via ISound::setSoundStopEventReceiver(). */
 | 
			
		||||
	virtual void OnSoundStopped(ISound* sound, E_STOP_EVENT_CAUSE reason, void* userData) = 0;
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} // end namespace irrklang
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										48
									
								
								SQCSim2021/external/irrKlang-1.6.0/include/ik_IVirtualRefCounted.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								SQCSim2021/external/irrKlang-1.6.0/include/ik_IVirtualRefCounted.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,48 @@
 | 
			
		||||
// Copyright (C) 2002-2018 Nikolaus Gebhardt
 | 
			
		||||
// This file is part of the "irrKlang" library.
 | 
			
		||||
// For conditions of distribution and use, see copyright notice in irrKlang.h
 | 
			
		||||
 | 
			
		||||
#ifndef __I_IRRKLANG_VIRTUAL_UNKNOWN_H_INCLUDED__
 | 
			
		||||
#define __I_IRRKLANG_VIRTUAL_UNKNOWN_H_INCLUDED__
 | 
			
		||||
 | 
			
		||||
#include "ik_irrKlangTypes.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace irrklang
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
	//! Reference counting base class for objects in the Irrlicht Engine similar to IRefCounted.
 | 
			
		||||
	/** See IRefCounted for the basics of this class.
 | 
			
		||||
	The difference to IRefCounted is that the class has to implement reference counting
 | 
			
		||||
	for itself. 
 | 
			
		||||
	*/
 | 
			
		||||
	class IVirtualRefCounted
 | 
			
		||||
	{
 | 
			
		||||
	public:
 | 
			
		||||
 | 
			
		||||
		//! Destructor.
 | 
			
		||||
		virtual ~IVirtualRefCounted()
 | 
			
		||||
		{
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		//! Grabs the object. Increments the reference counter by one.
 | 
			
		||||
		/** To be implemented by the derived class. If you don't want to
 | 
			
		||||
		implement this, use the class IRefCounted instead. See IRefCounted::grab() for details
 | 
			
		||||
		of this method. */
 | 
			
		||||
		virtual void grab() = 0;
 | 
			
		||||
 | 
			
		||||
		//! Drops the object. Decrements the reference counter by one.
 | 
			
		||||
		/** To be implemented by the derived class. If you don't want to
 | 
			
		||||
		implement this, use the class IRefCounted instead. See IRefCounted::grab() for details
 | 
			
		||||
		of this method. */
 | 
			
		||||
		virtual bool drop() = 0;
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} // end namespace irrklang
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										71
									
								
								SQCSim2021/external/irrKlang-1.6.0/include/ik_SAudioStreamFormat.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								SQCSim2021/external/irrKlang-1.6.0/include/ik_SAudioStreamFormat.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,71 @@
 | 
			
		||||
// Copyright (C) 2002-2018 Nikolaus Gebhardt
 | 
			
		||||
// This file is part of the "irrKlang" library.
 | 
			
		||||
// For conditions of distribution and use, see copyright notice in irrKlang.h
 | 
			
		||||
 | 
			
		||||
#ifndef __S_IRRKLANG_AUDIO_STREAM_FORMAT_H_INCLUDED__
 | 
			
		||||
#define __S_IRRKLANG_AUDIO_STREAM_FORMAT_H_INCLUDED__
 | 
			
		||||
 | 
			
		||||
#include "ik_IRefCounted.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace irrklang
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
	//! audio sample data format enumeration for supported formats
 | 
			
		||||
	enum ESampleFormat
 | 
			
		||||
	{
 | 
			
		||||
		//! one unsigned byte (0;255)
 | 
			
		||||
		ESF_U8, 
 | 
			
		||||
 | 
			
		||||
		//! 16 bit, signed (-32k;32k)
 | 
			
		||||
		ESF_S16 
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	//! structure describing an audio stream format with helper functions
 | 
			
		||||
	struct SAudioStreamFormat
 | 
			
		||||
	{
 | 
			
		||||
		//! channels, 1 for mono, 2 for stereo
 | 
			
		||||
		ik_s32 ChannelCount; 
 | 
			
		||||
 | 
			
		||||
		//! amount of frames in the sample data or stream. 
 | 
			
		||||
		/** If the stream has an unknown lenght, this is -1 */
 | 
			
		||||
		ik_s32 FrameCount;		
 | 
			
		||||
 | 
			
		||||
		//! samples per second
 | 
			
		||||
		ik_s32 SampleRate;
 | 
			
		||||
		
 | 
			
		||||
		//! format of the sample data
 | 
			
		||||
		ESampleFormat SampleFormat;
 | 
			
		||||
 | 
			
		||||
		//! returns the size of a sample of the data described by the stream data in bytes
 | 
			
		||||
		inline ik_s32 getSampleSize() const
 | 
			
		||||
		{
 | 
			
		||||
			return (SampleFormat == ESF_U8) ? 1 : 2;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		//! returns the frame size of the stream data in bytes
 | 
			
		||||
		inline ik_s32 getFrameSize() const
 | 
			
		||||
		{
 | 
			
		||||
			return ChannelCount * getSampleSize();
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		//! returns the size of the sample data in bytes
 | 
			
		||||
		/* Returns an invalid negative value when the stream has an unknown lenght */
 | 
			
		||||
		inline ik_s32 getSampleDataSize() const
 | 
			
		||||
		{
 | 
			
		||||
			return getFrameSize() * FrameCount;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		//! returns amount of bytes per second
 | 
			
		||||
		inline ik_s32 getBytesPerSecond() const
 | 
			
		||||
		{
 | 
			
		||||
			return getFrameSize() * SampleRate;
 | 
			
		||||
		}
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} // end namespace irrklang
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										96
									
								
								SQCSim2021/external/irrKlang-1.6.0/include/ik_irrKlangTypes.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										96
									
								
								SQCSim2021/external/irrKlang-1.6.0/include/ik_irrKlangTypes.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,96 @@
 | 
			
		||||
// Copyright (C) 2002-2018 Nikolaus Gebhardt
 | 
			
		||||
// This file is part of the "irrKlang" library.
 | 
			
		||||
// For conditions of distribution and use, see copyright notice in irrKlang.h
 | 
			
		||||
 | 
			
		||||
#ifndef __IRRKLANG_TYPES_H_INCLUDED__
 | 
			
		||||
#define __IRRKLANG_TYPES_H_INCLUDED__
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace irrklang
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
	//! 8 bit unsigned variable.
 | 
			
		||||
	/** This is a typedef for unsigned char, it ensures portability of the engine. */
 | 
			
		||||
	typedef unsigned char ik_u8;
 | 
			
		||||
 | 
			
		||||
	//! 8 bit signed variable.
 | 
			
		||||
	/** This is a typedef for signed char, it ensures portability of the engine. */
 | 
			
		||||
	typedef signed char	ik_s8;
 | 
			
		||||
 | 
			
		||||
	//! 8 bit character variable.
 | 
			
		||||
	/** This is a typedef for char, it ensures portability of the engine. */
 | 
			
		||||
	typedef char ik_c8;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	//! 16 bit unsigned variable.
 | 
			
		||||
	/** This is a typedef for unsigned short, it ensures portability of the engine. */
 | 
			
		||||
	typedef unsigned short ik_u16;
 | 
			
		||||
 | 
			
		||||
	//! 16 bit signed variable.
 | 
			
		||||
	/** This is a typedef for signed short, it ensures portability of the engine. */
 | 
			
		||||
	typedef signed short ik_s16;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	//! 32 bit unsigned variable.
 | 
			
		||||
	/** This is a typedef for unsigned int, it ensures portability of the engine. */
 | 
			
		||||
	typedef unsigned int ik_u32;
 | 
			
		||||
 | 
			
		||||
	//! 32 bit signed variable.
 | 
			
		||||
	/** This is a typedef for signed int, it ensures portability of the engine. */
 | 
			
		||||
	typedef signed int ik_s32;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	//! 32 bit floating point variable.
 | 
			
		||||
	/** This is a typedef for float, it ensures portability of the engine. */
 | 
			
		||||
	typedef float ik_f32;
 | 
			
		||||
 | 
			
		||||
	//! 64 bit floating point variable.
 | 
			
		||||
	/** This is a typedef for double, it ensures portability of the engine. */
 | 
			
		||||
	typedef double ik_f64;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    // some constants
 | 
			
		||||
 | 
			
		||||
	const ik_f32 IK_ROUNDING_ERROR_32	= 0.000001f;
 | 
			
		||||
	const ik_f64 IK_PI64			    = 3.1415926535897932384626433832795028841971693993751;
 | 
			
		||||
	const ik_f32 IK_PI32			    = 3.14159265359f;
 | 
			
		||||
	const ik_f32 IK_RADTODEG            = 180.0f / IK_PI32;
 | 
			
		||||
	const ik_f32 IK_DEGTORAD            = IK_PI32 / 180.0f;
 | 
			
		||||
	const ik_f64 IK_RADTODEG64          = 180.0 / IK_PI64;
 | 
			
		||||
	const ik_f64 IK_DEGTORAD64          = IK_PI64 / 180.0;
 | 
			
		||||
 | 
			
		||||
	//! returns if a float equals the other one, taking floating
 | 
			
		||||
	//! point rounding errors into account
 | 
			
		||||
	inline bool equalsfloat(const ik_f32 a, const ik_f32 b, const ik_f32 tolerance = IK_ROUNDING_ERROR_32)
 | 
			
		||||
	{
 | 
			
		||||
		return (a + tolerance > b) && (a - tolerance < b);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
} // end irrklang namespace
 | 
			
		||||
 | 
			
		||||
// ensure wchar_t type is existing for unicode support
 | 
			
		||||
#include <wchar.h>
 | 
			
		||||
 | 
			
		||||
// define the wchar_t type if not already built in.
 | 
			
		||||
#ifdef _MSC_VER  // microsoft compiler
 | 
			
		||||
	#ifndef _WCHAR_T_DEFINED
 | 
			
		||||
		//! A 16 bit wide character type.
 | 
			
		||||
		/**
 | 
			
		||||
			Defines the wchar_t-type.
 | 
			
		||||
			In VS6, its not possible to tell
 | 
			
		||||
			the standard compiler to treat wchar_t as a built-in type, and
 | 
			
		||||
			sometimes we just don't want to include the huge stdlib.h or wchar.h,
 | 
			
		||||
			so we'll use this.
 | 
			
		||||
		*/
 | 
			
		||||
		typedef unsigned short wchar_t;
 | 
			
		||||
		#define _WCHAR_T_DEFINED
 | 
			
		||||
	#endif // wchar is not defined
 | 
			
		||||
#endif // microsoft compiler
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif // __IRR_TYPES_H_INCLUDED__
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										261
									
								
								SQCSim2021/external/irrKlang-1.6.0/include/ik_vec3d.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										261
									
								
								SQCSim2021/external/irrKlang-1.6.0/include/ik_vec3d.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,261 @@
 | 
			
		||||
// Copyright (C) 2002-2018 Nikolaus Gebhardt
 | 
			
		||||
// This file is part of the "irrKlang" library.
 | 
			
		||||
// For conditions of distribution and use, see copyright notice in irrKlang.h
 | 
			
		||||
 | 
			
		||||
#ifndef __IRR_IRRKLANG_VEC_3D_H_INCLUDED__
 | 
			
		||||
#define __IRR_IRRKLANG_VEC_3D_H_INCLUDED__
 | 
			
		||||
 | 
			
		||||
#include <math.h>
 | 
			
		||||
#include "ik_irrKlangTypes.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace irrklang
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
	//! a 3d vector template class for representing vectors and points in 3d
 | 
			
		||||
	template <class T>
 | 
			
		||||
	class vec3d
 | 
			
		||||
	{
 | 
			
		||||
	public:
 | 
			
		||||
 | 
			
		||||
		vec3d(): X(0), Y(0), Z(0) {};
 | 
			
		||||
		vec3d(T nx, T ny, T nz) : X(nx), Y(ny), Z(nz) {};
 | 
			
		||||
		vec3d(const vec3d<T>& other)	:X(other.X), Y(other.Y), Z(other.Z) {};
 | 
			
		||||
 | 
			
		||||
		//! constructor creating an irrklang vec3d from an irrlicht vector.
 | 
			
		||||
		#ifdef __IRR_POINT_3D_H_INCLUDED__
 | 
			
		||||
		template<class B>
 | 
			
		||||
		vec3d(const B& other)	:X(other.X), Y(other.Y), Z(other.Z) {};
 | 
			
		||||
		#endif // __IRR_POINT_3D_H_INCLUDED__
 | 
			
		||||
 | 
			
		||||
		// operators
 | 
			
		||||
 | 
			
		||||
		vec3d<T> operator-() const { return vec3d<T>(-X, -Y, -Z);   }
 | 
			
		||||
 | 
			
		||||
		vec3d<T>& operator=(const vec3d<T>& other)	{ X = other.X; Y = other.Y; Z = other.Z; return *this; }
 | 
			
		||||
 | 
			
		||||
		vec3d<T> operator+(const vec3d<T>& other) const { return vec3d<T>(X + other.X, Y + other.Y, Z + other.Z);	}
 | 
			
		||||
		vec3d<T>& operator+=(const vec3d<T>& other)	{ X+=other.X; Y+=other.Y; Z+=other.Z; return *this; }
 | 
			
		||||
 | 
			
		||||
		vec3d<T> operator-(const vec3d<T>& other) const { return vec3d<T>(X - other.X, Y - other.Y, Z - other.Z);	}
 | 
			
		||||
		vec3d<T>& operator-=(const vec3d<T>& other)	{ X-=other.X; Y-=other.Y; Z-=other.Z; return *this; }
 | 
			
		||||
 | 
			
		||||
		vec3d<T> operator*(const vec3d<T>& other) const { return vec3d<T>(X * other.X, Y * other.Y, Z * other.Z);	}
 | 
			
		||||
		vec3d<T>& operator*=(const vec3d<T>& other)	{ X*=other.X; Y*=other.Y; Z*=other.Z; return *this; }
 | 
			
		||||
		vec3d<T> operator*(const T v) const { return vec3d<T>(X * v, Y * v, Z * v);	}
 | 
			
		||||
		vec3d<T>& operator*=(const T v) { X*=v; Y*=v; Z*=v; return *this; }
 | 
			
		||||
 | 
			
		||||
		vec3d<T> operator/(const vec3d<T>& other) const { return vec3d<T>(X / other.X, Y / other.Y, Z / other.Z);	}
 | 
			
		||||
		vec3d<T>& operator/=(const vec3d<T>& other)	{ X/=other.X; Y/=other.Y; Z/=other.Z; return *this; }
 | 
			
		||||
		vec3d<T> operator/(const T v) const { T i=(T)1.0/v; return vec3d<T>(X * i, Y * i, Z * i);	}
 | 
			
		||||
		vec3d<T>& operator/=(const T v) { T i=(T)1.0/v; X*=i; Y*=i; Z*=i; return *this; }
 | 
			
		||||
 | 
			
		||||
		bool operator<=(const vec3d<T>&other) const { return X<=other.X && Y<=other.Y && Z<=other.Z;};
 | 
			
		||||
		bool operator>=(const vec3d<T>&other) const { return X>=other.X && Y>=other.Y && Z>=other.Z;};
 | 
			
		||||
 | 
			
		||||
		bool operator==(const vec3d<T>& other) const { return other.X==X && other.Y==Y && other.Z==Z; }
 | 
			
		||||
		bool operator!=(const vec3d<T>& other) const { return other.X!=X || other.Y!=Y || other.Z!=Z; }
 | 
			
		||||
 | 
			
		||||
		// functions
 | 
			
		||||
 | 
			
		||||
		//! returns if this vector equalsfloat the other one, taking floating point rounding errors into account
 | 
			
		||||
		bool equals(const vec3d<T>& other)
 | 
			
		||||
		{
 | 
			
		||||
			return equalsfloat(X, other.X) &&
 | 
			
		||||
				   equalsfloat(Y, other.Y) &&
 | 
			
		||||
				   equalsfloat(Z, other.Z);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		void set(const T nx, const T ny, const T nz) {X=nx; Y=ny; Z=nz; }
 | 
			
		||||
		void set(const vec3d<T>& p) { X=p.X; Y=p.Y; Z=p.Z;}
 | 
			
		||||
 | 
			
		||||
		//! Returns length of the vector.
 | 
			
		||||
		ik_f64 getLength() const { return sqrt(X*X + Y*Y + Z*Z); }
 | 
			
		||||
 | 
			
		||||
		//! Returns squared length of the vector.
 | 
			
		||||
		/** This is useful because it is much faster then
 | 
			
		||||
		getLength(). */
 | 
			
		||||
		ik_f64 getLengthSQ() const { return X*X + Y*Y + Z*Z; }
 | 
			
		||||
 | 
			
		||||
		//! Returns the dot product with another vector.
 | 
			
		||||
		T dotProduct(const vec3d<T>& other) const
 | 
			
		||||
		{
 | 
			
		||||
			return X*other.X + Y*other.Y + Z*other.Z;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		//! Returns distance from an other point.
 | 
			
		||||
		/** Here, the vector is interpreted as point in 3 dimensional space. */
 | 
			
		||||
		ik_f64 getDistanceFrom(const vec3d<T>& other) const
 | 
			
		||||
		{
 | 
			
		||||
			ik_f64 vx = X - other.X; ik_f64 vy = Y - other.Y; ik_f64 vz = Z - other.Z;
 | 
			
		||||
			return sqrt(vx*vx + vy*vy + vz*vz);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		//! Returns squared distance from an other point.
 | 
			
		||||
		/** Here, the vector is interpreted as point in 3 dimensional space. */
 | 
			
		||||
		ik_f32 getDistanceFromSQ(const vec3d<T>& other) const
 | 
			
		||||
		{
 | 
			
		||||
			ik_f32 vx = X - other.X; ik_f32 vy = Y - other.Y; ik_f32 vz = Z - other.Z;
 | 
			
		||||
			return (vx*vx + vy*vy + vz*vz);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		//! Calculates the cross product with another vector
 | 
			
		||||
		vec3d<T> crossProduct(const vec3d<T>& p) const
 | 
			
		||||
		{
 | 
			
		||||
			return vec3d<T>(Y * p.Z - Z * p.Y, Z * p.X - X * p.Z, X * p.Y - Y * p.X);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		//! Returns if this vector interpreted as a point is on a line between two other points.
 | 
			
		||||
		/** It is assumed that the point is on the line. */
 | 
			
		||||
		bool isBetweenPoints(const vec3d<T>& begin, const vec3d<T>& end) const
 | 
			
		||||
		{
 | 
			
		||||
			ik_f32 f = (ik_f32)(end - begin).getLengthSQ();
 | 
			
		||||
			return (ik_f32)getDistanceFromSQ(begin) < f &&
 | 
			
		||||
				(ik_f32)getDistanceFromSQ(end) < f;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		//! Normalizes the vector.
 | 
			
		||||
		vec3d<T>& normalize()
 | 
			
		||||
		{
 | 
			
		||||
			T l = (T)getLength();
 | 
			
		||||
			if (l == 0)
 | 
			
		||||
				return *this;
 | 
			
		||||
 | 
			
		||||
			l = (T)1.0 / l;
 | 
			
		||||
			X *= l;
 | 
			
		||||
			Y *= l;
 | 
			
		||||
			Z *= l;
 | 
			
		||||
			return *this;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		//! Sets the lenght of the vector to a new value
 | 
			
		||||
		void setLength(T newlength)
 | 
			
		||||
		{
 | 
			
		||||
			normalize();
 | 
			
		||||
			*this *= newlength;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		//! Inverts the vector.
 | 
			
		||||
		void invert()
 | 
			
		||||
		{
 | 
			
		||||
			X *= -1.0f;
 | 
			
		||||
			Y *= -1.0f;
 | 
			
		||||
			Z *= -1.0f;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		//! Rotates the vector by a specified number of degrees around the Y
 | 
			
		||||
		//! axis and the specified center.
 | 
			
		||||
		//! \param degrees: Number of degrees to rotate around the Y axis.
 | 
			
		||||
		//! \param center: The center of the rotation.
 | 
			
		||||
		void rotateXZBy(ik_f64 degrees, const vec3d<T>& center)
 | 
			
		||||
		{
 | 
			
		||||
			degrees *= IK_DEGTORAD64;
 | 
			
		||||
			T cs = (T)cos(degrees);
 | 
			
		||||
			T sn = (T)sin(degrees);
 | 
			
		||||
			X -= center.X;
 | 
			
		||||
			Z -= center.Z;
 | 
			
		||||
			set(X*cs - Z*sn, Y, X*sn + Z*cs);
 | 
			
		||||
			X += center.X;
 | 
			
		||||
			Z += center.Z;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		//! Rotates the vector by a specified number of degrees around the Z
 | 
			
		||||
		//! axis and the specified center.
 | 
			
		||||
		//! \param degrees: Number of degrees to rotate around the Z axis.
 | 
			
		||||
		//! \param center: The center of the rotation.
 | 
			
		||||
		void rotateXYBy(ik_f64 degrees, const vec3d<T>& center)
 | 
			
		||||
		{
 | 
			
		||||
			degrees *= IK_DEGTORAD64;
 | 
			
		||||
			T cs = (T)cos(degrees);
 | 
			
		||||
			T sn = (T)sin(degrees);
 | 
			
		||||
			X -= center.X;
 | 
			
		||||
			Y -= center.Y;
 | 
			
		||||
			set(X*cs - Y*sn, X*sn + Y*cs, Z);
 | 
			
		||||
			X += center.X;
 | 
			
		||||
			Y += center.Y;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		//! Rotates the vector by a specified number of degrees around the X
 | 
			
		||||
		//! axis and the specified center.
 | 
			
		||||
		//! \param degrees: Number of degrees to rotate around the X axis.
 | 
			
		||||
		//! \param center: The center of the rotation.
 | 
			
		||||
		void rotateYZBy(ik_f64 degrees, const vec3d<T>& center)
 | 
			
		||||
		{
 | 
			
		||||
			degrees *= IK_DEGTORAD64;
 | 
			
		||||
			T cs = (T)cos(degrees);
 | 
			
		||||
			T sn = (T)sin(degrees);
 | 
			
		||||
			Z -= center.Z;
 | 
			
		||||
			Y -= center.Y;
 | 
			
		||||
			set(X, Y*cs - Z*sn, Y*sn + Z*cs);
 | 
			
		||||
			Z += center.Z;
 | 
			
		||||
			Y += center.Y;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		//! Returns interpolated vector.
 | 
			
		||||
		/** \param other: other vector to interpolate between
 | 
			
		||||
		\param d: value between 0.0f and 1.0f. */
 | 
			
		||||
		vec3d<T> getInterpolated(const vec3d<T>& other, ik_f32 d) const
 | 
			
		||||
		{
 | 
			
		||||
			ik_f32 inv = 1.0f - d;
 | 
			
		||||
			return vec3d<T>(other.X*inv + X*d,
 | 
			
		||||
								other.Y*inv + Y*d,
 | 
			
		||||
								other.Z*inv + Z*d);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		//! Gets the Y and Z rotations of a vector.
 | 
			
		||||
		/** Thanks to Arras on the Irrlicht forums to add this method.
 | 
			
		||||
		 \return A vector representing the rotation in degrees of
 | 
			
		||||
		this vector. The Z component of the vector will always be 0. */
 | 
			
		||||
		vec3d<T> getHorizontalAngle()
 | 
			
		||||
		{
 | 
			
		||||
			vec3d<T> angle;
 | 
			
		||||
 | 
			
		||||
			angle.Y = (T)atan2(X, Z);
 | 
			
		||||
			angle.Y *= (ik_f32)IK_RADTODEG;
 | 
			
		||||
 | 
			
		||||
			if (angle.Y < 0.0f) angle.Y += 360.0f;
 | 
			
		||||
			if (angle.Y >= 360.0f) angle.Y -= 360.0f;
 | 
			
		||||
 | 
			
		||||
			ik_f32 z1 = (T)sqrt(X*X + Z*Z);
 | 
			
		||||
 | 
			
		||||
			angle.X = (T)atan2(z1, Y);
 | 
			
		||||
			angle.X *= (ik_f32)IK_RADTODEG;
 | 
			
		||||
			angle.X -= 90.0f;
 | 
			
		||||
 | 
			
		||||
			if (angle.X < 0.0f) angle.X += 360.0f;
 | 
			
		||||
			if (angle.X >= 360) angle.X -= 360.0f;
 | 
			
		||||
 | 
			
		||||
			return angle;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		//! Fills an array of 4 values with the vector data (usually floats).
 | 
			
		||||
		/** Useful for setting in shader constants for example. The fourth value
 | 
			
		||||
		 will always be 0. */
 | 
			
		||||
		void getAs4Values(T* array)
 | 
			
		||||
		{
 | 
			
		||||
			array[0] = X;
 | 
			
		||||
			array[1] = Y;
 | 
			
		||||
			array[2] = Z;
 | 
			
		||||
			array[3] = 0;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		// member variables
 | 
			
		||||
 | 
			
		||||
		T X, Y, Z;
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	//! Typedef for a ik_f32 3d vector, a vector using floats for X, Y and Z
 | 
			
		||||
	typedef vec3d<ik_f32> vec3df;
 | 
			
		||||
 | 
			
		||||
	//! Typedef for an integer 3d vector, a vector using ints for X, Y and Z
 | 
			
		||||
	typedef vec3d<ik_s32> vec3di;
 | 
			
		||||
 | 
			
		||||
	template<class S, class T> vec3d<T> operator*(const S scalar, const vec3d<T>& vector) { return vector*scalar; }
 | 
			
		||||
 | 
			
		||||
} // end namespace irrklang
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										1040
									
								
								SQCSim2021/external/irrKlang-1.6.0/include/irrKlang.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1040
									
								
								SQCSim2021/external/irrKlang-1.6.0/include/irrKlang.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
		Reference in New Issue
	
	Block a user