mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-10-30 20:40:28 -04:00 
			
		
		
		
	git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/trunk@189 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
		
			
				
	
	
		
			92 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			92 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| <!doctype html public "-//w3c//dtd html 4.0 transitional//en">
 | |
| <html>
 | |
| <head>
 | |
|    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
 | |
|    <meta name="GENERATOR" content="Mozilla/4.77 [en]C-gatewaynet  (Win98; U) [Netscape]">
 | |
|    <meta name="Author" content="Phil Burk">
 | |
|    <meta name="Description" content="Tutorial for PortAudio, a cross platform, open-source, audio I/O library.It provides a very simple API for recording and/or playing sound using a simple callback function.">
 | |
|    <meta name="KeyWords" content="audio, tutorial, library, portable, open-source, DirectSound,sound, music, JSyn, synthesis,">
 | |
|    <title>PortAudio Tutorial</title>
 | |
| </head>
 | |
| <body>
 | |
|  
 | |
| <center><table COLS=1 WIDTH="100%" BGCOLOR="#FADA7A" >
 | |
| <tr>
 | |
| <td>
 | |
| <center>
 | |
| <h1>
 | |
| PortAudio Tutorial</h1></center>
 | |
| </td>
 | |
| </tr>
 | |
| </table></center>
 | |
| 
 | |
| <h2>
 | |
| Writing a Callback Function</h2>
 | |
| 
 | |
| <blockquote>To write a program using PortAudio, you must include the "portaudio.h"
 | |
| include file. You may wish to read "<a href="portaudio_h.txt">portaudio.h</a>"
 | |
| because it contains a complete description of the PortAudio functions and
 | |
| constants.
 | |
| <blockquote>
 | |
| <pre>#include "portaudio.h"</pre>
 | |
| </blockquote>
 | |
| The next task is to write your custom callback function. It is a function
 | |
| that is called by the PortAudio engine whenever it has captured audio data,
 | |
| or when it needs more audio data for output.
 | |
| <p>Your callback function is often called by an interrupt, or low level
 | |
| process so you should not do any complex system activities like allocating
 | |
| memory, or reading or writing files, or printf(). Just crunch numbers and
 | |
| generate audio signals. What is safe or not safe will vary from platform
 | |
| to platform. On the Macintosh, for example, you can only call "interrupt
 | |
| safe" routines. Also do not call any PortAudio functions in the callback
 | |
| except for Pa_StreamTime() and Pa_GetCPULoad().
 | |
| <p>Your callback function must return an int and accept the exact parameters
 | |
| specified in this typedef:
 | |
| <blockquote>
 | |
| <pre>typedef int (PortAudioCallback)(
 | |
|                void *inputBuffer, void *outputBuffer,
 | |
|                unsigned long framesPerBuffer,
 | |
|                PaTimestamp outTime, void *userData );</pre>
 | |
| </blockquote>
 | |
| Here is an example callback function from the test file "patests/patest_saw.c".
 | |
| It calculates a simple left and right sawtooth signal and writes it to
 | |
| the output buffer. Notice that in this example, the signals are of <tt>float</tt>
 | |
| data type. The signals must be between -1.0 and +1.0. You can also use
 | |
| 16 bit integers or other formats which are specified during setup. You
 | |
| can pass a pointer to your data structure through PortAudio which will
 | |
| appear as <tt>userData</tt>.
 | |
| <blockquote>
 | |
| <pre>int patestCallback(  void *inputBuffer, void *outputBuffer,
 | |
|                      unsigned long framesPerBuffer,
 | |
|                      PaTimestamp outTime, void *userData )
 | |
| {
 | |
|     unsigned int i;
 | |
| /* Cast data passed through stream to our structure type. */
 | |
|     paTestData *data = (paTestData*)userData;
 | |
|     float *out = (float*)outputBuffer;
 | |
|         
 | |
|     for( i=0; i<framesPerBuffer; i++ )
 | |
|     {
 | |
|     /* Stereo channels are interleaved. */
 | |
|         *out++ = data->left_phase;              /* left */
 | |
|         *out++ = data->right_phase;             /* right */
 | |
| 
 | |
|     /* Generate simple sawtooth phaser that ranges between -1.0 and 1.0. */
 | |
|         data->left_phase += 0.01f;
 | |
|     /* When signal reaches top, drop back down. */
 | |
|         if( data->left_phase >= 1.0f ) data->left_phase -= 2.0f;
 | |
| 
 | |
|     /* higher pitch so we can distinguish left and right. */
 | |
|         data->right_phase += 0.03f; 
 | |
|         if( data->right_phase >= 1.0f ) data->right_phase -= 2.0f;
 | |
|     }
 | |
|     return 0;
 | |
| }</pre>
 | |
| </blockquote>
 | |
| </blockquote>
 | |
| <font size=+2><a href="http://www.portaudio.com/">home</a> |
 | |
| <a href="pa_tutorial.html">contents</a>
 | |
| | <a href="pa_tut_over.html">previous</a> |  <a href="pa_tut_init.html">next</a></font>
 | |
| </body>
 | |
| </html>
 |