156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * File: 456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * eas_main.c 556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Contents and purpose: 756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * The entry point and high-level functions for the EAS Synthesizer test 856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * harness. 956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 1056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Copyright Sonic Network Inc. 2004 117df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 127df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 137df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * you may not use this file except in compliance with the License. 147df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * You may obtain a copy of the License at 157df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 167df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 177df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 187df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 197df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 207df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 217df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * See the License for the specific language governing permissions and 227df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * limitations under the License. 2356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 2456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 2556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Revision Control: 2656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * $Revision: 775 $ 2756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * $Date: 2007-07-20 10:11:11 -0700 (Fri, 20 Jul 2007) $ 2856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 2956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 3056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 3156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _lint 3256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include "lint_stdlib.h" 3356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#else 3456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include <stdio.h> 3556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include <string.h> 3656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include <stdlib.h> 3756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include <time.h> 3856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 3956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 4056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include "eas.h" 4156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include "eas_wave.h" 4256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include "eas_report.h" 4356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 4456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* determines how many EAS buffers to fill a host buffer */ 4556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define NUM_BUFFERS 8 4656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 4756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* default file to play if no filename is specified on the command line */ 4856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic const char defaultTestFile[] = "test.mid"; 4956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 5056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_I32 polyphony; 5156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 5256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* prototypes for helper functions */ 5356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic void StrCopy(char *dest, const char *src, EAS_I32 size); 5456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic EAS_BOOL ChangeFileExt(char *str, const char *ext, EAS_I32 size); 5556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic EAS_RESULT PlayFile (EAS_DATA_HANDLE easData, const char* filename, const char* outputFile, const S_EAS_LIB_CONFIG *pLibConfig, void *buffer, EAS_I32 bufferSize); 5656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic EAS_BOOL EASLibraryCheck (const S_EAS_LIB_CONFIG *pLibConfig); 5756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 5856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* main is defined after playfile to avoid the need for two passes through lint */ 5956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 6056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 6156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * PlayFile() 6256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 6356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 6456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * This function plays the file requested by filename 6556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 6656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 6756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 6856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs: 6956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 7056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 7156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 7256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 7356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic EAS_RESULT PlayFile (EAS_DATA_HANDLE easData, const char* filename, const char* outputFile, const S_EAS_LIB_CONFIG *pLibConfig, void *buffer, EAS_I32 bufferSize) 7456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 7556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_HANDLE handle; 7656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result, reportResult; 7756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 count; 7856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_STATE state; 7956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 playTime; 8056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks char waveFilename[256]; 8156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks WAVE_FILE *wFile; 8256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_INT i; 8356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_PCM *p; 8456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 8556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* determine the name of the output file */ 8656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks wFile = NULL; 8756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (outputFile == NULL) 8856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 8956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks StrCopy(waveFilename, filename, sizeof(waveFilename)); 9056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!ChangeFileExt(waveFilename, "wav", sizeof(waveFilename))) 9156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 9256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "Error in output filename %s\n", waveFilename); */ } 9356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_FAILURE; 9456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 9556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks outputFile = waveFilename; 9656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 9756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 9856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* call EAS library to open file */ 9956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((reportResult = EAS_OpenFile(easData, filename, &handle)) != EAS_SUCCESS) 10056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 10156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "EAS_OpenFile returned %ld\n", reportResult); */ } 10256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return reportResult; 10356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 10456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 10556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* prepare to play the file */ 10656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_Prepare(easData, handle)) != EAS_SUCCESS) 10756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 10856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "EAS_Prepare returned %ld\n", result); */ } 10956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks reportResult = result; 11056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 11156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 11256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* get play length */ 11356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_ParseMetaData(easData, handle, &playTime)) != EAS_SUCCESS) 11456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 11556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "EAS_ParseMetaData returned %ld\n", result); */ } 11656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 11756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 11856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_ReportEx(_EAS_SEVERITY_NOFILTER, 0xe624f4d9, 0x00000005 , playTime / 1000, playTime % 1000); 11956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 12056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (reportResult == EAS_SUCCESS) 12156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 12256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* create the output file */ 12356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks wFile = WaveFileCreate(outputFile, pLibConfig->numChannels, pLibConfig->sampleRate, sizeof(EAS_PCM) * 8); 12456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!wFile) 12556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 12656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "Unable to create output file %s\n", waveFilename); */ } 12756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks reportResult = EAS_FAILURE; 12856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 12956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 13056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 13156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* rendering loop */ 13256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks while (reportResult == EAS_SUCCESS) 13356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 13456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 13556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* we may render several buffers here to fill one host buffer */ 13656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks for (i = 0, p = buffer; i < NUM_BUFFERS; i++, p+= pLibConfig->mixBufferSize * pLibConfig->numChannels) 13756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 13856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 13956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* get the current time */ 14056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_GetLocation(easData, handle, &playTime)) != EAS_SUCCESS) 14156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 14256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "EAS_GetLocation returned %d\n",result); */ } 14356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (reportResult == EAS_SUCCESS) 14456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks reportResult = result; 14556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 14656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 14756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_DETAIL, "Parser time: %d.%03d\n", playTime / 1000, playTime % 1000); */ } 14856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 14956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* render a buffer of audio */ 15056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_Render(easData, p, pLibConfig->mixBufferSize, &count)) != EAS_SUCCESS) 15156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 15256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "EAS_Render returned %d\n",result); */ } 15356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (reportResult == EAS_SUCCESS) 15456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks reportResult = result; 15556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 15656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 15756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 15856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (result == EAS_SUCCESS) 15956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 16056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* write it to the wave file */ 16156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (WaveFileWrite(wFile, buffer, bufferSize) != bufferSize) 16256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 16356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "WaveFileWrite failed\n"); */ } 16456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks reportResult = EAS_FAILURE; 16556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 16656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 16756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 16856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (reportResult == EAS_SUCCESS) 16956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 17056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check stream state */ 17156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_State(easData, handle, &state)) != EAS_SUCCESS) 17256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 17356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "EAS_State returned %d\n", result); */ } 17456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks reportResult = result; 17556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 17656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 17756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* is playback complete */ 17856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((state == EAS_STATE_STOPPED) || (state == EAS_STATE_ERROR)) 17956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 18056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 18156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 18256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 18356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* close the output file */ 18456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (wFile) 18556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 18656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!WaveFileClose(wFile)) 18756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 18856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "Error closing wave file %s\n", waveFilename); */ } 18956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (reportResult == EAS_SUCCESS) 19056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = EAS_FAILURE; 19156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 19256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 19356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 19456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* close the input file */ 19556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_CloseFile(easData,handle)) != EAS_SUCCESS) 19656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 19756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "EAS_Close returned %ld\n", result); */ } 19856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (reportResult == EAS_SUCCESS) 19956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = EAS_FAILURE; 20056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 20156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 20256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return reportResult; 20356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} /* end PlayFile */ 20456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 20556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 20656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * main() 20756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 20856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: The entry point for the EAS sample application 20956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 21056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 21156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 21256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs: 21356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 21456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 21556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 21656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksint main( int argc, char **argv ) 21756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 21856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_DATA_HANDLE easData; 21956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks const S_EAS_LIB_CONFIG *pLibConfig; 22056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks void *buffer; 22156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result, playResult; 22256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 bufferSize; 22356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks int i; 22456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks int temp; 22556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks FILE *debugFile; 22656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks char *outputFile = NULL; 22756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 22856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* set the error reporting level */ 22956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_SetDebugLevel(_EAS_SEVERITY_INFO); 23056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks debugFile = NULL; 23156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 23256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* process command-line arguments */ 23356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks for (i = 1; i < argc; i++) 23456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 23556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check for switch */ 23656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (argv[i][0] == '-') 23756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 23856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks switch (argv[i][1]) 23956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 24056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks case 'd': 24156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks temp = argv[i][2]; 24256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((temp >= '0') || (temp <= '9')) 24356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_SetDebugLevel(temp); 24456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks else 24556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_WARNING, "Invalid debug level %d\n", temp); */ } 24656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 24756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks case 'f': 24856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((debugFile = fopen(&argv[i][2],"w")) == NULL) 24956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_WARNING, "Unable to create debug file %s\n", &argv[i][2]); */ } 25056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks else 25156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_SetDebugFile(debugFile, EAS_TRUE); 25256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 25356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks case 'o': 25456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks outputFile = &argv[i][2]; 25556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 25656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks case 'p': 25756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks polyphony = atoi(&argv[i][2]); 25856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (polyphony < 1) 25956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks polyphony = 1; 26056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_INFO, "Polyphony set to %d\n", polyphony); */ } 26156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 26256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks default: 26356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 26456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 26556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks continue; 26656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 26756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 26856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 26956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* assume success */ 27056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks playResult = EAS_SUCCESS; 27156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 27256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* get the library configuration */ 27356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pLibConfig = EAS_Config(); 27456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!EASLibraryCheck(pLibConfig)) 27556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return -1; 27656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (polyphony > pLibConfig->maxVoices) 27756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks polyphony = pLibConfig->maxVoices; 27856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 27956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* calculate buffer size */ 28056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks bufferSize = pLibConfig->mixBufferSize * pLibConfig->numChannels * (EAS_I32)sizeof(EAS_PCM) * NUM_BUFFERS; 28156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 28256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* allocate output buffer memory */ 28356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks buffer = malloc((EAS_U32)bufferSize); 28456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!buffer) 28556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 28656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_FATAL, "Error allocating memory for audio buffer\n"); */ } 28756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_FAILURE; 28856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 28956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 29056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* initialize the EAS library */ 29156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks polyphony = pLibConfig->maxVoices; 29256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_Init(&easData)) != EAS_SUCCESS) 29356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 29456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_FATAL, "EAS_Init returned %ld - aborting!\n", result); */ } 29556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks free(buffer); 29656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 29756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 29856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 29956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* 30056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Some debugging environments don't allow for passed parameters. 30156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * In this case, just play the default MIDI file "test.mid" 30256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks */ 30356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (argc < 2) 30456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 30556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_INFO, "Playing '%s'\n", defaultTestFile); */ } 30656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((playResult = PlayFile(easData, defaultTestFile, NULL, pLibConfig, buffer, bufferSize)) != EAS_SUCCESS) 30756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 30856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "Error %d playing file %s\n", playResult, defaultTestFile); */ } 30956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 31056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 31156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* iterate through the list of files to be played */ 31256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks else 31356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 31456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks for (i = 1; i < argc; i++) 31556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 31656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check for switch */ 31756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (argv[i][0] != '-') 31856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 31956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 32056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_INFO, "Playing '%s'\n", argv[i]); */ } 32156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((playResult = PlayFile(easData, argv[i], outputFile, pLibConfig, buffer, bufferSize)) != EAS_SUCCESS) 32256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 32356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "Error %d playing file %s\n", playResult, argv[i]); */ } 32456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 32556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 32656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 32756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 32856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 32956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 33056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* shutdown the EAS library */ 33156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_Shutdown(easData)) != EAS_SUCCESS) 33256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 33356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_FATAL, "EAS_Shutdown returned %ld\n", result); */ } 33456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 33556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 33656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* free the output buffer */ 33756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks free(buffer); 33856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 33956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* close the debug file */ 34056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (debugFile) 34156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks fclose(debugFile); 34256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 34356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* play errors take precedence over shutdown errors */ 34456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (playResult != EAS_SUCCESS) 34556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return playResult; 34656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 34756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} /* end main */ 34856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 34956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 35056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * StrCopy() 35156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 35256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 35356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Safe string copy 35456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 35556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 35656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 35756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs: 35856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 35956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 36056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 36156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic void StrCopy(char *dest, const char *src, EAS_I32 size) 36256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 36356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks int len; 36456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 36556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks strncpy(dest, src, (size_t) size-1); 36656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks len = (int) strlen(src); 36756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (len < size) 36856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks dest[len] = 0; 36956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} /* end StrCopy */ 37056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 37156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 37256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * ChangeFileExt() 37356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 37456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 37556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Changes the file extension of a filename 37656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 37756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 37856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 37956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs: 38056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 38156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 38256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 38356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic EAS_BOOL ChangeFileExt(char *str, const char *ext, EAS_I32 size) 38456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 38556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks char *p; 38656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 38756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* find the extension, if any */ 38856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks p = strrchr(str,'.'); 38956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!p) 39056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 39156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((EAS_I32)(strlen(str) + 5) > size) 39256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_FALSE; 39356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks strcat(str,"."); 39456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks strcat(str,ext); 39556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_TRUE; 39656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 39756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 39856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* make sure there's room for the extension */ 39956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks p++; 40056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *p = 0; 40156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((EAS_I32)(strlen(str) + 4) > size) 40256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_FALSE; 40356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks strcat(str,ext); 40456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_TRUE; 40556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} /* end ChangeFileExt */ 40656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 40756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*---------------------------------------------------------------------------- 40856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EASLibraryCheck() 40956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 41056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 41156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Displays the library version and checks it against the header 41256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * file used to build this code. 41356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 41456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 41556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pLibConfig - library configuration retrieved from the library 41656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 41756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Outputs: 41856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * returns EAS_TRUE if matched 41956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 42056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Side Effects: 42156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 42256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *---------------------------------------------------------------------------- 42356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/ 42456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic EAS_BOOL EASLibraryCheck (const S_EAS_LIB_CONFIG *pLibConfig) 42556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{ 42656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 42756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* display the library version */ 42856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_INFO, "EAS Library Version %d.%d.%d.%d\n", 42956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pLibConfig->libVersion >> 24, 43056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks (pLibConfig->libVersion >> 16) & 0x0f, 43156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks (pLibConfig->libVersion >> 8) & 0x0f, 43256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pLibConfig->libVersion & 0x0f); */ } 43356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 43456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* display some info about the library build */ 43556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pLibConfig->checkedVersion) 43656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_INFO, "\tChecked library\n"); */ } 43756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_INFO, "\tMaximum polyphony: %d\n", pLibConfig->maxVoices); */ } 43856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_INFO, "\tNumber of channels: %d\n", pLibConfig->numChannels); */ } 43956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_INFO, "\tSample rate: %d\n", pLibConfig->sampleRate); */ } 44056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_INFO, "\tMix buffer size: %d\n", pLibConfig->mixBufferSize); */ } 44156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pLibConfig->filterEnabled) 44256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_INFO, "\tFilter enabled\n"); */ } 44356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifndef _WIN32_WCE 44456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_INFO, "\tLibrary Build Timestamp: %s", ctime((time_t*)&pLibConfig->buildTimeStamp)); */ } 44556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 44656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_INFO, "\tLibrary Build ID: %s\n", pLibConfig->buildGUID); */ } 44756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 44856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check it against the header file used to build this code */ 44956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /*lint -e{778} constant expression used for display purposes may evaluate to zero */ 45056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (LIB_VERSION != pLibConfig->libVersion) 45156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 45256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_FATAL, "Library version does not match header files. EAS Header Version %d.%d.%d.%d\n", 45356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks LIB_VERSION >> 24, 45456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks (LIB_VERSION >> 16) & 0x0f, 45556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks (LIB_VERSION >> 8) & 0x0f, 45656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks LIB_VERSION & 0x0f); */ } 45756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_FALSE; 45856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 45956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_TRUE; 46056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} /* end EASLibraryCheck */ 46156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 462