audio.h
4.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
/*====================================================================
* audio.h
*
* Synopsis:
*
* Copyright 1995, 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.
*====================================================================*/
#ifndef __audio__
#define __audio__
#include <ultra64.h>
#include <libaudio.h>
#include <sched.h>
#include "audiotest.h" /* MAX_MESGS */
#define MAX_SYNTH_UPDATES 128
#define MAX_SEQP_EVENTS 48
#define MAX_SNDP_EVENTS 128
#define AUDIO_HEAP_SIZE 400000
#define MAX_SYNTH_VVOICES 20
#define MAX_SYNTH_PVOICES 20
#define MAX_SEQP_VOICES 20
#define MAX_SNDP_VOICES 12
#define EXTRA_SAMPLES 80
#define NUM_OUTPUT_BUFFERS 3 /* Need three of these */
#define OUTPUT_RATE 44100
#define QUIT_MSG 10
#define AUDIO_STACKSIZE 0x600
#define MAX_SEQ_LENGTH 30000
#define DMA_BUFFER_LENGTH 0x500 /* Larger buffers result in fewer DMA' but more */
/* memory being used. */
#define NUM_ACMD_LISTS 2 /* two lists used by this example */
#define MAX_RSP_CMDS 2000 /* max number of commands in any command list. */
/* Mainly dependent on sequences used */
#define NUM_DMA_BUFFERS 40 /* max number of dma buffers needed. */
/* Mainly dependent on sequences and sfx's */
#define NUM_DMA_MESSAGES 20 /* The maximum number of DMAs any one frame can */
/* have. */
#define FRAME_LAG 1 /* The number of frames to keep a dma buffer. */
/* Increasing this number causes buffers to not */
/* be deleted as quickly. This results in fewer */
/* DMA's but you need more buffers. */
#define MAX_AUDIO_MSGS 8
/**** type define's for structures unique to audiomgr ****/
typedef union {
struct {
short type;
} gen;
struct {
short type;
struct AudioInfo_s *info;
} done;
OSScMsg app;
} AudioMsg;
typedef struct AudioInfo_s {
short *data; /* Output data pointer */
short frameSamples; /* # of samples synthesized in this frame */
OSScTask task; /* scheduler structure */
AudioMsg msg; /* completion message */
} AudioInfo;
typedef struct {
Acmd *ACMDList[NUM_ACMD_LISTS];
AudioInfo *audioInfo[NUM_OUTPUT_BUFFERS];
OSThread thread;
OSMesgQueue audioFrameMsgQ;
OSMesg audioFrameMsgBuf[MAX_MESGS];
OSMesgQueue audioReplyMsgQ;
OSMesg audioReplyMsgBuf[MAX_MESGS];
ALGlobals g;
} AMAudioMgr;
typedef struct
{
ALLink node;
u32 startAddr;
u32 lastFrame;
char *ptr;
} AMDMABuffer;
typedef struct
{
u8 initialized;
AMDMABuffer *firstUsed;
AMDMABuffer *firstFree;
} AMDMAState;
typedef struct {
u32 outputRate;
u32 framesPerField;
u32 maxACMDSize;
} amConfig;
void amCreateAudioMgr(ALSynConfig *c, OSPri priority, amConfig *amc );
void amDestroyAM(void);
extern u64 audYieldBuf[];
#endif