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