156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * File:
456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * eas_vm_protos.h
556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Contents and purpose:
756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Declarations, interfaces, and prototypes for voice manager.
856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Copyright Sonic Network Inc. 2004
107df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
117df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
127df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * you may not use this file except in compliance with the License.
137df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * You may obtain a copy of the License at
147df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
157df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
167df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *
177df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
187df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
197df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
207df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * See the License for the specific language governing permissions and
217df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * limitations under the License.
2256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
2356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
2456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Revision Control:
2556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *   $Revision: 736 $
2656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *   $Date: 2007-06-22 13:51:24 -0700 (Fri, 22 Jun 2007) $
2756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
2856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
2956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
3056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifndef _EAS_VM_PROTOS_H
3156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define _EAS_VM_PROTOS_H
3256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
3356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks// includes
3456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include "eas_data.h"
3556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include "eas_sndlib.h"
3656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
3756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
3856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * VMInitialize()
3956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
4056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose:
4156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
4256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs:
4356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * psEASData - pointer to overall EAS data structure
4456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
4556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs:
4656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
4756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
4856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
4956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT VMInitialize (S_EAS_DATA *pEASData);
5056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
5156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
5256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * VMInitMIDI()
5356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
5456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose:
5556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
5656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs:
5756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * psEASData - pointer to overall EAS data structure
5856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
5956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs:
6056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
6156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
6256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
6356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT VMInitMIDI (S_EAS_DATA *pEASData, S_SYNTH **ppSynth);
6456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
6556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
6656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * VMInitializeAllChannels()
6756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
6856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose:
6956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
7056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs:
7156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * psEASData - pointer to overall EAS data structure
7256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
7356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs:
7456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
7556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
7656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
7756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksvoid VMInitializeAllChannels (S_VOICE_MGR *pVoiceMgr, S_SYNTH *pSynth);
7856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
7956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
8056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * VMResetControllers()
8156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
8256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose:
8356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
8456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs:
8556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * psEASData - pointer to overall EAS data structure
8656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
8756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs:
8856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
8956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
9056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
9156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksvoid VMResetControllers (S_SYNTH *pSynth);
9256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
9356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
9456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * VMInitMIPTable()
9556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
9656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose:
9756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Initialize the SP-MIDI MIP table
9856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
9956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs:
10056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData         - pointer to synthesizer instance data
10156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * mute             - EAS_FALSE to unmute channels, EAS_TRUE to mute
10256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
10356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs:
10456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
10556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
10656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects:
10756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
10856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
10956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
11056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksvoid VMInitMIPTable (S_SYNTH *pSynth);
11156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
11256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
11356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * VMSetMIPEntry()
11456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
11556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose:
11656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Sets the priority and MIP level for a MIDI channel
11756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
11856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs:
11956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData         - pointer to synthesizer instance data
12056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * channel          - MIDI channel number
12156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * priority         - priority (0-15 with 0 = highest priority)
12256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * mip              - maximum instantaneous polyphony
12356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
12456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs:
12556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
12656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
12756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects:
12856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
12956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
13056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
13156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksvoid VMSetMIPEntry (S_VOICE_MGR *pVoiceMgr, S_SYNTH *pSynth, EAS_U8 channel, EAS_U8 priority, EAS_U8 mip);
13256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
13356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
13456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * VMUpdateMIPTable()
13556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
13656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose:
13756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * This routine is called when the polyphony count in the synthesizer changes
13856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
13956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs:
14056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData         - pointer to synthesizer instance data
14156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
14256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs:
14356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
14456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
14556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects:
14656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
14756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
14856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
14956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksvoid VMUpdateMIPTable (S_VOICE_MGR *pVoiceMgr, S_SYNTH *pSynth);
15056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
15156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
15256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * VMInitializeAllVoices()
15356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
15456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose:
15556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
15656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs:
15756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * psEASData - pointer to overall EAS data structure
15856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
15956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs:
16056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
16156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
16256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
16356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksvoid VMInitializeAllVoices (S_VOICE_MGR *pVoiceMgr, EAS_INT vSynthNum);
16456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
16556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
16656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * VMStartNote()
16756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
16856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose:
16956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Update the synth's state to play the requested note on the requested
17056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * channel if possible.
17156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
17256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs:
17356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * nChannel - the MIDI channel
17456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * nKeyNumber - the MIDI key number for this note
17556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * nNoteVelocity - the key velocity for this note
17656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * psEASData - pointer to overall EAS data structure
17756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
17856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs:
17956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
18056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
18156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
18256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksvoid VMStartNote (S_VOICE_MGR *pVoiceMgr, S_SYNTH *pSynth, EAS_U8 channel, EAS_U8 note, EAS_U8 velocity);
18356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
18456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
18556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * VMCheckKeyGroup()
18656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
18756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose:
18856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * If the note that we've been asked to start is in the same key group as
18956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * any currently playing notes, then we must shut down the currently playing
19056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * note in the same key group and then start the newly requested note.
19156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
19256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs:
19356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * nChannel - synth channel that wants to start a new note
19456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * nKeyNumber - new note's midi note number
19556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * nRegionIndex - calling routine finds this index and gives to us
19656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * nNoteVelocity - new note's velocity
19756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * psEASData - pointer to overall EAS data structure
19856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
19956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs:
20056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pbVoiceStealingRequired - flag: this routine sets true if we needed to
20156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *                                 steal a voice
20256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
20356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects:
20456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * gsSynthObject.m_sVoice[free voice num].m_nKeyNumber may be assigned
20556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * gsSynthObject.m_sVoice[free voice num].m_nVelocity may be assigned
20656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
20756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
20856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksvoid VMCheckKeyGroup (S_VOICE_MGR *pVoiceMgr, S_SYNTH *pSynth, EAS_U16 keyGroup, EAS_U8 channel);
20956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
21056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
21156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * VMCheckPolyphonyLimiting()
21256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
21356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose:
21456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * We only play at most 2 of the same note on a MIDI channel.
21556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * E.g., if we are asked to start note 36, and there are already two voices
21656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * that are playing note 36, then we must steal the voice playing
21756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * the oldest note 36 and use that stolen voice to play the new note 36.
21856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
21956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs:
22056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * nChannel - synth channel that wants to start a new note
22156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * nKeyNumber - new note's midi note number
22256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * nNoteVelocity - new note's velocity
22356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * psEASData - pointer to overall EAS data structure
22456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
22556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs:
22656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pbVoiceStealingRequired - flag: this routine sets true if we needed to
22756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *                                 steal a voice
22856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * *
22956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects:
23056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * psSynthObject->m_sVoice[free voice num].m_nKeyNumber may be assigned
23156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * psSynthObject->m_sVoice[free voice num].m_nVelocity may be assigned
23256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
23356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
23456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_BOOL VMCheckPolyphonyLimiting (S_VOICE_MGR *pVoiceMgr, S_SYNTH *pSynth, EAS_U8 channel, EAS_U8 note, EAS_U8 velocity, EAS_U16 regionIndex, EAS_I32 lowVoice, EAS_I32 highVoice);
23556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
23656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
23756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * VMStopNote()
23856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
23956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose:
24056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Update the synth's state to end the requested note on the requested
24156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * channel.
24256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
24356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs:
24456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * nChannel - the MIDI channel
24556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * nKeyNumber - the key number of the note to stop
24656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * nNoteVelocity - the note-off velocity
24756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * psEASData - pointer to overall EAS data structure
24856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
24956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs:
25056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects:
25156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * gsSynthObject.m_sVoice[free voice num].m_nSynthChannel may be assigned
25256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * gsSynthObject.m_sVoice[free voice num].m_nKeyNumber is assigned
25356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * gsSynthObject.m_sVoice[free voice num].m_nVelocity is assigned
25456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
25556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
25656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksvoid VMStopNote (S_VOICE_MGR *pVoiceMgr, S_SYNTH *pSynth, EAS_U8 channel, EAS_U8 key, EAS_U8 velocity);
25756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
25856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
25956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * VMFindAvailableVoice()
26056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
26156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose:
26256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Find an available voice and return the voice number if available.
26356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
26456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs:
26556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pnVoiceNumber - really an output, see below
26656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * psEASData - pointer to overall EAS data structure
26756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
26856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs:
26956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pnVoiceNumber - returns the voice number of available voice if found
27056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * success - if there is an available voice
27156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * failure - otherwise
27256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
27356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
27456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT VMFindAvailableVoice (S_VOICE_MGR *pVoiceMgr, EAS_INT *pVoiceNumber, EAS_I32 lowVoice, EAS_I32 highVoice);
27556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
27656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
27756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * VMStealVoice()
27856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
27956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose:
28056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Steal a voice and return the voice number
28156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
28256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Stealing algorithm: steal the best choice with minimal work, taking into
28356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * account SP-Midi channel priorities and polyphony allocation.
28456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
28556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * In one pass through all the voices, figure out which voice to steal
28656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * taking into account a number of different factors:
28756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Priority of the voice's MIDI channel
28856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Number of voices over the polyphony allocation for voice's MIDI channel
28956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Amplitude of the voice
29056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Note age
29156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Key velocity (for voices that haven't been started yet)
29256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * If any matching notes are found
29356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
29456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs:
29556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * nChannel - the channel that this voice wants to be started on
29656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * nKeyNumber - the key number for this new voice
29756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * psEASData - pointer to overall EAS data structure
29856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
29956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs:
30056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pnVoiceNumber - voice stolen
30156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_RESULT EAS_SUCCESS - always successful
30256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
30356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
30456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT VMStealVoice (S_VOICE_MGR *pVoiceMgr, S_SYNTH *pSynth, EAS_INT *pVoiceNumber, EAS_U8 channel, EAS_U8 note, EAS_I32 lowVoice, EAS_I32 highVoice);
30556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
30656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
30756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * VMAddSamples()
30856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
30956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose:
31056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Synthesize the requested number of samples.
31156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
31256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs:
31356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * nNumSamplesToAdd - number of samples to write to buffer
31456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * psEASData - pointer to overall EAS data structure
31556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
31656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs:
31756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * number of samples actually written to buffer
31856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
31956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects:
32056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * - samples are added to the presently free buffer
32156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
32256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
32356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
32456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_I32 VMAddSamples (S_VOICE_MGR *pVoiceMgr, EAS_I32 *pMixBuffer, EAS_I32 numSamplesToAdd);
32556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
32656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
32756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * VMProgramChange()
32856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
32956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose:
33056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Change the instrument (program) for the given channel.
33156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
33256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Depending on the program number, and the bank selected for this channel, the
33356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * program may be in ROM, RAM (from SMAF or CMX related RAM wavetable), or
33456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Alternate wavetable (from mobile DLS or other DLS file)
33556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
33656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * This function figures out what wavetable should be used, and sets it up as the
33756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * wavetable to use for this channel. Also the channel may switch from a melodic
33856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * channel to a rhythm channel, or vice versa.
33956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
34056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs:
34156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
34256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs:
34356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects:
34456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * gsSynthObject.m_sChannel[nChannel].m_nProgramNumber is likely changed
34556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * gsSynthObject.m_sChannel[nChannel].m_psEAS may be changed
34656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * gsSynthObject.m_sChannel[nChannel].m_bRhythmChannel may be changed
34756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
34856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
34956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
35056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksvoid VMProgramChange (S_VOICE_MGR *pVoiceMgr, S_SYNTH *pSynth, EAS_U8 channel, EAS_U8 program);
35156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
35256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
35356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * VMChannelPressure()
35456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
35556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose:
35656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Change the channel pressure for the given channel
35756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
35856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs:
35956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * nChannel - the MIDI channel
36056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * nVelocity - the channel pressure value
36156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * psEASData - pointer to overall EAS data structure
36256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
36356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs:
36456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects:
36556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * gsSynthObject.m_sChannel[nChannel].m_nChannelPressure is updated
36656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
36756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
36856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksvoid VMChannelPressure (S_SYNTH *pSynth, EAS_U8 channel, EAS_U8 value);
36956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
37056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
37156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * VMPitchBend()
37256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
37356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose:
37456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Change the pitch wheel value for the given channel.
37556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * This routine constructs the proper 14-bit argument when the calling routine
37656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * passes the pitch LSB and MSB.
37756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
37856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Note: some midi disassemblers display a bipolar pitch bend value.
37956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * We can display the bipolar value using
38056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * if m_nPitchBend >= 0x2000
38156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *      bipolar pitch bend = postive (m_nPitchBend - 0x2000)
38256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * else
38356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *      bipolar pitch bend = negative (0x2000 - m_nPitchBend)
38456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
38556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs:
38656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * nChannel - the MIDI channel
38756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * nPitchLSB - the LSB byte from the pitch bend message
38856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * nPitchMSB - the MSB byte from the message
38956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * psEASData - pointer to overall EAS data structure
39056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
39156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs:
39256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
39356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects:
39456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * gsSynthObject.m_sChannel[nChannel].m_nPitchBend is changed
39556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
39656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
39756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
39856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksvoid VMPitchBend (S_SYNTH *pSynth, EAS_U8 channel, EAS_U8 pitchLSB, EAS_U8 pitchMSB);
39956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
40056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
40156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * VMControlChange()
40256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
40356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose:
40456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Change the controller (or mode) for the given channel.
40556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
40656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs:
40756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * nChannel - the MIDI channel
40856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * nControllerNumber - the controller number
40956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * nControlValue - the controller number for this control change
41056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * nControlValue - the value for this control change
41156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * psEASData - pointer to overall EAS data structure
41256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
41356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs:
41456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects:
41556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * gsSynthObject.m_sChannel[nChannel] controller is changed
41656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
41756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
41856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
41956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksvoid VMControlChange (S_VOICE_MGR *pVoiceMgr, S_SYNTH *pSynth, EAS_U8 channel, EAS_U8 controller, EAS_U8 value);
42056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
42156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
42256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * VMUpdateRPNStateMachine()
42356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
42456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose:
42556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Call this function when we want to parse a stream of RPN messages.
42656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * NOTE: The synth has only one set of global RPN data instead of RPN data
42756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * per channel.
42856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * So actually, we don't really need to look at the nChannel parameter,
42956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * but we pass it to facilitate future upgrades. Furthermore, we only
43056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * support RPN0 (pitch bend sensitivity), RPN1 (fine tuning) and
43156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * RPN2 (coarse tuning). Any other RPNs are rejected.
43256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
43356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs:
43456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * nChannel - the MIDI channel
43556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * nControllerNumber - the RPN controller number
43656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * nControlValue - the value for this control change
43756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * psEASData - pointer to overall EAS data structure
43856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
43956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs:
44056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
44156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects:
44256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * gsSynthObject.m_RPN0 (or m_RPN1 or m_RPN2) may be updated if the
44356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * proper RPN message sequence is parsed.
44456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
44556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
44656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT VMUpdateRPNStateMachine (S_SYNTH *pSynth, EAS_U8 channel, EAS_U8 controller, EAS_U8 value);
44756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
44856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
44956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * VMUpdateStaticChannelParameters()
45056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
45156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose:
45256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Update all of the static channel parameters for channels that have had
45356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * a controller change values
45456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Or if the synth has signalled that all channels must forcibly
45556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * be updated
45656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
45756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs:
45856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * psEASData - pointer to overall EAS data structure
45956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
46056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs:
46156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * none
46256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
46356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects:
46456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * - psSynthObject->m_sChannel[].m_nStaticGain and m_nStaticPitch
46556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * are updated for channels whose controller values have changed
46656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * or if the synth has signalled that all channels must forcibly
46756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * be updated
46856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
46956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
47056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksvoid VMUpdateStaticChannelParameters (S_VOICE_MGR *pVoiceMgr, S_SYNTH *pSynth);
47156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
47256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
47356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * VMReleaseAllDeferredNoteOffs()
47456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
47556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose:
47656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Call this functin when the sustain flag is presently set but
47756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * we are now transitioning from damper pedal on to
47856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * damper pedal off. This means all notes in this channel
47956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * that received a note off while the damper pedal was on, and
48056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * had their note-off requests deferred, should now proceed to
48156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * the release state.
48256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
48356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs:
48456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * nChannel - this channel has its sustain pedal transitioning from on to off
48556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * psEASData - pointer to overall EAS data structure
48656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
48756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs:
48856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects:
48956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * any voice with deferred note offs on this channel are updated such that
49056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
49156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
49256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
49356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
49456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksvoid VMReleaseAllDeferredNoteOffs (S_VOICE_MGR *pVoiceMgr, S_SYNTH *pSynth, EAS_U8 channel);
49556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
49656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
49756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * VMCatchNotesForSustainPedal()
49856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
49956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose:
50056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Call this function when the sustain flag is presently clear and
50156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * the damper pedal is off and we are transitioning from damper pedal OFF to
50256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * damper pedal ON. Currently sounding notes should be left
50356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * unchanged. However, we should try to "catch" notes if possible.
50456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * If any notes have levels >= sustain level, catch them,
50556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * otherwise, let them continue to release.
50656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
50756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs:
50856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * nChannel - this channel has its sustain pedal transitioning from on to off
50956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * psEASData - pointer to overall EAS data structure
51056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
51156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs:
51256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects:
51356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * any voice with deferred note offs on this channel are updated such that
51456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * psVoice->m_sEG1.m_eState = eEnvelopeStateSustainPedal
51556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
51656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
51756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksvoid VMCatchNotesForSustainPedal (S_VOICE_MGR *pVoiceMgr, S_SYNTH *pSynth, EAS_U8 channel);
51856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
51956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
52056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * VMUpdateAllNotesAge()
52156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
52256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose:
52356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Increment the note age for all voices older than the age of the voice
52456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * that is stopping, effectively making the voices "younger".
52556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
52656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs:
52756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * nAge - age of voice that is going away
52856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * psEASData - pointer to overall EAS data structure
52956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
53056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs:
53156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
53256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects:
53356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * m_nAge for some voices is incremented
53456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
53556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
53656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksvoid VMUpdateAllNotesAge (S_VOICE_MGR *pVoiceMgr, EAS_U16 nAge);
53756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
53856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
53956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * VMFindRegionIndex()
54056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
54156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose:
54256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Find the region index for the given instrument using the midi key number
54356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * and the RPN2 (coarse tuning) value. By using RPN2 as part of the
54456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * region selection process, we reduce the amount a given sample has
54556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * to be transposed by selecting the closest recorded root instead.
54656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
54756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs:
54856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * nChannel - current channel for this note
54956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * nKeyNumber - current midi note number
55056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * psEASData - pointer to overall EAS data structure
55156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
55256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs:
55356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pnRegionIndex - valid only if we returned success
55456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * success if we found the region index number, otherwise
55556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * failure
55656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
55756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects:
55856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
55956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
56056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT VMFindRegionIndex (S_VOICE_MGR *pVoiceMgr, EAS_U8 channel, EAS_U8 note, EAS_U16 *pRegionIndex);
56156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
56256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
56356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * VMIncRefCount()
56456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
56556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Increment reference count for virtual synth
56656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
56756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
56856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksvoid VMIncRefCount (S_SYNTH *pSynth);
56956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
57056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
57156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * VMReset()
57256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
57356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose:
57456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * We call this routine to start the process of reseting the synth.
57556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * This routine sets a flag for the entire synth indicating that we want
57656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * to reset.
57756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * We also force all voices to mute quickly.
57856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * However, we do not actually perform any synthesis in this routine. That
57956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * is, we do not ramp the voices down from this routine, but instead, we
58056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * let the "regular" synth processing steps take care of adding the ramp
58156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * down samples to the output buffer. After we are sure that all voices
58256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * have completed ramping down, we continue the process of resetting the
58356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * synth (from another routine).
58456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
58556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs:
58656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * psEASData - pointer to overall EAS data structure
58756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
58856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs:
58956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
59056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects:
59156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * - set a flag (in gsSynthObject.m_nFlags) indicating synth reset requested.
59256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * - force all voices to update their envelope states to mute
59356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
59456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
59556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
59656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksvoid VMReset (S_VOICE_MGR *pVoiceMgr, S_SYNTH *pSynth, EAS_BOOL force);
59756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
59856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
59956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * VMMuteAllVoices()
60056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
60156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose:
60256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * We call this in an emergency reset situation.
60356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * This forces all voices to mute quickly.
60456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
60556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs:
60656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * psEASData - pointer to overall EAS data structure
60756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
60856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs:
60956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
61056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects:
61156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * - forces all voices to update their envelope states to mute
61256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
61356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
61456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
61556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksvoid VMMuteVoice (S_VOICE_MGR *pVoiceMgr, EAS_I32 voiceNum);
61656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksvoid VMMuteAllVoices (S_VOICE_MGR *pVoiceMgr, S_SYNTH *pSynth);
61756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
61856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
61956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * VMReleaseAllVoices()
62056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
62156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose:
62256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * We call this after we've encountered the end of the Midi file.
62356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * This ensures all voice are either in release (because we received their
62456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * note off already) or forces them to mute quickly.
62556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * We use this as a safety to prevent bad midi files from playing forever.
62656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
62756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs:
62856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * psEASData - pointer to overall EAS data structure
62956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
63056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs:
63156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
63256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects:
63356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * - forces all voices to update their envelope states to release or mute
63456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
63556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
63656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
63756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksvoid VMReleaseAllVoices (S_VOICE_MGR *pVoiceMgr, S_SYNTH *pSynth);
63856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
63956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
64056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * VMAllNotesOff()
64156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
64256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose:
64356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Quickly mute all notes on the given channel.
64456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
64556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs:
64656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * nChannel - quickly turn off all notes on this channel
64756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * psEASData - pointer to overall EAS data structure
64856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
64956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs:
65056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
65156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects:
65256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * - forces all voices on this channel to update their envelope states to mute
65356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
65456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
65556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
65656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksvoid VMAllNotesOff (S_VOICE_MGR *pVoiceMgr, S_SYNTH *pSynth, EAS_U8 channel);
65756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
65856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
65956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * VMDeferredStopNote()
66056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
66156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose:
66256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Stop the notes that had deferred note-off requests.
66356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
66456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs:
66556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * psEASData - pointer to overall EAS data structure
66656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
66756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs:
66856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * None.
66956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
67056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects:
67156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * voices that have had deferred note-off requests are now put into release
67256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * gsSynthObject.m_sVoice[i].m_nFlags has the VOICE_FLAG_DEFER_MIDI_NOTE_OFF
67356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *  cleared
67456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
67556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
67656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksvoid VMDeferredStopNote (S_VOICE_MGR *pVoiceMgr, S_SYNTH *pSynth);
67756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
67856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
67956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * VMSetSynthPolyphony()
68056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
68156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose:
68256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Set the synth to a new polyphony value. Value must be >= 1 and
68356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * <= MAX_SYNTH_VOICES. This function will pin the polyphony at those limits
68456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
68556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs:
68656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pVoiceMgr        pointer to synthesizer data
68756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * synth            synthesizer number (0 = onboard, 1 = DSP)
68856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * polyphonyCount   desired polyphony count
68956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
69056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs:
69156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
69256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects:
69356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
69456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
69556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
69656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT VMSetSynthPolyphony (S_VOICE_MGR *pVoiceMgr, EAS_I32 synth, EAS_I32 polyphonyCount);
69756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
69856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
69956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * VMGetSynthPolyphony()
70056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
70156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose:
70256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Set the synth to a new polyphony value. Value must be >= 1 and
70356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * <= MAX_SYNTH_VOICES. This function will pin the polyphony at those limits
70456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
70556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs:
70656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pVoiceMgr        pointer to synthesizer data
70756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * synth            synthesizer number (0 = onboard, 1 = DSP)
70856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * polyphonyCount   desired polyphony count
70956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
71056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs:
71156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
71256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects:
71356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
71456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
71556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
71656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT VMGetSynthPolyphony (S_VOICE_MGR *pVoiceMgr, EAS_I32 synth, EAS_I32 *pPolyphonyCount);
71756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
71856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
71956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * VMSetPolyphony()
72056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
72156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose:
72256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Set the virtual synth polyphony. 0 = no limit (i.e. can use
72356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * all available voices).
72456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
72556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs:
72656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pVoiceMgr        pointer to synthesizer data
72756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * polyphonyCount   desired polyphony count
72856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pSynth           pointer to virtual synth
72956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
73056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs:
73156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Returns error code
73256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
73356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects:
73456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
73556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
73656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
73756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT VMSetPolyphony (S_VOICE_MGR *pVoiceMgr, S_SYNTH *pSynth, EAS_I32 polyphonyCount);
73856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
73956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
74056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * VMGetPolyphony()
74156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
74256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose:
74356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Returns the current polyphony setting
74456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
74556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs:
74656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pVoiceMgr        pointer to synthesizer data
74756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pSynth           pointer to virtual synth
74856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pPolyphonyCount  pointer to variable to receive data
74956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
75056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs:
75156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
75256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects:
75356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
75456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
75556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
75656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT VMGetPolyphony (S_VOICE_MGR *pVoiceMgr, S_SYNTH *pSynth, EAS_I32 *pPolyphonyCount);
75756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
75856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
75956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * VMSetPriority()
76056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
76156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose:
76256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Set the virtual synth priority
76356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
76456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs:
76556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pVoiceMgr        pointer to synthesizer data
76656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * priority         new priority
76756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pSynth           pointer to virtual synth
76856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
76956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs:
77056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Returns error code
77156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
77256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects:
77356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
77456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
77556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
77656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT VMSetPriority (S_VOICE_MGR *pVoiceMgr, S_SYNTH *pSynth, EAS_I32 priority);
77756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
77856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
77956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * VMGetPriority()
78056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
78156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose:
78256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Get the virtual synth priority
78356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
78456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs:
78556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pVoiceMgr        pointer to synthesizer data
78656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pPriority        pointer to variable to hold priority
78756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pSynth           pointer to virtual synth
78856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
78956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs:
79056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Returns error code
79156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
79256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects:
79356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
79456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
79556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
79656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT VMGetPriority (S_VOICE_MGR *pVoiceMgr, S_SYNTH *pSynth, EAS_I32 *pPriority);
79756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
79856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
79956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * VMSetVolume()
80056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
80156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose:
80256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Set the master volume for this sequence
80356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
80456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs:
80556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * nSynthVolume - the desired master volume
80656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * psEASData - pointer to overall EAS data structure
80756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
80856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs:
80956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
81056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
81156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects:
81256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * overrides any previously set master volume from sysex
81356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
81456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
81556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
81656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksvoid VMSetVolume (S_SYNTH *pSynth, EAS_U16 masterVolume);
81756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
81856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
81956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * VMSetPitchBendRange()
82056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
82156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Set the pitch bend range for the given channel.
82256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
82356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
82456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksvoid VMSetPitchBendRange (S_SYNTH *pSynth, EAS_INT channel, EAS_I16 pitchBendRange);
82556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
82656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
82756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * VMSetEASLib()
82856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
82956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose:
83056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Sets the pointer to the sound library
83156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
83256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs:
83356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * psEASData - pointer to overall EAS data structure
83456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
83556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs:
83656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
83756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
83856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
83956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT VMSetGlobalEASLib (S_VOICE_MGR *pVoiceMgr, EAS_SNDLIB_HANDLE pEAS);
84056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT VMSetEASLib (S_SYNTH *pSynth, EAS_SNDLIB_HANDLE pEAS);
84156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
84256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef DLS_SYNTHESIZER
84356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
84456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * VMSetDLSLib()
84556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
84656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose:
84756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Sets the pointer to the sound library
84856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
84956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs:
85056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * psEASData - pointer to overall EAS data structure
85156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
85256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs:
85356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
85456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
85556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
85656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT VMSetGlobalDLSLib (EAS_DATA_HANDLE pEASData, EAS_DLSLIB_HANDLE pDLS);
85756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT VMSetDLSLib (S_SYNTH *pSynth, EAS_DLSLIB_HANDLE pDLS);
85856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif
85956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
86056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
86156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * VMSetTranposition()
86256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
86356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose:
86456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Sets the global key transposition used by the synthesizer.
86556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Transposes all melodic instruments up or down by the specified
86656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * amount. Range is limited to +/-12 semitones.
86756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
86856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs:
86956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * psEASData        - pointer to overall EAS data structure
87056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * transposition    - transpose amount (+/-12)
87156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
87256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs:
87356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
87456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
87556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects:
87656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
87756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
87856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
87956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksvoid VMSetTranposition (S_SYNTH *pSynth, EAS_I32 transposition);
88056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
88156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
88256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * VMGetTranposition()
88356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
88456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose:
88556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Gets the global key transposition used by the synthesizer.
88656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Transposes all melodic instruments up or down by the specified
88756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * amount. Range is limited to +/-12 semitones.
88856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
88956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs:
89056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * psEASData - pointer to overall EAS data structure
89156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
89256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs:
89356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
89456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
89556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects:
89656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
89756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
89856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
89956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksvoid VMGetTranposition (S_SYNTH *pSynth, EAS_I32 *pTransposition);
90056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
90156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
90256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * VMGetNoteCount()
90356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
90456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks* Returns the total note count
90556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*----------------------------------------------------------------------------
90656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
90756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_I32 VMGetNoteCount (S_SYNTH *pSynth);
90856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
90956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
91056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * VMRender()
91156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
91256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose:
91356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * This routine renders a frame of audio
91456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
91556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs:
91656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * psEASData        - pointer to overall EAS data structure
91756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
91856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs:
91956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pVoicesRendered  - number of voices rendered this frame
92056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
92156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects:
92256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * sets psMidiObject->m_nMaxWorkloadPerFrame
92356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
92456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
92556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
92656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT VMRender (S_VOICE_MGR *pVoiceMgr, EAS_I32 numSamples, EAS_I32 *pMixBuffer, EAS_I32 *pVoicesRendered);
92756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
92856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
92956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * VMInitWorkload()
93056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
93156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose:
93256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Clears the workload counter
93356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
93456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs:
93556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pVoiceMgr            - pointer to instance data
93656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
93756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs:
93856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
93956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects:
94056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
94156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
94256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
94356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksvoid VMInitWorkload (S_VOICE_MGR *pVoiceMgr);
94456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
94556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
94656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * VMSetWorkload()
94756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
94856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose:
94956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Sets the max workload for a single frame.
95056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
95156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs:
95256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pVoiceMgr            - pointer to instance data
95356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
95456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs:
95556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
95656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects:
95756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
95856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
95956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
96056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksvoid VMSetWorkload (S_VOICE_MGR *pVoiceMgr, EAS_I32 maxWorkLoad);
96156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
96256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
96356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * VMCheckWorkload()
96456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
96556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose:
96656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Checks to see if work load has been exceeded on this frame.
96756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
96856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs:
96956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pVoiceMgr            - pointer to instance data
97056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
97156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs:
97256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
97356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects:
97456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
97556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
97656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
97756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_BOOL VMCheckWorkload (S_VOICE_MGR *pVoiceMgr);
97856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
97956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
98056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * VMActiveVoices()
98156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
98256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose:
98356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Returns the number of active voices in the synthesizer.
98456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
98556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs:
98656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData         - pointer to instance data
98756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
98856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs:
98956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Returns the number of active voices
99056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
99156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects:
99256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
99356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
99456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
99556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_I32 VMActiveVoices (S_SYNTH *pSynth);
99656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
99756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
99856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * VMMIDIShutdown()
99956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
100056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose:
100156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Clean up any Synth related system issues.
100256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
100356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs:
100456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * psEASData - pointer to overall EAS data structure
100556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
100656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs:
100756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * None
100856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
100956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects:
101056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
101156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
101256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
101356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksvoid VMMIDIShutdown (S_EAS_DATA *pEASData, S_SYNTH *pSynth);
101456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
101556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
101656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * VMShutdown()
101756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
101856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose:
101956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Clean up any Synth related system issues.
102056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
102156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs:
102256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * psEASData - pointer to overall EAS data structure
102356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
102456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs:
102556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * None
102656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
102756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects:
102856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
102956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
103056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
103156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksvoid VMShutdown (S_EAS_DATA *pEASData);
103256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
103356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef EXTERNAL_AUDIO
103456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
103556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_RegExtAudioCallback()
103656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
103756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Register a callback for external audio processing
103856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
103956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
104056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksvoid VMRegExtAudioCallback (S_SYNTH *pSynth, EAS_VOID_PTR pInstData, EAS_EXT_PRG_CHG_FUNC cbProgChgFunc, EAS_EXT_EVENT_FUNC cbEventFunc);
104156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
104256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
104356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * VMGetMIDIControllers()
104456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
104556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Returns the MIDI controller values on the specified channel
104656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
104756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
104856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksvoid VMGetMIDIControllers (S_SYNTH *pSynth, EAS_U8 channel, S_MIDI_CONTROLLERS *pControl);
104956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif
105056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
105156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _SPLIT_ARCHITECTURE
105256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
105356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * VMStartFrame()
105456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
105556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose:
105656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Starts an audio frame
105756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
105856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs:
105956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
106056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs:
106156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
106256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects:
106356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
106456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
106556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
106656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_BOOL VMStartFrame (S_EAS_DATA *pEASData);
106756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
106856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
106956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * VMEndFrame()
107056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
107156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose:
107256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Stops an audio frame
107356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
107456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs:
107556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
107656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs:
107756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
107856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects:
107956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
108056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
108156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
108256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_BOOL VMEndFrame (S_EAS_DATA *pEASData);
108356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif
108456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
108556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif /* #ifdef _EAS_VM_PROTOS_H */
108656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
1087