17df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 27df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * File: 47df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * eas_mdls.c 57df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 67df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Contents and purpose: 77df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * This file contains DLS to EAS converter. 856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 97df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Copyright (c) 2005 Sonic Network Inc. 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. 227df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 237df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 247df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Revision Control: 257df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * $Revision: 818 $ 267df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * $Date: 2007-08-02 15:19:41 -0700 (Thu, 02 Aug 2007) $ 277df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 287df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 297df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 307df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/* 317df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * NOTES: 327df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 337df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Processor Endian-ness: 347df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 357df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * We use the EAS_HWGetDWord() and EAS_HWGetWord () functions 367df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * extensively in this module. It would probably be faster to read 377df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * an entire data structure, but this introduces the problem of 387df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * sensitivity to processor endian-ness to the parser. By utlilizing 397df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * the host wrapper functions, we avoid having to flip bytes around 407df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * for big-endian processors. The default host wrapper versions of 417df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * these functions are insensitive to processor endian-ness due to 427df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * the fact that they read the file as a byte stream. 437df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 447df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Dynamic Memory: 457df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 467df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Dynamic memory allocation is a risky proposition in a mobile 477df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * device. The memory can become fragmented, resulting in an 487df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * inability to allocate a memory block, or garbage collection 497df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * routines can use many CPU cycles. Either can contribute to 507df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * failures of critical systems. Therefore, we try to minimize the 517df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * number of memory allocations we make. 527df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 537df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * We allocate a single large block of memory for the entire 547df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * converted DLS collection, including the articulation data and 557df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * samples. This block is then sub-allocated for the various 567df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * data structures. 577df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 587df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Parser Overview: 597df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 607df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * We make two passes through the file, the first pass to count the 617df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * number of instruments, regions, etc. and allocate memory for 627df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * them. The second pass parses the data into the allocated data 637df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * structures. 647df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 657df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Conditional chunks are challenging in that they can occur 667df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * anywhere in the list chunk that contains them. To simplify, we 677df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * parse the blocks in a list in specific order, no matter which 687df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * order they appear in the file. This way we don't allocate memory 697df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * and parse a block that we end up throwing away later due to 707df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * a conditional chunk. 717df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 727df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Assumptions that may bite us in the future: 737df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 747df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * We make some assumptions to simplify things. The most fundamental 757df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * assumption is that there will be no more than one of any type of 767df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * chunk in a list. While this is consistent with the block diagram 777df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * of the file layout in the mDLS spec, there is nothing in the 787df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * spec that precludes having mulitple lar2 or rgn2 chunks, with 797df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * conditional blocks that dictate their usage. 807df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 817df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * DLS -> EAS Conversion Process: 827df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 837df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Another challenge is that the DLS structure does not map well to 847df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * the current EAS sound library structure. Not all DLS constructs 857df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * are supported, and data from DLS structures must sometimes be 867df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * mapped to multiple EAS data structures. To simplify the process, 877df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * the EAS region, articulation, and envelopes are treated as a 887df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * single combined unit. Thus for each region, there must be one 897df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * articulation element and two envelope elements. 907df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 917df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * The sample processing is also a multi-step process. First the 927df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * ptbl chunk is pre-parsed to determine the number of samples 937df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * in the collection. The next step is to parse the instrument data 947df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * to determine which samples are actually used by instruments. 957df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Some samples may not be used because they are used only in 967df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * conditional blocks that the synthesizer cannot parse, or the 977df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * author neglected to remove unused samples from the collection. 987df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * In the next step, the active samples are read into memory and 997df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * converted to the appropriate playback format. Finally, as the 1007df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * instruments are processed, the links are made to the samples and 1017df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * wsmp data is extracted for the region and articulation data 1027df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * structures. 1037df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 1047df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 1057df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#ifndef _FILTER_ENABLED 1067df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#error "Filter must be enabled if DLS_SYNTHESIZER is enabled" 1077df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#endif 1087df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 1097df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*------------------------------------ 1107df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * includes 1117df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *------------------------------------ 1127df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 1137df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 1147df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/* this define allows us to use the sndlib.h structures as RW memory */ 1157df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#define SCNST 1167df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 1177df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#include "eas_data.h" 1187df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#include "eas_host.h" 1197df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#include "eas_mdls.h" 1207df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#include "eas_math.h" 1217df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#include "dls.h" 1227df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#include "dls2.h" 1237df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#include "eas_report.h" 1247df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 1257df30109963092559d3760c0661a020f9daf1030The Android Open Source Project//2 we should replace log10() function with fixed point routine in ConvertSampleRate() 1267df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/* lint is choking on the ARM math.h file, so we declare the log10 function here */ 1277df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectextern double log10(double x); 1287df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 1297df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*------------------------------------ 1307df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * defines 1317df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *------------------------------------ 1327df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 1337df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 1347df30109963092559d3760c0661a020f9daf1030The Android Open Source Project// #define _DEBUG_DLS 1357df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 13656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define DLS_MAX_WAVE_COUNT 1024 13756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define DLS_MAX_ART_COUNT 2048 13856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define DLS_MAX_REGION_COUNT 2048 13956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define DLS_MAX_INST_COUNT 256 14056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define MAX_DLS_WAVE_SIZE (1024*1024) 1417df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 1427df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*------------------------------------ 1437df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * typedefs 1447df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *------------------------------------ 1457df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 1467df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 1477df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/* offsets to articulation data */ 1487df30109963092559d3760c0661a020f9daf1030The Android Open Source Projecttypedef enum 1497df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 15056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks PARAM_MODIFIED = 0, 15156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks PARAM_MOD_LFO_FREQ, 15256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks PARAM_MOD_LFO_DELAY, 15356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 15456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks PARAM_VIB_LFO_FREQ, 15556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks PARAM_VIB_LFO_DELAY, 15656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 15756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks PARAM_VOL_EG_DELAY, 15856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks PARAM_VOL_EG_ATTACK, 15956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks PARAM_VOL_EG_HOLD, 16056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks PARAM_VOL_EG_DECAY, 16156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks PARAM_VOL_EG_SUSTAIN, 16256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks PARAM_VOL_EG_RELEASE, 16356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks PARAM_VOL_EG_SHUTDOWN, 16456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks PARAM_VOL_EG_VEL_TO_ATTACK, 16556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks PARAM_VOL_EG_KEY_TO_DECAY, 16656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks PARAM_VOL_EG_KEY_TO_HOLD, 16756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 16856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks PARAM_MOD_EG_DELAY, 16956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks PARAM_MOD_EG_ATTACK, 17056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks PARAM_MOD_EG_HOLD, 17156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks PARAM_MOD_EG_DECAY, 17256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks PARAM_MOD_EG_SUSTAIN, 17356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks PARAM_MOD_EG_RELEASE, 17456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks PARAM_MOD_EG_VEL_TO_ATTACK, 17556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks PARAM_MOD_EG_KEY_TO_DECAY, 17656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks PARAM_MOD_EG_KEY_TO_HOLD, 17756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 17856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks PARAM_INITIAL_FC, 17956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks PARAM_INITIAL_Q, 18056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks PARAM_MOD_LFO_TO_FC, 18156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks PARAM_MOD_LFO_CC1_TO_FC, 18256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks PARAM_MOD_LFO_CHAN_PRESS_TO_FC, 18356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks PARAM_MOD_EG_TO_FC, 18456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks PARAM_VEL_TO_FC, 18556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks PARAM_KEYNUM_TO_FC, 18656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 18756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks PARAM_MOD_LFO_TO_GAIN, 18856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks PARAM_MOD_LFO_CC1_TO_GAIN, 18956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks PARAM_MOD_LFO_CHAN_PRESS_TO_GAIN, 19056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks PARAM_VEL_TO_GAIN, 19156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 19256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks PARAM_TUNING, 19356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks PARAM_KEYNUM_TO_PITCH, 19456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks PARAM_VIB_LFO_TO_PITCH, 19556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks PARAM_VIB_LFO_CC1_TO_PITCH, 19656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks PARAM_VIB_LFO_CHAN_PRESS_TO_PITCH, 19756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks PARAM_MOD_LFO_TO_PITCH, 19856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks PARAM_MOD_LFO_CC1_TO_PITCH, 19956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks PARAM_MOD_LFO_CHAN_PRESS_TO_PITCH, 20056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks PARAM_MOD_EG_TO_PITCH, 20156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 20256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks PARAM_DEFAULT_PAN, 20356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks PARAM_MIDI_CC91_TO_REVERB_SEND, 20456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks PARAM_DEFAULT_REVERB_SEND, 20556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks PARAM_MIDI_CC93_TO_CHORUS_SEND, 20656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks PARAM_DEFAULT_CHORUS_SEND, 20756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks PARAM_TABLE_SIZE 2087df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} E_ART_INDEX; 2097df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 2107df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/* temporary data structure combining region, articulation, and envelope data */ 2117df30109963092559d3760c0661a020f9daf1030The Android Open Source Projecttypedef struct s_art_dls_tag 2127df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 21356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I16 values[PARAM_TABLE_SIZE]; 2147df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} S_DLS_ART_VALUES; 2157df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 2167df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/* temporary data structure for wlnk chunk data */ 2177df30109963092559d3760c0661a020f9daf1030The Android Open Source Projecttypedef struct 2187df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 21956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 gain; 22056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U32 loopStart; 22156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U32 loopLength; 22256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U32 sampleRate; 22356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U16 bitsPerSample; 22456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I16 fineTune; 22556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U8 unityNote; 2267df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} S_WSMP_DATA; 2277df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 2287df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/* temporary data structure used while parsing a DLS file */ 2297df30109963092559d3760c0661a020f9daf1030The Android Open Source Projecttypedef struct 2307df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 23156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_DLS *pDLS; 23256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_HW_DATA_HANDLE hwInstData; 23356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_FILE_HANDLE fileHandle; 23456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_WSMP_DATA *wsmpData; 23556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U32 instCount; 23656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U32 regionCount; 23756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U32 artCount; 23856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U32 waveCount; 23956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U32 wavePoolSize; 24056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U32 wavePoolOffset; 24156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_BOOL bigEndian; 24256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_BOOL filterUsed; 2437df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} SDLS_SYNTHESIZER_DATA; 2447df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 2457df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/* connection lookup table */ 2467df30109963092559d3760c0661a020f9daf1030The Android Open Source Projecttypedef struct s_connection_tag 2477df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 24856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U16 source; 24956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U16 control; 25056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U16 destination; 25156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U16 connection; 2527df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} S_CONNECTION; 2537df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 25456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic const S_CONNECTION connTable[] = 2557df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 25656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { CONN_SRC_NONE, CONN_SRC_NONE, CONN_DST_LFO_FREQUENCY, PARAM_MOD_LFO_FREQ }, 25756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { CONN_SRC_NONE, CONN_SRC_NONE, CONN_DST_LFO_STARTDELAY, PARAM_MOD_LFO_DELAY}, 25856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 25956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { CONN_SRC_NONE, CONN_SRC_NONE, CONN_DST_VIB_FREQUENCY, PARAM_VIB_LFO_FREQ }, 26056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { CONN_SRC_NONE, CONN_SRC_NONE, CONN_DST_VIB_STARTDELAY, PARAM_VIB_LFO_DELAY }, 26156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 26256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { CONN_SRC_NONE, CONN_SRC_NONE, CONN_DST_EG1_DELAYTIME, PARAM_VOL_EG_DELAY }, 26356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { CONN_SRC_NONE, CONN_SRC_NONE, CONN_DST_EG1_ATTACKTIME, PARAM_VOL_EG_ATTACK }, 26456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { CONN_SRC_NONE, CONN_SRC_NONE, CONN_DST_EG1_HOLDTIME, PARAM_VOL_EG_HOLD }, 26556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { CONN_SRC_NONE, CONN_SRC_NONE, CONN_DST_EG1_DECAYTIME, PARAM_VOL_EG_DECAY }, 26656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { CONN_SRC_NONE, CONN_SRC_NONE, CONN_DST_EG1_SUSTAINLEVEL, PARAM_VOL_EG_SUSTAIN }, 26756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { CONN_SRC_NONE, CONN_SRC_NONE, CONN_DST_EG1_RELEASETIME, PARAM_VOL_EG_RELEASE }, 26856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { CONN_SRC_NONE, CONN_SRC_NONE, CONN_DST_EG1_SHUTDOWNTIME, PARAM_VOL_EG_SHUTDOWN }, 26956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { CONN_SRC_KEYONVELOCITY, CONN_SRC_NONE, CONN_DST_EG1_ATTACKTIME, PARAM_VOL_EG_VEL_TO_ATTACK }, 27056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { CONN_SRC_KEYNUMBER, CONN_SRC_NONE, CONN_DST_EG1_DECAYTIME, PARAM_VOL_EG_KEY_TO_DECAY }, 27156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { CONN_SRC_KEYNUMBER, CONN_SRC_NONE, CONN_DST_EG1_HOLDTIME, PARAM_VOL_EG_KEY_TO_HOLD }, 27256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 27356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { CONN_SRC_NONE, CONN_SRC_NONE, CONN_DST_EG2_DELAYTIME, PARAM_MOD_EG_DELAY }, 27456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { CONN_SRC_NONE, CONN_SRC_NONE, CONN_DST_EG2_ATTACKTIME, PARAM_MOD_EG_ATTACK }, 27556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { CONN_SRC_NONE, CONN_SRC_NONE, CONN_DST_EG2_HOLDTIME, PARAM_MOD_EG_HOLD }, 27656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { CONN_SRC_NONE, CONN_SRC_NONE, CONN_DST_EG2_DECAYTIME, PARAM_MOD_EG_DECAY }, 27756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { CONN_SRC_NONE, CONN_SRC_NONE, CONN_DST_EG2_SUSTAINLEVEL, PARAM_MOD_EG_SUSTAIN }, 27856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { CONN_SRC_NONE, CONN_SRC_NONE, CONN_DST_EG2_RELEASETIME, PARAM_MOD_EG_RELEASE }, 27956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { CONN_SRC_KEYONVELOCITY, CONN_SRC_NONE, CONN_DST_EG2_ATTACKTIME, PARAM_MOD_EG_VEL_TO_ATTACK }, 28056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { CONN_SRC_KEYNUMBER, CONN_SRC_NONE, CONN_DST_EG2_DECAYTIME, PARAM_MOD_EG_KEY_TO_DECAY }, 28156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { CONN_SRC_KEYNUMBER, CONN_SRC_NONE, CONN_DST_EG2_HOLDTIME, PARAM_MOD_EG_KEY_TO_HOLD }, 28256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 28356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { CONN_SRC_NONE, CONN_SRC_NONE, CONN_DST_FILTER_CUTOFF, PARAM_INITIAL_FC }, 28456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { CONN_SRC_NONE, CONN_SRC_NONE, CONN_DST_FILTER_Q, PARAM_INITIAL_Q }, 28556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { CONN_SRC_LFO, CONN_SRC_NONE, CONN_DST_FILTER_CUTOFF, PARAM_MOD_LFO_TO_FC }, 28656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { CONN_SRC_LFO, CONN_SRC_CC1, CONN_DST_FILTER_CUTOFF, PARAM_MOD_LFO_CC1_TO_FC }, 28756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { CONN_SRC_LFO, CONN_SRC_CHANNELPRESSURE, CONN_DST_FILTER_CUTOFF, PARAM_MOD_LFO_CHAN_PRESS_TO_FC }, 28856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { CONN_SRC_EG2, CONN_SRC_NONE, CONN_DST_FILTER_CUTOFF, PARAM_MOD_EG_TO_FC }, 28956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { CONN_SRC_KEYONVELOCITY, CONN_SRC_NONE, CONN_DST_FILTER_CUTOFF, PARAM_VEL_TO_FC }, 29056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { CONN_SRC_KEYNUMBER, CONN_SRC_NONE, CONN_DST_FILTER_CUTOFF, PARAM_KEYNUM_TO_FC }, 29156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 29256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { CONN_SRC_LFO, CONN_SRC_NONE, CONN_DST_GAIN, PARAM_MOD_LFO_TO_GAIN }, 29356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { CONN_SRC_LFO, CONN_SRC_CC1, CONN_DST_GAIN, PARAM_MOD_LFO_CC1_TO_GAIN }, 29456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { CONN_SRC_LFO, CONN_SRC_CHANNELPRESSURE, CONN_DST_GAIN, PARAM_MOD_LFO_CHAN_PRESS_TO_GAIN }, 29556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { CONN_SRC_KEYONVELOCITY, CONN_SRC_NONE, CONN_DST_GAIN, PARAM_VEL_TO_GAIN }, 29656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 29756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { CONN_SRC_NONE, CONN_SRC_NONE, CONN_DST_PITCH, PARAM_TUNING }, 29856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { CONN_SRC_KEYNUMBER, CONN_SRC_NONE, CONN_DST_PITCH, PARAM_KEYNUM_TO_PITCH }, 29956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { CONN_SRC_VIBRATO, CONN_SRC_NONE, CONN_DST_PITCH, PARAM_VIB_LFO_TO_PITCH }, 30056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { CONN_SRC_VIBRATO, CONN_SRC_CC1, CONN_DST_PITCH, PARAM_VIB_LFO_CC1_TO_PITCH }, 30156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { CONN_SRC_VIBRATO, CONN_SRC_CHANNELPRESSURE, CONN_DST_PITCH, PARAM_VIB_LFO_CHAN_PRESS_TO_PITCH }, 30256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { CONN_SRC_LFO, CONN_SRC_NONE, CONN_DST_PITCH, PARAM_MOD_LFO_TO_PITCH }, 30356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { CONN_SRC_LFO, CONN_SRC_CC1, CONN_DST_PITCH, PARAM_MOD_LFO_CC1_TO_PITCH }, 30456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { CONN_SRC_LFO, CONN_SRC_CHANNELPRESSURE, CONN_DST_PITCH, PARAM_MOD_LFO_CHAN_PRESS_TO_PITCH }, 30556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { CONN_SRC_EG2, CONN_SRC_NONE, CONN_DST_PITCH, PARAM_MOD_EG_TO_PITCH }, 30656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 30756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { CONN_SRC_NONE, CONN_SRC_NONE, CONN_DST_PAN, PARAM_DEFAULT_PAN }, 30856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { CONN_SRC_NONE, CONN_SRC_NONE, CONN_DST_REVERB, PARAM_DEFAULT_REVERB_SEND }, 30956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { CONN_SRC_CC91, CONN_SRC_NONE, CONN_DST_REVERB, PARAM_MIDI_CC91_TO_REVERB_SEND }, 31056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { CONN_SRC_NONE, CONN_SRC_NONE, CONN_DST_CHORUS, PARAM_DEFAULT_CHORUS_SEND }, 31156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { CONN_SRC_CC93, CONN_SRC_NONE, CONN_DST_REVERB, PARAM_MIDI_CC93_TO_CHORUS_SEND } 3127df30109963092559d3760c0661a020f9daf1030The Android Open Source Project}; 3137df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#define ENTRIES_IN_CONN_TABLE (sizeof(connTable)/sizeof(S_CONNECTION)) 3147df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 3157df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectstatic const S_DLS_ART_VALUES defaultArt = 3167df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 31756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 0, /* not modified */ 31856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks -851, /* Mod LFO frequency: 5 Hz */ 31956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks -7973, /* Mod LFO delay: 10 milliseconds */ 32056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 32156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks -851, /* Vib LFO frequency: 5 Hz */ 32256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks -7973, /* Vib LFO delay: 10 milliseconds */ 32356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 32456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks -32768, /* EG1 delay time: 0 secs */ 32556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks -32768, /* EG1 attack time: 0 secs */ 32656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks -32768, /* EG1 hold time: 0 secs */ 32756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks -32768, /* EG1 decay time: 0 secs */ 32856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 1000, /* EG1 sustain level: 100.0% */ 32956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks -32768, /* EG1 release time: 0 secs */ 33056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks -7271, /* EG1 shutdown time: 15 msecs */ 33156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 0, /* EG1 velocity to attack: 0 time cents */ 33256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 0, /* EG1 key number to decay: 0 time cents */ 33356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 0, /* EG1 key number to hold: 0 time cents */ 33456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 33556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks -32768, /* EG2 delay time: 0 secs */ 33656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks -32768, /* EG2 attack time: 0 secs */ 33756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks -32768, /* EG2 hold time: 0 secs */ 33856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks -32768, /* EG2 decay time: 0 secs */ 33956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 1000, /* EG2 sustain level: 100.0% */ 34056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks -32768, /* EG2 release time: 0 secs */ 34156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 0, /* EG2 velocity to attack: 0 time cents */ 34256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 0, /* EG2 key number to decay: 0 time cents */ 34356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 0, /* EG2 key number to hold: 0 time cents */ 34456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 34556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 0x7fff, /* Initial Fc: Disabled */ 34656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 0, /* Initial Q: 0 dB */ 34756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 0, /* Mod LFO to Fc: 0 cents */ 34856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 0, /* Mod LFO CC1 to Fc: 0 cents */ 34956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 0, /* Mod LFO channel pressure to Fc: 0 cents */ 35056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 0, /* EG2 to Fc: 0 cents */ 35156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 0, /* Velocity to Fc: 0 cents */ 35256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 0, /* Key number to Fc: 0 cents */ 35356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 35456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 0, /* Mod LFO to gain: 0 dB */ 35556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 0, /* Mod LFO CC1 to gain: 0 dB */ 35656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 0, /* Mod LFO channel pressure to gain: 0 dB */ 35756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 960, /* Velocity to gain: 96 dB */ 35856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 35956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 0, /* Tuning: 0 cents */ 36056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 12800, /* Key number to pitch: 12,800 cents */ 36156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 0, /* Vibrato to pitch: 0 cents */ 36256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 0, /* Vibrato CC1 to pitch: 0 cents */ 36356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 0, /* Vibrato channel pressure to pitch: 0 cents */ 36456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 0, /* Mod LFO to pitch: 0 cents */ 36556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 0, /* Mod LFO CC1 to pitch: 0 cents */ 36656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 0, /* Mod LFO channel pressure to pitch: 0 cents */ 36756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 0, /* Mod EG to pitch: 0 cents */ 36856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 36956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 0, /* Default pan: 0.0% */ 37056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 0, /* Default reverb send: 0.0% */ 37156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 1000, /* Default CC91 to reverb send: 100.0% */ 37256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 0, /* Default chorus send: 0.0% */ 37356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 1000 /* Default CC93 to chorus send: 100.0% */ 3747df30109963092559d3760c0661a020f9daf1030The Android Open Source Project}; 3757df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 3767df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*------------------------------------ 3777df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * local variables 3787df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *------------------------------------ 3797df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 3807df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 3817df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#if defined(_8_BIT_SAMPLES) 3827df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectstatic const EAS_INT bitDepth = 8; 3837df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#elif defined(_16_BIT_SAMPLES) 3847df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectstatic const EAS_INT bitDepth = 16; 3857df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#else 3867df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#error "Must define _8_BIT_SAMPLES or _16_BIT_SAMPLES" 3877df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#endif 3887df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 3897df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectstatic const EAS_U32 outputSampleRate = _OUTPUT_SAMPLE_RATE; 3907df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectstatic const EAS_I32 dlsRateConvert = DLS_RATE_CONVERT; 3917df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectstatic const EAS_I32 dlsLFOFrequencyConvert = DLS_LFO_FREQUENCY_CONVERT; 3927df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 3937df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*------------------------------------ 3947df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * inline functions 3957df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *------------------------------------ 3967df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 3977df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_INLINE void *PtrOfs (void *p, EAS_I32 offset) 3987df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 39956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return (void*) (((EAS_U8*) p) + offset); 4007df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 4017df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 4027df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*------------------------------------ 4037df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * prototypes 4047df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *------------------------------------ 4057df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 4067df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectstatic EAS_RESULT NextChunk (SDLS_SYNTHESIZER_DATA *pDLSData, EAS_I32 *pPos, EAS_U32 *pChunkType, EAS_I32 *pSize); 4077df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectstatic EAS_RESULT Parse_ptbl (SDLS_SYNTHESIZER_DATA *pDLSData, EAS_I32 pos, EAS_I32 wsmpPos, EAS_I32 wsmpSize); 4087df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectstatic EAS_RESULT Parse_wave (SDLS_SYNTHESIZER_DATA *pDLSData, EAS_I32 pos, EAS_U16 waveIndex); 4097df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectstatic EAS_RESULT Parse_wsmp (SDLS_SYNTHESIZER_DATA *pDLSData, EAS_I32 pos, S_WSMP_DATA *p); 4107df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectstatic EAS_RESULT Parse_fmt (SDLS_SYNTHESIZER_DATA *pDLSData, EAS_I32 pos, S_WSMP_DATA *p); 4117df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectstatic EAS_RESULT Parse_data (SDLS_SYNTHESIZER_DATA *pDLSData, EAS_I32 pos, EAS_I32 size, S_WSMP_DATA *p, EAS_SAMPLE *pSample); 4127df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectstatic EAS_RESULT Parse_lins(SDLS_SYNTHESIZER_DATA *pDLSData, EAS_I32 pos, EAS_I32 size); 4137df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectstatic EAS_RESULT Parse_ins (SDLS_SYNTHESIZER_DATA *pDLSData, EAS_I32 pos, EAS_I32 size); 4147df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectstatic EAS_RESULT Parse_insh (SDLS_SYNTHESIZER_DATA *pDLSData, EAS_I32 pos, EAS_U32 *pRgnCount, EAS_U32 *pLocale); 4157df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectstatic EAS_RESULT Parse_lrgn (SDLS_SYNTHESIZER_DATA *pDLSData, EAS_I32 pos, EAS_I32 size, EAS_U16 artIndex, EAS_U32 numRegions); 4167df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectstatic EAS_RESULT Parse_rgn (SDLS_SYNTHESIZER_DATA *pDLSData, EAS_I32 pos, EAS_I32 size, EAS_U16 artIndex); 4177df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectstatic EAS_RESULT Parse_rgnh (SDLS_SYNTHESIZER_DATA *pDLSData, EAS_I32 pos, S_DLS_REGION *pRgn); 4187df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectstatic EAS_RESULT Parse_lart (SDLS_SYNTHESIZER_DATA *pDLSData, EAS_I32 pos, EAS_I32 size, S_DLS_ART_VALUES *pArt); 4197df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectstatic EAS_RESULT Parse_art (SDLS_SYNTHESIZER_DATA *pDLSData, EAS_I32 pos, S_DLS_ART_VALUES *pArt); 4207df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectstatic EAS_RESULT Parse_wlnk (SDLS_SYNTHESIZER_DATA *pDLSData, EAS_I32 pos, EAS_U32 *pWaveIndex); 4217df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectstatic EAS_RESULT Parse_cdl (SDLS_SYNTHESIZER_DATA *pDLSData, EAS_I32 size, EAS_U32 *pValue); 4227df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectstatic void Convert_rgn (SDLS_SYNTHESIZER_DATA *pDLSData, EAS_U16 regionIndex, EAS_U16 artIndex, EAS_U16 waveIndex, S_WSMP_DATA *pWsmp); 4237df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectstatic void Convert_art (SDLS_SYNTHESIZER_DATA *pDLSData, const S_DLS_ART_VALUES *pDLSArt, EAS_U16 artIndex); 4247df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectstatic EAS_I16 ConvertSampleRate (EAS_U32 sampleRate); 4257df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectstatic EAS_I16 ConvertSustain (EAS_I32 sustain); 4267df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectstatic EAS_I16 ConvertLFOPhaseIncrement (EAS_I32 pitchCents); 4277df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectstatic EAS_I8 ConvertPan (EAS_I32 pan); 4287df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectstatic EAS_U8 ConvertQ (EAS_I32 q); 4297df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 4307df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#ifdef _DEBUG_DLS 4317df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectstatic void DumpDLS (S_EAS *pEAS); 4327df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#endif 4337df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 4347df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 4357df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 4367df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * DLSParser () 4377df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 43856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 43956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 44056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 4417df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * pEASData - pointer to over EAS data instance 4427df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * fileHandle - file handle for input file 4437df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * offset - offset into file where DLS data starts 44456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 4457df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 4467df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_RESULT 4477df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * ppEAS - address of pointer to alternate EAS wavetable 4487df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 4497df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 4507df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 4517df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_RESULT DLSParser (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE fileHandle, EAS_I32 offset, EAS_DLSLIB_HANDLE *ppDLS) 4527df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 45356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 45456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks SDLS_SYNTHESIZER_DATA dls; 45556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U32 temp; 45656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 pos; 45756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 chunkPos; 45856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 size; 45956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 instSize; 46056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 rgnPoolSize; 46156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 artPoolSize; 46256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 waveLenSize; 46356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 endDLS; 46456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 wvplPos; 46556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 wvplSize; 46656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 linsPos; 46756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 linsSize; 46856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 ptblPos; 46956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 ptblSize; 47056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks void *p; 47156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 47256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* zero counts and pointers */ 47356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_HWMemSet(&dls, 0, sizeof(dls)); 47456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 47556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* save file handle and hwInstData to save copying pointers around */ 47656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks dls.hwInstData = hwInstData; 47756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks dls.fileHandle = fileHandle; 47856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 47956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* NULL return value in case of error */ 48056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *ppDLS = NULL; 48156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 48256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* seek to start of DLS and read in RIFF tag and set processor endian flag */ 48356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWFileSeek(dls.hwInstData, dls.fileHandle, offset)) != EAS_SUCCESS) 48456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 48556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWReadFile(dls.hwInstData, dls.fileHandle, &temp, sizeof(temp), &size)) != EAS_SUCCESS) 48656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 48756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 48856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check for processor endian-ness */ 48956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks dls.bigEndian = (temp == CHUNK_RIFF); 49056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 49156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* first chunk should be DLS */ 49256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pos = offset; 49356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = NextChunk(&dls, &pos, &temp, &size)) != EAS_SUCCESS) 49456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 49556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (temp != CHUNK_DLS) 49656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 49756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "Expected DLS chunk, got %08lx\n", temp); */ } 49856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_FILE_FORMAT; 49956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 50056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 50156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* no instrument or wavepool chunks */ 50256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks linsSize = wvplSize = ptblSize = linsPos = wvplPos = ptblPos = 0; 50356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 50456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* scan the chunks in the DLS list */ 50556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks endDLS = offset + size; 50656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pos = offset + 12; 50756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks while (pos < endDLS) 50856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 50956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks chunkPos = pos; 51056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 51156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* get the next chunk type */ 51256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = NextChunk(&dls, &pos, &temp, &size)) != EAS_SUCCESS) 51356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 51456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 51556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* parse useful chunks */ 51656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks switch (temp) 51756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 51856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks case CHUNK_CDL: 51956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = Parse_cdl(&dls, size, &temp)) != EAS_SUCCESS) 52056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 52156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!temp) 52256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_UNRECOGNIZED_FORMAT; 52356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 52456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 52556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks case CHUNK_LINS: 52656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks linsPos = chunkPos + 12; 52756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks linsSize = size - 4; 52856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 52956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 53056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks case CHUNK_WVPL: 53156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks wvplPos = chunkPos + 12; 53256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks wvplSize = size - 4; 53356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 53456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 53556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks case CHUNK_PTBL: 53656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks ptblPos = chunkPos + 8; 53756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks ptblSize = size - 4; 53856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 53956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 54056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks default: 54156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 54256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 54356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 54456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 54556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* must have a lins chunk */ 54656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (linsSize == 0) 54756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 54856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "No lins chunk found"); */ } 54956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_UNRECOGNIZED_FORMAT; 55056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 55156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 55256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* must have a wvpl chunk */ 55356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (wvplSize == 0) 55456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 55556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "No wvpl chunk found"); */ } 55656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_UNRECOGNIZED_FORMAT; 55756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 55856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 55956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* must have a ptbl chunk */ 56056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((ptblSize == 0) || (ptblSize > DLS_MAX_WAVE_COUNT * sizeof(POOLCUE) + sizeof(POOLTABLE))) 56156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 56256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "No ptbl chunk found"); */ } 56356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_UNRECOGNIZED_FORMAT; 56456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 56556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 56656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* pre-parse the wave pool chunk */ 56756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = Parse_ptbl(&dls, ptblPos, wvplPos, wvplSize)) != EAS_SUCCESS) 56856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 56956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 57056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* limit check */ 57156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((dls.waveCount == 0) || (dls.waveCount > DLS_MAX_WAVE_COUNT)) 57256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 57356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "DLS file contains invalid #waves [%u]\n", dls.waveCount); */ } 57456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_FILE_FORMAT; 57556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 57656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 57756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* allocate memory for wsmp data */ 57856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks dls.wsmpData = EAS_HWMalloc(dls.hwInstData, (EAS_I32) (sizeof(S_WSMP_DATA) * dls.waveCount)); 57956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (dls.wsmpData == NULL) 58056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 58156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "EAS_HWMalloc for wsmp data failed\n"); */ } 58256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_MALLOC_FAILED; 58356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 58456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_HWMemSet(dls.wsmpData, 0, (EAS_I32) (sizeof(S_WSMP_DATA) * dls.waveCount)); 58556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 58656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* pre-parse the lins chunk */ 58756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = Parse_lins(&dls, linsPos, linsSize); 58856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (result == EAS_SUCCESS) 58956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 59056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 59156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* limit check */ 59256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((dls.regionCount == 0) || (dls.regionCount > DLS_MAX_REGION_COUNT)) 59356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 59456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "DLS file contains invalid #regions [%u]\n", dls.regionCount); */ } 59556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_FILE_FORMAT; 59656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 59756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 59856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* limit check */ 59956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((dls.artCount == 0) || (dls.artCount > DLS_MAX_ART_COUNT)) 60056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 60156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "DLS file contains invalid #articulations [%u]\n", dls.regionCount); */ } 60256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_FILE_FORMAT; 60356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 60456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 60556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* limit check */ 60656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((dls.instCount == 0) || (dls.instCount > DLS_MAX_INST_COUNT)) 60756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 60856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "DLS file contains invalid #instruments [%u]\n", dls.instCount); */ } 60956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_FILE_FORMAT; 61056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 61156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 61256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* Allocate memory for the converted DLS data */ 61356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* calculate size of instrument data */ 61456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks instSize = (EAS_I32) (sizeof(S_PROGRAM) * dls.instCount); 61556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 61656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* calculate size of region pool */ 61756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks rgnPoolSize = (EAS_I32) (sizeof(S_DLS_REGION) * dls.regionCount); 61856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 61956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* calculate size of articulation pool, add one for default articulation */ 62056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks dls.artCount++; 62156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks artPoolSize = (EAS_I32) (sizeof(S_DLS_ARTICULATION) * dls.artCount); 62256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 62356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* calculate size of wave length and offset arrays */ 62456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks waveLenSize = (EAS_I32) (dls.waveCount * sizeof(EAS_U32)); 62556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 62656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* calculate final memory size */ 62756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks size = (EAS_I32) sizeof(S_EAS) + instSize + rgnPoolSize + artPoolSize + (2 * waveLenSize) + (EAS_I32) dls.wavePoolSize; 62856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (size <= 0) { 62956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_FILE_FORMAT; 63056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 63156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 63256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* allocate the main EAS chunk */ 63356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks dls.pDLS = EAS_HWMalloc(dls.hwInstData, size); 63456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (dls.pDLS == NULL) 63556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 63656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "EAS_HWMalloc failed for DLS memory allocation size %ld\n", size); */ } 63756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_MALLOC_FAILED; 63856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 63956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_HWMemSet(dls.pDLS, 0, size); 64056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks dls.pDLS->refCount = 1; 64156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks p = PtrOfs(dls.pDLS, sizeof(S_EAS)); 64256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 64356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* setup pointer to programs */ 64456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks dls.pDLS->numDLSPrograms = (EAS_U16) dls.instCount; 64556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks dls.pDLS->pDLSPrograms = p; 64656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks p = PtrOfs(p, instSize); 64756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 64856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* setup pointer to regions */ 64956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks dls.pDLS->pDLSRegions = p; 65056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks dls.pDLS->numDLSRegions = (EAS_U16) dls.regionCount; 65156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks p = PtrOfs(p, rgnPoolSize); 65256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 65356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* setup pointer to articulations */ 65456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks dls.pDLS->numDLSArticulations = (EAS_U16) dls.artCount; 65556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks dls.pDLS->pDLSArticulations = p; 65656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks p = PtrOfs(p, artPoolSize); 65756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 65856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* setup pointer to wave length table */ 65956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks dls.pDLS->numDLSSamples = (EAS_U16) dls.waveCount; 66056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks dls.pDLS->pDLSSampleLen = p; 66156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks p = PtrOfs(p, waveLenSize); 66256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 66356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* setup pointer to wave offsets table */ 66456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks dls.pDLS->pDLSSampleOffsets = p; 66556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks p = PtrOfs(p, waveLenSize); 66656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 66756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* setup pointer to wave pool */ 66856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks dls.pDLS->pDLSSamples = p; 66956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 67056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* clear filter flag */ 67156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks dls.filterUsed = EAS_FALSE; 67256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 67356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* parse the wave pool and load samples */ 67456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = Parse_ptbl(&dls, ptblPos, wvplPos, wvplSize); 67556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 67656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 67756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* create the default articulation */ 67856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks Convert_art(&dls, &defaultArt, 0); 67956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks dls.artCount = 1; 68056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 68156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* parse the lins chunk and load instruments */ 68256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks dls.regionCount = dls.instCount = 0; 68356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (result == EAS_SUCCESS) 68456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = Parse_lins(&dls, linsPos, linsSize); 68556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 68656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* clean up any temporary objects that were allocated */ 68756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (dls.wsmpData) 68856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_HWFree(dls.hwInstData, dls.wsmpData); 68956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 69056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* if successful, return a pointer to the EAS collection */ 69156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (result == EAS_SUCCESS) 69256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 69356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *ppDLS = dls.pDLS; 6947df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#ifdef _DEBUG_DLS 69556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks DumpDLS(dls.pDLS); 6967df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#endif 69756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 6987df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 69956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* something went wrong, deallocate the EAS collection */ 70056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks else 70156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks DLSCleanup(dls.hwInstData, dls.pDLS); 7027df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 70356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 7047df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 7057df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 7067df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 7077df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * DLSCleanup () 7087df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 70956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 71056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 71156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 7127df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * pEASData - pointer to over EAS data instance 7137df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * pEAS - pointer to alternate EAS wavetable 71456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 7157df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 7167df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_RESULT 7177df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 7187df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 7197df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 7207df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_RESULT DLSCleanup (EAS_HW_DATA_HANDLE hwInstData, S_DLS *pDLS) 7217df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 7227df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 72356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* free the allocated memory */ 72456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pDLS) 72556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 72656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pDLS->refCount) 72756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 72856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (--pDLS->refCount == 0) 72956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_HWFree(hwInstData, pDLS); 73056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 73156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 73256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 7337df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 7347df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 7357df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 7367df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * DLSAddRef () 7377df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 7387df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Increment reference count 7397df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 7407df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 7417df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectvoid DLSAddRef (S_DLS *pDLS) 7427df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 74356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pDLS) 74456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pDLS->refCount++; 7457df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 7467df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 7477df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 7487df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * NextChunk () 7497df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 75056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 7517df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Returns the type and size of the next chunk in the file 7527df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 75356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 75456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 7557df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 7567df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 7577df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 7587df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 7597df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 7607df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectstatic EAS_RESULT NextChunk (SDLS_SYNTHESIZER_DATA *pDLSData, EAS_I32 *pPos, EAS_U32 *pChunkType, EAS_I32 *pSize) 7617df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 76256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 76356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 76456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* seek to start of chunk */ 76556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWFileSeek(pDLSData->hwInstData, pDLSData->fileHandle, *pPos)) != EAS_SUCCESS) 76656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 76756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 76856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* read the chunk type */ 76956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWGetDWord(pDLSData->hwInstData, pDLSData->fileHandle, pChunkType, EAS_TRUE)) != EAS_SUCCESS) 77056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 77156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 77256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* read the chunk size */ 77356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWGetDWord(pDLSData->hwInstData, pDLSData->fileHandle, pSize, EAS_FALSE)) != EAS_SUCCESS) 77456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 77556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 77656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* get form type for RIFF and LIST types */ 77756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((*pChunkType == CHUNK_RIFF) || (*pChunkType == CHUNK_LIST)) 77856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 77956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 78056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* read the form type */ 78156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWGetDWord(pDLSData->hwInstData, pDLSData->fileHandle, pChunkType, EAS_TRUE)) != EAS_SUCCESS) 78256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 78356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 78456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 78556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 78656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* calculate start of next chunk */ 78756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pPos += *pSize + 8; 78856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 78956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* adjust to word boundary */ 79056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (*pPos & 1) 79156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks (*pPos)++; 79256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 79356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 7947df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 7957df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 7967df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 7977df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Parse_ptbl () 7987df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 79956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 80056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 8017df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 8027df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 80356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 80456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 8057df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 80656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 8077df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 8087df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 8097df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 8107df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectstatic EAS_RESULT Parse_ptbl (SDLS_SYNTHESIZER_DATA *pDLSData, EAS_I32 pos, EAS_I32 wtblPos, EAS_I32 wtblSize) 8117df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 81256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 81356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U32 temp; 81456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_FILE_HANDLE tempFile; 81556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U16 waveIndex; 8167df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 81756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* seek to start of chunk */ 81856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWFileSeek(pDLSData->hwInstData, pDLSData->fileHandle, pos)) != EAS_SUCCESS) 81956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 8207df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 82156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* get the structure size */ 82256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWGetDWord(pDLSData->hwInstData, pDLSData->fileHandle, &temp, EAS_FALSE)) != EAS_SUCCESS) 82356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 8247df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 82556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* get the number of waves */ 82656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWGetDWord(pDLSData->hwInstData, pDLSData->fileHandle, &pDLSData->waveCount, EAS_FALSE)) != EAS_SUCCESS) 82756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 8287df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 8297df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#if 0 83056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* just need the wave count on the first pass */ 83156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!pDLSData->pDLS) 83256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 8337df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#endif 8347df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 83556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* open duplicate file handle */ 83656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWDupHandle(pDLSData->hwInstData, pDLSData->fileHandle, &tempFile)) != EAS_SUCCESS) 83756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 83856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 83956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* read to end of chunk */ 84056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks for (waveIndex = 0; waveIndex < pDLSData->waveCount; waveIndex++) 84156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 84256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 84356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* get the offset to the wave and make sure it is within the wtbl chunk */ 84456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWGetDWord(pDLSData->hwInstData, tempFile, &temp, EAS_FALSE)) != EAS_SUCCESS) 84556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 84656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (temp > (EAS_U32) wtblSize) 84756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 84856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "Ptbl offset exceeds size of wtbl\n"); */ } 84956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_HWCloseFile(pDLSData->hwInstData, tempFile); 85056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_FILE_FORMAT; 85156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 85256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 85356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* parse the wave */ 85456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = Parse_wave(pDLSData, wtblPos +(EAS_I32) temp, waveIndex)) != EAS_SUCCESS) 85556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 85656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 85756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 85856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* close the temporary handle and return */ 85956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_HWCloseFile(pDLSData->hwInstData, tempFile); 86056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 8617df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 8627df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 8637df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 8647df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Parse_wave () 8657df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 86656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 86756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 8687df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 8697df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 87056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 87156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 8727df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 87356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 8747df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 8757df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 8767df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 8777df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectstatic EAS_RESULT Parse_wave (SDLS_SYNTHESIZER_DATA *pDLSData, EAS_I32 pos, EAS_U16 waveIndex) 8787df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 87956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 88056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U32 temp; 88156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 size; 88256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 endChunk; 88356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 chunkPos; 88456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 wsmpPos = 0; 88556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 fmtPos = 0; 88656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 dataPos = 0; 88756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 dataSize = 0; 88856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_WSMP_DATA *p; 88956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks void *pSample; 89056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_WSMP_DATA wsmp; 89156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 89256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* seek to start of chunk */ 89356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks chunkPos = pos + 12; 89456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWFileSeek(pDLSData->hwInstData, pDLSData->fileHandle, pos)) != EAS_SUCCESS) 89556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 89656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 89756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* get the chunk type */ 89856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = NextChunk(pDLSData, &pos, &temp, &size)) != EAS_SUCCESS) 89956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 90056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 90156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* make sure it is a wave chunk */ 90256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (temp != CHUNK_WAVE) 90356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 90456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "Offset in ptbl does not point to wave chunk\n"); */ } 90556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_FILE_FORMAT; 90656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 90756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 90856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* read to end of chunk */ 90956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pos = chunkPos; 91056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks endChunk = pos + size; 91156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks while (pos < endChunk) 91256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 91356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks chunkPos = pos; 91456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 91556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* get the chunk type */ 91656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = NextChunk(pDLSData, &pos, &temp, &size)) != EAS_SUCCESS) 91756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 91856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 91956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* parse useful chunks */ 92056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks switch (temp) 92156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 92256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks case CHUNK_WSMP: 92356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks wsmpPos = chunkPos + 8; 92456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 92556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 92656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks case CHUNK_FMT: 92756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks fmtPos = chunkPos + 8; 92856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 92956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 93056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks case CHUNK_DATA: 93156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks dataPos = chunkPos + 8; 93256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks dataSize = size; 93356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 93456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 93556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks default: 93656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 93756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 93856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 93956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 94056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks // limit to reasonable size 94156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (dataSize > MAX_DLS_WAVE_SIZE) 94256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 94356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_SOUND_LIBRARY; 94456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 94556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 94656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* for first pass, use temporary variable */ 94756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pDLSData->pDLS == NULL) 94856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks p = &wsmp; 94956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks else 95056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks p = &pDLSData->wsmpData[waveIndex]; 95156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 95256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* set the defaults */ 95356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks p->fineTune = 0; 95456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks p->unityNote = 60; 95556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks p->gain = 0; 95656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks p->loopStart = 0; 95756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks p->loopLength = 0; 95856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 95956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* must have a fmt chunk */ 96056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!fmtPos) 96156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 96256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "DLS wave chunk has no fmt chunk\n"); */ } 96356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_UNRECOGNIZED_FORMAT; 96456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 96556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 96656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* must have a data chunk */ 96756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!dataPos) 96856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 96956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "DLS wave chunk has no data chunk\n"); */ } 97056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_UNRECOGNIZED_FORMAT; 97156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 97256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 97356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* parse the wsmp chunk */ 97456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (wsmpPos) 97556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 97656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = Parse_wsmp(pDLSData, wsmpPos, p)) != EAS_SUCCESS) 97756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 97856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 97956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 98056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* parse the fmt chunk */ 98156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = Parse_fmt(pDLSData, fmtPos, p)) != EAS_SUCCESS) 98256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 98356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 98456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* calculate the size of the wavetable needed. We need only half 98556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * the memory for 16-bit samples when in 8-bit mode, and we need 98656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * double the memory for 8-bit samples in 16-bit mode. For 98756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * unlooped samples, we may use ADPCM. If so, we need only 1/4 98856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * the memory. 98956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 99056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * We also need to add one for looped samples to allow for 99156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * the first sample to be copied to the end of the loop. 99256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks */ 99356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 99456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* use ADPCM encode for unlooped 16-bit samples if ADPCM is enabled */ 99556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /*lint -e{506} -e{774} groundwork for future version to support 8 & 16 bit */ 99656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (bitDepth == 8) 99756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 99856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (p->bitsPerSample == 8) 99956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks size = dataSize; 100056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks else 100156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /*lint -e{704} use shift for performance */ 100256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks size = dataSize >> 1; 100356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (p->loopLength) 100456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks size++; 100556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 100656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 100756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks else 100856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 100956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (p->bitsPerSample == 16) 101056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks size = dataSize; 101156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks else 101256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /*lint -e{703} use shift for performance */ 101356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks size = dataSize << 1; 101456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (p->loopLength) 101556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks size += 2; 101656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 101756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 101856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* for first pass, add size to wave pool size and return */ 101956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pDLSData->pDLS == NULL) 102056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 102156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pDLSData->wavePoolSize += (EAS_U32) size; 102256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 102356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 102456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 102556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* allocate memory and read in the sample data */ 102656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pSample = pDLSData->pDLS->pDLSSamples + pDLSData->wavePoolOffset; 102756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pDLSData->pDLS->pDLSSampleOffsets[waveIndex] = pDLSData->wavePoolOffset; 102856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pDLSData->pDLS->pDLSSampleLen[waveIndex] = (EAS_U32) size; 102956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pDLSData->wavePoolOffset += (EAS_U32) size; 103056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pDLSData->wavePoolOffset > pDLSData->wavePoolSize) 103156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 103256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "Wave pool exceeded allocation\n"); */ } 103356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_SOUND_LIBRARY; 103456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 103556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 103656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = Parse_data(pDLSData, dataPos, dataSize, p, pSample)) != EAS_SUCCESS) 103756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 103856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 103956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 10407df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 10417df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 10427df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 10437df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Parse_wsmp () 10447df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 104556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 104656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 10477df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 10487df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 104956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 105056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 10517df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 105256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 10537df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 10547df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 10557df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 10567df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectstatic EAS_RESULT Parse_wsmp (SDLS_SYNTHESIZER_DATA *pDLSData, EAS_I32 pos, S_WSMP_DATA *p) 10577df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 105856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 105956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U16 wtemp; 106056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U32 ltemp; 106156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U32 cbSize; 106256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 106356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* seek to start of chunk */ 106456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWFileSeek(pDLSData->hwInstData, pDLSData->fileHandle, pos)) != EAS_SUCCESS) 106556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 106656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 106756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* get structure size */ 106856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWGetDWord(pDLSData->hwInstData, pDLSData->fileHandle, &cbSize, EAS_FALSE)) != EAS_SUCCESS) 106956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 107056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 107156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* get unity note */ 107256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWGetWord(pDLSData->hwInstData, pDLSData->fileHandle, &wtemp, EAS_FALSE)) != EAS_SUCCESS) 107356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 107456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (wtemp <= 127) 107556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks p->unityNote = (EAS_U8) wtemp; 107656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks else 107756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 107856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks p->unityNote = 60; 107956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_WARNING, "Invalid unity note [%u] in DLS wsmp ignored, set to 60\n", wtemp); */ } 108056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 108156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 108256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* get fine tune */ 108356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWGetWord(pDLSData->hwInstData, pDLSData->fileHandle, &p->fineTune, EAS_FALSE)) != EAS_SUCCESS) 108456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 108556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 108656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* get gain */ 108756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWGetDWord(pDLSData->hwInstData, pDLSData->fileHandle, &p->gain, EAS_FALSE)) != EAS_SUCCESS) 108856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 108956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (p->gain > 0) 109056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 109156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_WARNING, "Positive gain [%ld] in DLS wsmp ignored, set to 0dB\n", p->gain); */ } 109256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks p->gain = 0; 109356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 109456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 109556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* option flags */ 109656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWGetDWord(pDLSData->hwInstData, pDLSData->fileHandle, <emp, EAS_FALSE)) != EAS_SUCCESS) 109756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 109856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 109956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* sample loops */ 110056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWGetDWord(pDLSData->hwInstData, pDLSData->fileHandle, <emp, EAS_FALSE)) != EAS_SUCCESS) 110156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 110256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 110356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* if looped sample, get loop data */ 110456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (ltemp) 110556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 110656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 110756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (ltemp > 1) 110856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_WARNING, "DLS sample with %lu loops, ignoring extra loops\n", ltemp); */ } 110956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 111056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* skip ahead to loop data */ 111156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWFileSeek(pDLSData->hwInstData, pDLSData->fileHandle, pos + (EAS_I32) cbSize)) != EAS_SUCCESS) 111256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 111356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 111456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* get structure size */ 111556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWGetDWord(pDLSData->hwInstData, pDLSData->fileHandle, <emp, EAS_FALSE)) != EAS_SUCCESS) 111656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 111756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 111856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* get loop type */ 111956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWGetDWord(pDLSData->hwInstData, pDLSData->fileHandle, <emp, EAS_FALSE)) != EAS_SUCCESS) 112056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 112156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 112256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* get loop start */ 112356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWGetDWord(pDLSData->hwInstData, pDLSData->fileHandle, &p->loopStart, EAS_FALSE)) != EAS_SUCCESS) 112456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 112556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 112656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* get loop length */ 112756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWGetDWord(pDLSData->hwInstData, pDLSData->fileHandle, &p->loopLength, EAS_FALSE)) != EAS_SUCCESS) 112856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 112956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 113056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 113156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 11327df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 11337df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 11347df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 11357df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Parse_fmt () 11367df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 113756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 113856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 11397df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 11407df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 114156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 114256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 11437df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 114456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 11457df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 11467df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 11477df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 11487df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectstatic EAS_RESULT Parse_fmt (SDLS_SYNTHESIZER_DATA *pDLSData, EAS_I32 pos, S_WSMP_DATA *p) 11497df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 115056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 115156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U16 wtemp; 115256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U32 ltemp; 115356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 115456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* seek to start of chunk */ 115556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWFileSeek(pDLSData->hwInstData, pDLSData->fileHandle, pos)) != EAS_SUCCESS) 115656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 115756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 115856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* get format tag */ 115956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWGetWord(pDLSData->hwInstData, pDLSData->fileHandle, &wtemp, EAS_FALSE)) != EAS_SUCCESS) 116056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 116156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (wtemp != WAVE_FORMAT_PCM) 116256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 116356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "Unsupported DLS sample format %04x\n", wtemp); */ } 116456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_UNRECOGNIZED_FORMAT; 116556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 116656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 116756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* get number of channels */ 116856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWGetWord(pDLSData->hwInstData, pDLSData->fileHandle, &wtemp, EAS_FALSE)) != EAS_SUCCESS) 116956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 117056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (wtemp != 1) 117156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 117256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "No support for DLS multi-channel samples\n"); */ } 117356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_UNRECOGNIZED_FORMAT; 117456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 117556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 117656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* get sample rate */ 117756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWGetDWord(pDLSData->hwInstData, pDLSData->fileHandle, &p->sampleRate, EAS_FALSE)) != EAS_SUCCESS) 117856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 117956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 118056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* bytes/sec */ 118156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWGetDWord(pDLSData->hwInstData, pDLSData->fileHandle, <emp, EAS_FALSE)) != EAS_SUCCESS) 118256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 118356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 118456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* block align */ 118556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWGetWord(pDLSData->hwInstData, pDLSData->fileHandle, &wtemp, EAS_FALSE)) != EAS_SUCCESS) 118656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 118756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 118856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* bits/sample */ 118956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWGetWord(pDLSData->hwInstData, pDLSData->fileHandle, &p->bitsPerSample, EAS_FALSE)) != EAS_SUCCESS) 119056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 119156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 119256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((p->bitsPerSample != 8) && (p->bitsPerSample != 16)) 119356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 119456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "Unsupported DLS bits-per-sample %d\n", p->bitsPerSample); */ } 119556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_UNRECOGNIZED_FORMAT; 119656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 119756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 119856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 11997df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 12007df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 12017df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#if defined( _8_BIT_SAMPLES) 12027df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 12037df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Parse_data () 12047df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 120556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 120656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 12077df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * NOTE: The optimized assembly versions of the interpolator require 12087df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * an extra sample at the end of the loop - a copy of the first 12097df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * sample. This routine must allocate an extra sample of data and 12107df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * copy the first sample of the loop to the end. 12117df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 12127df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 121356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 121456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 12157df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 121656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 12177df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 12187df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 12197df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 12207df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectstatic EAS_RESULT Parse_data (SDLS_SYNTHESIZER_DATA *pDLSData, EAS_I32 pos, EAS_I32 size, S_WSMP_DATA *pWsmp, EAS_SAMPLE *pSample) 12217df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 122256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 122356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U8 convBuf[SAMPLE_CONVERT_CHUNK_SIZE]; 122456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 count; 122556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 i; 122656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I8 *p; 122756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 122856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* seek to start of chunk */ 122956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWFileSeek(pDLSData->hwInstData, pDLSData->fileHandle, pos)) != EAS_SUCCESS) 123056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 123156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 123256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* 8-bit samples in an 8-bit synth, just copy the data, and flip bit 7 */ 123356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks p = pSample; 123456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pWsmp->bitsPerSample == 8) 123556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 123656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWReadFile(pDLSData->hwInstData, pDLSData->fileHandle, pSample, size, &count)) != EAS_SUCCESS) 123756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 123856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks for (i = 0; i < size; i++) 123956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /*lint -e{734} convert from unsigned to signed audio */ 124056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *p++ ^= 0x80; 124156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 124256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 124356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* 16-bit samples, need to convert to 8-bit or ADPCM */ 124456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks else 124556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 124656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 124756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks while (size) 124856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 124956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I8 *pInput; 125056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 125156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* for undithered conversion, we're just copying the 8-bit data */ 125256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pDLSData->bigEndian) 125356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pInput = (EAS_I8*) convBuf; 125456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks else 125556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pInput = (EAS_I8*) convBuf + 1; 125656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 125756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* read a small chunk of data and convert it */ 125856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks count = (size < SAMPLE_CONVERT_CHUNK_SIZE ? size : SAMPLE_CONVERT_CHUNK_SIZE); 125956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWReadFile(pDLSData->hwInstData, pDLSData->fileHandle, convBuf, count, &count)) != EAS_SUCCESS) 126056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 126156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks size -= count; 126256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /*lint -e{704} use shift for performance */ 126356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks count = count >> 1; 126456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 126556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks while (count--) 126656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 126756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *p++ = *pInput; 126856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pInput += 2; 126956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 127056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 127156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 127256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 127356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* for looped samples, copy the last sample to the end */ 127456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pWsmp->loopLength) 127556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pSample[pWsmp->loopStart + pWsmp->loopLength] = pSample[pWsmp->loopStart]; 127656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 127756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 12787df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 12797df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#elif defined(_16_BIT_SAMPLES) 12807df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#error "16-bit DLS conversion not implemented yet" 12817df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#else 12827df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#error "Must specifiy _8_BIT_SAMPLES or _16_BIT_SAMPLES" 12837df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#endif 12847df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 12857df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 12867df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Parse_lins () 12877df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 128856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 128956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 12907df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 12917df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 129256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 129356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 12947df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 129556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 12967df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 12977df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 12987df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 12997df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectstatic EAS_RESULT Parse_lins (SDLS_SYNTHESIZER_DATA *pDLSData, EAS_I32 pos, EAS_I32 size) 13007df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 130156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 130256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U32 temp; 130356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 endChunk; 130456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 chunkPos; 130556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 130656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* seek to start of chunk */ 130756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWFileSeek(pDLSData->hwInstData, pDLSData->fileHandle, pos)) != EAS_SUCCESS) 130856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 130956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 131056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* read to end of chunk */ 131156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks endChunk = pos + size; 131256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks while (pos < endChunk) 131356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 131456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks chunkPos = pos; 131556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 131656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* get the next chunk type */ 131756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = NextChunk(pDLSData, &pos, &temp, &size)) != EAS_SUCCESS) 131856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 131956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 132056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* only instrument chunks are useful */ 132156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (temp != CHUNK_INS) 132256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks continue; 132356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 132456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = Parse_ins(pDLSData, chunkPos + 12, size)) != EAS_SUCCESS) 132556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 132656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 132756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 132856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 13297df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 13307df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 13317df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 13327df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Parse_ins () 13337df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 133456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 133556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 13367df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 13377df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 133856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 133956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 13407df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 134156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 13427df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 13437df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 13447df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 13457df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectstatic EAS_RESULT Parse_ins (SDLS_SYNTHESIZER_DATA *pDLSData, EAS_I32 pos, EAS_I32 size) 13467df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 134756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 134856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U32 temp; 134956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 chunkPos; 135056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 endChunk; 135156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 lrgnPos; 135256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 lrgnSize; 135356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 lartPos; 135456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 lartSize; 135556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 lar2Pos; 135656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 lar2Size; 135756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 inshPos; 135856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U32 regionCount; 135956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U32 locale; 136056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_DLS_ART_VALUES art; 136156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_PROGRAM *pProgram; 136256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U16 artIndex; 136356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 136456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* seek to start of chunk */ 136556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWFileSeek(pDLSData->hwInstData, pDLSData->fileHandle, pos)) != EAS_SUCCESS) 136656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 136756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 136856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* no chunks yet */ 136956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks lrgnPos = lrgnSize = lartPos = lartSize = lar2Pos = lar2Size = inshPos = artIndex = 0; 137056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 137156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* read to end of chunk */ 137256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks endChunk = pos + size; 137356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks while (pos < endChunk) 137456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 137556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks chunkPos = pos; 137656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 137756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* get the next chunk type */ 137856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = NextChunk(pDLSData, &pos, &temp, &size)) != EAS_SUCCESS) 137956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 138056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 138156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* parse useful chunks */ 138256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks switch (temp) 138356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 138456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks case CHUNK_INSH: 138556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks inshPos = chunkPos + 8; 138656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 138756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 138856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks case CHUNK_LART: 138956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks lartPos = chunkPos + 12; 139056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks lartSize = size; 139156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 139256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 139356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks case CHUNK_LAR2: 139456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks lar2Pos = chunkPos + 12; 139556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks lar2Size = size; 139656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 139756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 139856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks case CHUNK_LRGN: 139956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks lrgnPos = chunkPos + 12; 140056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks lrgnSize = size; 140156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 140256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 140356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks default: 140456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 140556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 140656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 140756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 140856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* must have an lrgn to be useful */ 140956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!lrgnPos) 141056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 141156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "DLS ins chunk has no lrgn chunk\n"); */ } 141256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_UNRECOGNIZED_FORMAT; 141356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 141456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 141556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* must have an insh to be useful */ 141656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!inshPos) 141756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 141856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "DLS ins chunk has no insh chunk\n"); */ } 141956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_UNRECOGNIZED_FORMAT; 142056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 142156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 142256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* parse the instrument header */ 142356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = Parse_insh(pDLSData, inshPos, ®ionCount, &locale)) != EAS_SUCCESS) 142456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 142556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 142656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* initialize and parse the global data first */ 142756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_HWMemCpy(&art, &defaultArt, sizeof(S_DLS_ART_VALUES)); 142856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (lartPos) 142956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = Parse_lart(pDLSData, lartPos, lartSize, &art)) != EAS_SUCCESS) 143056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 143156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (lar2Pos) 143256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = Parse_lart(pDLSData, lar2Pos, lar2Size, &art)) != EAS_SUCCESS) 143356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 143456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 143556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (art.values[PARAM_MODIFIED]) 143656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 143756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks artIndex = (EAS_U16) pDLSData->artCount; 143856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pDLSData->artCount++; 143956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 144056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 144156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* convert data on second pass */ 144256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pDLSData->pDLS) 144356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 144456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 144556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (art.values[PARAM_MODIFIED]) 144656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks Convert_art(pDLSData, &art, artIndex); 144756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 144856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* setup pointers */ 144956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pProgram = &pDLSData->pDLS->pDLSPrograms[pDLSData->instCount]; 145056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 145156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* initialize instrument */ 145256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pProgram->locale = locale; 145356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pProgram->regionIndex = (EAS_U16) pDLSData->regionCount | FLAG_RGN_IDX_DLS_SYNTH; 145456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 145556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 145656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 145756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* parse the region data */ 145856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = Parse_lrgn(pDLSData, lrgnPos, lrgnSize, artIndex, regionCount)) != EAS_SUCCESS) 145956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 146056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 146156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* bump instrument count */ 146256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pDLSData->instCount++; 146356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 14647df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 14657df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 14667df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 14677df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Parse_insh () 14687df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 146956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 147056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 14717df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 14727df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 147356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 147456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 14757df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 147656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 14777df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 14787df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 14797df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 14807df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectstatic EAS_RESULT Parse_insh (SDLS_SYNTHESIZER_DATA *pDLSData, EAS_I32 pos, EAS_U32 *pRgnCount, EAS_U32 *pLocale) 14817df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 148256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 148356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U32 bank; 148456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U32 program; 148556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 148656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* seek to start of chunk */ 148756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWFileSeek(pDLSData->hwInstData, pDLSData->fileHandle, pos)) != EAS_SUCCESS) 148856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 148956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 149056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* get the region count and locale */ 149156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWGetDWord(pDLSData->hwInstData, pDLSData->fileHandle, pRgnCount, EAS_FALSE)) != EAS_SUCCESS) 149256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 149356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWGetDWord(pDLSData->hwInstData, pDLSData->fileHandle, &bank, EAS_FALSE)) != EAS_SUCCESS) 149456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 149556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWGetDWord(pDLSData->hwInstData, pDLSData->fileHandle, &program, EAS_FALSE)) != EAS_SUCCESS) 149656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 149756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 149856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* verify the parameters are valid */ 149956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (bank & 0x7fff8080) 150056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 150156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_WARNING, "DLS bank number is out of range: %08lx\n", bank); */ } 150256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks bank &= 0xff7f; 150356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 150456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (program > 127) 150556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 150656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_WARNING, "DLS program number is out of range: %08lx\n", program); */ } 150756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks program &= 0x7f; 150856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 150956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 151056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* save the program number */ 151156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pLocale = (bank << 8) | program; 151256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 15137df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 15147df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 15157df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 15167df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Parse_lrgn () 15177df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 151856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 151956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 15207df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 15217df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 152256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 152356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 15247df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 152556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 15267df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 15277df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 15287df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 15297df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectstatic EAS_RESULT Parse_lrgn (SDLS_SYNTHESIZER_DATA *pDLSData, EAS_I32 pos, EAS_I32 size, EAS_U16 artIndex, EAS_U32 numRegions) 15307df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 153156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 153256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U32 temp; 153356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 chunkPos; 153456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 endChunk; 153556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U16 regionCount; 153656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 153756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* seek to start of chunk */ 153856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWFileSeek(pDLSData->hwInstData, pDLSData->fileHandle, pos)) != EAS_SUCCESS) 153956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 154056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 154156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* read to end of chunk */ 154256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks regionCount = 0; 154356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks endChunk = pos + size; 154456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks while (pos < endChunk) 154556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 154656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks chunkPos = pos; 154756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 154856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* get the next chunk type */ 154956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = NextChunk(pDLSData, &pos, &temp, &size)) != EAS_SUCCESS) 155056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 155156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 155256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((temp == CHUNK_RGN) || (temp == CHUNK_RGN2)) 155356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 155456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (regionCount == numRegions) 155556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 155656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_WARNING, "DLS region count exceeded cRegions value in insh, extra region ignored\n"); */ } 155756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 155856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 155956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = Parse_rgn(pDLSData, chunkPos + 12, size, artIndex)) != EAS_SUCCESS) 156056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 156156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks regionCount++; 156256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 156356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 156456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 156556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* set a flag in the last region */ 156656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((pDLSData->pDLS != NULL) && (regionCount > 0)) 156756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pDLSData->pDLS->pDLSRegions[pDLSData->regionCount - 1].wtRegion.region.keyGroupAndFlags |= REGION_FLAG_LAST_REGION; 156856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 156956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 15707df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 15717df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 15727df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 15737df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Parse_rgn () 15747df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 157556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 157656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 15777df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 15787df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 157956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 158056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 15817df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 158256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 15837df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 15847df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 15857df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 15867df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectstatic EAS_RESULT Parse_rgn (SDLS_SYNTHESIZER_DATA *pDLSData, EAS_I32 pos, EAS_I32 size, EAS_U16 artIndex) 15877df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 158856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 158956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U32 temp; 159056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 chunkPos; 159156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 endChunk; 159256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 rgnhPos; 159356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 lartPos; 159456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 lartSize; 159556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 lar2Pos; 159656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 lar2Size; 159756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 wlnkPos; 159856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 wsmpPos; 159956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U32 waveIndex; 160056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_DLS_ART_VALUES art; 160156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_WSMP_DATA wsmp; 160256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_WSMP_DATA *pWsmp; 160356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U16 regionIndex; 160456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 160556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* seek to start of chunk */ 160656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWFileSeek(pDLSData->hwInstData, pDLSData->fileHandle, pos)) != EAS_SUCCESS) 160756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 160856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 160956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* no chunks found yet */ 161056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks rgnhPos = lartPos = lartSize = lar2Pos = lar2Size = wsmpPos = wlnkPos = 0; 161156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks regionIndex = (EAS_U16) pDLSData->regionCount; 161256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 161356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* read to end of chunk */ 161456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks endChunk = pos + size; 161556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks while (pos < endChunk) 161656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 161756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks chunkPos = pos; 161856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 161956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* get the next chunk type */ 162056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = NextChunk(pDLSData, &pos, &temp, &size)) != EAS_SUCCESS) 162156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 162256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 162356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* parse useful chunks */ 162456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks switch (temp) 162556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 162656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks case CHUNK_CDL: 162756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = Parse_cdl(pDLSData, size, &temp)) != EAS_SUCCESS) 162856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 162956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 163056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* if conditional chunk evaluates false, skip this list */ 163156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!temp) 163256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 163356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 163456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 163556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks case CHUNK_RGNH: 163656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks rgnhPos = chunkPos + 8; 163756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 163856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 163956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks case CHUNK_WLNK: 164056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks wlnkPos = chunkPos + 8; 164156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 164256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 164356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks case CHUNK_WSMP: 164456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks wsmpPos = chunkPos + 8; 164556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 164656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 164756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks case CHUNK_LART: 164856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks lartPos = chunkPos + 12; 164956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks lartSize = size; 165056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 165156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 165256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks case CHUNK_LAR2: 165356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks lar2Pos = chunkPos + 12; 165456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks lar2Size = size; 165556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 165656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 165756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks default: 165856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 165956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 166056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 166156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 166256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* must have a rgnh chunk to be useful */ 166356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!rgnhPos) 166456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 166556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "DLS rgn chunk has no rgnh chunk\n"); */ } 166656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_UNRECOGNIZED_FORMAT; 166756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 166856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 166956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* must have a wlnk chunk to be useful */ 167056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!wlnkPos) 167156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 167256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "DLS rgn chunk has no wlnk chunk\n"); */ } 167356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_UNRECOGNIZED_FORMAT; 167456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 167556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 167656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* parse wlnk chunk */ 167756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = Parse_wlnk(pDLSData, wlnkPos, &waveIndex)) != EAS_SUCCESS) 167856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 167956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pWsmp = &pDLSData->wsmpData[waveIndex]; 168056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 168156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* if there is any articulation data, parse it */ 168256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_HWMemCpy(&art, &defaultArt, sizeof(S_DLS_ART_VALUES)); 168356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (lartPos) 168456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 168556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = Parse_lart(pDLSData, lartPos, lartSize, &art)) != EAS_SUCCESS) 168656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 168756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 168856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 168956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (lar2Pos) 169056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 169156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = Parse_lart(pDLSData, lar2Pos, lar2Size, &art)) != EAS_SUCCESS) 169256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 169356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 169456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 169556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* if second pass, process region header */ 169656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pDLSData->pDLS) 169756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 169856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 169956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* if local data was found convert it */ 170056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (art.values[PARAM_MODIFIED] == EAS_TRUE) 170156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 170256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks Convert_art(pDLSData, &art, (EAS_U16) pDLSData->artCount); 170356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks artIndex = (EAS_U16) pDLSData->artCount; 170456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 170556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 170656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* parse region header */ 170756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = Parse_rgnh(pDLSData, rgnhPos, &pDLSData->pDLS->pDLSRegions[regionIndex & REGION_INDEX_MASK])) != EAS_SUCCESS) 170856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 170956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 171056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* parse wsmp chunk, copying parameters from original first */ 171156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (wsmpPos) 171256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 171356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_HWMemCpy(&wsmp, pWsmp, sizeof(wsmp)); 171456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = Parse_wsmp(pDLSData, wsmpPos, &wsmp)) != EAS_SUCCESS) 171556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 171656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 171756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pWsmp = &wsmp; 171856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 171956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 172056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks Convert_rgn(pDLSData, regionIndex, artIndex, (EAS_U16) waveIndex, pWsmp); 172156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 172256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 172356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* if local articulation, bump count */ 172456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (art.values[PARAM_MODIFIED]) 172556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pDLSData->artCount++; 172656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 172756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* increment region count */ 172856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pDLSData->regionCount++; 172956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 17307df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 17317df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 17327df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 17337df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Parse_rgnh () 17347df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 173556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 173656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 17377df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 17387df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 173956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 174056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 17417df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 174256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 17437df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 17447df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 17457df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 17467df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectstatic EAS_RESULT Parse_rgnh (SDLS_SYNTHESIZER_DATA *pDLSData, EAS_I32 pos, S_DLS_REGION *pRgn) 17477df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 174856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 174956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U16 lowKey; 175056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U16 highKey; 175156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U16 lowVel; 175256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U16 highVel; 175356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U16 optionFlags; 175456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U16 keyGroup; 175556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 175656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* seek to start of chunk */ 175756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWFileSeek(pDLSData->hwInstData, pDLSData->fileHandle, pos)) != EAS_SUCCESS) 175856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 175956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 176056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* get the key range */ 176156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWGetWord(pDLSData->hwInstData, pDLSData->fileHandle, &lowKey, EAS_FALSE)) != EAS_SUCCESS) 176256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 176356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWGetWord(pDLSData->hwInstData, pDLSData->fileHandle, &highKey, EAS_FALSE)) != EAS_SUCCESS) 176456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 176556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 176656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check the range */ 176756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (lowKey > 127) 176856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 176956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_WARNING, "DLS rgnh: Low key out of range [%u]\n", lowKey); */ } 177056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks lowKey = 127; 177156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 177256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (highKey > 127) 177356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 177456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_WARNING, "DLS rgnh: High key out of range [%u]\n", lowKey); */ } 177556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks highKey = 127; 177656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 177756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 177856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* get the velocity range */ 177956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWGetWord(pDLSData->hwInstData, pDLSData->fileHandle, &lowVel, EAS_FALSE)) != EAS_SUCCESS) 178056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 178156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWGetWord(pDLSData->hwInstData, pDLSData->fileHandle, &highVel, EAS_FALSE)) != EAS_SUCCESS) 178256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 178356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 178456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check the range */ 178556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (lowVel > 127) 178656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 178756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_WARNING, "DLS rgnh: Low velocity out of range [%u]\n", lowVel); */ } 178856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks lowVel = 127; 178956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 179056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (highVel > 127) 179156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 179256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_WARNING, "DLS rgnh: High velocity out of range [%u]\n", highVel); */ } 179356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks highVel = 127; 179456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 179556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 179656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* get the option flags */ 179756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWGetWord(pDLSData->hwInstData, pDLSData->fileHandle, &optionFlags, EAS_FALSE)) != EAS_SUCCESS) 179856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 179956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 180056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* get the key group */ 180156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWGetWord(pDLSData->hwInstData, pDLSData->fileHandle, &keyGroup, EAS_FALSE)) != EAS_SUCCESS) 180256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 180356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 180456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* save the key range and key group */ 180556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pRgn->wtRegion.region.rangeLow = (EAS_U8) lowKey; 180656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pRgn->wtRegion.region.rangeHigh = (EAS_U8) highKey; 180756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 180856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /*lint -e{734} keyGroup will always be from 0-15 */ 180956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pRgn->wtRegion.region.keyGroupAndFlags = keyGroup << 8; 181056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pRgn->velLow = (EAS_U8) lowVel; 181156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pRgn->velHigh = (EAS_U8) highVel; 181256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (optionFlags & F_RGN_OPTION_SELFNONEXCLUSIVE) 181356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pRgn->wtRegion.region.keyGroupAndFlags |= REGION_FLAG_NON_SELF_EXCLUSIVE; 181456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 181556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 18167df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 18177df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 18187df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 18197df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Parse_lart () 18207df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 182156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 182256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 18237df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 18247df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 182556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 182656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 18277df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 182856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 18297df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 18307df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 18317df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 18327df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectstatic EAS_RESULT Parse_lart (SDLS_SYNTHESIZER_DATA *pDLSData, EAS_I32 pos, EAS_I32 size, S_DLS_ART_VALUES *pArt) 18337df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 183456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 183556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U32 temp; 183656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 endChunk; 183756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 chunkPos; 183856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 art1Pos; 183956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 art2Pos; 184056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 184156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* seek to start of chunk */ 184256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWFileSeek(pDLSData->hwInstData, pDLSData->fileHandle, pos)) != EAS_SUCCESS) 184356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 184456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 184556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* no articulation chunks yet */ 184656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks art1Pos = art2Pos = 0; 184756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 184856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* read to end of chunk */ 184956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks endChunk = pos + size; 185056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks while (pos < endChunk) 185156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 185256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks chunkPos = pos; 185356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 185456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* get the next chunk type */ 185556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = NextChunk(pDLSData, &pos, &temp, &size)) != EAS_SUCCESS) 185656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 185756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 185856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* parse useful chunks */ 185956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks switch (temp) 186056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 186156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks case CHUNK_CDL: 186256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = Parse_cdl(pDLSData, size, &temp)) != EAS_SUCCESS) 186356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 186456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 186556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* if conditional chunk evaluates false, skip this list */ 186656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!temp) 186756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 186856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 186956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 187056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks case CHUNK_ART1: 187156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks art1Pos = chunkPos + 8; 187256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 187356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 187456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks case CHUNK_ART2: 187556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks art2Pos = chunkPos + 8; 187656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 187756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 187856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks default: 187956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 188056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 188156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 188256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 188356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 188456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (art1Pos) 188556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 188656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = Parse_art(pDLSData, art1Pos, pArt)) != EAS_SUCCESS) 188756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 188856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 188956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 189056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (art2Pos) 189156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 189256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = Parse_art(pDLSData, art2Pos, pArt)) != EAS_SUCCESS) 189356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 189456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 189556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 189656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 18977df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 18987df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 18997df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 19007df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Parse_art() 19017df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 190256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 190356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 19047df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 19057df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 190656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 190756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 19087df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 190956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 19107df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 19117df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 19127df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 19137df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectstatic EAS_RESULT Parse_art (SDLS_SYNTHESIZER_DATA *pDLSData, EAS_I32 pos, S_DLS_ART_VALUES *pArt) 19147df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 191556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 191656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U32 structSize; 191756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U32 numConnections; 191856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U16 source; 191956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U16 control; 192056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U16 destination; 192156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U16 transform; 192256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 scale; 192356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_INT i; 192456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 192556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* seek to start of data */ 192656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWFileSeek(pDLSData->hwInstData, pDLSData->fileHandle, pos)) != EAS_SUCCESS) 192756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 192856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 192956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* get the structure size */ 193056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWGetDWord(pDLSData->hwInstData, pDLSData->fileHandle, &structSize, EAS_FALSE)) != EAS_SUCCESS) 193156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 193256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pos += (EAS_I32) structSize; 193356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 193456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* get the number of connections */ 193556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWGetDWord(pDLSData->hwInstData, pDLSData->fileHandle, &numConnections, EAS_FALSE)) != EAS_SUCCESS) 193656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 193756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 193856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* skip to start of connections */ 193956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWFileSeek(pDLSData->hwInstData, pDLSData->fileHandle, pos)) != EAS_SUCCESS) 194056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 194156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 194256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks while (numConnections--) 194356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 194456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 194556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* read the connection data */ 194656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWGetWord(pDLSData->hwInstData, pDLSData->fileHandle, &source, EAS_FALSE)) != EAS_SUCCESS) 194756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 194856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWGetWord(pDLSData->hwInstData, pDLSData->fileHandle, &control, EAS_FALSE)) != EAS_SUCCESS) 194956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 195056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWGetWord(pDLSData->hwInstData, pDLSData->fileHandle, &destination, EAS_FALSE)) != EAS_SUCCESS) 195156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 195256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWGetWord(pDLSData->hwInstData, pDLSData->fileHandle, &transform, EAS_FALSE)) != EAS_SUCCESS) 195356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 195456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWGetDWord(pDLSData->hwInstData, pDLSData->fileHandle, &scale, EAS_FALSE)) != EAS_SUCCESS) 195556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 195656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 195756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* look up the connection */ 195856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks for (i = 0; i < (EAS_INT) ENTRIES_IN_CONN_TABLE; i++) 195956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 196056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((connTable[i].source == source) && 196156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks (connTable[i].destination == destination) && 196256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks (connTable[i].control == control)) 196356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 196456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /*lint -e{704} use shift for performance */ 196556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pArt->values[connTable[i].connection] = (EAS_I16) (scale >> 16); 196656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pArt->values[PARAM_MODIFIED] = EAS_TRUE; 196756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 196856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 196956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 197056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (i == PARAM_TABLE_SIZE) 197156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_WARNING, "WARN: Unsupported parameter in DLS file\n"); */ } 197256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 197356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 197456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 19757df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 19767df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 19777df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 19787df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Parse_wlnk () 19797df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 198056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 198156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 19827df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 19837df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 198456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 198556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 19867df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 198756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 19887df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 19897df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 19907df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 19917df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectstatic EAS_RESULT Parse_wlnk (SDLS_SYNTHESIZER_DATA *pDLSData, EAS_I32 pos, EAS_U32 *pWaveIndex) 19927df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 199356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 19947df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 199556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* we only care about the the index */ 199656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWFileSeek(pDLSData->hwInstData, pDLSData->fileHandle, pos + 8)) != EAS_SUCCESS) 199756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 19987df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 199956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* read the index */ 200056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_HWGetDWord(pDLSData->hwInstData, pDLSData->fileHandle,pWaveIndex, EAS_FALSE); 20017df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 20027df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 20037df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 20047df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * PopcdlStack () 20057df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 200656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 200756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 20087df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 20097df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 201056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 201156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 20127df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 201356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 20147df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 20157df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 20167df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 20177df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectstatic EAS_RESULT PopcdlStack (EAS_U32 *pStack, EAS_INT *pStackPtr, EAS_U32 *pValue) 20187df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 20197df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 202056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* stack underflow, cdl block has an errorr */ 202156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (*pStackPtr < 0) 202256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_FILE_FORMAT; 20237df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 202456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* pop the value off the stack */ 202556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pValue = pStack[*pStackPtr]; 202656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pStackPtr = *pStackPtr - 1; 202756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 20287df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 20297df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 20307df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 20317df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * PushcdlStack () 20327df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 203356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 203456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 20357df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 20367df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 203756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 203856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 20397df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 204056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 20417df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 20427df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 20437df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 20447df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectstatic EAS_RESULT PushcdlStack (EAS_U32 *pStack, EAS_INT *pStackPtr, EAS_U32 value) 20457df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 20467df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 204756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* stack overflow, return an error */ 204856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (*pStackPtr >= CDL_STACK_SIZE) 204956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_FILE_FORMAT; 20507df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 205156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* push the value onto the stack */ 205256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pStackPtr = *pStackPtr + 1; 205356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStack[*pStackPtr] = value; 205456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 20557df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 20567df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 20577df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 20587df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * QueryGUID () 20597df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 206056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 206156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 20627df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 20637df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 206456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 206556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 20667df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 206756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 20687df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 20697df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 20707df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 20717df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectstatic EAS_BOOL QueryGUID (const DLSID *pGUID, EAS_U32 *pValue) 20727df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 20737df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 207456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* assume false */ 207556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pValue = 0; 207656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (EAS_HWMemCmp(&DLSID_GMInHardware, pGUID, sizeof(DLSID)) == 0) 207756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 207856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pValue = 0xffffffff; 207956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_TRUE; 208056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 208156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 208256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (EAS_HWMemCmp(&DLSID_GSInHardware, pGUID, sizeof(DLSID)) == 0) 208356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_TRUE; 208456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 208556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (EAS_HWMemCmp(&DLSID_XGInHardware, pGUID, sizeof(DLSID)) == 0) 208656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_TRUE; 208756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 208856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (EAS_HWMemCmp(&DLSID_SupportsDLS1, pGUID, sizeof(DLSID)) == 0) 208956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 209056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pValue = 0xffffffff; 209156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_TRUE; 209256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 209356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 209456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (EAS_HWMemCmp(&DLSID_SupportsDLS2, pGUID, sizeof(DLSID)) == 0) 209556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_TRUE; 209656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 209756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (EAS_HWMemCmp(&DLSID_SampleMemorySize, pGUID, sizeof(DLSID)) == 0) 209856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 209956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pValue = MAX_DLS_MEMORY; 210056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_TRUE; 210156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 210256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 210356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (EAS_HWMemCmp(&DLSID_ManufacturersID, pGUID, sizeof(DLSID)) == 0) 210456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 210556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pValue = 0x0000013A; 210656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_TRUE; 210756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 210856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 210956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (EAS_HWMemCmp(&DLSID_ProductID, pGUID, sizeof(DLSID)) == 0) 211056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 211156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pValue = LIB_VERSION; 211256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_TRUE; 211356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 211456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 211556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (EAS_HWMemCmp(&DLSID_SamplePlaybackRate, pGUID, sizeof(DLSID)) == 0) 211656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 211756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pValue = (EAS_U32) outputSampleRate; 211856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_TRUE; 211956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 212056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 212156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* unrecognized DLSID */ 212256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_FALSE; 21237df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 21247df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 21257df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 21267df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * ReadDLSID () 21277df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 212856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 21297df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Reads a DLSID in a manner that is not sensitive to processor endian-ness 21307df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 21317df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 213256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 213356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 21347df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 213556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 21367df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 21377df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 21387df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 21397df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectstatic EAS_RESULT ReadDLSID (SDLS_SYNTHESIZER_DATA *pDLSData, DLSID *pDLSID) 21407df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 214156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 214256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 n; 214356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 214456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWGetDWord(pDLSData->hwInstData, pDLSData->fileHandle, &pDLSID->Data1, EAS_FALSE)) != EAS_SUCCESS) 214556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 214656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWGetWord(pDLSData->hwInstData, pDLSData->fileHandle, &pDLSID->Data2, EAS_FALSE)) != EAS_SUCCESS) 214756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 214856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWGetWord(pDLSData->hwInstData, pDLSData->fileHandle, &pDLSID->Data3, EAS_FALSE)) != EAS_SUCCESS) 214956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 215056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_HWReadFile(pDLSData->hwInstData, pDLSData->fileHandle, pDLSID->Data4, sizeof(pDLSID->Data4), &n); 21517df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 21527df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 21537df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 21547df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Parse_cdl () 21557df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 215656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 215756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 21587df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 21597df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 216056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 216156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 21627df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 216356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 21647df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 21657df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 21667df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 21677df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectstatic EAS_RESULT Parse_cdl (SDLS_SYNTHESIZER_DATA *pDLSData, EAS_I32 size, EAS_U32 *pValue) 21687df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 216956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 217056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U32 stack[CDL_STACK_SIZE]; 217156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U16 opcode; 217256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_INT stackPtr; 217356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U32 x, y; 217456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks DLSID dlsid; 217556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 217656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks stackPtr = -1; 217756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pValue = 0; 217856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks x = 0; 217956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks while (size) 218056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 218156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* read the opcode */ 218256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWGetWord(pDLSData->hwInstData, pDLSData->fileHandle, &opcode, EAS_FALSE)) != EAS_SUCCESS) 218356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 218456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 218556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* handle binary opcodes */ 218656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (opcode <= DLS_CDL_EQ) 218756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 218856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* pop X and Y */ 218956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = PopcdlStack(stack, &stackPtr, &x)) != EAS_SUCCESS) 219056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 219156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = PopcdlStack(stack, &stackPtr, &y)) != EAS_SUCCESS) 219256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 219356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks switch (opcode) 219456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 219556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks case DLS_CDL_AND: 219656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks x = x & y; 219756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 219856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks case DLS_CDL_OR: 219956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks x = x | y; 220056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 220156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks case DLS_CDL_XOR: 220256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks x = x ^ y; 220356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 220456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks case DLS_CDL_ADD: 220556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks x = x + y; 220656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 220756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks case DLS_CDL_SUBTRACT: 220856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks x = x - y; 220956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 221056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks case DLS_CDL_MULTIPLY: 221156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks x = x * y; 221256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 221356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks case DLS_CDL_DIVIDE: 221456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!y) 221556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_FILE_FORMAT; 221656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks x = x / y; 221756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 221856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks case DLS_CDL_LOGICAL_AND: 221956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks x = (x && y); 222056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 222156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks case DLS_CDL_LOGICAL_OR: 222256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks x = (x || y); 222356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 222456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks case DLS_CDL_LT: 222556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks x = (x < y); 222656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 222756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks case DLS_CDL_LE: 222856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks x = (x <= y); 222956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 223056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks case DLS_CDL_GT: 223156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks x = (x > y); 223256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 223356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks case DLS_CDL_GE: 223456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks x = (x >= y); 223556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 223656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks case DLS_CDL_EQ: 223756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks x = (x == y); 223856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 223956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks default: 224056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 224156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 224256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 224356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 224456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks else if (opcode == DLS_CDL_NOT) 224556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 224656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = PopcdlStack(stack, &stackPtr, &x)) != EAS_SUCCESS) 224756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 224856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks x = !x; 224956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 225056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 225156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks else if (opcode == DLS_CDL_CONST) 225256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 225356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWGetDWord(pDLSData->hwInstData, pDLSData->fileHandle, &x, EAS_FALSE)) != EAS_SUCCESS) 225456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 225556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 225656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 225756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks else if (opcode == DLS_CDL_QUERY) 225856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 225956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = ReadDLSID(pDLSData, &dlsid)) != EAS_SUCCESS) 226056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 226156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks QueryGUID(&dlsid, &x); 226256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 226356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 226456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks else if (opcode == DLS_CDL_QUERYSUPPORTED) 226556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 226656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = ReadDLSID(pDLSData, &dlsid)) != EAS_SUCCESS) 226756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 226856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks x = QueryGUID(&dlsid, &y); 226956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 227056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks else 227156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_WARNING, "Unsupported opcode %d in DLS file\n", opcode); */ } 227256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 227356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* push the result on the stack */ 227456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = PushcdlStack(stack, &stackPtr, x)) != EAS_SUCCESS) 227556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 227656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 227756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 227856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* pop the last result off the stack */ 227956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return PopcdlStack(stack, &stackPtr, pValue); 22807df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 22817df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 22827df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 22837df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Convert_rgn() 22847df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 228556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 22867df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Convert region data from DLS to EAS 22877df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 22887df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 228956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 229056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 22917df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 229256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 22937df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 22947df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 22957df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 22967df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectstatic void Convert_rgn (SDLS_SYNTHESIZER_DATA *pDLSData, EAS_U16 regionIndex, EAS_U16 artIndex, EAS_U16 waveIndex, S_WSMP_DATA *pWsmp) 22977df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 229856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_DLS_REGION *pRgn; 229956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 230056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* setup pointers to data structures */ 230156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pRgn = &pDLSData->pDLS->pDLSRegions[regionIndex]; 230256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 230356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* intiailize indices */ 230456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pRgn->wtRegion.artIndex = artIndex; 230556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pRgn->wtRegion.waveIndex = waveIndex; 230656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 230756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* convert region data */ 230856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /*lint -e{704} use shift for performance */ 230956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pRgn->wtRegion.gain = (EAS_I16) (pWsmp->gain >> 16); 231056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pRgn->wtRegion.loopStart = pWsmp->loopStart; 231156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pRgn->wtRegion.loopEnd = (pWsmp->loopStart + pWsmp->loopLength); 231256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pRgn->wtRegion.tuning = pWsmp->fineTune -(pWsmp->unityNote * 100) + ConvertSampleRate(pWsmp->sampleRate); 231356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pWsmp->loopLength != 0) 231456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pRgn->wtRegion.region.keyGroupAndFlags |= REGION_FLAG_IS_LOOPED; 23157df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 23167df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 23177df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 23187df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Convert_art() 23197df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 232056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 23217df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Convert articulation data from DLS to EAS 23227df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 23237df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 232456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 232556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 23267df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 232756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 23287df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 23297df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 23307df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 23317df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectstatic void Convert_art (SDLS_SYNTHESIZER_DATA *pDLSData, const S_DLS_ART_VALUES *pDLSArt, EAS_U16 artIndex) 23327df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 233356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_DLS_ARTICULATION *pArt; 233456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 233556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* setup pointers to data structures */ 233656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pArt = &pDLSData->pDLS->pDLSArticulations[artIndex]; 233756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 233856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* LFO parameters */ 233956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pArt->modLFO.lfoFreq = ConvertLFOPhaseIncrement(pDLSArt->values[PARAM_MOD_LFO_FREQ]); 234056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pArt->modLFO.lfoDelay = -ConvertDelay(pDLSArt->values[PARAM_MOD_LFO_DELAY]); 234156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pArt->vibLFO.lfoFreq = ConvertLFOPhaseIncrement(pDLSArt->values[PARAM_VIB_LFO_FREQ]); 234256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pArt->vibLFO.lfoDelay = -ConvertDelay(pDLSArt->values[PARAM_VIB_LFO_DELAY]); 234356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 234456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* EG1 parameters */ 234556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pArt->eg1.delayTime = ConvertDelay(pDLSArt->values[PARAM_VOL_EG_DELAY]); 234656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pArt->eg1.attackTime = pDLSArt->values[PARAM_VOL_EG_ATTACK]; 234756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pArt->eg1.holdTime = pDLSArt->values[PARAM_VOL_EG_HOLD]; 234856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pArt->eg1.decayTime = pDLSArt->values[PARAM_VOL_EG_DECAY]; 234956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pArt->eg1.sustainLevel = ConvertSustain(pDLSArt->values[PARAM_VOL_EG_SUSTAIN]); 235056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pArt->eg1.releaseTime = ConvertRate(pDLSArt->values[PARAM_VOL_EG_RELEASE]); 235156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pArt->eg1.velToAttack = pDLSArt->values[PARAM_VOL_EG_VEL_TO_ATTACK]; 235256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pArt->eg1.keyNumToDecay = pDLSArt->values[PARAM_VOL_EG_KEY_TO_DECAY]; 235356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pArt->eg1.keyNumToHold = pDLSArt->values[PARAM_VOL_EG_KEY_TO_HOLD]; 235456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pArt->eg1ShutdownTime = ConvertRate(pDLSArt->values[PARAM_VOL_EG_SHUTDOWN]); 235556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 235656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* EG2 parameters */ 235756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pArt->eg2.delayTime = ConvertDelay(pDLSArt->values[PARAM_MOD_EG_DELAY]); 235856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pArt->eg2.attackTime = pDLSArt->values[PARAM_MOD_EG_ATTACK]; 235956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pArt->eg2.holdTime = pDLSArt->values[PARAM_MOD_EG_HOLD]; 236056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pArt->eg2.decayTime = pDLSArt->values[PARAM_MOD_EG_DECAY]; 236156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pArt->eg2.sustainLevel = ConvertSustain(pDLSArt->values[PARAM_MOD_EG_SUSTAIN]); 236256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pArt->eg2.releaseTime = ConvertRate(pDLSArt->values[PARAM_MOD_EG_RELEASE]); 236356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pArt->eg2.velToAttack = pDLSArt->values[PARAM_MOD_EG_VEL_TO_ATTACK]; 236456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pArt->eg2.keyNumToDecay = pDLSArt->values[PARAM_MOD_EG_KEY_TO_DECAY]; 236556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pArt->eg2.keyNumToHold = pDLSArt->values[PARAM_MOD_EG_KEY_TO_HOLD]; 236656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 236756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* filter parameters */ 236856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pArt->filterCutoff = pDLSArt->values[PARAM_INITIAL_FC]; 236956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pArt->filterQandFlags = ConvertQ(pDLSArt->values[PARAM_INITIAL_Q]); 237056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pArt->modLFOToFc = pDLSArt->values[PARAM_MOD_LFO_TO_FC]; 237156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pArt->modLFOCC1ToFc = pDLSArt->values[PARAM_MOD_LFO_CC1_TO_FC]; 237256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pArt->modLFOChanPressToFc = pDLSArt->values[PARAM_MOD_LFO_CHAN_PRESS_TO_FC]; 237356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pArt->eg2ToFc = pDLSArt->values[PARAM_MOD_EG_TO_FC]; 237456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pArt->velToFc = pDLSArt->values[PARAM_VEL_TO_FC]; 237556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pArt->keyNumToFc = pDLSArt->values[PARAM_KEYNUM_TO_FC]; 237656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 237756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* gain parameters */ 237856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pArt->modLFOToGain = pDLSArt->values[PARAM_MOD_LFO_TO_GAIN]; 237956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pArt->modLFOCC1ToGain = pDLSArt->values[PARAM_MOD_LFO_CC1_TO_GAIN]; 238056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pArt->modLFOChanPressToGain = pDLSArt->values[PARAM_MOD_LFO_CHAN_PRESS_TO_GAIN]; 238156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 238256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* pitch parameters */ 238356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pArt->tuning = pDLSArt->values[PARAM_TUNING]; 238456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pArt->keyNumToPitch = pDLSArt->values[PARAM_KEYNUM_TO_PITCH]; 238556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pArt->vibLFOToPitch = pDLSArt->values[PARAM_VIB_LFO_TO_PITCH]; 238656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pArt->vibLFOCC1ToPitch = pDLSArt->values[PARAM_VIB_LFO_CC1_TO_PITCH]; 238756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pArt->vibLFOChanPressToPitch = pDLSArt->values[PARAM_VIB_LFO_CHAN_PRESS_TO_PITCH]; 238856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pArt->modLFOToPitch = pDLSArt->values[PARAM_MOD_LFO_TO_PITCH]; 238956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pArt->modLFOCC1ToPitch = pDLSArt->values[PARAM_MOD_LFO_CC1_TO_PITCH]; 239056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pArt->modLFOChanPressToPitch = pDLSArt->values[PARAM_MOD_LFO_CHAN_PRESS_TO_PITCH]; 239156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pArt->eg2ToPitch = pDLSArt->values[PARAM_MOD_EG_TO_PITCH]; 239256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 239356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* output parameters */ 239456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pArt->pan = ConvertPan(pDLSArt->values[PARAM_DEFAULT_PAN]); 239556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 239656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pDLSArt->values[PARAM_VEL_TO_GAIN] != 0) 239756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pArt->filterQandFlags |= FLAG_DLS_VELOCITY_SENSITIVE; 239856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 239956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _REVERB 240056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pArt->reverbSend = pDLSArt->values[PARAM_DEFAULT_REVERB_SEND]; 240156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pArt->cc91ToReverbSend = pDLSArt->values[PARAM_MIDI_CC91_TO_REVERB_SEND]; 24027df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#endif 24037df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 24047df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#ifdef _CHORUS 240556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pArt->chorusSend = pDLSArt->values[PARAM_DEFAULT_CHORUS_SEND]; 240656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pArt->cc93ToChorusSend = pDLSArt->values[PARAM_MIDI_CC93_TO_CHORUS_SEND]; 240756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 24087df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 24097df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 24107df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 24117df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * ConvertSampleRate() 24127df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 241356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 24147df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 241556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 24167df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 24177df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 24187df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 24197df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 24207df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 24217df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 24227df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectstatic EAS_I16 ConvertSampleRate (EAS_U32 sampleRate) 24237df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 242456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return (EAS_I16) (1200.0 * log10((double) sampleRate / (double) outputSampleRate) / log10(2.0)); 24257df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 24267df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 24277df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 24287df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * ConvertSustainEG2() 24297df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 24307df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Convert sustain level to pitch/Fc multipler for EG2 24317df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 24327df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 24337df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectstatic EAS_I16 ConvertSustain (EAS_I32 sustain) 24347df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 243556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check for sustain level of zero */ 243656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (sustain == 0) 243756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return 0; 24387df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 243956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* convert to log2 factor */ 244056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /*lint -e{704} use shift for performance */ 244156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks sustain = (sustain * SUSTAIN_LINEAR_CONVERSION_FACTOR) >> 15; 24427df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 244356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (sustain > SYNTH_FULL_SCALE_EG1_GAIN) 244456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return SYNTH_FULL_SCALE_EG1_GAIN; 244556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return (EAS_I16) sustain; 24467df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 24477df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 24487df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 24497df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * ConvertDelay () 24507df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 24517df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Converts timecents to frame count. Used for LFO and envelope 24527df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * delay times. 24537df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 24547df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 24557df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_I16 ConvertDelay (EAS_I32 timeCents) 24567df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 245756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 temp; 245856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 245956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (timeCents == ZERO_TIME_IN_CENTS) 246056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return 0; 24617df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 246256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* divide time by secs per frame to get number of frames */ 246356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks temp = timeCents - dlsRateConvert; 24647df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 246556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* convert from time cents to 10-bit fraction */ 246656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks temp = FMUL_15x15(temp, TIME_CENTS_TO_LOG2); 24677df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 246856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* convert to frame count */ 246956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks temp = EAS_LogToLinear16(temp - (15 << 10)); 24707df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 247156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (temp < SYNTH_FULL_SCALE_EG1_GAIN) 247256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return (EAS_I16) temp; 247356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return SYNTH_FULL_SCALE_EG1_GAIN; 24747df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 24757df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 24767df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 24777df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * ConvertRate () 24787df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 24797df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Convert timecents to rate 24807df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 24817df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 24827df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_I16 ConvertRate (EAS_I32 timeCents) 24837df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 248456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 temp; 24857df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 248656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (timeCents == ZERO_TIME_IN_CENTS) 248756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return SYNTH_FULL_SCALE_EG1_GAIN; 24887df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 248956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* divide frame rate by time in log domain to get rate */ 249056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks temp = dlsRateConvert - timeCents; 24917df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 24927df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#if 1 249356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks temp = EAS_Calculate2toX(temp); 24947df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#else 249556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* convert from time cents to 10-bit fraction */ 249656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks temp = FMUL_15x15(temp, TIME_CENTS_TO_LOG2); 249756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 249856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* convert to rate */ 249956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks temp = EAS_LogToLinear16(temp); 25007df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#endif 25017df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 250256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (temp < SYNTH_FULL_SCALE_EG1_GAIN) 250356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return (EAS_I16) temp; 250456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return SYNTH_FULL_SCALE_EG1_GAIN; 25057df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 25067df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 25077df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 25087df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 25097df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * ConvertLFOPhaseIncrement() 25107df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 251156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 25127df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 251356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 25147df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 25157df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 25167df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 25177df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 25187df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 25197df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 25207df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectstatic EAS_I16 ConvertLFOPhaseIncrement (EAS_I32 pitchCents) 25217df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 252256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 252356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check range */ 252456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pitchCents > MAX_LFO_FREQUENCY_IN_PITCHCENTS) 252556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pitchCents = MAX_LFO_FREQUENCY_IN_PITCHCENTS; 252656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pitchCents < MIN_LFO_FREQUENCY_IN_PITCHCENTS) 252756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pitchCents = MIN_LFO_FREQUENCY_IN_PITCHCENTS; 252856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 252956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* double the rate and divide by frame rate by subtracting in log domain */ 253056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pitchCents = pitchCents - dlsLFOFrequencyConvert; 253156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 253256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* convert to phase increment */ 253356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return (EAS_I16) EAS_Calculate2toX(pitchCents); 25347df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 25357df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 25367df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 25377df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * ConvertPan() 25387df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 253956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 25407df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 254156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 25427df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 25437df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 25447df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 25457df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 25467df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 25477df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 25487df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectstatic EAS_I8 ConvertPan (EAS_I32 pan) 25497df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 255056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 255156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* multiply by conversion factor */ 255256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pan = FMUL_15x15 (PAN_CONVERSION_FACTOR, pan); 255356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pan < MIN_PAN_VALUE) 255456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return MIN_PAN_VALUE; 255556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pan > MAX_PAN_VALUE) 255656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return MAX_PAN_VALUE; 255756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return (EAS_I8) pan; 25587df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 25597df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 25607df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 25617df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * ConvertQ() 25627df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 25637df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Convert the DLS filter resonance to an index value used by the synth 25647df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * that accesses tables of coefficients based on the Q. 25657df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 25667df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 25677df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectstatic EAS_U8 ConvertQ (EAS_I32 q) 25687df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 25697df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 257056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* apply limits */ 257156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (q <= 0) 257256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return 0; 25737df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 257456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* convert to table index */ 257556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /*lint -e{704} use shift for performance */ 257656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks q = (FILTER_Q_CONVERSION_FACTOR * q + 0x4000) >> 15; 25777df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 257856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* apply upper limit */ 257956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (q >= FILTER_RESONANCE_NUM_ENTRIES) 258056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks q = FILTER_RESONANCE_NUM_ENTRIES - 1; 258156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return (EAS_U8) q; 25827df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 25837df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 25847df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#ifdef _DEBUG_DLS 25857df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 25867df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * DumpDLS() 25877df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 25887df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 25897df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectstatic void DumpDLS (S_EAS *pEAS) 25907df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 259156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_DLS_ARTICULATION *pArt; 259256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_DLS_REGION *pRegion; 259356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_INT i; 259456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_INT j; 259556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 259656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_ReportEx(_EAS_SEVERITY_NOFILTER, 0x19299ed4, 0x00000022 , pEAS->numPrograms); 259756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_ReportEx(_EAS_SEVERITY_NOFILTER, 0x19299ed4, 0x00000023 , pEAS->numWTRegions); 259856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_ReportEx(_EAS_SEVERITY_NOFILTER, 0x19299ed4, 0x00000024 , pEAS->numDLSArticulations); 259956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_ReportEx(_EAS_SEVERITY_NOFILTER, 0x19299ed4, 0x00000025 , pEAS->numSamples); 260056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 260156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* dump the instruments */ 260256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks for (i = 0; i < pEAS->numPrograms; i++) 260356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 260456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_ReportEx(_EAS_SEVERITY_NOFILTER, 0x19299ed4, 0x00000026 , 260556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pEAS->pPrograms[i].locale >> 16, 260656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks (pEAS->pPrograms[i].locale >> 8) & 0x7f, 260756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pEAS->pPrograms[i].locale & 0x7f); 260856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 260956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks for (j = pEAS->pPrograms[i].regionIndex; ; j++) 261056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 261156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_ReportEx(_EAS_SEVERITY_NOFILTER, 0x19299ed4, 0x00000027 , j); 261256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pRegion = &pEAS->pWTRegions[j]; 261356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_ReportEx(_EAS_SEVERITY_NOFILTER, 0x19299ed4, 0x00000028 , pRegion->gain); 261456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_ReportEx(_EAS_SEVERITY_NOFILTER, 0x19299ed4, 0x00000029 , pRegion->region.rangeLow, pRegion->region.rangeHigh); 261556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_ReportEx(_EAS_SEVERITY_NOFILTER, 0x19299ed4, 0x0000002a , pRegion->region.keyGroupAndFlags); 261656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_ReportEx(_EAS_SEVERITY_NOFILTER, 0x19299ed4, 0x0000002b , pRegion->loopStart); 261756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_ReportEx(_EAS_SEVERITY_NOFILTER, 0x19299ed4, 0x0000002c , pRegion->loopEnd); 261856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_ReportEx(_EAS_SEVERITY_NOFILTER, 0x19299ed4, 0x0000002d , pRegion->tuning); 261956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_ReportEx(_EAS_SEVERITY_NOFILTER, 0x19299ed4, 0x0000002e , pRegion->artIndex); 262056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_ReportEx(_EAS_SEVERITY_NOFILTER, 0x19299ed4, 0x0000002f , pRegion->waveIndex); 262156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 262256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pRegion->region.keyGroupAndFlags & REGION_FLAG_LAST_REGION) 262356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 262456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 262556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 262656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 262756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 262856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* dump the articulation data */ 262956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks for (i = 0; i < pEAS->numDLSArticulations; i++) 263056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 263156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* articulation data */ 263256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_ReportEx(_EAS_SEVERITY_NOFILTER, 0x19299ed4, 0x00000030 , i); 263356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pArt = &pEAS->pDLSArticulations[i]; 263456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_ReportEx(_EAS_SEVERITY_NOFILTER, 0x19299ed4, 0x00000031 , pArt->m_nEG2toFilterDepth); 263556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_ReportEx(_EAS_SEVERITY_NOFILTER, 0x19299ed4, 0x00000032 , pArt->m_nEG2toPitchDepth); 263656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_ReportEx(_EAS_SEVERITY_NOFILTER, 0x19299ed4, 0x00000033 , pArt->m_nFilterCutoffFrequency); 263756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_ReportEx(_EAS_SEVERITY_NOFILTER, 0x19299ed4, 0x00000034 , pArt->m_nFilterResonance); 263856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_ReportEx(_EAS_SEVERITY_NOFILTER, 0x19299ed4, 0x00000035 , pArt->m_nLFOAmplitudeDepth); 263956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_ReportEx(_EAS_SEVERITY_NOFILTER, 0x19299ed4, 0x00000036 , pArt->m_nLFODelayTime); 264056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_ReportEx(_EAS_SEVERITY_NOFILTER, 0x19299ed4, 0x00000037 , pArt->m_nLFOFrequency); 264156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_ReportEx(_EAS_SEVERITY_NOFILTER, 0x19299ed4, 0x00000038 , pArt->m_nLFOPitchDepth); 264256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_ReportEx(_EAS_SEVERITY_NOFILTER, 0x19299ed4, 0x00000039 , pArt->m_nPan); 264356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 264456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* EG1 data */ 264556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_ReportEx(_EAS_SEVERITY_NOFILTER, 0x19299ed4, 0x0000003a , pArt->m_sEG1.m_nAttack); 264656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_ReportEx(_EAS_SEVERITY_NOFILTER, 0x19299ed4, 0x0000003b , pArt->m_sEG1.m_nDecay); 264756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_ReportEx(_EAS_SEVERITY_NOFILTER, 0x19299ed4, 0x0000003c , pArt->m_sEG1.m_nSustain); 264856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_ReportEx(_EAS_SEVERITY_NOFILTER, 0x19299ed4, 0x0000003d , pArt->m_sEG1.m_nRelease); 264956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 265056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* EG2 data */ 265156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_ReportEx(_EAS_SEVERITY_NOFILTER, 0x19299ed4, 0x0000003e , pArt->m_sEG2.m_nAttack); 265256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_ReportEx(_EAS_SEVERITY_NOFILTER, 0x19299ed4, 0x0000003f , pArt->m_sEG2.m_nDecay); 265356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_ReportEx(_EAS_SEVERITY_NOFILTER, 0x19299ed4, 0x00000040 , pArt->m_sEG2.m_nSustain); 265456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_ReportEx(_EAS_SEVERITY_NOFILTER, 0x19299ed4, 0x00000041 , pArt->m_sEG2.m_nRelease); 265556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 265656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 265756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 265856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* dump the waves */ 265956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks for (i = 0; i < pEAS->numSamples; i++) 266056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 266156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_ReportEx(_EAS_SEVERITY_NOFILTER, 0x19299ed4, 0x00000042 , i); 266256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_ReportEx(_EAS_SEVERITY_NOFILTER, 0x19299ed4, 0x00000043 , pEAS->pSampleLen[i]); 266356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_ReportEx(_EAS_SEVERITY_NOFILTER, 0x19299ed4, 0x00000044 , pEAS->ppSamples[i]); 266456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 26657df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 26667df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 26677df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#endif 26687df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 2669