gearmulator

Emulation of classic VA synths of the late 90s/2000s that are based on Motorola 56300 family DSPs
Log | Files | Refs | Submodules | README | LICENSE

test_w_saw8.c (3955B)


      1 /*
      2  * $Id$
      3  * test_w_saw8.c
      4  * Generate stereo 8 bit sawtooth waveforms.
      5  *
      6  * Author: Phil Burk, http://www.softsynth.com
      7  *
      8  * This program uses PABLIO, the Portable Audio Blocking I/O Library.
      9  * PABLIO is built on top of PortAudio, the Portable Audio Library.
     10  *
     11  * For more information see: http://www.portaudio.com
     12  * Copyright (c) 1999-2000 Ross Bencina and Phil Burk
     13  *
     14  * Permission is hereby granted, free of charge, to any person obtaining
     15  * a copy of this software and associated documentation files
     16  * (the "Software"), to deal in the Software without restriction,
     17  * including without limitation the rights to use, copy, modify, merge,
     18  * publish, distribute, sublicense, and/or sell copies of the Software,
     19  * and to permit persons to whom the Software is furnished to do so,
     20  * subject to the following conditions:
     21  *
     22  * The above copyright notice and this permission notice shall be
     23  * included in all copies or substantial portions of the Software.
     24  *
     25  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
     26  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
     27  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
     28  * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
     29  * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
     30  * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
     31  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
     32  */
     33 
     34 /*
     35  * The text above constitutes the entire PortAudio license; however, 
     36  * the PortAudio community also makes the following non-binding requests:
     37  *
     38  * Any person wishing to distribute modifications to the Software is
     39  * requested to send the modifications to the original developer so that
     40  * they can be incorporated into the canonical version. It is also 
     41  * requested that these non-binding requests be included along with the 
     42  * license above.
     43  */
     44 
     45 #include <stdio.h>
     46 #include <stdlib.h>
     47 #include <math.h>
     48 #include "pablio.h"
     49 #include <string.h>
     50 
     51 #define SAMPLE_RATE         (22050)
     52 #define NUM_SECONDS             (6)
     53 #define SAMPLES_PER_FRAME       (2)
     54 
     55 
     56 #define FRAMES_PER_BLOCK    (100)
     57 
     58 unsigned char   samples[FRAMES_PER_BLOCK][SAMPLES_PER_FRAME];
     59 unsigned char   phases[SAMPLES_PER_FRAME];
     60 
     61 /*******************************************************************/
     62 int main(void);
     63 int main(void)
     64 {
     65     int             i,j;
     66     PaError         err;
     67     PABLIO_Stream  *aOutStream;
     68 
     69     printf("Generate unsigned 8 bit sawtooth waves using PABLIO.\n");
     70     fflush(stdout);
     71 
     72     /* Open simplified blocking I/O layer on top of PortAudio. */
     73     err = OpenAudioStream( &aOutStream, SAMPLE_RATE, paUInt8,
     74                            (PABLIO_WRITE | PABLIO_STEREO) );
     75     if( err != paNoError ) goto error;
     76 
     77     /* Initialize oscillator phases to "ground" level for paUInt8. */
     78     phases[0] = 128;
     79     phases[1] = 128;
     80 
     81     for( i=0; i<(NUM_SECONDS * SAMPLE_RATE); i += FRAMES_PER_BLOCK )
     82     {
     83         /* Generate sawtooth waveforms in a block for efficiency. */
     84         for( j=0; j<FRAMES_PER_BLOCK; j++ )
     85         {
     86             /* Generate a sawtooth wave by incrementing a variable. */
     87             phases[0] += 1;
     88             /* We don't have to do anything special to wrap when using paUint8 because
     89              * 8 bit arithmetic automatically wraps. */
     90             samples[j][0] = phases[0];
     91 
     92             /* On the second channel, generate a higher sawtooth wave. */
     93             phases[1] += 3;
     94             samples[j][1] = phases[1];
     95         }
     96 
     97         /* Write samples to output. */
     98         WriteAudioStream( aOutStream, samples, FRAMES_PER_BLOCK );
     99     }
    100 
    101     CloseAudioStream( aOutStream );
    102 
    103     printf("Sawtooth sound test complete.\n" );
    104     fflush(stdout);
    105     return 0;
    106 
    107 error:
    108     fprintf( stderr, "An error occured while using PABLIO\n" );
    109     fprintf( stderr, "Error number: %d\n", err );
    110     fprintf( stderr, "Error message: %s\n", Pa_GetErrorText( err ) );
    111     return -1;
    112 }