156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * File: 456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * eas_public.c 556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Contents and purpose: 756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Contains EAS library public interface 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: 842 $ 2656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * $Date: 2007-08-23 14:32:31 -0700 (Thu, 23 Aug 2007) $ 2756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 2856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 2956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 3056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include "eas_synthcfg.h" 3156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include "eas.h" 3256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include "eas_config.h" 3356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include "eas_host.h" 3456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include "eas_report.h" 3556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include "eas_data.h" 3656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include "eas_parser.h" 3756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include "eas_pcm.h" 3856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include "eas_midi.h" 3956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include "eas_mixer.h" 4056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include "eas_build.h" 4156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include "eas_vm_protos.h" 4256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include "eas_math.h" 4356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 4456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef JET_INTERFACE 4556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include "jet_data.h" 4656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 4756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 4856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef DLS_SYNTHESIZER 4956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include "eas_mdls.h" 5056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 5156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 5256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* number of events to parse before calling EAS_HWYield function */ 5356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define YIELD_EVENT_COUNT 10 5456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 5556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 5656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * easLibConfig 5756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 5856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * This structure is available through the EAS public interface to allow 5956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * the user to check the configuration of the library. 6056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 6156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 6256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic const S_EAS_LIB_CONFIG easLibConfig = 6356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 6456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks LIB_VERSION, 6556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _CHECKED_BUILD 6656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_TRUE, 6756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#else 6856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_FALSE, 6956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 7056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks MAX_SYNTH_VOICES, 7156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks NUM_OUTPUT_CHANNELS, 7256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks _OUTPUT_SAMPLE_RATE, 7356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks BUFFER_SIZE_IN_MONO_SAMPLES, 7456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _FILTER_ENABLED 7556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_TRUE, 7656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#else 7756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_FALSE, 7856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 7956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks _BUILD_TIME_, 8056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks _BUILD_VERSION_ 8156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks}; 8256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 8356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* local prototypes */ 8456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic EAS_RESULT EAS_ParseEvents (S_EAS_DATA *pEASData, S_EAS_STREAM *pStream, EAS_U32 endTime, EAS_INT parseMode); 8556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 8656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 8756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_SetStreamParameter 8856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 8956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Sets the specified parameter in the stream. Allows access to 9056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * customizable settings within the individual file parsers. 9156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 9256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to EAS persistent data object 9356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pStream - stream handle 9456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * param - enumerated parameter (see eas_parser.h) 9556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * value - new value 9656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 9756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 9856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_SetStreamParameter (S_EAS_DATA *pEASData, EAS_HANDLE pStream, EAS_I32 param, EAS_I32 value) 9956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 10056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_FILE_PARSER_INTERFACE *pParserModule; 10156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 10256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pParserModule = (S_FILE_PARSER_INTERFACE*) pStream->pParserModule; 10356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pParserModule->pfSetData) 10456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return (*pParserModule->pfSetData)(pEASData, pStream->handle, param, value); 10556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_FEATURE_NOT_AVAILABLE; 10656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 10756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 10856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 10956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_GetStreamParameter 11056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 11156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Sets the specified parameter in the stream. Allows access to 11256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * customizable settings within the individual file parsers. 11356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 11456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to EAS persistent data object 11556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pStream - stream handle 11656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * param - enumerated parameter (see eas_parser.h) 11756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pValue - pointer to variable to receive current setting 11856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 11956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 12056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_GetStreamParameter (S_EAS_DATA *pEASData, EAS_HANDLE pStream, EAS_I32 param, EAS_I32 *pValue) 12156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 12256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_FILE_PARSER_INTERFACE *pParserModule; 12356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 12456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pParserModule = (S_FILE_PARSER_INTERFACE*) pStream->pParserModule; 12556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pParserModule->pfGetData) 12656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return (*pParserModule->pfGetData)(pEASData, pStream->handle, param, pValue); 12756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_FEATURE_NOT_AVAILABLE; 12856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 12956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 13056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 13156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_StreamReady() 13256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 13356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * This routine sets common parameters like transpose, volume, etc. 13456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * First, it attempts to use the parser EAS_SetStreamParameter interface. If that 13556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * fails, it attempts to get the synth handle from the parser and 13656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * set the parameter directly on the synth. This eliminates duplicate 13756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * code in the parser. 13856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 13956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 14056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_BOOL EAS_StreamReady (S_EAS_DATA *pEASData, EAS_HANDLE pStream) 14156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 14256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_FILE_PARSER_INTERFACE *pParserModule; 14356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_STATE state; 14456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 14556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pParserModule = (S_FILE_PARSER_INTERFACE*) pStream->pParserModule; 14656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pParserModule->pfState(pEASData, pStream->handle, &state) != EAS_SUCCESS) 14756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_FALSE; 14856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return (state < EAS_STATE_OPEN); 14956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 15056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 15156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 15256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_IntSetStrmParam() 15356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 15456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * This routine sets common parameters like transpose, volume, etc. 15556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * First, it attempts to use the parser EAS_SetStreamParameter interface. If that 15656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * fails, it attempts to get the synth handle from the parser and 15756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * set the parameter directly on the synth. This eliminates duplicate 15856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * code in the parser. 15956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 16056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 16156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_IntSetStrmParam (S_EAS_DATA *pEASData, EAS_HANDLE pStream, EAS_INT param, EAS_I32 value) 16256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 16356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_SYNTH *pSynth; 16456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 16556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* try to set the parameter using stream interface */ 16656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (EAS_SetStreamParameter(pEASData, pStream, param, value) == EAS_SUCCESS) 16756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 16856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 16956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* get a pointer to the synth object and set it directly */ 17056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /*lint -e{740} we are cheating by passing a pointer through this interface */ 17156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (EAS_GetStreamParameter(pEASData, pStream, PARSER_DATA_SYNTH_HANDLE, (EAS_I32*) &pSynth) != EAS_SUCCESS) 17256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_PARAMETER; 17356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 17456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pSynth == NULL) 17556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_PARAMETER; 17656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 17756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks switch (param) 17856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 17956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 18056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef DLS_SYNTHESIZER 18156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks case PARSER_DATA_DLS_COLLECTION: 18256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 18356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result = VMSetDLSLib(pSynth, (EAS_DLSLIB_HANDLE) value); 18456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (result == EAS_SUCCESS) 18556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 18656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks DLSAddRef((S_DLS*) value); 18756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks VMInitializeAllChannels(pEASData->pVoiceMgr, pSynth); 18856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 18956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 19056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 19156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 19256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 19356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks case PARSER_DATA_EAS_LIBRARY: 19456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return VMSetEASLib(pSynth, (EAS_SNDLIB_HANDLE) value); 19556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 19656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks case PARSER_DATA_POLYPHONY: 19756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return VMSetPolyphony(pEASData->pVoiceMgr, pSynth, value); 19856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 19956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks case PARSER_DATA_PRIORITY: 20056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return VMSetPriority(pEASData->pVoiceMgr, pSynth, value); 20156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 20256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks case PARSER_DATA_TRANSPOSITION: 20356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks VMSetTranposition(pSynth, value); 20456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 20556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 20656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks case PARSER_DATA_VOLUME: 20756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks VMSetVolume(pSynth, (EAS_U16) value); 20856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 20956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 21056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks default: 21156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "Invalid paramter %d in call to EAS_IntSetStrmParam", param); */ } 21256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_PARAMETER; 21356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 21456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 21556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 21656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 21756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 21856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 21956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_IntGetStrmParam() 22056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 22156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * This routine gets common parameters like transpose, volume, etc. 22256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * First, it attempts to use the parser EAS_GetStreamParameter interface. If that 22356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * fails, it attempts to get the synth handle from the parser and 22456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * get the parameter directly on the synth. 22556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 22656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 22756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_IntGetStrmParam (S_EAS_DATA *pEASData, EAS_HANDLE pStream, EAS_INT param, EAS_I32 *pValue) 22856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 22956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_SYNTH *pSynth; 23056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 23156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* try to set the parameter */ 23256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (EAS_GetStreamParameter(pEASData, pStream, param, pValue) == EAS_SUCCESS) 23356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 23456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 23556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* get a pointer to the synth object and retrieve data directly */ 23656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /*lint -e{740} we are cheating by passing a pointer through this interface */ 23756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (EAS_GetStreamParameter(pEASData, pStream, PARSER_DATA_SYNTH_HANDLE, (EAS_I32*) &pSynth) != EAS_SUCCESS) 23856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_PARAMETER; 23956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 24056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pSynth == NULL) 24156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_PARAMETER; 24256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 24356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks switch (param) 24456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 24556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks case PARSER_DATA_POLYPHONY: 24656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return VMGetPolyphony(pEASData->pVoiceMgr, pSynth, pValue); 24756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 24856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks case PARSER_DATA_PRIORITY: 24956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return VMGetPriority(pEASData->pVoiceMgr, pSynth, pValue); 25056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 25156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks case PARSER_DATA_TRANSPOSITION: 25256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks VMGetTranposition(pSynth, pValue); 25356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 25456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 25556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks case PARSER_DATA_NOTE_COUNT: 25656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pValue = VMGetNoteCount(pSynth); 25756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 25856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 25956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks default: 26056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "Invalid paramter %d in call to EAS_IntSetStrmParam", param); */ } 26156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_PARAMETER; 26256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 26356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 26456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 26556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 26656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 26756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 26856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_AllocateStream() 26956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 27056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 27156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Allocates a stream handle 27256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 27356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 27456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 27556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs: 27656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 27756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 27856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 27956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic EAS_INT EAS_AllocateStream (EAS_DATA_HANDLE pEASData) 28056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 28156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_INT streamNum; 28256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 28356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check for static allocation, only one stream allowed */ 28456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->staticMemoryModel) 28556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 28656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->streams[0].handle != NULL) 28756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 28856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "Attempt to open multiple streams in static model\n"); */ } 28956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return -1; 29056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 29156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return 0; 29256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 29356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 29456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* dynamic model */ 29556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks for (streamNum = 0; streamNum < MAX_NUMBER_STREAMS; streamNum++) 29656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->streams[streamNum].handle == NULL) 29756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 29856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (streamNum == MAX_NUMBER_STREAMS) 29956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 30056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "Exceeded maximum number of open streams\n"); */ } 30156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return -1; 30256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 30356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return streamNum; 30456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 30556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 30656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 30756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_InitStream() 30856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 30956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 31056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Initialize a stream 31156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 31256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 31356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 31456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs: 31556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 31656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 31756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 31856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic void EAS_InitStream (S_EAS_STREAM *pStream, EAS_VOID_PTR pParserModule, EAS_VOID_PTR streamHandle) 31956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 32056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->pParserModule = pParserModule; 32156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->handle = streamHandle; 32256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->time = 0; 32356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->frameLength = AUDIO_FRAME_LENGTH; 32456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->repeatCount = 0; 32556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->volume = DEFAULT_STREAM_VOLUME; 32656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 32756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 32856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 32956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_Config() 33056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 33156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 33256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Returns a pointer to a structure containing the configuration options 33356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * in this library build. 33456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 33556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 33656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 33756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs: 33856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 33956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 34056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 34156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_PUBLIC const S_EAS_LIB_CONFIG *EAS_Config (void) 34256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 34356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return &easLibConfig; 34456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 34556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 34656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 34756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_Init() 34856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 34956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 35056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Initialize the synthesizer library 35156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 35256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 35356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * ppEASData - pointer to data handle variable for this instance 35456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 35556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs: 35656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 35756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 35856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 35956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_PUBLIC EAS_RESULT EAS_Init (EAS_DATA_HANDLE *ppEASData) 36056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 36156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_HW_DATA_HANDLE pHWInstData; 36256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 36356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_EAS_DATA *pEASData; 36456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_INT module; 36556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_BOOL staticMemoryModel; 36656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 36756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* get the memory model */ 36856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks staticMemoryModel = EAS_CMStaticMemoryModel(); 36956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 37056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* initialize the host wrapper interface */ 37156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *ppEASData = NULL; 37256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWInit(&pHWInstData)) != EAS_SUCCESS) 37356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 37456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 37556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check Configuration Module for S_EAS_DATA allocation */ 37656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (staticMemoryModel) 37756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pEASData = EAS_CMEnumData(EAS_CM_EAS_DATA); 37856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks else 37956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pEASData = EAS_HWMalloc(pHWInstData, sizeof(S_EAS_DATA)); 38056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!pEASData) 38156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 38256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_FATAL, "Failed to allocate EAS library memory\n"); */ } 38356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_MALLOC_FAILED; 38456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 38556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 38656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* initialize some data */ 38756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_HWMemSet(pEASData, 0, sizeof(S_EAS_DATA)); 38856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pEASData->staticMemoryModel = (EAS_BOOL8) staticMemoryModel; 38956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pEASData->hwInstData = pHWInstData; 39056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pEASData->renderTime = 0; 39156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 39256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* set header search flag */ 39356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef FILE_HEADER_SEARCH 39456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pEASData->searchHeaderFlag = EAS_TRUE; 39556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 39656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 39756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* initalize parameters */ 39856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_SetVolume(pEASData, NULL, DEFAULT_VOLUME); 39956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 40056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _METRICS_ENABLED 40156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* initalize the metrics module */ 40256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pEASData->pMetricsModule = EAS_CMEnumOptModules(EAS_MODULE_METRICS); 40356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->pMetricsModule != NULL) 40456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 40556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = (*pEASData->pMetricsModule->pfInit)(pEASData, &pEASData->pMetricsData)) != EAS_SUCCESS) 40656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 40756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "Error %ld initializing metrics module\n", result); */ } 40856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 40956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 41056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 41156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 41256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 41356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* initailize the voice manager & synthesizer */ 41456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = VMInitialize(pEASData)) != EAS_SUCCESS) 41556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 41656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 41756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* initialize mix engine */ 41856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_MixEngineInit(pEASData)) != EAS_SUCCESS) 41956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 42056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "Error %ld starting up mix engine\n", result); */ } 42156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 42256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 42356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 42456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* initialize effects modules */ 42556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks for (module = 0; module < NUM_EFFECTS_MODULES; module++) 42656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 42756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pEASData->effectsModules[module].effect = EAS_CMEnumFXModules(module); 42856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->effectsModules[module].effect != NULL) 42956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 43056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = (*pEASData->effectsModules[module].effect->pfInit)(pEASData, &pEASData->effectsModules[module].effectData)) != EAS_SUCCESS) 43156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 43256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_FATAL, "Initialization of effects module %d returned %d\n", module, result); */ } 43356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 43456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 43556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 43656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 43756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 43856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* initialize PCM engine */ 43956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_PEInit(pEASData)) != EAS_SUCCESS) 44056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 44156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_FATAL, "EAS_PEInit failed with error code %ld\n", result); */ } 44256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 44356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 44456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 44556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* return instance data pointer to host */ 44656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *ppEASData = pEASData; 44756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 44856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 44956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 45056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 45156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 45256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_Shutdown() 45356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 45456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 45556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Shuts down the library. Deallocates any memory associated with the 45656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * synthesizer (dynamic memory model only) 45756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 45856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 45956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - handle to data for this instance 46056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 46156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs: 46256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 46356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 46456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 46556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_PUBLIC EAS_RESULT EAS_Shutdown (EAS_DATA_HANDLE pEASData) 46656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 46756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_HW_DATA_HANDLE hwInstData; 46856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result, reportResult; 46956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_INT i; 47056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 47156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* establish pointers */ 47256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks hwInstData = pEASData->hwInstData; 47356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 47456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check for NULL handle */ 47556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!pEASData) 47656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_HANDLE_INTEGRITY; 47756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 47856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* if there are streams open, close them */ 47956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks reportResult = EAS_SUCCESS; 48056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks for (i = 0; i < MAX_NUMBER_STREAMS; i++) 48156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 48256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->streams[i].pParserModule && pEASData->streams[i].handle) 48356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 48456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = (*((S_FILE_PARSER_INTERFACE*)(pEASData->streams[i].pParserModule))->pfClose)(pEASData, pEASData->streams[i].handle)) != EAS_SUCCESS) 48556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 48656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "Error %ld shutting down parser module\n", result); */ } 48756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks reportResult = result; 48856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 48956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 49056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 49156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 49256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* shutdown PCM engine */ 49356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_PEShutdown(pEASData)) != EAS_SUCCESS) 49456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 49556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "Error %ld shutting down PCM engine\n", result); */ } 49656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (reportResult == EAS_SUCCESS) 49756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks reportResult = result; 49856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 49956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 50056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* shutdown mix engine */ 50156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_MixEngineShutdown(pEASData)) != EAS_SUCCESS) 50256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 50356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "Error %ld shutting down mix engine\n", result); */ } 50456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (reportResult == EAS_SUCCESS) 50556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks reportResult = result; 50656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 50756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 50856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* shutdown effects modules */ 50956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks for (i = 0; i < NUM_EFFECTS_MODULES; i++) 51056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 51156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->effectsModules[i].effect) 51256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 51356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = (*pEASData->effectsModules[i].effect->pfShutdown)(pEASData, pEASData->effectsModules[i].effectData)) != EAS_SUCCESS) 51456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 51556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_FATAL, "Shutdown of effects module %d returned %d\n", i, result); */ } 51656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (reportResult == EAS_SUCCESS) 51756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks reportResult = result; 51856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 51956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 52056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 52156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 52256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* shutdown the voice manager & synthesizer */ 52356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks VMShutdown(pEASData); 52456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 52556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _METRICS_ENABLED 52656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* shutdown the metrics module */ 52756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->pMetricsModule != NULL) 52856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 52956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = (*pEASData->pMetricsModule->pfShutdown)(pEASData, pEASData->pMetricsData)) != EAS_SUCCESS) 53056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 53156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "Error %ld shutting down metrics module\n", result); */ } 53256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (reportResult == EAS_SUCCESS) 53356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks reportResult = result; 53456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 53556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 53656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 53756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 53856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* release allocated memory */ 53956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!pEASData->staticMemoryModel) 54056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_HWFree(hwInstData, pEASData); 54156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 54256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* shutdown host wrappers */ 54356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (hwInstData) 54456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 54556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWShutdown(hwInstData)) != EAS_SUCCESS) 54656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 54756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "Error %ld shutting down host wrappers\n", result); */ } 54856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (reportResult == EAS_SUCCESS) 54956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks reportResult = result; 55056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 55156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 55256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 55356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return reportResult; 55456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 55556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 55656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef JET_INTERFACE 55756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 55856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_OpenJETStream() 55956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 56056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Private interface for JET to open an SMF stream with an offset 56156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 56256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 56356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_OpenJETStream (EAS_DATA_HANDLE pEASData, EAS_FILE_HANDLE fileHandle, EAS_I32 offset, EAS_HANDLE *ppStream) 56456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 56556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 56656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_VOID_PTR streamHandle; 56756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_FILE_PARSER_INTERFACE *pParserModule; 56856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_INT streamNum; 56956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 57056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* allocate a stream */ 57156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((streamNum = EAS_AllocateStream(pEASData)) < 0) 57256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_MAX_STREAMS_OPEN; 57356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 57456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check Configuration Module for SMF parser */ 57556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *ppStream = NULL; 57656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks streamHandle = NULL; 57756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pParserModule = (S_FILE_PARSER_INTERFACE *) EAS_CMEnumModules(0); 57856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pParserModule == NULL) 57956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_UNRECOGNIZED_FORMAT; 58056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 58156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* see if SMF parser recognizes the file */ 58256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = (*pParserModule->pfCheckFileType)(pEASData, fileHandle, &streamHandle, offset)) != EAS_SUCCESS) 58356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 58456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "CheckFileType returned error %ld\n", result); */ } 58556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 58656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 58756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 58856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* parser recognized the file, return the handle */ 58956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (streamHandle) 59056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 59156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_InitStream(&pEASData->streams[streamNum], pParserModule, streamHandle); 59256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *ppStream = &pEASData->streams[streamNum]; 59356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 59456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 59556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 59656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_UNRECOGNIZED_FORMAT; 59756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 59856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 59956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 60056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 60156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_OpenFile() 60256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 60356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 60456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Opens a file for audio playback. 60556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 60656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 60756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 60856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pHandle - pointer to file handle 60956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 61056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs: 61156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 61256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 61356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects: 61456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 61556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 61656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 61756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_PUBLIC EAS_RESULT EAS_OpenFile (EAS_DATA_HANDLE pEASData, EAS_FILE_LOCATOR locator, EAS_HANDLE *ppStream) 61856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 61956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 62056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_FILE_HANDLE fileHandle; 62156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_VOID_PTR streamHandle; 62256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_FILE_PARSER_INTERFACE *pParserModule; 62356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_INT streamNum; 62456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_INT moduleNum; 62556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 62656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* open the file */ 62756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWOpenFile(pEASData->hwInstData, locator, &fileHandle, EAS_FILE_READ)) != EAS_SUCCESS) 62856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 62956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 63056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* allocate a stream */ 63156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((streamNum = EAS_AllocateStream(pEASData)) < 0) 63256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_MAX_STREAMS_OPEN; 63356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 63456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check Configuration Module for file parsers */ 63556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pParserModule = NULL; 63656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *ppStream = NULL; 63756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks streamHandle = NULL; 63856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks for (moduleNum = 0; ; moduleNum++) 63956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 64056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pParserModule = (S_FILE_PARSER_INTERFACE *) EAS_CMEnumModules(moduleNum); 64156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pParserModule == NULL) 64256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 64356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 64456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* see if this parser recognizes it */ 64556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = (*pParserModule->pfCheckFileType)(pEASData, fileHandle, &streamHandle, 0L)) != EAS_SUCCESS) 64656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 64756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "CheckFileType returned error %ld\n", result); */ } 64856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 64956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 65056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 65156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* parser recognized the file, return the handle */ 65256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (streamHandle) 65356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 65456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 65556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* save the parser pointer and file handle */ 65656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_InitStream(&pEASData->streams[streamNum], pParserModule, streamHandle); 65756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *ppStream = &pEASData->streams[streamNum]; 65856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 65956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 66056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 66156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* rewind the file for the next parser */ 66256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWFileSeek(pEASData->hwInstData, fileHandle, 0L)) != EAS_SUCCESS) 66356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 66456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 66556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 66656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* no parser was able to recognize the file, close it and return an error */ 66756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_HWCloseFile(pEASData->hwInstData, fileHandle); 66856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_WARNING, "No parser recognized the requested file\n"); */ } 66956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_UNRECOGNIZED_FORMAT; 67056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 67156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 67256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef MMAPI_SUPPORT 67356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 67456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_MMAPIToneControl() 67556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 67656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 67756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Opens a ToneControl file for audio playback. 67856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 67956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 68056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 68156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pHandle - pointer to file handle 68256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 68356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs: 68456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 68556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 68656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects: 68756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 68856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 68956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 69056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_PUBLIC EAS_RESULT EAS_MMAPIToneControl (EAS_DATA_HANDLE pEASData, EAS_FILE_LOCATOR locator, EAS_HANDLE *ppStream) 69156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 69256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 69356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_FILE_HANDLE fileHandle; 69456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_VOID_PTR streamHandle; 69556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_FILE_PARSER_INTERFACE *pParserModule; 69656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_INT streamNum; 69756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 69856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check if the tone control parser is available */ 69956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *ppStream = NULL; 70056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks streamHandle = NULL; 70156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pParserModule = EAS_CMEnumOptModules(EAS_MODULE_MMAPI_TONE_CONTROL); 70256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pParserModule == NULL) 70356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 70456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "EAS_MMAPIToneControl: ToneControl parser not available\n"); */ } 70556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_FEATURE_NOT_AVAILABLE; 70656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 70756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 70856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* open the file */ 70956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWOpenFile(pEASData->hwInstData, locator, &fileHandle, EAS_FILE_READ)) != EAS_SUCCESS) 71056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 71156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 71256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* allocate a stream */ 71356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((streamNum = EAS_AllocateStream(pEASData)) < 0) 71456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_MAX_STREAMS_OPEN; 71556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 71656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* see if ToneControl parser recognizes it */ 71756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = (*pParserModule->pfCheckFileType)(pEASData, fileHandle, &streamHandle, 0L)) != EAS_SUCCESS) 71856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 71956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "CheckFileType returned error %ld\n", result); */ } 72056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 72156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 72256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 72356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* parser accepted the file, return the handle */ 72456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (streamHandle) 72556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 72656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 72756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* save the parser pointer and file handle */ 72856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_InitStream(&pEASData->streams[streamNum], pParserModule, streamHandle); 72956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *ppStream = &pEASData->streams[streamNum]; 73056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 73156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 73256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 73356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* parser did not recognize the file, close it and return an error */ 73456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_HWCloseFile(pEASData->hwInstData, fileHandle); 73556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_WARNING, "No parser recognized the requested file\n"); */ } 73656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_UNRECOGNIZED_FORMAT; 73756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 73856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 73956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 74056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_GetWaveFmtChunk 74156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 74256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Helper function to retrieve WAVE file fmt chunk for MMAPI 74356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 74456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to EAS persistent data object 74556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pStream - stream handle 74656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pFmtChunk - pointer to variable to receive current setting 74756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 74856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 74956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_PUBLIC EAS_RESULT EAS_GetWaveFmtChunk (S_EAS_DATA *pEASData, EAS_HANDLE pStream, EAS_VOID_PTR *ppFmtChunk) 75056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 75156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 75256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 value; 75356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 75456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_GetStreamParameter(pEASData, pStream, PARSER_DATA_FORMAT, &value)) != EAS_SUCCESS) 75556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 75656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *ppFmtChunk = (EAS_VOID_PTR) value; 75756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 75856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 75956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 76056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 76156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 76256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_GetFileType 76356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 76456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Returns the file type (see eas_types.h for enumerations) 76556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 76656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to EAS persistent data object 76756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pStream - stream handle 76856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pFileType - pointer to variable to receive file type 76956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 77056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 77156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_PUBLIC EAS_RESULT EAS_GetFileType (S_EAS_DATA *pEASData, EAS_HANDLE pStream, EAS_I32 *pFileType) 77256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 77356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!EAS_StreamReady (pEASData, pStream)) 77456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_NOT_VALID_IN_THIS_STATE; 77556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_GetStreamParameter(pEASData, pStream, PARSER_DATA_FILE_TYPE, pFileType); 77656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 77756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 77856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 77956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_Prepare() 78056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 78156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 78256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Prepares the synthesizer to play the file or stream. Parses the first 78356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * frame of data from the file and arms the synthesizer. 78456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 78556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 78656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 78756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - file or stream handle 78856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 78956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs: 79056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 79156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 79256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects: 79356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 79456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 79556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 79656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_PUBLIC EAS_RESULT EAS_Prepare (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream) 79756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 79856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_FILE_PARSER_INTERFACE *pParserModule; 79956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_STATE state; 80056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 80156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 80256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pParserModule = (S_FILE_PARSER_INTERFACE*) pStream->pParserModule; 80356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pParserModule == NULL) 80456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_FEATURE_NOT_AVAILABLE; 80556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 80656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check for valid state */ 80756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = pParserModule->pfState(pEASData, pStream->handle, &state); 80856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (result == EAS_SUCCESS) 80956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 81056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* prepare the stream */ 81156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (state == EAS_STATE_OPEN) 81256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 81356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pParserModule = (S_FILE_PARSER_INTERFACE*) pStream->pParserModule; 81456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = (*pParserModule->pfPrepare)(pEASData, pStream->handle); 81556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 81656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* set volume */ 81756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (result == EAS_SUCCESS) 81856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = EAS_SetVolume(pEASData, pStream, pStream->volume); 81956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 82056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks else 82156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = EAS_ERROR_NOT_VALID_IN_THIS_STATE; 82256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 82356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 82456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 82556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 82656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 82756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 82856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 82956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_Render() 83056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 83156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 83256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Parse the Midi data and render PCM audio data. 83356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 83456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 83556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - buffer for internal EAS data 83656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pOut - output buffer pointer 83756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * nNumRequested - requested num samples to generate 83856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pnNumGenerated - actual number of samples generated 83956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 84056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs: 84156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_SUCCESS if PCM data was successfully rendered 84256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 84356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 84456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 84556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_PUBLIC EAS_RESULT EAS_Render (EAS_DATA_HANDLE pEASData, EAS_PCM *pOut, EAS_I32 numRequested, EAS_I32 *pNumGenerated) 84656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 84756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_FILE_PARSER_INTERFACE *pParserModule; 84856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 84956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 voicesRendered; 85056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_STATE parserState; 85156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_INT streamNum; 85256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 85356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* assume no samples generated and reset workload */ 85456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pNumGenerated = 0; 85556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks VMInitWorkload(pEASData->pVoiceMgr); 85656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 85756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* no support for other buffer sizes yet */ 85856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (numRequested != BUFFER_SIZE_IN_MONO_SAMPLES) 85956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 86056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "This library supports only %ld samples in buffer, host requested %ld samples\n", 86156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks (EAS_I32) BUFFER_SIZE_IN_MONO_SAMPLES, numRequested); */ } 86256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_BUFFER_SIZE_MISMATCH; 86356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 86456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 86556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _METRICS_ENABLED 86656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* start performance counter */ 86756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->pMetricsData) 86856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks (*pEASData->pMetricsModule->pfStartTimer)(pEASData->pMetricsData, EAS_PM_TOTAL_TIME); 86956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 87056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 87156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* prep the frame buffer, do mix engine prep only if TRUE */ 87256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _SPLIT_ARCHITECTURE 87356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (VMStartFrame(pEASData)) 87456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_MixEnginePrep(pEASData, numRequested); 87556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#else 87656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* prep the mix engine */ 87756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_MixEnginePrep(pEASData, numRequested); 87856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 87956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 88056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* save the output buffer pointer */ 88156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pEASData->pOutputAudioBuffer = pOut; 88256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 88356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 88456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _METRICS_ENABLED 88556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* start performance counter */ 88656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->pMetricsData) 88756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks (*pEASData->pMetricsModule->pfStartTimer)(pEASData->pMetricsData, EAS_PM_PARSE_TIME); 88856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 88956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 89056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* if we haven't finished parsing from last time, do it now */ 89156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* need to parse another frame of events before we render again */ 89256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks for (streamNum = 0; streamNum < MAX_NUMBER_STREAMS; streamNum++) 89356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 89456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* clear the locate flag */ 89556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pEASData->streams[streamNum].streamFlags &= ~STREAM_FLAGS_LOCATE; 89656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 89756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->streams[streamNum].pParserModule) 89856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 89956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 90056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* establish pointer to parser module */ 90156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pParserModule = pEASData->streams[streamNum].pParserModule; 90256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 90356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* handle pause */ 90456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->streams[streamNum].streamFlags & STREAM_FLAGS_PAUSE) 90556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 90656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pParserModule->pfPause) 90756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = pParserModule->pfPause(pEASData, pEASData->streams[streamNum].handle); 90856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pEASData->streams[streamNum].streamFlags &= ~STREAM_FLAGS_PAUSE; 90956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 91056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 91156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* get current state */ 91256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = (*pParserModule->pfState)(pEASData, pEASData->streams[streamNum].handle, &parserState)) != EAS_SUCCESS) 91356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 91456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 91556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* handle resume */ 91656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (parserState == EAS_STATE_PAUSED) 91756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 91856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->streams[streamNum].streamFlags & STREAM_FLAGS_RESUME) 91956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 92056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pParserModule->pfResume) 92156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = pParserModule->pfResume(pEASData, pEASData->streams[streamNum].handle); 92256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pEASData->streams[streamNum].streamFlags &= ~STREAM_FLAGS_RESUME; 92356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 92456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 92556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 92656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* if necessary, parse stream */ 92756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((pEASData->streams[streamNum].streamFlags & STREAM_FLAGS_PARSED) == 0) 92856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_ParseEvents(pEASData, &pEASData->streams[streamNum], pEASData->streams[streamNum].time + pEASData->streams[streamNum].frameLength, eParserModePlay)) != EAS_SUCCESS) 92956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 93056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 93156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check for an early abort */ 93256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((pEASData->streams[streamNum].streamFlags) == 0) 93356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 93456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 93556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _METRICS_ENABLED 93656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* stop performance counter */ 93756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->pMetricsData) 93856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks (*pEASData->pMetricsModule->pfStartTimer)(pEASData->pMetricsData, EAS_PM_TOTAL_TIME); 93956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 94056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 94156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 94256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 94356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 94456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check for repeat */ 94556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->streams[streamNum].repeatCount) 94656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 94756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 94856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check for stopped state */ 94956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = (*pParserModule->pfState)(pEASData, pEASData->streams[streamNum].handle, &parserState)) != EAS_SUCCESS) 95056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 95156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (parserState == EAS_STATE_STOPPED) 95256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 95356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 95456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* decrement repeat count, unless it is negative */ 95556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->streams[streamNum].repeatCount > 0) 95656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pEASData->streams[streamNum].repeatCount--; 95756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 95856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* reset the parser */ 95956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = (*pParserModule->pfReset)(pEASData, pEASData->streams[streamNum].handle)) != EAS_SUCCESS) 96056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 96156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pEASData->streams[streamNum].time = 0; 96256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 96356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 96456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 96556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 96656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 96756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _METRICS_ENABLED 96856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* stop performance counter */ 96956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->pMetricsData) 97056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks (void)(*pEASData->pMetricsModule->pfStopTimer)(pEASData->pMetricsData, EAS_PM_PARSE_TIME); 97156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 97256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 97356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _METRICS_ENABLED 97456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* start the render timer */ 97556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->pMetricsData) 97656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks (*pEASData->pMetricsModule->pfStartTimer)(pEASData->pMetricsData, EAS_PM_RENDER_TIME); 97756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 97856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 97956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* render audio */ 98056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = VMRender(pEASData->pVoiceMgr, BUFFER_SIZE_IN_MONO_SAMPLES, pEASData->pMixBuffer, &voicesRendered)) != EAS_SUCCESS) 98156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 98256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "pfRender function returned error %ld\n", result); */ } 98356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 98456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 98556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 98656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _METRICS_ENABLED 98756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* stop the render timer */ 98856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->pMetricsData) { 98956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks (*pEASData->pMetricsModule->pfIncrementCounter)(pEASData->pMetricsData, EAS_PM_FRAME_COUNT, 1); 99056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks (void)(*pEASData->pMetricsModule->pfStopTimer)(pEASData->pMetricsData, EAS_PM_RENDER_TIME); 99156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks (*pEASData->pMetricsModule->pfIncrementCounter)(pEASData->pMetricsData, EAS_PM_TOTAL_VOICE_COUNT, (EAS_U32) voicesRendered); 99256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks (void)(*pEASData->pMetricsModule->pfRecordMaxValue)(pEASData->pMetricsData, EAS_PM_MAX_VOICES, (EAS_U32) voicesRendered); 99356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 99456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 99556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 99656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks //2 Do we really need frameParsed? 99756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* need to parse another frame of events before we render again */ 99856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks for (streamNum = 0; streamNum < MAX_NUMBER_STREAMS; streamNum++) 99956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->streams[streamNum].pParserModule != NULL) 100056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pEASData->streams[streamNum].streamFlags &= ~STREAM_FLAGS_PARSED; 100156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 100256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _METRICS_ENABLED 100356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* start performance counter */ 100456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->pMetricsData) 100556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks (*pEASData->pMetricsModule->pfStartTimer)(pEASData->pMetricsData, EAS_PM_STREAM_TIME); 100656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 100756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 100856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* render PCM audio */ 100956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_PERender(pEASData, numRequested)) != EAS_SUCCESS) 101056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 101156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "EAS_PERender returned error %ld\n", result); */ } 101256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 101356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 101456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 101556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _METRICS_ENABLED 101656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* stop the stream timer */ 101756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->pMetricsData) 101856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks (void)(*pEASData->pMetricsModule->pfStopTimer)(pEASData->pMetricsData, EAS_PM_STREAM_TIME); 101956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 102056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 102156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _METRICS_ENABLED 102256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* start the post timer */ 102356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->pMetricsData) 102456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks (*pEASData->pMetricsModule->pfStartTimer)(pEASData->pMetricsData, EAS_PM_POST_TIME); 102556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 102656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 102756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* for split architecture, send DSP vectors. Do post only if return is TRUE */ 102856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _SPLIT_ARCHITECTURE 102956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (VMEndFrame(pEASData)) 103056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 103156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* now do post-processing */ 103256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_MixEnginePost(pEASData, numRequested); 103356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pNumGenerated = numRequested; 103456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 103556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#else 103656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* now do post-processing */ 103756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_MixEnginePost(pEASData, numRequested); 103856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pNumGenerated = numRequested; 103956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 104056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 104156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _METRICS_ENABLED 104256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* stop the post timer */ 104356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->pMetricsData) 104456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks (void)(*pEASData->pMetricsModule->pfStopTimer)(pEASData->pMetricsData, EAS_PM_POST_TIME); 104556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 104656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 104756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* advance render time */ 104856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pEASData->renderTime += AUDIO_FRAME_LENGTH; 104956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 105056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#if 0 105156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* dump workload for debug */ 105256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->pVoiceMgr->workload) 105356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_DETAIL, "Workload = %d\n", pEASData->pVoiceMgr->workload); */ } 105456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 105556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 105656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _METRICS_ENABLED 105756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* stop performance counter */ 105856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->pMetricsData) 105956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 106056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks PERF_TIMER temp; 106156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks temp = (*pEASData->pMetricsModule->pfStopTimer)(pEASData->pMetricsData, EAS_PM_TOTAL_TIME); 106256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 106356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* if max render time, record the number of voices and time */ 106456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((*pEASData->pMetricsModule->pfRecordMaxValue) 106556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks (pEASData->pMetricsData, EAS_PM_MAX_CYCLES, (EAS_U32) temp)) 106656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 106756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks (*pEASData->pMetricsModule->pfRecordValue)(pEASData->pMetricsData, EAS_PM_MAX_CYCLES_VOICES, (EAS_U32) voicesRendered); 106856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks (*pEASData->pMetricsModule->pfRecordValue)(pEASData->pMetricsData, EAS_PM_MAX_CYCLES_TIME, (EAS_I32) (pEASData->renderTime >> 8)); 106956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 107056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 107156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 107256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 107356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef JET_INTERFACE 107456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* let JET to do its thing */ 107556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->jetHandle != NULL) 107656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 107756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = JET_Process(pEASData); 107856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (result != EAS_SUCCESS) 107956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 108056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 108156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 108256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 108356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 108456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 108556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 108656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 108756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_SetRepeat() 108856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 108956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 109056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Set the selected stream to repeat. 109156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 109256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 109356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - handle to data for this instance 109456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - handle to stream 109556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * repeatCount - repeat count 109656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 109756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs: 109856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 109956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects: 110056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 110156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Notes: 110256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 0 = no repeat 110356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 1 = repeat once, i.e. play through twice 110456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * -1 = repeat forever 110556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 110656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 110756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*lint -esym(715, pEASData) reserved for future use */ 110856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_PUBLIC EAS_RESULT EAS_SetRepeat (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream, EAS_I32 repeatCount) 110956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 111056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->repeatCount = repeatCount; 111156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 111256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 111356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 111456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 111556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_GetRepeat() 111656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 111756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 111856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Gets the current repeat count for the selected stream. 111956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 112056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 112156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - handle to data for this instance 112256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - handle to stream 112356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pRrepeatCount - pointer to variable to hold repeat count 112456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 112556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs: 112656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 112756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects: 112856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 112956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Notes: 113056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 0 = no repeat 113156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 1 = repeat once, i.e. play through twice 113256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * -1 = repeat forever 113356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 113456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 113556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*lint -esym(715, pEASData) reserved for future use */ 113656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_PUBLIC EAS_RESULT EAS_GetRepeat (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream, EAS_I32 *pRepeatCount) 113756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 113856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pRepeatCount = pStream->repeatCount; 113956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 114056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 114156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 114256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 114356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_SetPlaybackRate() 114456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 114556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 114656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Sets the playback rate. 114756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 114856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 114956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - handle to data for this instance 115056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - handle to stream 115156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * rate - rate (28-bit fractional amount) 115256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 115356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs: 115456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 115556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects: 115656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 115756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 115856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 115956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*lint -esym(715, pEASData) reserved for future use */ 116056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_PUBLIC EAS_RESULT EAS_SetPlaybackRate (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream, EAS_U32 rate) 116156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 116256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 116356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check range */ 116456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((rate < (1 << 27)) || (rate > (1 << 29))) 116556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_PARAMETER; 116656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 116756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* calculate new frame length 116856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 116956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * NOTE: The maximum frame length we can accomodate based on a 117056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * maximum rate of 2.0 (2^28) is 2047 (2^13-1). To accomodate a 117156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * longer frame length or a higher maximum rate, the fixed point 117256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * divide below will need to be adjusted 117356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks */ 117456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->frameLength = (AUDIO_FRAME_LENGTH * (rate >> 8)) >> 20; 117556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 117656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* notify stream of new playback rate */ 117756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_SetStreamParameter(pEASData, pStream, PARSER_DATA_PLAYBACK_RATE, (EAS_I32) rate); 117856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 117956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 118056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 118156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 118256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_SetTransposition) 118356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 118456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 118556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Sets the key tranposition for the synthesizer. Transposes all 118656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * melodic instruments by the specified amount. Range is limited 118756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * to +/-12 semitones. 118856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 118956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 119056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - handle to data for this instance 119156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - handle to stream 119256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * transposition - +/-12 semitones 119356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 119456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs: 119556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 119656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects: 119756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 119856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 119956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 120056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_PUBLIC EAS_RESULT EAS_SetTransposition (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream, EAS_I32 transposition) 120156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 120256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 120356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check range */ 120456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((transposition < -12) || (transposition > 12)) 120556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_PARAMETER; 120656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 120756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!EAS_StreamReady(pEASData, pStream)) 120856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_NOT_VALID_IN_THIS_STATE; 120956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_IntSetStrmParam(pEASData, pStream, PARSER_DATA_TRANSPOSITION, transposition); 121056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 121156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 121256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 121356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_ParseEvents() 121456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 121556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 121656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Parse events in the current streams until the desired time is reached. 121756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 121856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 121956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - buffer for internal EAS data 122056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * endTime - stop parsing if this time is reached 122156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * parseMode - play, locate, or metadata 122256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 122356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs: 122456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_SUCCESS if PCM data was successfully rendered 122556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 122656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 122756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 122856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic EAS_RESULT EAS_ParseEvents (S_EAS_DATA *pEASData, EAS_HANDLE pStream, EAS_U32 endTime, EAS_INT parseMode) 122956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 123056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_FILE_PARSER_INTERFACE *pParserModule; 123156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 123256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 parserState; 123356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_BOOL done; 123456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_INT yieldCount = YIELD_EVENT_COUNT; 123556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U32 time = 0; 123656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 123756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* does this parser have a time function? */ 123856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pParserModule = pStream->pParserModule; 123956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pParserModule->pfTime == NULL) 124056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 124156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check state */ 124256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = (*pParserModule->pfState)(pEASData, pStream->handle, &parserState)) != EAS_SUCCESS) 124356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 124456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* if play state, advance time */ 124556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((parserState >= EAS_STATE_READY) && (parserState <= EAS_STATE_PAUSING)) 124656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->time += pStream->frameLength; 124756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks done = EAS_TRUE; 124856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 124956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 125056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* assume we're not done, in case we abort out */ 125156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks else 125256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 125356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->streamFlags &= ~STREAM_FLAGS_PARSED; 125456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks done = EAS_FALSE; 125556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 125656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 125756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks while (!done) 125856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 125956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 126056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check for stopped state */ 126156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = (*pParserModule->pfState)(pEASData, pStream->handle, &parserState)) != EAS_SUCCESS) 126256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 126356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (parserState > EAS_STATE_PLAY) 126456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 126556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* save current time if we're not in play mode */ 126656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (parseMode != eParserModePlay) 126756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->time = time << 8; 126856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks done = EAS_TRUE; 126956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 127056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 127156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 127256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* get the next event time */ 127356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pParserModule->pfTime) 127456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 127556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = (*pParserModule->pfTime)(pEASData, pStream->handle, &time)) != EAS_SUCCESS) 127656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 127756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 127856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* if next event is within this frame, parse it */ 127956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (time < (endTime >> 8)) 128056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 128156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 128256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* parse the next event */ 128356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pParserModule->pfEvent) 128456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = (*pParserModule->pfEvent)(pEASData, pStream->handle, parseMode)) != EAS_SUCCESS) 128556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 128656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 128756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 128856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* no more events in this frame, advance time */ 128956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks else 129056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 129156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->time = endTime; 129256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks done = EAS_TRUE; 129356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 129456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 129556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 129656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check for max workload exceeded */ 129756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (VMCheckWorkload(pEASData->pVoiceMgr)) 129856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 129956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* stop even though we may not have parsed 130056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * all the events in this frame. The parser will try to 130156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * catch up on the next frame. 130256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks */ 130356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 130456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 130556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 130656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* give host a chance for an early abort */ 130756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (--yieldCount == 0) 130856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 130956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (EAS_HWYield(pEASData->hwInstData)) 131056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 131156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks yieldCount = YIELD_EVENT_COUNT; 131256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 131356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 131456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 131556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* if no early abort, parsing is complete for this frame */ 131656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (done) 131756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->streamFlags |= STREAM_FLAGS_PARSED; 131856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 131956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 132056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 132156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 132256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 132356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_ParseMetaData() 132456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 132556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 132656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 132756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 132856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 132956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 133056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - file or stream handle 133156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * playLength - pointer to variable to store the play length (in msecs) 133256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 133356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs: 133456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 133556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 133656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects: 133756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * - resets the parser to the start of the file 133856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 133956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 134056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_PUBLIC EAS_RESULT EAS_ParseMetaData (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream, EAS_I32 *playLength) 134156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 134256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_FILE_PARSER_INTERFACE *pParserModule; 134356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 134456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_STATE state; 134556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 134656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pParserModule = (S_FILE_PARSER_INTERFACE*) pStream->pParserModule; 134756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pParserModule == NULL) 134856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_FEATURE_NOT_AVAILABLE; 134956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 135056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check parser state */ 135156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = (*pParserModule->pfState)(pEASData, pStream->handle, &state)) != EAS_SUCCESS) 135256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 135356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (state >= EAS_STATE_OPEN) 135456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_NOT_VALID_IN_THIS_STATE; 135556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 135656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* if parser has metadata function, use that */ 135756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pParserModule->pfGetMetaData != NULL) 135856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return pParserModule->pfGetMetaData(pEASData, pStream->handle, playLength); 135956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 136056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* reset the parser to the beginning */ 136156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = (*pParserModule->pfReset)(pEASData, pStream->handle)) != EAS_SUCCESS) 136256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 136356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 136456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* parse the file to end */ 136556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->time = 0; 136656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks VMInitWorkload(pEASData->pVoiceMgr); 136756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_ParseEvents(pEASData, pStream, 0x7fffffff, eParserModeMetaData)) != EAS_SUCCESS) 136856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 136956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 137056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* get the parser time */ 137156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_GetLocation(pEASData, pStream, playLength)) != EAS_SUCCESS) 137256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 137356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 137456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* reset the parser to the beginning */ 137556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->time = 0; 137656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return (*pParserModule->pfReset)(pEASData, pStream->handle); 137756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 137856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 137956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 138056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_RegisterMetaDataCallback() 138156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 138256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 138356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Registers a metadata callback function for parsed metadata. 138456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 138556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 138656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 138756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - file or stream handle 138856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * cbFunc - pointer to host callback function 138956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * metaDataBuffer - pointer to metadata buffer 139056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * metaDataBufSize - maximum size of the metadata buffer 139156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 139256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs: 139356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 139456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 139556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects: 139656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 139756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 139856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 139956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_PUBLIC EAS_RESULT EAS_RegisterMetaDataCallback ( 140056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_DATA_HANDLE pEASData, 140156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_HANDLE pStream, 140256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_METADATA_CBFUNC cbFunc, 140356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks char *metaDataBuffer, 140456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 metaDataBufSize, 140556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_VOID_PTR pUserData) 140656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 140756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_METADATA_CB metadata; 140856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 140956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!EAS_StreamReady(pEASData, pStream)) 141056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_NOT_VALID_IN_THIS_STATE; 141156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 141256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* register callback function */ 141356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks metadata.callback = cbFunc; 141456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks metadata.buffer = metaDataBuffer; 141556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks metadata.bufferSize = metaDataBufSize; 141656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks metadata.pUserData = pUserData; 141756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SetStreamParameter(pEASData, pStream, PARSER_DATA_METADATA_CB, (EAS_I32) &metadata); 141856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 141956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 142056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 142156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_GetNoteCount () 142256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 142356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Returns the total number of notes played in this stream 142456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 142556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 142656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_PUBLIC EAS_RESULT EAS_GetNoteCount (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream, EAS_I32 *pNoteCount) 142756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 142856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!EAS_StreamReady(pEASData, pStream)) 142956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_NOT_VALID_IN_THIS_STATE; 143056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_IntGetStrmParam(pEASData, pStream, PARSER_DATA_NOTE_COUNT, pNoteCount); 143156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 143256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 143356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 143456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_CloseFile() 143556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 143656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 143756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Closes an audio file or stream. Playback should have either paused or 143856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * completed (EAS_State returns EAS_PAUSED or EAS_STOPPED). 143956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 144056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 144156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 144256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - file or stream handle 144356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 144456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs: 144556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 144656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 144756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects: 144856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 144956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 145056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 145156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_PUBLIC EAS_RESULT EAS_CloseFile (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream) 145256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 145356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_FILE_PARSER_INTERFACE *pParserModule; 145456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 145556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 145656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* call the close function */ 145756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pParserModule = (S_FILE_PARSER_INTERFACE*) pStream->pParserModule; 145856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pParserModule == NULL) 145956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_FEATURE_NOT_AVAILABLE; 146056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 146156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = (*pParserModule->pfClose)(pEASData, pStream->handle); 146256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 146356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* clear the handle and parser interface pointer */ 146456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->handle = NULL; 146556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->pParserModule = NULL; 146656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 146756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 146856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 146956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 147056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_OpenMIDIStream() 147156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 147256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 147356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Opens a raw MIDI stream allowing the host to route MIDI cable data directly to the synthesizer 147456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 147556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 147656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 147756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pHandle - pointer to variable to hold file or stream handle 147856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 147956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs: 148056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 148156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 148256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects: 148356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 148456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 148556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 148656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_PUBLIC EAS_RESULT EAS_OpenMIDIStream (EAS_DATA_HANDLE pEASData, EAS_HANDLE *ppStream, EAS_HANDLE streamHandle) 148756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 148856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 148956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_INTERACTIVE_MIDI *pMIDIStream; 149056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_INT streamNum; 149156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 149256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* initialize some pointers */ 149356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *ppStream = NULL; 149456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 149556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* allocate a stream */ 149656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((streamNum = EAS_AllocateStream(pEASData)) < 0) 149756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_MAX_STREAMS_OPEN; 149856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 149956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check Configuration Module for S_EAS_DATA allocation */ 150056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->staticMemoryModel) 150156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pMIDIStream = EAS_CMEnumData(EAS_CM_MIDI_STREAM_DATA); 150256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks else 150356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pMIDIStream = EAS_HWMalloc(pEASData->hwInstData, sizeof(S_INTERACTIVE_MIDI)); 150456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 150556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* allocate dynamic memory */ 150656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!pMIDIStream) 150756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 150856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_FATAL, "Failed to allocate MIDI stream data\n"); */ } 150956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_MALLOC_FAILED; 151056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 151156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 151256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* zero the memory to insure complete initialization */ 151356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_HWMemSet(pMIDIStream, 0, sizeof(S_INTERACTIVE_MIDI)); 151456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_InitStream(&pEASData->streams[streamNum], NULL, pMIDIStream); 151556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 151656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* instantiate a new synthesizer */ 151756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (streamHandle == NULL) 151856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 151956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = VMInitMIDI(pEASData, &pMIDIStream->pSynth); 152056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 152156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 152256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* use an existing synthesizer */ 152356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks else 152456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 152556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 value; 152656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = EAS_GetStreamParameter(pEASData, streamHandle, PARSER_DATA_SYNTH_HANDLE, &value); 152756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pMIDIStream->pSynth = (S_SYNTH*) value; 152856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks VMIncRefCount(pMIDIStream->pSynth); 152956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 153056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (result != EAS_SUCCESS) 153156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 153256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_CloseMIDIStream(pEASData, &pEASData->streams[streamNum]); 153356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 153456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 153556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 153656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* initialize the MIDI stream data */ 153756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_InitMIDIStream(&pMIDIStream->stream); 153856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 153956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *ppStream = (EAS_HANDLE) &pEASData->streams[streamNum]; 154056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 154156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 154256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 154356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 154456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_WriteMIDIStream() 154556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 154656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 154756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Send data to the MIDI stream device 154856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 154956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 155056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 155156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - stream handle 155256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pBuffer - pointer to buffer 155356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * count - number of bytes to write 155456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 155556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs: 155656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 155756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 155856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects: 155956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 156056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 156156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 156256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_PUBLIC EAS_RESULT EAS_WriteMIDIStream (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream, EAS_U8 *pBuffer, EAS_I32 count) 156356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 156456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_INTERACTIVE_MIDI *pMIDIStream; 156556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 156656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 156756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pMIDIStream = (S_INTERACTIVE_MIDI*) pStream->handle; 156856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 156956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* send the entire buffer */ 157056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks while (count--) 157156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 157256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_ParseMIDIStream(pEASData, pMIDIStream->pSynth, &pMIDIStream->stream, *pBuffer++, eParserModePlay)) != EAS_SUCCESS) 157356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 157456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 157556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 157656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 157756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 157856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 157956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_CloseMIDIStream() 158056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 158156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 158256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Closes a raw MIDI stream 158356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 158456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 158556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 158656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - stream handle 158756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 158856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs: 158956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 159056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 159156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects: 159256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 159356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 159456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 159556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_PUBLIC EAS_RESULT EAS_CloseMIDIStream (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream) 159656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 159756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_INTERACTIVE_MIDI *pMIDIStream; 159856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 159956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pMIDIStream = (S_INTERACTIVE_MIDI*) pStream->handle; 160056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 160156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* close synth */ 160256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pMIDIStream->pSynth != NULL) 160356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 160456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks VMMIDIShutdown(pEASData, pMIDIStream->pSynth); 160556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pMIDIStream->pSynth = NULL; 160656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 160756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 160856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* release allocated memory */ 160956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!pEASData->staticMemoryModel) 161056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_HWFree(((S_EAS_DATA*) pEASData)->hwInstData, pMIDIStream); 161156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 161256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->handle = NULL; 161356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 161456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 161556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 161656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 161756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_State() 161856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 161956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 162056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Returns the state of an audio file or stream. 162156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 162256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 162356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 162456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - file or stream handle 162556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 162656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs: 162756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 162856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 162956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects: 163056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 163156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 163256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 163356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_PUBLIC EAS_RESULT EAS_State (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream, EAS_STATE *pState) 163456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 163556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_FILE_PARSER_INTERFACE *pParserModule; 163656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 163756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 163856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* call the parser to return state */ 163956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pParserModule = (S_FILE_PARSER_INTERFACE*) pStream->pParserModule; 164056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pParserModule == NULL) 164156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_FEATURE_NOT_AVAILABLE; 164256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 164356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = (*pParserModule->pfState)(pEASData, pStream->handle, pState)) != EAS_SUCCESS) 164456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 164556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 164656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* if repeat count is set for this parser, mask the stopped state from the application */ 164756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pStream->repeatCount && (*pState == EAS_STATE_STOPPED)) 164856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pState = EAS_STATE_PLAY; 164956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 165056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* if we're not ready or playing, we don't need to hide state from host */ 165156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (*pState > EAS_STATE_PLAY) 165256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 165356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 165456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* if stream is about to be paused, report it as paused */ 165556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pStream->streamFlags & STREAM_FLAGS_PAUSE) 165656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 165756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pStream->streamFlags & STREAM_FLAGS_LOCATE) 165856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pState = EAS_STATE_PAUSED; 165956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks else 166056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pState = EAS_STATE_PAUSING; 166156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 166256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 166356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* if stream is about to resume, report it as playing */ 166456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pStream->streamFlags & STREAM_FLAGS_RESUME) 166556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pState = EAS_STATE_PLAY; 166656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 166756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 166856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 166956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 167056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 167156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_SetPolyphony() 167256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 167356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 167456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Set the polyphony of the stream. A value of 0 allows the stream 167556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * to use all voices (set by EAS_SetSynthPolyphony). 167656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 167756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 167856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 167956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * streamHandle - handle returned by EAS_OpenFile 168056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * polyphonyCount - the desired polyphony count 168156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 168256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs: 168356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 168456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects: 168556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 168656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 168756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 168856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_PUBLIC EAS_RESULT EAS_SetPolyphony (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream, EAS_I32 polyphonyCount) 168956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 169056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!EAS_StreamReady(pEASData, pStream)) 169156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_NOT_VALID_IN_THIS_STATE; 169256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_IntSetStrmParam(pEASData, pStream, PARSER_DATA_POLYPHONY, polyphonyCount); 169356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 169456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 169556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 169656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_GetPolyphony() 169756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 169856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 169956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Returns the current polyphony setting of the stream 170056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 170156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 170256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 170356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * streamHandle - handle returned by EAS_OpenFile 170456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pPolyphonyCount - pointer to variable to receive polyphony count 170556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 170656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs: 170756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 170856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects: 170956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 171056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 171156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 171256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_PUBLIC EAS_RESULT EAS_GetPolyphony (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream, EAS_I32 *pPolyphonyCount) 171356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 171456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!EAS_StreamReady(pEASData, pStream)) 171556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_NOT_VALID_IN_THIS_STATE; 171656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_IntGetStrmParam(pEASData, pStream, PARSER_DATA_POLYPHONY, pPolyphonyCount); 171756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 171856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 171956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 172056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_SetSynthPolyphony() 172156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 172256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 172356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Set the polyphony of the synth . Value must be >= 1 and <= the 172456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * maximum number of voices. This function will pin the polyphony 172556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * at those limits 172656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 172756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 172856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 172956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * synthNum - synthesizer number (0 = onboard, 1 = DSP) 173056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * polyphonyCount - the desired polyphony count 173156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 173256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs: 173356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 173456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects: 173556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 173656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 173756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 173856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_PUBLIC EAS_RESULT EAS_SetSynthPolyphony (EAS_DATA_HANDLE pEASData, EAS_I32 synthNum, EAS_I32 polyphonyCount) 173956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 174056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return VMSetSynthPolyphony(pEASData->pVoiceMgr, synthNum, polyphonyCount); 174156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 174256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 174356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 174456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_GetSynthPolyphony() 174556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 174656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 174756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Returns the current polyphony setting of the synth 174856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 174956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 175056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 175156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * synthNum - synthesizer number (0 = onboard, 1 = DSP) 175256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pPolyphonyCount - pointer to variable to receive polyphony count 175356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 175456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs: 175556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 175656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects: 175756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 175856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 175956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 176056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_PUBLIC EAS_RESULT EAS_GetSynthPolyphony (EAS_DATA_HANDLE pEASData, EAS_I32 synthNum, EAS_I32 *pPolyphonyCount) 176156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 176256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return VMGetSynthPolyphony(pEASData->pVoiceMgr, synthNum, pPolyphonyCount); 176356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 176456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 176556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 176656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_SetPriority() 176756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 176856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 176956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Set the priority of the stream. Determines which stream's voices 177056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * are stolen when there are insufficient voices for all notes. 177156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Value must be in the range of 1-15, lower values are higher 177256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * priority. 177356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 177456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 177556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 177656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * streamHandle - handle returned by EAS_OpenFile 177756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * polyphonyCount - the desired polyphony count 177856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 177956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs: 178056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 178156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects: 178256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 178356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 178456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 178556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_PUBLIC EAS_RESULT EAS_SetPriority (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream, EAS_I32 priority) 178656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 178756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!EAS_StreamReady(pEASData, pStream)) 178856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_NOT_VALID_IN_THIS_STATE; 178956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_IntSetStrmParam(pEASData, pStream, PARSER_DATA_PRIORITY, priority); 179056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 179156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 179256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 179356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_GetPriority() 179456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 179556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 179656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Returns the current priority setting of the stream 179756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 179856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 179956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 180056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * streamHandle - handle returned by EAS_OpenFile 180156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pPriority - pointer to variable to receive priority 180256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 180356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs: 180456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 180556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects: 180656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 180756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 180856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 180956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_PUBLIC EAS_RESULT EAS_GetPriority (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream, EAS_I32 *pPriority) 181056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 181156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!EAS_StreamReady(pEASData, pStream)) 181256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_NOT_VALID_IN_THIS_STATE; 181356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_IntGetStrmParam(pEASData, pStream, PARSER_DATA_PRIORITY, pPriority); 181456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 181556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 181656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 181756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_SetVolume() 181856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 181956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 182056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Set the master gain for the mix engine in 1dB increments 182156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 182256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 182356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 182456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * volume - the desired master gain (100 is max) 182556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - file or stream handle 182656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 182756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs: 182856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 182956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 183056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects: 183156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * overrides any previously set master volume from sysex 183256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 183356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 183456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 183556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_PUBLIC EAS_RESULT EAS_SetVolume (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream, EAS_I32 volume) 183656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 183756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I16 gain; 183856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 183956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check range */ 184056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((volume < 0) || (volume > EAS_MAX_VOLUME)) 184156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_PARAMETER_RANGE; 184256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 184356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* stream volume */ 184456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pStream != NULL) 184556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 184656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 gainOffset; 184756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 184856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 184956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!EAS_StreamReady(pEASData, pStream)) 185056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_NOT_VALID_IN_THIS_STATE; 185156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 185256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* get gain offset */ 185356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->volume = (EAS_U8) volume; 185456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = EAS_GetStreamParameter(pEASData, pStream, PARSER_DATA_GAIN_OFFSET, &gainOffset); 185556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (result == EAS_SUCCESS) 185656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks volume += gainOffset; 185756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 185856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* set stream volume */ 185956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks gain = EAS_VolumeToGain(volume - STREAM_VOLUME_HEADROOM); 186056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 186156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* convert to linear scalar */ 186256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_IntSetStrmParam(pEASData, pStream, PARSER_DATA_VOLUME, gain); 186356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 186456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 186556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* master volume */ 186656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pEASData->masterVolume = (EAS_U8) volume; 186756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#if (NUM_OUTPUT_CHANNELS == 1) 186856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* leave 3dB headroom for mono output */ 186956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks volume -= 3; 187056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 187156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 187256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks gain = EAS_VolumeToGain(volume - STREAM_VOLUME_HEADROOM); 187356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pEASData->masterGain = gain; 187456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 187556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 187656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 187756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 187856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_GetVolume() 187956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 188056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 188156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Returns the master volume for the synthesizer. The default volume setting is 188256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 50. The volume range is 0 to 100; 188356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 188456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 188556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 188656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * volume - the desired master volume 188756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - file or stream handle 188856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 188956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs: 189056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 189156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 189256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects: 189356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * overrides any previously set master volume from sysex 189456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 189556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 189656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 189756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_PUBLIC EAS_I32 EAS_GetVolume (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream) 189856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 189956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pStream == NULL) 190056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return pEASData->masterVolume; 190156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 190256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!EAS_StreamReady(pEASData, pStream)) 190356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_NOT_VALID_IN_THIS_STATE; 190456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return pStream->volume; 190556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 190656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 190756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 190856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_SetMaxLoad() 190956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 191056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 191156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Sets the maximum workload the parsers will do in a single call to 191256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_Render. The units are currently arbitrary, but should correlate 191356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * well to the actual CPU cycles consumed. The primary effect is to 191456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * reduce the occasional peaks in CPU cycles consumed when parsing 191556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * dense parts of a MIDI score. 191656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 191756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 191856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - handle to data for this instance 191956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * maxLoad - the desired maximum workload 192056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 192156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs: 192256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 192356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects: 192456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 192556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 192656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 192756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_PUBLIC EAS_RESULT EAS_SetMaxLoad (EAS_DATA_HANDLE pEASData, EAS_I32 maxLoad) 192856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 192956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks VMSetWorkload(pEASData->pVoiceMgr, maxLoad); 193056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 193156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 193256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 193356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 193456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_SetMaxPCMStreams() 193556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 193656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Sets the maximum number of PCM streams allowed in parsers that 193756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * use PCM streaming. 193856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 193956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 194056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 194156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * streamHandle - handle returned by EAS_OpenFile 194256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * maxNumStreams - maximum number of PCM streams 194356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 194456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 194556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_PUBLIC EAS_RESULT EAS_SetMaxPCMStreams (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream, EAS_I32 maxNumStreams) 194656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 194756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!EAS_StreamReady(pEASData, pStream)) 194856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_NOT_VALID_IN_THIS_STATE; 194956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_IntSetStrmParam(pEASData, pStream, PARSER_DATA_MAX_PCM_STREAMS, maxNumStreams); 195056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 195156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 195256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 195356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_Locate() 195456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 195556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 195656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Locate into the file associated with the handle. 195756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 195856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 195956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 196056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - file handle 196156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * milliseconds - playback offset from start of file in milliseconds 196256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 196356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs: 196456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 196556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 196656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects: 196756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * the actual offset will be quantized to the closest update period, typically 196856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * a resolution of 5.9ms. Notes that are started prior to this time will not 196956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * sound. Any notes currently playing will be shut off. 197056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 197156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 197256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 197356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_PUBLIC EAS_RESULT EAS_Locate (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream, EAS_I32 milliseconds, EAS_BOOL offset) 197456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 197556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_FILE_PARSER_INTERFACE *pParserModule; 197656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 197756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U32 requestedTime; 197856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_STATE state; 197956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 198056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* get pointer to parser function table */ 198156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pParserModule = (S_FILE_PARSER_INTERFACE*) pStream->pParserModule; 198256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pParserModule == NULL) 198356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_FEATURE_NOT_AVAILABLE; 198456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 198556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = (*pParserModule->pfState)(pEASData, pStream->handle, &state)) != EAS_SUCCESS) 198656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 198756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (state >= EAS_STATE_OPEN) 198856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_NOT_VALID_IN_THIS_STATE; 198956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 199056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* handle offset and limit to start of file */ 199156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /*lint -e{704} use shift for performance*/ 199256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (offset) 199356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks milliseconds += (EAS_I32) pStream->time >> 8; 199456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (milliseconds < 0) 199556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks milliseconds = 0; 199656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 199756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check to see if the request is different from the current time */ 199856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks requestedTime = (EAS_U32) milliseconds; 199956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (requestedTime == (pStream->time >> 8)) 200056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 200156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 200256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* set the locate flag */ 200356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->streamFlags |= STREAM_FLAGS_LOCATE; 200456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 200556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* use the parser locate function, if available */ 200656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pParserModule->pfLocate != NULL) 200756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 200856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_BOOL parserLocate = EAS_FALSE; 200956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = pParserModule->pfLocate(pEASData, pStream->handle, (EAS_I32) requestedTime, &parserLocate); 201056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!parserLocate) 201156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 201256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (result == EAS_SUCCESS) 201356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->time = requestedTime << 8; 201456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 201556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 201656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 201756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 201856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* if we were paused and not going to resume, set pause request flag */ 201956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (((state == EAS_STATE_PAUSING) || (state == EAS_STATE_PAUSED)) && ((pStream->streamFlags & STREAM_FLAGS_RESUME) == 0)) 202056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->streamFlags |= STREAM_FLAGS_PAUSE; 202156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 202256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* reset the synth and parser */ 202356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = (*pParserModule->pfReset)(pEASData, pStream->handle)) != EAS_SUCCESS) 202456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 202556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->time = 0; 202656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 202756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* locating forward, clear parsed flag and parse data until we get to the requested location */ 202856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_ParseEvents(pEASData, pStream, requestedTime << 8, eParserModeLocate)) != EAS_SUCCESS) 202956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 203056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 203156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 203256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 203356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 203456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 203556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_GetLocation() 203656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 203756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 203856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Returns the current playback offset 203956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 204056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 204156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 204256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - file handle 204356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 204456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs: 204556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * The offset in milliseconds from the start of the current sequence, quantized 204656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * to the nearest update period. Actual resolution is typically 5.9 ms. 204756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 204856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects: 204956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 205056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 205156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 205256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*lint -esym(715, pEASData) reserved for future use */ 205356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_PUBLIC EAS_RESULT EAS_GetLocation (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream, EAS_I32 *pTime) 205456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 205556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!EAS_StreamReady(pEASData, pStream)) 205656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_NOT_VALID_IN_THIS_STATE; 205756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 205856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pTime = pStream->time >> 8; 205956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 206056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 206156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 206256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 206356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_GetRenderTime() 206456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 206556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 206656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Returns the current playback offset 206756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 206856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 206956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 207056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 207156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs: 207256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Gets the render time clock in msecs. 207356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 207456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects: 207556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 207656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 207756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 207856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_PUBLIC EAS_RESULT EAS_GetRenderTime (EAS_DATA_HANDLE pEASData, EAS_I32 *pTime) 207956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 208056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pTime = pEASData->renderTime >> 8; 208156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 208256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 208356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 208456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 208556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_Pause() 208656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 208756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 208856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Pauses the playback of the data associated with this handle. The audio 208956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * is gracefully ramped down to prevent clicks and pops. It may take several 209056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * buffers of audio before the audio is muted. 209156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 209256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 209356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * psEASData - pointer to overall EAS data structure 209456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - file or stream handle 209556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 209656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs: 209756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 209856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 209956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects: 210056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 210156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 210256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 210356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 210456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_PUBLIC EAS_RESULT EAS_Pause (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream) 210556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 210656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_FILE_PARSER_INTERFACE *pParserModule; 210756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_STATE state; 210856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 210956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 211056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pParserModule = (S_FILE_PARSER_INTERFACE*) pStream->pParserModule; 211156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pParserModule == NULL) 211256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_FEATURE_NOT_AVAILABLE; 211356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 211456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check for valid state */ 211556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = pParserModule->pfState(pEASData, pStream->handle, &state); 211656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (result == EAS_SUCCESS) 211756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 211856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((state != EAS_STATE_PLAY) && (state != EAS_STATE_READY) && ((pStream->streamFlags & STREAM_FLAGS_RESUME) == 0)) 211956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_NOT_VALID_IN_THIS_STATE; 212056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 212156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* make sure parser implements pause */ 212256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pParserModule->pfPause == NULL) 212356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = EAS_ERROR_NOT_IMPLEMENTED; 212456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 212556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* clear resume flag */ 212656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->streamFlags &= ~STREAM_FLAGS_RESUME; 212756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 212856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* set pause flag */ 212956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->streamFlags |= STREAM_FLAGS_PAUSE; 213056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 213156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#if 0 213256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* pause the stream */ 213356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pParserModule->pfPause) 213456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = pParserModule->pfPause(pEASData, pStream->handle); 213556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks else 213656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = EAS_ERROR_NOT_IMPLEMENTED; 213756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 213856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 213956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 214056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 214156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 214256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 214356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 214456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_Resume() 214556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 214656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 214756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Resumes the playback of the data associated with this handle. The audio 214856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * is gracefully ramped up to prevent clicks and pops. 214956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 215056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 215156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * psEASData - pointer to overall EAS data structure 215256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - file or stream handle 215356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 215456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs: 215556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 215656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 215756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects: 215856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 215956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 216056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 216156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 216256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_PUBLIC EAS_RESULT EAS_Resume (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream) 216356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 216456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_FILE_PARSER_INTERFACE *pParserModule; 216556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_STATE state; 216656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 216756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 216856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pParserModule = (S_FILE_PARSER_INTERFACE*) pStream->pParserModule; 216956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pParserModule == NULL) 217056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_FEATURE_NOT_AVAILABLE; 217156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 217256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check for valid state */ 217356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = pParserModule->pfState(pEASData, pStream->handle, &state); 217456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (result == EAS_SUCCESS) 217556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 217656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((state != EAS_STATE_PAUSED) && (state != EAS_STATE_PAUSING) && ((pStream->streamFlags & STREAM_FLAGS_PAUSE) == 0)) 217756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_NOT_VALID_IN_THIS_STATE; 217856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 217956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* make sure parser implements this function */ 218056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pParserModule->pfResume == NULL) 218156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = EAS_ERROR_NOT_IMPLEMENTED; 218256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 218356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* clear pause flag */ 218456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->streamFlags &= ~STREAM_FLAGS_PAUSE; 218556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 218656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* set resume flag */ 218756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->streamFlags |= STREAM_FLAGS_RESUME; 218856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 218956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#if 0 219056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* resume the stream */ 219156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pParserModule->pfResume) 219256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = pParserModule->pfResume(pEASData, pStream->handle); 219356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks else 219456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = EAS_ERROR_NOT_IMPLEMENTED; 219556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 219656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 219756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 219856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 219956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 220056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 220156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 220256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_GetParameter() 220356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 220456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 220556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Set the parameter of a module. See E_MODULES for a list of modules 220656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * and the header files of the modules for a list of parameters. 220756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 220856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 220956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * psEASData - pointer to overall EAS data structure 221056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - file or stream handle 221156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * module - enumerated module number 221256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * param - enumerated parameter number 221356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pValue - pointer to variable to receive parameter value 221456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 221556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs: 221656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 221756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 221856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects: 221956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 222056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 222156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 222256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 222356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_PUBLIC EAS_RESULT EAS_GetParameter (EAS_DATA_HANDLE pEASData, EAS_I32 module, EAS_I32 param, EAS_I32 *pValue) 222456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 222556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 222656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (module >= NUM_EFFECTS_MODULES) 222756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_MODULE; 222856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 222956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->effectsModules[module].effectData == NULL) 223056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_MODULE; 223156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 223256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return (*pEASData->effectsModules[module].effect->pFGetParam) 223356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks (pEASData->effectsModules[module].effectData, param, pValue); 223456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 223556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 223656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 223756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_SetParameter() 223856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 223956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 224056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Set the parameter of a module. See E_MODULES for a list of modules 224156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * and the header files of the modules for a list of parameters. 224256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 224356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 224456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * psEASData - pointer to overall EAS data structure 224556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - file or stream handle 224656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * module - enumerated module number 224756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * param - enumerated parameter number 224856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * value - new parameter value 224956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 225056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs: 225156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 225256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 225356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects: 225456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 225556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 225656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 225756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 225856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_PUBLIC EAS_RESULT EAS_SetParameter (EAS_DATA_HANDLE pEASData, EAS_I32 module, EAS_I32 param, EAS_I32 value) 225956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 226056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 226156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (module >= NUM_EFFECTS_MODULES) 226256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_MODULE; 226356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 226456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->effectsModules[module].effectData == NULL) 226556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_MODULE; 226656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 226756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return (*pEASData->effectsModules[module].effect->pFSetParam) 226856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks (pEASData->effectsModules[module].effectData, param, value); 226956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 227056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 227156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _METRICS_ENABLED 227256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 227356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_MetricsReport() 227456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 227556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 227656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Displays the current metrics through the metrics interface. 227756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 227856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 227956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * p - instance data handle 228056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 228156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs: 228256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 228356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 228456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects: 228556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 228656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 228756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 228856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_PUBLIC EAS_RESULT EAS_MetricsReport (EAS_DATA_HANDLE pEASData) 228956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 229056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!pEASData->pMetricsModule) 229156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_MODULE; 229256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 229356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return (*pEASData->pMetricsModule->pfReport)(pEASData->pMetricsData); 229456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 229556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 229656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 229756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_MetricsReset() 229856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 229956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 230056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Resets the metrics. 230156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 230256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 230356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * p - instance data handle 230456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 230556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs: 230656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 230756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 230856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects: 230956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 231056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 231156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 231256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_PUBLIC EAS_RESULT EAS_MetricsReset (EAS_DATA_HANDLE pEASData) 231356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 231456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 231556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!pEASData->pMetricsModule) 231656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_MODULE; 231756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 231856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return (*pEASData->pMetricsModule->pfReset)(pEASData->pMetricsData); 231956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 232056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 232156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 232256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 232356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_SetSoundLibrary() 232456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 232556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 232656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Sets the location of the sound library. 232756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 232856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 232956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - instance data handle 233056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pSoundLib - pointer to sound library 233156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 233256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs: 233356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 233456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 233556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects: 233656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 233756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 233856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 233956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_PUBLIC EAS_RESULT EAS_SetSoundLibrary (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream, EAS_SNDLIB_HANDLE pSndLib) 234056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 234156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pStream) 234256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 234356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!EAS_StreamReady(pEASData, pStream)) 234456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_NOT_VALID_IN_THIS_STATE; 234556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_IntSetStrmParam(pEASData, pStream, PARSER_DATA_EAS_LIBRARY, (EAS_I32) pSndLib); 234656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 234756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 234856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return VMSetGlobalEASLib(pEASData->pVoiceMgr, pSndLib); 234956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 235056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 235156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 235256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_SetHeaderSearchFlag() 235356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 235456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * By default, when EAS_OpenFile is called, the parsers check the 235556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * first few bytes of the file looking for a specific header. Some 235656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * mobile devices may add a header to the start of a file, which 235756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * will prevent the parser from recognizing the file. If the 235856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * searchFlag is set to EAS_TRUE, the parser will search the entire 235956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * file looking for the header. This may enable EAS to recognize 236056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * some files that it would ordinarily reject. The negative is that 236156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * it make take slightly longer to process the EAS_OpenFile request. 236256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 236356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 236456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - instance data handle 236556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * searchFlag - search flag (EAS_TRUE or EAS_FALSE) 236656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 236756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 236856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_PUBLIC EAS_RESULT EAS_SetHeaderSearchFlag (EAS_DATA_HANDLE pEASData, EAS_BOOL searchFlag) 236956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 237056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pEASData->searchHeaderFlag = (EAS_BOOL8) searchFlag; 237156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 237256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 237356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 237456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 237556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_SetPlayMode() 237656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 237756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Some file formats support special play modes, such as iMode partial 237856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * play mode. This call can be used to change the play mode. The 237956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * default play mode (usually straight playback) is always zero. 238056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 238156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 238256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - instance data handle 238356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - file or stream handle 238456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * playMode - play mode (see file parser for specifics) 238556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 238656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 238756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_PUBLIC EAS_RESULT EAS_SetPlayMode (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream, EAS_I32 playMode) 238856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 238956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_IntSetStrmParam(pEASData, pStream, PARSER_DATA_PLAY_MODE, playMode); 239056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 239156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 239256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef DLS_SYNTHESIZER 239356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 239456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_LoadDLSCollection() 239556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 239656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 239756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Sets the location of the sound library. 239856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 239956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 240056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - instance data handle 240156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pSoundLib - pointer to sound library 240256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 240356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs: 240456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 240556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 240656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects: 240756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 240856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 240956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 241056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_PUBLIC EAS_RESULT EAS_LoadDLSCollection (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream, EAS_FILE_LOCATOR locator) 241156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 241256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_FILE_HANDLE fileHandle; 241356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 241456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_DLSLIB_HANDLE pDLS; 241556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 241656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pStream != NULL) 241756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 241856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!EAS_StreamReady(pEASData, pStream)) 241956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_NOT_VALID_IN_THIS_STATE; 242056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 242156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 242256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* open the file */ 242356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWOpenFile(pEASData->hwInstData, locator, &fileHandle, EAS_FILE_READ)) != EAS_SUCCESS) 242456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 242556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 242656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* parse the file */ 242756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = DLSParser(pEASData->hwInstData, fileHandle, 0, &pDLS); 242856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_HWCloseFile(pEASData->hwInstData, fileHandle); 242956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 243056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (result == EAS_SUCCESS) 243156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 243256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 243356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* if a stream pStream is specified, point it to the DLS collection */ 243456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pStream) 243556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = EAS_IntSetStrmParam(pEASData, pStream, PARSER_DATA_DLS_COLLECTION, (EAS_I32) pDLS); 243656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 243756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* global DLS load */ 243856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks else 243956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = VMSetGlobalDLSLib(pEASData, pDLS); 244056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 244156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 244256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 244356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 244456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 244556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 244656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef EXTERNAL_AUDIO 244756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 244856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_RegExtAudioCallback() 244956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 245056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 245156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Registers callback functions for audio events. 245256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 245356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 245456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 245556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - file or stream handle 245656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * cbProgChgFunc - pointer to host callback function for program change 245756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * cbEventFunc - pointer to host callback functio for note events 245856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 245956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs: 246056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 246156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 246256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects: 246356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 246456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 246556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 246656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_PUBLIC EAS_RESULT EAS_RegExtAudioCallback (EAS_DATA_HANDLE pEASData, 246756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_HANDLE pStream, 246856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_VOID_PTR pInstData, 246956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_EXT_PRG_CHG_FUNC cbProgChgFunc, 247056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_EXT_EVENT_FUNC cbEventFunc) 247156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 247256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_SYNTH *pSynth; 247356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 247456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!EAS_StreamReady(pEASData, pStream)) 247556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_NOT_VALID_IN_THIS_STATE; 247656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 247756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (EAS_GetStreamParameter(pEASData, pStream, PARSER_DATA_SYNTH_HANDLE, (EAS_I32*) &pSynth) != EAS_SUCCESS) 247856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_PARAMETER; 247956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 248056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pSynth == NULL) 248156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_PARAMETER; 248256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 248356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks VMRegExtAudioCallback(pSynth, pInstData, cbProgChgFunc, cbEventFunc); 248456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 248556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 248656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 248756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 248856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_GetMIDIControllers() 248956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 249056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 249156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Returns the current state of MIDI controllers on the requested channel. 249256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 249356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 249456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 249556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - file or stream handle 249656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pControl - pointer to structure to receive data 249756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 249856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs: 249956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 250056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 250156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects: 250256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 250356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 250456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 250556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_PUBLIC EAS_RESULT EAS_GetMIDIControllers (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream, EAS_U8 channel, S_MIDI_CONTROLLERS *pControl) 250656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 250756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_SYNTH *pSynth; 250856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 250956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!EAS_StreamReady(pEASData, pStream)) 251056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_NOT_VALID_IN_THIS_STATE; 251156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 251256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (EAS_GetStreamParameter(pEASData, pStream, PARSER_DATA_SYNTH_HANDLE, (EAS_I32*) &pSynth) != EAS_SUCCESS) 251356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_PARAMETER; 251456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 251556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pSynth == NULL) 251656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_PARAMETER; 251756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 251856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks VMGetMIDIControllers(pSynth, channel, pControl); 251956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 252056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 252156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 252256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 252356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _SPLIT_ARCHITECTURE 252456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 252556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_SetFrameBuffer() 252656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 252756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 252856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Sets the frame buffer pointer passed to the IPC communications functions 252956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 253056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 253156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - instance data handle 253256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * locator - file locator 253356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 253456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs: 253556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 253656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 253756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects: 253856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * May overlay instruments in the GM sound set 253956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 254056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 254156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 254256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_PUBLIC EAS_RESULT EAS_SetFrameBuffer (EAS_DATA_HANDLE pEASData, EAS_FRAME_BUFFER_HANDLE pFrameBuffer) 254356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 254456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->pVoiceMgr) 254556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pEASData->pVoiceMgr->pFrameBuffer = pFrameBuffer; 254656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 254756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 254856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 254956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 255056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 255156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_SearchFile 255256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 255356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Search file for specific sequence starting at current file 255456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * position. Returns offset to start of sequence. 255556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 255656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 255756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to EAS persistent data object 255856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * fileHandle - file handle 255956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * searchString - pointer to search sequence 256056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * len - length of search sequence 256156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pOffset - pointer to variable to store offset to sequence 256256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 256356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Returns EAS_EOF if end-of-file is reached 256456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 256556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 256656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT EAS_SearchFile (S_EAS_DATA *pEASData, EAS_FILE_HANDLE fileHandle, const EAS_U8 *searchString, EAS_I32 len, EAS_I32 *pOffset) 256756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 256856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 256956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_INT index; 257056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U8 c; 257156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 257256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pOffset = -1; 257356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks index = 0; 257456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks for (;;) 257556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 257656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = EAS_HWGetByte(pEASData->hwInstData, fileHandle, &c); 257756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (result != EAS_SUCCESS) 257856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 257956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (c == searchString[index]) 258056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 258156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks index++; 258256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (index == 4) 258356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 258456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = EAS_HWFilePos(pEASData->hwInstData, fileHandle, pOffset); 258556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (result != EAS_SUCCESS) 258656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 258756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pOffset -= len; 258856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 258956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 259056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 259156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks else 259256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks index = 0; 259356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 259456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 259556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 259656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 259756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 2598