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