95%, core1/audio/n_csplayer.c done

This commit is contained in:
Banjo Kazooie 2022-12-05 16:53:43 -06:00
parent 1074cefa5f
commit 68d2037a85
6 changed files with 344 additions and 319 deletions

View File

@ -1,4 +1,4 @@
# banjo (94.9890%)
# banjo (95.3216%)
<img src="./progress/progress_total.svg">

View File

@ -197,7 +197,7 @@ segments:
- [0xF38E50, c, done/audio/n_synsetfxmix] #DONE
- [0xF38EE0, c, done/audio/n_synstopvoice] #DONE
- [0xF38F50, c, done/audio/n_synfreevoice] #DONE
- [0xF38FF0, c, audio/n_csplayer]
- [0xF38FF0, c, done/audio/n_csplayer] #DONE
- [0xF3A460, c, done/audio/cspsetbank] #DONE
- [0xF3A4A0, c, done/audio/cspstop] #DONE
- [0xF3A4D0, c, done/audio/n_csq] #DONE
@ -424,7 +424,7 @@ segments:
- [0xF53B70, .rodata, code_1BE90]
- [0xF53BA0, .rodata, code_1D5D0]
- [0xF53C00, .rodata, done/audio/n_synthesizer]
- [0xF53C10, bin, data_3A9C0] # .rodata, audio/n_csplayer]
- [0xF53C10, .rodata, done/audio/n_csplayer]
- [0xF53F80, .rodata, done/audio/n_reverb]
- [0xF53FB0, .rodata, done/audio/n_drvrNew]
- [0xF53FD0, .rodata, done/audio/n_env]

View File

@ -9,7 +9,7 @@
</mask>
<g mask="url(#anybadge_1)">
<path fill="#555" d="M0 0h44v20H0z"/>
<path fill="#2be000" d="M44 0h67v20H44z"/>
<path fill="#20e000" d="M44 0h67v20H44z"/>
<path fill="url(#b)" d="M0 0h111v20H0z"/>
</g>
<g fill="#fff" text-anchor="middle" font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="11">
@ -17,7 +17,7 @@
<text x="22.0" y="14">core1</text>
</g>
<g fill="#fff" text-anchor="middle" font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="11">
<text x="78.5" y="15" fill="#010101" fill-opacity=".3">90.4597%</text>
<text x="77.5" y="14">90.4597%</text>
<text x="78.5" y="15" fill="#010101" fill-opacity=".3">92.7510%</text>
<text x="77.5" y="14">92.7510%</text>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@ -9,7 +9,7 @@
</mask>
<g mask="url(#anybadge_1)">
<path fill="#555" d="M0 0h150v20H0z"/>
<path fill="#16e000" d="M150 0h67v20H150z"/>
<path fill="#15e000" d="M150 0h67v20H150z"/>
<path fill="url(#b)" d="M0 0h217v20H0z"/>
</g>
<g fill="#fff" text-anchor="middle" font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="11">
@ -17,7 +17,7 @@
<text x="75.0" y="14">Banjo-Kazooie (us.v10)</text>
</g>
<g fill="#fff" text-anchor="middle" font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="11">
<text x="184.5" y="15" fill="#010101" fill-opacity=".3">94.9890%</text>
<text x="183.5" y="14">94.9890%</text>
<text x="184.5" y="15" fill="#010101" fill-opacity=".3">95.3216%</text>
<text x="183.5" y="14">95.3216%</text>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -1,20 +0,0 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
#pragma GLOBAL_ASM("asm/nonmatchings/core1/audio/n_csplayer/func_8025D7C0.s")
#pragma GLOBAL_ASM("asm/nonmatchings/core1/audio/n_csplayer/func_8025D830.s")
#pragma GLOBAL_ASM("asm/nonmatchings/core1/audio/n_csplayer/func_8025D838.s")
#pragma GLOBAL_ASM("asm/nonmatchings/core1/audio/n_csplayer/func_8025D840.s")
#pragma GLOBAL_ASM("asm/nonmatchings/core1/audio/n_csplayer/func_8025DA30.s")
#pragma GLOBAL_ASM("asm/nonmatchings/core1/audio/n_csplayer/func_8025E430.s")
#pragma GLOBAL_ASM("asm/nonmatchings/core1/audio/n_csplayer/__n_CSPVoiceHandler.s")
#pragma GLOBAL_ASM("asm/nonmatchings/core1/audio/n_csplayer/n_alCSPNew.s")

View File

@ -1,33 +1,75 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
#include "n_synth.h"
#include <assert.h>
#include "seqp.h"
#include "n_cseqp.h"
#include "cseq.h"
#include "file_and_line.h"
#ifndef assert
#define assert(s)
#endif
extern void func_8033F000(const char *, const char *, int);
void n_alSynSetVol( N_ALVoice *v, s16 volume, ALMicroTime t);
s16 __n_vsVol(ALVoiceState *voice, ALSeqPlayer *seqp);
ALVoiceState *__n_lookupVoice(ALSeqPlayer *, u8, u8);
ALVoiceState *__n_mapVoice(ALSeqPlayer *, u8, u8, u8);
ALSound *__n_lookupSoundQuick(ALSeqPlayer *, u8, u8, u8);
void __n_seqpReleaseVoice(ALSeqPlayer *seqp, ALVoice *voice, ALMicroTime deltaTime);
/*====================================================================
* csplayer.c
*
* 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.
*====================================================================*/
/*
* Notes:
*
* Controller Numbers:
* 1 Modulation
* 7 Volume
* 10 Pan
* 11 Expression
* 64 Sustain
* 121 Reset All Controllers
* 123 All Notes Off
*
* Registered Parameters
* 0 Pitch Bend Sensitivity
* 1 Fine Tuning
* 2 Coarse Tuning
*/
void func_8025D7C0(ALCSPlayer *seqp);
static ALMicroTime __n_CSPVoiceHandler(void *node);
static void __n_CSPHandleNextSeqEvent(N_ALCSPlayer *seqp);
static void __n_CSPHandleMIDIMsg(N_ALCSPlayer *seqp, N_ALEvent *event);
static void __n_CSPHandleMetaMsg(N_ALCSPlayer *seqp, N_ALEvent *event);
static void __n_CSPRepostEvent(ALEventQueue *evtq, N_ALEventListItem *item);
static void __n_setUsptFromTempo(N_ALCSPlayer *seqp, ALCSeq *target, f32 tempo); /* sct 1/8/96 */
static void __CSPHandleNextSeqEvent(ALCSPlayer *seqp);
static void __n_CSPHandleMIDIMsg(N_ALCSPlayer *seqp, ALEvent *event);
static void __CSPHandleMetaMsg(ALCSPlayer *seqp, ALEvent *event);
static void __CSPRepostEvent(ALEventQueue *evtq, ALEventListItem *item);
static void __setUsptFromTempo(ALCSPlayer *seqp, f32 tempo); /* sct 1/8/96 */
/*
* Sequence Player public functions
*/
/*done*/
void n_alCSPNew(N_ALCSPlayer *seqp, ALSeqpConfig *c)
{
s32 i;
N_ALEventListItem *items;
N_ALVoiceState *vs;
N_ALVoiceState *voices;
ALEventListItem *items;
ALVoiceState *vs;
ALVoiceState *voices;
ALHeap *hp = c->heap;
@ -37,7 +79,7 @@ void n_alCSPNew(N_ALCSPlayer *seqp, ALSeqpConfig *c)
seqp->bank = 0;
seqp->target = NULL;
seqp->drvr = n_syn;
seqp->chanMask = 0xffff;
seqp->chanMask = -1;
seqp->uspt = 488;
seqp->nextDelta = 0;
seqp->state = AL_STOPPED;
@ -93,19 +135,20 @@ void n_alCSPNew(N_ALCSPlayer *seqp, ALSeqpConfig *c)
*************************************************************/
static ALMicroTime __n_CSPVoiceHandler(void *node)
{
N_ALCSPlayer *seqp = (N_ALCSPlayer *) node;
N_ALEvent evt;
ALCSPlayer *seqp = (ALCSPlayer *) node;
ALEvent evt;
ALVoice *voice;
ALMicroTime delta;
ALVoiceState *vs;
void *oscState;
f32 oscValue;
u8 chan;
do {
switch (seqp->nextEvent.type)
{
case (AL_SEQ_REF_EVT):
__n_CSPHandleNextSeqEvent(seqp);
__CSPHandleNextSeqEvent(seqp);
break;
case (AL_SEQP_API_EVT):
@ -171,7 +214,7 @@ static ALMicroTime __n_CSPVoiceHandler(void *node)
break;
case (AL_SEQP_META_EVT):
__n_CSPHandleMetaMsg(seqp, &seqp->nextEvent);
__CSPHandleMetaMsg(seqp, &seqp->nextEvent);
break;
case (AL_SEQP_VOL_EVT):
@ -189,7 +232,7 @@ static ALMicroTime __n_CSPVoiceHandler(void *node)
{
seqp->state = AL_PLAYING;
func_80250650();
__n_CSPPostNextSeqEvent(seqp); /* seqp must be AL_PLAYING before we call this routine. */
func_8025D7C0(seqp); /* seqp must be AL_PLAYING before we call this routine. */
}
break;
@ -259,29 +302,26 @@ static ALMicroTime __n_CSPVoiceHandler(void *node)
break;
case (AL_SEQP_SEQ_EVT):
//assert(seqp->state != AL_PLAYING); /* Must be done playing to change sequences. */
((seqp->state != AL_PLAYING)?((void)0):func_8033F000("seqp->state != AL_PLAYING","n_csplayer.c", 272));
matching_assert(seqp->state != AL_PLAYING, n_csplayer.c, 0x110);/* Must be done playing to change sequences. */
seqp->target = seqp->nextEvent.msg.spseq.seq;
seqp->chanMask = 0xFFFF;
seqp->chanMask = 0xffff;
// __setUsptFromTempo (seqp, 500000.0);
if (seqp->bank)
__n_initFromBank((ALSeqPlayer *)seqp, seqp->bank);
break;
case (AL_SEQP_BANK_EVT):
//assert(seqp->state == AL_STOPPED); /* Must be fully stopped to change banks. */
((seqp->state == AL_STOPPED)?((void)0):func_8033F000("seqp->state == AL_STOPPED","n_csplayer.c", 283));
matching_assert(seqp->state == AL_STOPPED, n_csplayer.c, 0x11b);
seqp->bank = seqp->nextEvent.msg.spbank.bank;
__n_initFromBank((ALSeqPlayer *)seqp, seqp->bank);
break;
/* sct 11/6/95 - these events should now be handled by __n_CSPHandleNextSeqEvent */
/* sct 11/6/95 - these events should now be handled by __CSPHandleNextSeqEvent */
case (AL_SEQ_END_EVT):
case (AL_TEMPO_EVT):
case (AL_SEQ_MIDI_EVT):
//assert(FALSE);
((FALSE)?((void)0):func_8033F000("FALSE","n_csplayer.c", 296));
matching_assert(FALSE, n_csplayer.c, 0x128);
break;
}
seqp->nextDelta = alEvtqNextEvent(&seqp->evtq, &seqp->nextEvent);
@ -304,8 +344,7 @@ static ALMicroTime __n_CSPVoiceHandler(void *node)
is no target sequence.
sct 11/7/95
*/
/*DONE*/
void __n_CSPPostNextSeqEvent(N_ALCSPlayer *seqp)
void func_8025D7C0(ALCSPlayer *seqp)
{
ALEvent evt;
s32 deltaTicks;
@ -330,7 +369,7 @@ void __n_CSPPostNextSeqEvent(N_ALCSPlayer *seqp)
sct 11/7/95
*/
static void
__n_CSPHandleNextSeqEvent(N_ALCSPlayer *seqp)
__CSPHandleNextSeqEvent(ALCSPlayer *seqp)
{
ALEvent evt;
@ -338,18 +377,18 @@ __n_CSPHandleNextSeqEvent(N_ALCSPlayer *seqp)
if (seqp->target == NULL)
return;
alCSeqNextEvent(seqp->target, &evt);
n_alCSeqNextEvent(seqp->target, &evt);
switch (evt.type)
{
case AL_SEQ_MIDI_EVT:
__n_CSPHandleMIDIMsg(seqp, &evt);
__n_CSPPostNextSeqEvent(seqp);
func_8025D7C0(seqp);
break;
case AL_TEMPO_EVT:
__n_CSPHandleMetaMsg(seqp, &evt);
__n_CSPPostNextSeqEvent(seqp);
__CSPHandleMetaMsg(seqp, &evt);
func_8025D7C0(seqp);
break;
case AL_SEQ_END_EVT:
@ -361,67 +400,60 @@ __n_CSPHandleNextSeqEvent(N_ALCSPlayer *seqp)
case AL_TRACK_END:
case AL_CSP_LOOPSTART:
case AL_CSP_LOOPEND:
__n_CSPPostNextSeqEvent(seqp);
func_8025D7C0(seqp);
break;
default:
//assert(FALSE); /* Sequence event type not supported. */
((FALSE)?((void)0):func_8033F000("FALSE","n_csplayer.c", 353));
break;
matching_assert(FALSE, n_csplayer.c, 0x161); /* Sequence event type not supported. */
}
}
static void __n_CSPHandleMIDIMsg(N_ALCSPlayer *seqp, N_ALEvent *event)
static void __n_CSPHandleMIDIMsg(N_ALCSPlayer *seqp, ALEvent *event)
{
N_ALVoice *voice;
N_ALVoiceState *vs;
s32 status;
u8 chan;
u8 key;
u8 vel;
u8 byte1;
u8 new_var;
u8 byte2;
ALMIDIEvent *midi = &event->msg.midi;
s16 vol;
N_ALEvent evt;
ALMicroTime deltaTime;
N_ALVoiceState *vstate;
ALEvent evt;
ALMicroTime deltaTime;
ALPan pan;
ALFxRef fxref;
status = midi->status & AL_MIDI_StatusMask;
new_var = midi->byte1;
chan = midi->status & AL_MIDI_ChannelMask;
byte1 = key = midi->byte1;
byte2 = vel = midi->byte2;
if(status == AL_MIDI_ChannelModeSelect){
byte1 = new_var;
byte2 = midi->byte2;
if(status == AL_MIDI_ControlChange){
if(byte1 == 0x7E) {
N_ALVoiceState *vstate2;
// vs = seqp->vAllocHead;
seqp->chanMask &= ~(1 << byte2);
vstate = seqp->vAllocHead;
while(vs){
if(vstate->channel == byte2){
__n_seqpReleaseVoice(seqp, &vstate->voice.node.next, vstate->sound->envelope->releaseTime);
}
vs = vs->next;
//vs NOT being initialied seems weird
for (vstate2 = seqp->vAllocHead; vs != 0; vs = vs->next)
{
if (vstate2->channel == byte2)
__n_seqpReleaseVoice((ALSeqPlayer*)seqp, &vstate2->voice, vstate2->sound->envelope->releaseTime);
}
return;
} else if(byte1 == 0x7F){
seqp->chanMask |= (1 << byte2);
seqp->chanMask |= 1 << byte2;
return;
}
}
if(!((seqp->chanMask & (1 << chan)) || status != AL_MIDI_NoteOn))
return;
//L8025DB08
if ((!((1 << chan) & seqp->chanMask) && (status == 0x90))) return;
switch (status)
{
case (AL_MIDI_NoteOn):
if (vel != 0) /* a real note on */
if (byte2 != 0) /* a real note on */
{
ALVoiceConfig config;
ALSound *sound;
@ -435,7 +467,7 @@ static void __n_CSPHandleMIDIMsg(N_ALCSPlayer *seqp, N_ALEvent *event)
if (seqp->state != AL_PLAYING)
break;
sound = __n_lookupSoundQuick((ALSeqPlayer*)seqp, key, vel, chan);
sound = __n_lookupSoundQuick((ALSeqPlayer*)seqp, byte1, byte2, chan);
ALFlagFailIf(!sound, seqp->debugFlags & NO_SOUND_ERR_MASK,
ERR_ALSEQP_NO_SOUND);
@ -443,11 +475,12 @@ static void __n_CSPHandleMIDIMsg(N_ALCSPlayer *seqp, N_ALEvent *event)
config.fxBus = 0;
config.unityPitch = 0;
vstate = __n_mapVoice((ALSeqPlayer*)seqp, key, vel, chan);
vstate = __n_mapVoice((ALSeqPlayer*)seqp, byte1, byte2, chan);
ALFlagFailIf(!vstate, seqp->debugFlags & NO_VOICE_ERR_MASK,
ERR_ALSEQP_NO_VOICE );
voice = &vstate->voice;
n_alSynAllocVoice(voice, &config);
/*
@ -460,7 +493,7 @@ static void __n_CSPHandleMIDIMsg(N_ALCSPlayer *seqp, N_ALEvent *event)
else
vstate->phase = AL_PHASE_NOTEON;
cents = (key - sound->keyMap->keyBase) * 100
cents = (byte1 - sound->keyMap->keyBase) * 100
+ sound->keyMap->detune;
vstate->pitch = alCents2Ratio(cents);
@ -544,7 +577,7 @@ static void __n_CSPHandleMIDIMsg(N_ALCSPlayer *seqp, N_ALEvent *event)
*/
evt.type = AL_CSP_NOTEOFF_EVT;
evt.msg.midi.status = chan | AL_MIDI_NoteOff;
evt.msg.midi.byte1 = key;
evt.msg.midi.byte1 = byte1;
evt.msg.midi.byte2 = 0; /* not needed ? */
deltaTime = seqp->uspt * midi->duration;
@ -562,7 +595,7 @@ static void __n_CSPHandleMIDIMsg(N_ALCSPlayer *seqp, N_ALEvent *event)
*/
case (AL_MIDI_NoteOff):
vstate = __n_lookupVoice((ALSeqPlayer*)seqp, key, chan);
vstate = __n_lookupVoice((ALSeqPlayer*)seqp, byte1, chan);
ALFlagFailIf(!vstate, seqp->debugFlags & NOTE_OFF_ERR_MASK,
ERR_ALSEQP_OFF_VOICE );
@ -583,7 +616,7 @@ static void __n_CSPHandleMIDIMsg(N_ALCSPlayer *seqp, N_ALEvent *event)
* aftertouch affects only notes that are already
* sounding.
*/
vstate = __n_lookupVoice((ALSeqPlayer*)seqp, key, chan);
vstate = __n_lookupVoice((ALSeqPlayer*)seqp, byte1, chan);
ALFailIf(!vstate, ERR_ALSEQP_POLY_VOICE );
vstate->velocity = byte2;
@ -635,6 +668,7 @@ static void __n_CSPHandleMIDIMsg(N_ALCSPlayer *seqp, N_ALEvent *event)
}
}
break;
case (0x7D):
seqp->chanState[chan].unkA = byte2;
for (vs = seqp->vAllocHead; vs != 0; vs = vs->next)
@ -692,39 +726,52 @@ static void __n_CSPHandleMIDIMsg(N_ALCSPlayer *seqp, N_ALEvent *event)
n_alSynSetFXMix(&vs->voice, byte2);
}
break;
case (0x6A):
case (0x6B):
case (0x6C):
case (0x6D):
case (0x6E):
case (0x6F):
case (0x70):
case (0x71):
case (0x72):
case (0x73):
case (0x74):
case (0x75):
case (0x76):
case (0x77):
func_80250104(seqp->target,key, chan);
case 0x6A: /* switch 2 */
case 0x6B: /* switch 2 */
case 0x6C: /* switch 2 */
case 0x6D: /* switch 2 */
case 0x6E: /* switch 2 */
case 0x6F: /* switch 2 */
case 0x70: /* switch 2 */
case 0x71: /* switch 2 */
case 0x72: /* switch 2 */
case 0x73: /* switch 2 */
case 0x74: /* switch 2 */
case 0x75: /* switch 2 */
case 0x76: /* switch 2 */
case 0x77: /* switch 2 */
func_80250104(seqp->target, byte1, chan);
break;
/* case (AL_MIDI_FX_CTRL_0):
case (AL_MIDI_FX_CTRL_1):
case (AL_MIDI_FX_CTRL_2):
case (AL_MIDI_FX_CTRL_3):
case (AL_MIDI_FX_CTRL_4):
case (AL_MIDI_FX_CTRL_5):
case (AL_MIDI_FX_CTRL_6):
case (AL_MIDI_FX_CTRL_7):
fxref = alSynGetFXRef(seqp->drvr, 0, 0);
if (fxref)
alSynSetFXParam(seqp->drvr, fxref, (s16)byte1, (void *)byte2);
break;
case (AL_MIDI_FX3_CTRL): */
default:
break;
}
break;
case (AL_MIDI_ProgramChange):
/* sct 1/16/96 - We must have a valid bank in order to process the program change. */
//assert(seqp->bank != NULL);
((seqp->bank != NULL)?((void)0):func_8033F000("seqp->bank != NULL", "n_csplayer.c", 715));
if (key < seqp->bank->instCount)
matching_assert(seqp->bank != NULL, n_csplayer.c, 0x2cb);
if (byte1 < seqp->bank->instCount)
{
ALInstrument *inst = seqp->bank->instArray[key];
ALInstrument *inst = seqp->bank->instArray[byte1];
__n_setInstChanState((ALSeqPlayer*)seqp, inst, chan); /* sct 11/6/95 */
}
else
{
#ifdef _DEBUG
__osError(ERR_ALSEQPINVALIDPROG, 2, key, seqp->bank->instCount);
__osError(ERR_ALSEQPINVALIDPROG, 2, byte1, seqp->bank->instCount);
#endif
}
break;
@ -760,8 +807,7 @@ static void __n_CSPHandleMIDIMsg(N_ALCSPlayer *seqp, N_ALEvent *event)
}
}
/*Done*/
static void __n_CSPHandleMetaMsg(N_ALCSPlayer *seqp, N_ALEvent *event)
static void __CSPHandleMetaMsg(ALCSPlayer *seqp, ALEvent *event)
{
ALTempoEvent *tevt = &event->msg.tempo;
ALEvent evt;
@ -778,7 +824,7 @@ static void __n_CSPHandleMetaMsg(N_ALCSPlayer *seqp, N_ALEvent *event)
{
oldUspt = seqp->uspt;
tempo = (tevt->byte1 << 16) | (tevt->byte2 << 8) | (tevt->byte3 << 0);
__n_setUsptFromTempo (seqp, seqp->target, (f32)tempo); /* sct 1/8/96 */
__setUsptFromTempo (seqp, (f32)tempo); /* sct 1/8/96 */
thisNode = (ALEventListItem*)seqp->evtq.allocList.next;
while(thisNode)
@ -814,18 +860,18 @@ static void __n_CSPHandleMetaMsg(N_ALCSPlayer *seqp, N_ALEvent *event)
nextNode = (ALEventListItem*)thisNode->node.next;
ticks = thisNode->delta/oldUspt;
thisNode->delta = ticks * seqp->uspt;
__n_CSPRepostEvent(&seqp->evtq,thisNode);
__CSPRepostEvent(&seqp->evtq,thisNode);
thisNode = nextNode;
}
}
}
}
/*Done*/
static void __n_CSPRepostEvent(ALEventQueue *evtq, N_ALEventListItem *item)
static void __CSPRepostEvent(ALEventQueue *evtq, ALEventListItem *item)
{
OSIntMask mask;
ALLink *node;
N_ALEventListItem *nextItem;
ALEventListItem *nextItem;
mask = osSetIntMask(OS_IM_NONE);
@ -838,7 +884,7 @@ static void __n_CSPRepostEvent(ALEventQueue *evtq, N_ALEventListItem *item)
}
else
{
nextItem = (N_ALEventListItem *)node->next;
nextItem = (ALEventListItem *)node->next;
if (item->delta < nextItem->delta)
{
nextItem->delta -= item->delta;
@ -860,11 +906,10 @@ static void __n_CSPRepostEvent(ALEventQueue *evtq, N_ALEventListItem *item)
Compact sequence player needs its own version of this routine
since the ALCSeq's qnpt field is at a different offset.
*/
/* DONE */
static void __n_setUsptFromTempo(N_ALCSPlayer *seqp, ALCSeq *target, f32 tempo)
static void __setUsptFromTempo (ALCSPlayer *seqp, f32 tempo)
{
if (target)
seqp->uspt = (s32)((f32)tempo * target->qnpt);
if (seqp->target)
seqp->uspt = (s32)((f32)tempo * seqp->target->qnpt);
else
seqp->uspt = 488; /* This is the initial value set by alSeqpNew. */
}