seqpTest.c 4.54 KB
/*====================================================================
 * seqpTest.c
 *
 * Synopsis:  This file contains a simple test for the audiotest suite
 *
 * 
 * Copyright 1993, Silicon Graphics, Inc.
 * All Rights Reserved.
 *
 * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics,
 * Inc.; the contents of this file may not be disclosed to third
 * parties, copied or duplicated in any form, in whole or in part,
 * without the prior written permission of Silicon Graphics, Inc.
 *
 * RESTRICTED RIGHTS LEGEND:
 * Use, duplication or disclosure by the Government is subject to
 * restrictions as set forth in subdivision (c)(1)(ii) of the Rights
 * in Technical Data and Computer Software clause at DFARS
 * 252.227-7013, and/or in similar or successor clauses in the FAR,
 * DOD or NASA FAR Supplement. Unpublished - rights reserved under the
 * Copyright Laws of the United States.
 *====================================================================*/

#include <libaudio.h>
#include "UniversalSP.h"
#include "audiotest.h"
#include "audio.h"
#include "seqpMonkey.h"
#include "seqpScript.h"
#include "seqpLoop.h"


/**** Share the heap with other test files, so have external ****/
extern ALHeap     	gHeapRec;
extern u8         	gHeapBuf[AUDIO_HEAP_SIZE];

ALBankFile *		gBankFile;
ALSeqFile *		gSeqFile;
ALUSPlayer *		gSeqp;
ALUSeq *		gSeq;
u8 *			gSeqData;


/**** Prototypes and test control structure ****/
static void InitTest (u32 subTestNum);
static void StopTest (u32 subTestNum); 

static void InitOnce (void);
static void FiniOnce (void);
static void PrintTestHeader (void);


#ifdef COMP_SEQ_PLAY
#define kNumTests	(kNumScripts+1)
#else
#define kNumTests	(kNumScripts+2)
#endif

/* The test structure for seqp test. */
test_cntrl seqpTest =
{
    &InitTest,
    &StopTest,
    NULL,	    /* setup by the subtest's init routine */
    NULL,	    /* setup by the subtest's init routine */
    NULL,	    /* retrace data */
    kNumTests       /* u32  numSubTests */
};



void InitTest (u32 subTestNum) 
{
    if (subTestNum == 0)
    {
	InitOnce ();
	PrintTestHeader ();
    }

    PRINTF("\n");

    switch (subTestNum)
    {

#ifndef COMP_SEQ_PLAY
        case kNumTests-2:
	    SeqpLoop_Init ();
	break;
#endif
        case kNumTests-1:
	    SeqpMonkey_Init ();
	break;

        default:
	    SeqpScript_Init (subTestNum);
        break;
    }
}


void StopTest (u32 subTestNum)
{
    switch (subTestNum)
    {

#ifndef COMP_SEQ_PLAY
        case kNumTests-2:
	    SeqpLoop_Fini ();
	break;
#endif

        case kNumTests-1:
	    SeqpMonkey_Fini ();
	break;

        default:
	    SeqpScript_Fini ();
	break;
    }

    if (subTestNum == (kNumTests - 1))
	FiniOnce ();
}


static void InitOnce (void)
{
    ALSynConfig         c;
    amConfig            amc;
    u32                 i, len;

    for (i=0; i<sizeof(gHeapBuf); i++)
	gHeapBuf[i] = 0;

    alHeapInit(&gHeapRec, gHeapBuf, sizeof(gHeapBuf));    

    /**** Load the bank file from ROM ****/
    len = _midibankSegmentRomEnd - _midibankSegmentRomStart;
    gBankFile = alHeapAlloc(&gHeapRec, 1, len);
    romCopy(_midibankSegmentRomStart, (char *)gBankFile, len);

    alBnkfNew(gBankFile, (u8 *) _miditableSegmentRomStart);


    /**** Load the sequence file header and data from ROM ****/
    gSeqFile = alHeapAlloc(&gHeapRec, 1, 4);
    romCopy(_seqSegmentRomStart, (u8 *)gSeqFile, 4);    
    len = 4 + gSeqFile->seqCount*sizeof(ALSeqData);
    gSeqFile = alHeapAlloc(&gHeapRec, 1, len);
    romCopy(_seqSegmentRomStart, (u8 *)gSeqFile, len);
    
    alSeqFileNew(gSeqFile, (u8 *) _seqSegmentRomStart);

    /**** Allocate space for the sequence player, sequence, and sequence data. ****/
    gSeqp = alHeapAlloc(&gHeapRec, 1, sizeof(ALUSPlayer));
    gSeq = alHeapAlloc(&gHeapRec, 1, sizeof(ALUSeq));
    gSeqData = alHeapAlloc(&gHeapRec, 1, MAX_SEQ_LENGTH);

    /**** Create the Audio Manager ****/
    c.maxVVoices = MAX_SYNTH_VVOICES;
    c.maxPVoices = MAX_SYNTH_PVOICES;
    c.maxUpdates = MAX_SYNTH_UPDATES;
    c.dmaproc    = 0;                  /* audio mgr will fill this in */
    c.fxType     = AL_FX_NONE; /*AL_FX_SMALLROOM; */
    c.heap       = &gHeapRec;
    
    amc.outputRate = 44100;
    amc.framesPerField = NUM_FIELDS;
    amc.maxACMDSize = MAX_RSP_CMDS;
    amCreateAudioMgr(&c, AUDIO_PRIORITY, &amc);
}


void FiniOnce (void)
{
    amDestroyAM ();
}


static void
PrintTestHeader (void)
{

#ifdef COMP_SEQ_PLAY
    PRINTF("\n-------------------------------\n");
    PRINTF("Testing Compact Sequence Player\n\n");
#else
    PRINTF("\n-----------------------\n");
    PRINTF("Testing Sequence Player\n\n");
#endif

}