| 
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -7,7 +7,7 @@ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			*   This example has been created using raylib 1.6 (www.raylib.com) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			*   raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			* | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			*   Copyright (c) 2015 Ramon Santamaria (@raysan5) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			*   Copyright (c) 2015-2018 Ramon Santamaria (@raysan5) and James Hofmann (@triplefox) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			* | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			********************************************************************************************/ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
	
		
			
				| 
				
				
				
					
						
					
				
				 | 
			
			 | 
			
			@ -17,7 +17,7 @@ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#include <math.h>           // Required for: sinf() | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#include <string.h>         // Required for: memcpy() | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#define MAX_SAMPLES             512 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#define MAX_SAMPLES               512 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#define MAX_SAMPLES_PER_UPDATE   4096 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			int main() | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -70,16 +70,17 @@ int main() | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			         | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        // Sample mouse input. | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        mousePosition = GetMousePosition(); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			         | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        if (IsMouseButtonDown(MOUSE_LEFT_BUTTON))  | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            float fp = (float)(mousePosition.y); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            frequency = 40.0f + (float)(fp); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			         | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        // Rewrite the sine wave. | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        // Compute two cycles to allow the buffer padding, simplifying | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        // any modulation, resampling, etc. | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        if (frequency != oldFrequency) { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			             | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        // Compute two cycles to allow the buffer padding, simplifying any modulation, resampling, etc. | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        if (frequency != oldFrequency)  | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            // Compute wavelength. Limit size in both directions. | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            int oldWavelength = waveLength; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            waveLength = (int)(22050/frequency); | 
			
		
		
	
	
		
			
				| 
				
				
				
					
						
					
				
				 | 
			
			 | 
			
			@ -100,28 +101,29 @@ int main() | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        // Refill audio stream if required | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        if (IsAudioBufferProcessed(stream))  | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			             | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            // Synthesize a buffer that is exactly the requested size | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            int writeCursor = 0; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            while(writeCursor < MAX_SAMPLES_PER_UPDATE) { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			             | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            while (writeCursor < MAX_SAMPLES_PER_UPDATE)  | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                // Start by trying to write the whole chunk at once | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                int writeLength = MAX_SAMPLES_PER_UPDATE-writeCursor; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                // Limit to the maximum readable size | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                int readLength = waveLength-readCursor; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                if (writeLength > readLength) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                    writeLength = readLength; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                if (writeLength > readLength) writeLength = readLength; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                // Write the slice | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                memcpy(writeBuf + writeCursor, data + readCursor, writeLength*sizeof(short)); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                // Update cursors and loop audio | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                readCursor = (readCursor + writeLength) % waveLength; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                writeCursor += writeLength; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			             | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            // copy finished frame to audio stream | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            // Copy finished frame to audio stream | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            UpdateAudioStream(stream, writeBuf, MAX_SAMPLES_PER_UPDATE); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        //---------------------------------------------------------------------------------- | 
			
		
		
	
	
		
			
				| 
				
				
				
					
						
					
				
				 | 
			
			 | 
			
			@ -132,7 +134,7 @@ int main() | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            ClearBackground(RAYWHITE); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            DrawText(FormatText("Sine frequency: %i",(int)frequency), mi">240, 140, 20, LIGHTGRAY); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            DrawText(FormatText("sine frequency: %i",(int)frequency), n">GetScreenWidth() - 220, 10, 20, RED); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            DrawText("click mouse button to change frequency", 10, 10, 20, DARKGRAY); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			             | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            // Draw the current buffer state proportionate to the screen | 
			
		
		
	
	
		
			
				| 
				
				
				
					
						
					
				
				 | 
			
			 | 
			
			@ -154,7 +156,6 @@ int main() | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    free(writeBuf);             // Unload write buffer | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    CloseAudioStream(stream);   // Close raw audio stream and delete buffers from RAM | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    CloseAudioDevice();         // Close audio device (music streaming is automatically stopped) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    CloseWindow();              // Close window and OpenGL context | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
				
				 | 
			
			 | 
			
			
 |