117 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			117 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #pragma once
 | |
| 
 | |
| #include <kinc/global.h>
 | |
| 
 | |
| #include <stdbool.h>
 | |
| #include <stdint.h>
 | |
| 
 | |
| /*! \file soundstream.h
 | |
|     \brief Sound-Streams are decoded while playing and as such are useful for large audio-files like music or speech.
 | |
| */
 | |
| 
 | |
| #ifdef __cplusplus
 | |
| extern "C" {
 | |
| #endif
 | |
| 
 | |
| struct stb_vorbis;
 | |
| 
 | |
| typedef struct kinc_a1_sound_stream {
 | |
| 	struct stb_vorbis *vorbis;
 | |
| 	int chans;
 | |
| 	int rate;
 | |
| 	bool myLooping;
 | |
| 	float myVolume;
 | |
| 	bool rateDecodedHack;
 | |
| 	bool end;
 | |
| 	float samples[2];
 | |
| 	uint8_t *buffer;
 | |
| } kinc_a1_sound_stream_t;
 | |
| 
 | |
| /// <summary>
 | |
| /// Create a sound-stream from a wav file.
 | |
| /// </summary>
 | |
| /// <param name="filename">A path to a wav file</param>
 | |
| /// <param name="looping">Defines whether the stream will be looped automatically</param>
 | |
| /// <returns>The newly created sound-stream</returns>
 | |
| KINC_FUNC kinc_a1_sound_stream_t *kinc_a1_sound_stream_create(const char *filename, bool looping);
 | |
| 
 | |
| /// <summary>
 | |
| /// Gets the next audio-frame in the stream.
 | |
| /// </summary>
 | |
| /// <param name="stream">The stream to extract the frame from</param>
 | |
| /// <returns>The next sample</returns>
 | |
| KINC_FUNC float *kinc_a1_sound_stream_next_frame(kinc_a1_sound_stream_t *stream);
 | |
| 
 | |
| /// <summary>
 | |
| /// Gets the number of audio-channels the stream uses.
 | |
| /// </summary>
 | |
| /// <param name="stream">The stream to extract the number of channels from</param>
 | |
| /// <returns>The number of audio-channels</returns>
 | |
| KINC_FUNC int kinc_a1_sound_stream_channels(kinc_a1_sound_stream_t *stream);
 | |
| 
 | |
| /// <summary>
 | |
| /// Gets the sample-rate used by the stream.
 | |
| /// </summary>
 | |
| /// <param name="stream">The stream to extract the sample-rate from</param>
 | |
| /// <returns>The sample-rate of the stream</returns>
 | |
| KINC_FUNC int kinc_a1_sound_stream_sample_rate(kinc_a1_sound_stream_t *stream);
 | |
| 
 | |
| /// <summary>
 | |
| /// Returns whether the stream loops automatically.
 | |
| /// </summary>
 | |
| /// <param name="stream">The stream to extract the looping-information from</param>
 | |
| /// <returns>Whether the stream loops</returns>
 | |
| KINC_FUNC bool kinc_a1_sound_stream_looping(kinc_a1_sound_stream_t *stream);
 | |
| 
 | |
| /// <summary>
 | |
| /// Changes whether the stream is looped automatically.
 | |
| /// </summary>
 | |
| /// <param name="stream">The stream to change</param>
 | |
| /// <param name="loop">The new loop value to set</param>
 | |
| KINC_FUNC void kinc_a1_sound_stream_set_looping(kinc_a1_sound_stream_t *stream, bool loop);
 | |
| 
 | |
| /// <summary>
 | |
| /// Returns whether the stream finished playing.
 | |
| /// </summary>
 | |
| /// <param name="stream">The stream to query</param>
 | |
| /// <returns>Whether the stream finished playing</returns>
 | |
| KINC_FUNC bool kinc_a1_sound_stream_ended(kinc_a1_sound_stream_t *stream);
 | |
| 
 | |
| /// <summary>
 | |
| /// Returns the length of the stream.
 | |
| /// </summary>
 | |
| /// <param name="stream">The stream to query</param>
 | |
| /// <returns>The length of the stream in seconds</returns>
 | |
| KINC_FUNC float kinc_a1_sound_stream_length(kinc_a1_sound_stream_t *stream);
 | |
| 
 | |
| /// <summary>
 | |
| /// Returns the current playing-position of the stream.
 | |
| /// </summary>
 | |
| /// <param name="stream">The stream to query</param>
 | |
| /// <returns>The current playing-position in seconds</returns>
 | |
| KINC_FUNC float kinc_a1_sound_stream_position(kinc_a1_sound_stream_t *stream);
 | |
| 
 | |
| /// <summary>
 | |
| /// Resets the stream to its start-position.
 | |
| /// </summary>
 | |
| /// <param name="stream">The stream to change</param>
 | |
| KINC_FUNC void kinc_a1_sound_stream_reset(kinc_a1_sound_stream_t *stream);
 | |
| 
 | |
| /// <summary>
 | |
| /// Gets the stream's volume-multiplicator.
 | |
| /// </summary>
 | |
| /// <param name="stream">The stream to query</param>
 | |
| /// <returns>The volume-multiplicator</returns>
 | |
| KINC_FUNC float kinc_a1_sound_stream_volume(kinc_a1_sound_stream_t *stream);
 | |
| 
 | |
| /// <summary>
 | |
| /// Sets the stream's volume-multiplicator.
 | |
| /// </summary>
 | |
| /// <param name="stream">The stream to change</param>
 | |
| /// <param name="value">The volume-multiplicator</param>
 | |
| KINC_FUNC void kinc_a1_sound_stream_set_volume(kinc_a1_sound_stream_t *stream, float value);
 | |
| 
 | |
| #ifdef __cplusplus
 | |
| }
 | |
| #endif
 |